MediaWiki  1.23.12
XmlTest.php
Go to the documentation of this file.
1 <?php
2 
6 class XmlTest extends MediaWikiTestCase {
7 
8  protected function setUp() {
9  parent::setUp();
10 
11  $langObj = Language::factory( 'en' );
12  $langObj->setNamespaces( array(
13  -2 => 'Media',
14  -1 => 'Special',
15  0 => '',
16  1 => 'Talk',
17  2 => 'User',
18  3 => 'User_talk',
19  4 => 'MyWiki',
20  5 => 'MyWiki_Talk',
21  6 => 'File',
22  7 => 'File_talk',
23  8 => 'MediaWiki',
24  9 => 'MediaWiki_talk',
25  10 => 'Template',
26  11 => 'Template_talk',
27  100 => 'Custom',
28  101 => 'Custom_talk',
29  ) );
30 
31  $this->setMwGlobals( array(
32  'wgLang' => $langObj,
33  'wgWellFormedXml' => true,
34  ) );
35  }
36 
40  public function testExpandAttributes() {
41  $this->assertNull( Xml::expandAttributes( null ),
42  'Converting a null list of attributes'
43  );
44  $this->assertEquals( '', Xml::expandAttributes( array() ),
45  'Converting an empty list of attributes'
46  );
47  }
48 
52  public function testExpandAttributesException() {
53  $this->setExpectedException( 'MWException' );
54  Xml::expandAttributes( 'string' );
55  }
56 
60  public function testElementOpen() {
61  $this->assertEquals(
62  '<element>',
63  Xml::element( 'element', null, null ),
64  'Opening element with no attributes'
65  );
66  }
67 
71  public function testElementEmpty() {
72  $this->assertEquals(
73  '<element />',
74  Xml::element( 'element', null, '' ),
75  'Terminated empty element'
76  );
77  }
78 
83  $this->assertEquals(
84  '<input name="name" value="0" />',
85  Xml::input( 'name', false, 0 ),
86  'Input with a value of 0 (bug 23797)'
87  );
88  }
89 
93  public function testElementEscaping() {
94  $this->assertEquals(
95  '<element>hello &lt;there&gt; you &amp; you</element>',
96  Xml::element( 'element', null, 'hello <there> you & you' ),
97  'Element with no attributes and content that needs escaping'
98  );
99  }
100 
104  public function testEscapeTagsOnly() {
105  $this->assertEquals( '&quot;&gt;&lt;', Xml::escapeTagsOnly( '"><' ),
106  'replace " > and < with their HTML entitites'
107  );
108  }
109 
113  public function testElementAttributes() {
114  $this->assertEquals(
115  '<element key="value" <>="&lt;&gt;">',
116  Xml::element( 'element', array( 'key' => 'value', '<>' => '<>' ), null ),
117  'Element attributes, keys are not escaped'
118  );
119  }
120 
124  public function testOpenElement() {
125  $this->assertEquals(
126  '<element k="v">',
127  Xml::openElement( 'element', array( 'k' => 'v' ) ),
128  'openElement() shortcut'
129  );
130  }
131 
135  public function testCloseElement() {
136  $this->assertEquals( '</element>', Xml::closeElement( 'element' ), 'closeElement() shortcut' );
137  }
138 
142  public function testDateMenu() {
143  $curYear = intval( gmdate( 'Y' ) );
144  $prevYear = $curYear - 1;
145 
146  $curMonth = intval( gmdate( 'n' ) );
147 
148  $nextMonth = $curMonth + 1;
149  if ( $nextMonth == 13 ) {
150  $nextMonth = 1;
151  }
152 
153  $this->assertEquals(
154  '<label for="year">From year (and earlier):</label> <input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
155  '<option value="1">January</option>' . "\n" .
156  '<option value="2" selected="">February</option>' . "\n" .
157  '<option value="3">March</option>' . "\n" .
158  '<option value="4">April</option>' . "\n" .
159  '<option value="5">May</option>' . "\n" .
160  '<option value="6">June</option>' . "\n" .
161  '<option value="7">July</option>' . "\n" .
162  '<option value="8">August</option>' . "\n" .
163  '<option value="9">September</option>' . "\n" .
164  '<option value="10">October</option>' . "\n" .
165  '<option value="11">November</option>' . "\n" .
166  '<option value="12">December</option></select>',
167  Xml::dateMenu( 2011, 02 ),
168  "Date menu for february 2011"
169  );
170  $this->assertEquals(
171  '<label for="year">From year (and earlier):</label> <input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
172  '<option value="1">January</option>' . "\n" .
173  '<option value="2">February</option>' . "\n" .
174  '<option value="3">March</option>' . "\n" .
175  '<option value="4">April</option>' . "\n" .
176  '<option value="5">May</option>' . "\n" .
177  '<option value="6">June</option>' . "\n" .
178  '<option value="7">July</option>' . "\n" .
179  '<option value="8">August</option>' . "\n" .
180  '<option value="9">September</option>' . "\n" .
181  '<option value="10">October</option>' . "\n" .
182  '<option value="11">November</option>' . "\n" .
183  '<option value="12">December</option></select>',
184  Xml::dateMenu( 2011, -1 ),
185  "Date menu with negative month for 'All'"
186  );
187  $this->assertEquals(
188  Xml::dateMenu( $curYear, $curMonth ),
189  Xml::dateMenu( '', $curMonth ),
190  "Date menu year is the current one when not specified"
191  );
192 
193  $wantedYear = $nextMonth == 1 ? $curYear : $prevYear;
194  $this->assertEquals(
195  Xml::dateMenu( $wantedYear, $nextMonth ),
196  Xml::dateMenu( '', $nextMonth ),
197  "Date menu next month is 11 months ago"
198  );
199 
200  $this->assertEquals(
201  '<label for="year">From year (and earlier):</label> <input id="year" maxlength="4" size="7" type="number" name="year" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
202  '<option value="1">January</option>' . "\n" .
203  '<option value="2">February</option>' . "\n" .
204  '<option value="3">March</option>' . "\n" .
205  '<option value="4">April</option>' . "\n" .
206  '<option value="5">May</option>' . "\n" .
207  '<option value="6">June</option>' . "\n" .
208  '<option value="7">July</option>' . "\n" .
209  '<option value="8">August</option>' . "\n" .
210  '<option value="9">September</option>' . "\n" .
211  '<option value="10">October</option>' . "\n" .
212  '<option value="11">November</option>' . "\n" .
213  '<option value="12">December</option></select>',
214  Xml::dateMenu( '', '' ),
215  "Date menu with neither year or month"
216  );
217  }
218 
222  public function testTextareaNoContent() {
223  $this->assertEquals(
224  '<textarea name="name" id="name" cols="40" rows="5"></textarea>',
225  Xml::textarea( 'name', '' ),
226  'textarea() with not content'
227  );
228  }
229 
233  public function testTextareaAttribs() {
234  $this->assertEquals(
235  '<textarea name="name" id="name" cols="20" rows="10">&lt;txt&gt;</textarea>',
236  Xml::textarea( 'name', '<txt>', 20, 10 ),
237  'textarea() with custom attribs'
238  );
239  }
240 
244  public function testLabelCreation() {
245  $this->assertEquals(
246  '<label for="id">name</label>',
247  Xml::label( 'name', 'id' ),
248  'label() with no attribs'
249  );
250  }
251 
256  $this->assertEquals(
257  '<label for="id">name</label>',
258  Xml::label( 'name', 'id', array( 'generated' => true ) ),
259  'label() can not be given a generated attribute'
260  );
261  $this->assertEquals(
262  '<label for="id" class="nice">name</label>',
263  Xml::label( 'name', 'id', array( 'class' => 'nice' ) ),
264  'label() can get a class attribute'
265  );
266  $this->assertEquals(
267  '<label for="id" title="nice tooltip">name</label>',
268  Xml::label( 'name', 'id', array( 'title' => 'nice tooltip' ) ),
269  'label() can get a title attribute'
270  );
271  $this->assertEquals(
272  '<label for="id" class="nice" title="nice tooltip">name</label>',
273  Xml::label( 'name', 'id', array(
274  'generated' => true,
275  'class' => 'nice',
276  'title' => 'nice tooltip',
277  'anotherattr' => 'value',
278  )
279  ),
280  'label() skip all attributes but "class" and "title"'
281  );
282  }
283 
287  public function testLanguageSelector() {
288  $select = Xml::languageSelector( 'en', true, null,
289  array( 'id' => 'testlang' ), wfMessage( 'yourlanguage' ) );
290  $this->assertEquals(
291  '<label for="testlang">Language:</label>',
292  $select[0]
293  );
294  }
295 
299  public function testEscapeJsStringSpecialChars() {
300  $this->assertEquals(
301  '\\\\\r\n',
302  Xml::escapeJsString( "\\\r\n" ),
303  'escapeJsString() with special characters'
304  );
305  }
306 
310  public function testEncodeJsVarBoolean() {
311  $this->assertEquals(
312  'true',
313  Xml::encodeJsVar( true ),
314  'encodeJsVar() with boolean'
315  );
316  }
317 
321  public function testEncodeJsVarNull() {
322  $this->assertEquals(
323  'null',
324  Xml::encodeJsVar( null ),
325  'encodeJsVar() with null'
326  );
327  }
328 
332  public function testEncodeJsVarArray() {
333  $this->assertEquals(
334  '["a",1]',
335  Xml::encodeJsVar( array( 'a', 1 ) ),
336  'encodeJsVar() with array'
337  );
338  $this->assertEquals(
339  '{"a":"a","b":1}',
340  Xml::encodeJsVar( array( 'a' => 'a', 'b' => 1 ) ),
341  'encodeJsVar() with associative array'
342  );
343  }
344 
348  public function testEncodeJsVarObject() {
349  $this->assertEquals(
350  '{"a":"a","b":1}',
351  Xml::encodeJsVar( (object)array( 'a' => 'a', 'b' => 1 ) ),
352  'encodeJsVar() with object'
353  );
354  }
355 
359  public function testEncodeJsVarInt() {
360  $this->assertEquals(
361  '123456',
362  Xml::encodeJsVar( 123456 ),
363  'encodeJsVar() with int'
364  );
365  }
366 
370  public function testEncodeJsVarFloat() {
371  $this->assertEquals(
372  '1.23456',
373  Xml::encodeJsVar( 1.23456 ),
374  'encodeJsVar() with float'
375  );
376  }
377 
381  public function testEncodeJsVarIntString() {
382  $this->assertEquals(
383  '"123456"',
384  Xml::encodeJsVar( '123456' ),
385  'encodeJsVar() with int-like string'
386  );
387  }
388 
392  public function testEncodeJsVarFloatString() {
393  $this->assertEquals(
394  '"1.23456"',
395  Xml::encodeJsVar( '1.23456' ),
396  'encodeJsVar() with float-like string'
397  );
398  }
399 }
XmlTest\testElementInputCanHaveAValueOfZero
testElementInputCanHaveAValueOfZero()
@covers Xml::input
Definition: XmlTest.php:82
XmlTest\testEncodeJsVarBoolean
testEncodeJsVarBoolean()
@covers Xml::encodeJsVar
Definition: XmlTest.php:310
XmlTest\testLabelAttributeCanOnlyBeClassOrTitle
testLabelAttributeCanOnlyBeClassOrTitle()
@covers Xml::label
Definition: XmlTest.php:255
Xml\escapeJsString
static escapeJsString( $string)
Returns an escaped string suitable for inclusion in a string literal for JavaScript source code.
Definition: Xml.php:609
Xml\expandAttributes
static expandAttributes( $attribs)
Given an array of ('attributename' => 'value'), it generates the code to set the XML attributes : att...
Definition: Xml.php:65
XmlTest\testCloseElement
testCloseElement()
@covers Xml::closeElement
Definition: XmlTest.php:135
php
skin txt MediaWiki includes four core it has been set as the default in MediaWiki since the replacing Monobook it had been been the default skin since before being replaced by Vector largely rewritten in while keeping its appearance Several legacy skins were removed in the as the burden of supporting them became too heavy to bear Those in etc for skin dependent CSS etc for skin dependent JavaScript These can also be customised on a per user by etc This feature has led to a wide variety of user styles becoming that gallery is a good place to ending in php
Definition: skin.txt:62
XmlTest\testEncodeJsVarFloatString
testEncodeJsVarFloatString()
@covers Xml::encodeJsVar
Definition: XmlTest.php:392
XmlTest\testEncodeJsVarInt
testEncodeJsVarInt()
@covers Xml::encodeJsVar
Definition: XmlTest.php:359
XmlTest\testTextareaNoContent
testTextareaNoContent()
@covers Xml::textarea
Definition: XmlTest.php:222
XmlTest\testLabelCreation
testLabelCreation()
@covers Xml::label
Definition: XmlTest.php:244
XmlTest\testEscapeJsStringSpecialChars
testEscapeJsStringSpecialChars()
@covers Xml::escapeJsString
Definition: XmlTest.php:299
XmlTest\testTextareaAttribs
testTextareaAttribs()
@covers Xml::textarea
Definition: XmlTest.php:233
Xml\languageSelector
static languageSelector( $selected, $customisedOnly=true, $inLanguage=null, $overrideAttrs=array(), Message $msg=null)
Construct a language selector appropriate for use in a form or preferences.
Definition: Xml.php:225
Xml\openElement
static openElement( $element, $attribs=null)
This opens an XML element.
Definition: Xml.php:109
Xml\encodeJsVar
static encodeJsVar( $value, $pretty=false)
Encode a variable of arbitrary type to JavaScript.
Definition: Xml.php:647
XmlTest\testExpandAttributesException
testExpandAttributesException()
@covers Xml::expandAttributes
Definition: XmlTest.php:52
XmlTest\testExpandAttributes
testExpandAttributes()
@covers Xml::expandAttributes
Definition: XmlTest.php:40
XmlTest\testElementEscaping
testElementEscaping()
@covers Xml::element
Definition: XmlTest.php:93
MediaWikiTestCase\setMwGlobals
setMwGlobals( $pairs, $value=null)
Definition: MediaWikiTestCase.php:302
MediaWikiTestCase
Definition: MediaWikiTestCase.php:6
wfMessage
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses just before the function returns a value If you return an< a > element with HTML attributes $attribs and contents $html will be returned If you return $ret will be returned and may include noclasses after processing after in associative array form externallinks including delete and has completed for all link tables default is conds Array Extra conditions for the No matching items in log is displayed if loglist is empty msgKey Array If you want a nice box with a set this to the key of the message First element is the message additional optional elements are parameters for the key that are processed with wfMessage() -> params() ->parseAsBlock() - offset Set to overwrite offset parameter in $wgRequest set to '' to unset offset - wrap String Wrap the message in html(usually something like "&lt
Xml\element
static element( $element, $attribs=null, $contents='', $allowShortTag=true)
Format an XML element with given attributes and, optionally, text content.
Definition: Xml.php:39
array
the array() calling protocol came about after MediaWiki 1.4rc1.
List of Api Query prop modules.
XmlTest\testLanguageSelector
testLanguageSelector()
@covers Xml::languageSelector
Definition: XmlTest.php:287
XmlTest\testOpenElement
testOpenElement()
@covers Xml::openElement
Definition: XmlTest.php:124
XmlTest\testElementOpen
testElementOpen()
@covers Xml::element
Definition: XmlTest.php:60
XmlTest\testEncodeJsVarFloat
testEncodeJsVarFloat()
@covers Xml::encodeJsVar
Definition: XmlTest.php:370
Xml\textarea
static textarea( $name, $content, $cols=40, $rows=5, $attribs=array())
Shortcut for creating textareas.
Definition: Xml.php:589
XmlTest
@group Xml
Definition: XmlTest.php:6
XmlTest\testElementAttributes
testElementAttributes()
@covers Xml::element
Definition: XmlTest.php:113
XmlTest\testEncodeJsVarIntString
testEncodeJsVarIntString()
@covers Xml::encodeJsVar
Definition: XmlTest.php:381
XmlTest\setUp
setUp()
Definition: XmlTest.php:8
Xml\closeElement
static closeElement( $element)
Shortcut to close an XML element.
Definition: Xml.php:118
Xml\dateMenu
static dateMenu( $year, $month)
Definition: Xml.php:188
XmlTest\testDateMenu
testDateMenu()
@covers Xml::dateMenu
Definition: XmlTest.php:142
XmlTest\testEscapeTagsOnly
testEscapeTagsOnly()
@covers Xml::escapeTagsOnly
Definition: XmlTest.php:104
XmlTest\testElementEmpty
testElementEmpty()
@covers Xml::element
Definition: XmlTest.php:71
Language\factory
static factory( $code)
Get a cached or new language object for a given language code.
Definition: Language.php:184
Xml\input
static input( $name, $size=false, $value=false, $attribs=array())
Convenience function to build an HTML text input field.
Definition: Xml.php:294
Xml\label
static label( $label, $id, $attribs=array())
Convenience function to build an HTML form label.
Definition: Xml.php:374
XmlTest\testEncodeJsVarNull
testEncodeJsVarNull()
@covers Xml::encodeJsVar
Definition: XmlTest.php:321
Xml\escapeTagsOnly
static escapeTagsOnly( $in)
Replace " > and < with their respective HTML entities ( ", >, <)
Definition: Xml.php:735
XmlTest\testEncodeJsVarArray
testEncodeJsVarArray()
@covers Xml::encodeJsVar
Definition: XmlTest.php:332
XmlTest\testEncodeJsVarObject
testEncodeJsVarObject()
@covers Xml::encodeJsVar
Definition: XmlTest.php:348