MDL-22155 useful new method html_writer::nonempty_tag.
authorTim Hunt <T.J.Hunt@open.ac.uk>
Fri, 23 Apr 2010 10:34:07 +0000 (10:34 +0000)
committerTim Hunt <T.J.Hunt@open.ac.uk>
Fri, 23 Apr 2010 10:34:07 +0000 (10:34 +0000)
It outputs a tag only if the contents you pass is non-empty.

Also, unit tests for the basic parts of html_writer.

lib/outputcomponents.php
lib/simpletest/testhtmlwriter.php [new file with mode: 0644]

index f41b8e2..7f44b08 100644 (file)
@@ -722,6 +722,20 @@ class html_writer {
         return '<' . $tagname . self::attributes($attributes) . ' />';
     }
 
+    /**
+     * Outputs a tag, but only if the contents are not empty
+     * @param string $tagname The name of tag ('a', 'img', 'span' etc.)
+     * @param string $contents What goes between the opening and closing tags
+     * @param array $attributes The tag attributes (array('src' => $url, 'class' => 'class1') etc.)
+     * @return string HTML fragment
+     */
+    public static function nonempty_tag($tagname, $contents, array $attributes = null) {
+        if ($contents === '' || is_null($contents)) {
+            return '';
+        }
+        return self::tag($tagname, $contents, $attributes);
+    }
+
     /**
      * Outputs a HTML attribute and value
      * @param string $name The name of the attribute ('src', 'href', 'class' etc.)
diff --git a/lib/simpletest/testhtmlwriter.php b/lib/simpletest/testhtmlwriter.php
new file mode 100644 (file)
index 0000000..ed3a1e0
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+
+/**
+ * Unit tests for the html_writer class.
+ *
+ * @package moodlecore
+ * @copyright 2010 Tim Hunt
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+if (!defined('MOODLE_INTERNAL')) {
+    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
+}
+require_once($CFG->libdir . '/outputcomponents.php');
+
+
+/**
+ * Unit tests for the html_writer class.
+ *
+ * @copyright 2010 Tim Hunt
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class html_writer_test extends UnitTestCase {
+
+    public static $includecoverage = array('lib/outputcomponents.php');
+
+    public function test_start_tag() {
+        $this->assertEqual('<div>', html_writer::start_tag('div'));
+    }
+
+    public function test_start_tag_with_attr() {
+        $this->assertEqual('<div class="frog">',
+                html_writer::start_tag('div', array('class' => 'frog')));
+    }
+
+    public function test_start_tag_with_attrs() {
+        $this->assertEqual('<div class="frog" id="mydiv">',
+                html_writer::start_tag('div', array('class' => 'frog', 'id' => 'mydiv')));
+    }
+
+    public function test_end_tag() {
+        $this->assertEqual('</div>', html_writer::end_tag('div'));
+    }
+
+    public function test_empty_tag() {
+        $this->assertEqual('<br />', html_writer::empty_tag('br'));
+    }
+
+    public function test_empty_tag_with_attrs() {
+        $this->assertEqual('<input type="submit" value="frog" />',
+                html_writer::empty_tag('input', array('type' => 'submit', 'value' => 'frog')));
+    }
+
+    public function test_nonempty_tag_with_content() {
+        $this->assertEqual('<div>Hello world!</div>',
+                html_writer::nonempty_tag('div', 'Hello world!'));
+    }
+
+    public function test_nonempty_tag_empty() {
+        $this->assertEqual('',
+                html_writer::nonempty_tag('div', ''));
+    }
+
+    public function test_nonempty_tag_null() {
+        $this->assertEqual('',
+                html_writer::nonempty_tag('div', null));
+    }
+
+    public function test_nonempty_tag_zero() {
+        $this->assertEqual('<div class="score">0</div>',
+                html_writer::nonempty_tag('div', 0, array('class' => 'score')));
+    }
+
+    public function test_nonempty_tag_zero_string() {
+        $this->assertEqual('<div class="score">0</div>',
+                html_writer::nonempty_tag('div', '0', array('class' => 'score')));
+            }
+}