2 // This file is part of Moodle - http://moodle.org/
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
18 * Unit tests for the html_writer class.
22 * @copyright 2010 Tim Hunt
23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
26 defined('MOODLE_INTERNAL') ||
die();
29 require_once($CFG->libdir
. '/outputcomponents.php');
33 * Unit tests for the html_writer class.
35 * @copyright 2010 Tim Hunt
36 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38 class core_html_writer_testcase
extends basic_testcase
{
40 public function test_start_tag() {
41 $this->assertSame('<div>', html_writer
::start_tag('div'));
44 public function test_start_tag_with_attr() {
45 $this->assertSame('<div class="frog">',
46 html_writer
::start_tag('div', array('class' => 'frog')));
49 public function test_start_tag_with_attrs() {
50 $this->assertSame('<div class="frog" id="mydiv">',
51 html_writer
::start_tag('div', array('class' => 'frog', 'id' => 'mydiv')));
54 public function test_end_tag() {
55 $this->assertSame('</div>', html_writer
::end_tag('div'));
58 public function test_empty_tag() {
59 $this->assertSame('<br />', html_writer
::empty_tag('br'));
62 public function test_empty_tag_with_attrs() {
63 $this->assertSame('<input type="submit" value="frog" />',
64 html_writer
::empty_tag('input', array('type' => 'submit', 'value' => 'frog')));
67 public function test_nonempty_tag_with_content() {
68 $this->assertSame('<div>Hello world!</div>',
69 html_writer
::nonempty_tag('div', 'Hello world!'));
72 public function test_nonempty_tag_empty() {
74 html_writer
::nonempty_tag('div', ''));
77 public function test_nonempty_tag_null() {
79 html_writer
::nonempty_tag('div', null));
82 public function test_nonempty_tag_zero() {
83 $this->assertSame('<div class="score">0</div>',
84 html_writer
::nonempty_tag('div', 0, array('class' => 'score')));
87 public function test_nonempty_tag_zero_string() {
88 $this->assertSame('<div class="score">0</div>',
89 html_writer
::nonempty_tag('div', '0', array('class' => 'score')));
92 public function test_div() {
94 $this->assertSame('<div class="frog" id="kermit">ribbit</div>',
95 html_writer
::div('ribbit', 'frog', array('id' => 'kermit')));
96 // Combine class from attributes and $class.
97 $this->assertSame('<div class="amphibian frog">ribbit</div>',
98 html_writer
::div('ribbit', 'frog', array('class' => 'amphibian')));
100 $this->assertSame('<div class="frog">ribbit</div>',
101 html_writer
::div('ribbit', 'frog'));
103 $this->assertSame('<div id="kermit">ribbit</div>',
104 html_writer
::div('ribbit', '', array('id' => 'kermit')));
106 $this->assertSame('<div>ribbit</div>',
107 html_writer
::div('ribbit'));
110 public function test_start_div() {
112 $this->assertSame('<div class="frog" id="kermit">',
113 html_writer
::start_div('frog', array('id' => 'kermit')));
114 // Combine class from attributes and $class.
115 $this->assertSame('<div class="amphibian frog">',
116 html_writer
::start_div('frog', array('class' => 'amphibian')));
118 $this->assertSame('<div class="frog">',
119 html_writer
::start_div('frog'));
121 $this->assertSame('<div id="kermit">',
122 html_writer
::start_div('', array('id' => 'kermit')));
124 $this->assertSame('<div>',
125 html_writer
::start_div());
128 public function test_end_div() {
129 $this->assertSame('</div>', html_writer
::end_div());
132 public function test_span() {
134 $this->assertSame('<span class="frog" id="kermit">ribbit</span>',
135 html_writer
::span('ribbit', 'frog', array('id' => 'kermit')));
136 // Combine class from attributes and $class.
137 $this->assertSame('<span class="amphibian frog">ribbit</span>',
138 html_writer
::span('ribbit', 'frog', array('class' => 'amphibian')));
140 $this->assertSame('<span class="frog">ribbit</span>',
141 html_writer
::span('ribbit', 'frog'));
143 $this->assertSame('<span id="kermit">ribbit</span>',
144 html_writer
::span('ribbit', '', array('id' => 'kermit')));
146 $this->assertSame('<span>ribbit</span>',
147 html_writer
::span('ribbit'));
150 public function test_start_span() {
152 $this->assertSame('<span class="frog" id="kermit">',
153 html_writer
::start_span('frog', array('id' => 'kermit')));
154 // Combine class from attributes and $class.
155 $this->assertSame('<span class="amphibian frog">',
156 html_writer
::start_span('frog', array('class' => 'amphibian')));
158 $this->assertSame('<span class="frog">',
159 html_writer
::start_span('frog'));
161 $this->assertSame('<span id="kermit">',
162 html_writer
::start_span('', array('id' => 'kermit')));
164 $this->assertSame('<span>',
165 html_writer
::start_span());
168 public function test_end_span() {
169 $this->assertSame('</span>', html_writer
::end_span());
172 public function test_table() {
173 $row = new html_table_row();
175 // The attribute will get overwritten by the ID.
177 $row->attributes
['id'] = 'will get overwritten';
179 // The data-name will be present in the output.
180 $row->attributes
['data-name'] = 'Fred';
181 $row->class = 'this is a table row';
183 $cell = new html_table_cell();
185 // The attribute will get overwritten by the ID.
186 $cell->id
= 'Jeremy';
187 $cell->attributes
['id'] = 'will get overwritten';
189 // The data-name will be present in the output.
190 $cell->attributes
['data-name'] = 'John';
191 $cell->class = 'this is a table cell';
193 $row->cells
[] = $cell;
195 $table = new html_table();
196 // The attribute will get overwritten by the ID.
197 $table->id
= 'Jeffrey';
198 $table->attributes
['id'] = 'will get overwritten';
200 // The data-name will be present in the output.
201 $table->attributes
['data-name'] = 'Colin';
202 // The attribute will get overwritten by the ID above.
203 $table->data
[] = $row;
205 // Specify a caption to be output.
206 $table->caption
= "A table of meaningless data.";
208 $output = html_writer
::table($table);
211 <table class="generaltable" id="Jeffrey" data-name="Colin">
212 <caption>A table of meaningless data.</caption><tbody><tr class="lastrow" id="Bob" data-name="Fred">
213 <td class="cell c0 lastcol" id="Jeremy" data-name="John" style=""></td>
219 $this->assertSame($expected, $output);
222 public function test_table_hidden_caption() {
224 $table = new html_table();
225 $table->id
= "whodat";
226 $table->data
= array(
227 array('fred', 'MDK'),
228 array('bob', 'Burgers'),
229 array('dave', 'Competitiveness')
231 $table->caption
= "Who even knows?";
232 $table->captionhide
= true;
234 $output = html_writer
::table($table);
236 <table class="generaltable" id="whodat">
237 <caption class="accesshide">Who even knows?</caption><tbody><tr class="">
238 <td class="cell c0" style="">fred</td>
239 <td class="cell c1 lastcol" style="">MDK</td>
242 <td class="cell c0" style="">bob</td>
243 <td class="cell c1 lastcol" style="">Burgers</td>
246 <td class="cell c0" style="">dave</td>
247 <td class="cell c1 lastcol" style="">Competitiveness</td>
253 $this->assertSame($expected, $output);