366aed89977c14cb8ef1c377c7f46db27bee9b23
[lhc/web/wiklou.git] / maintenance / parserTests.txt
1 # MediaWiki Parser test cases
2 # Some taken from http://meta.wikimedia.org/wiki/Parser_testing
3 # All (C) their respective authors and released under the GPL
4 #
5 # The syntax should be fairly self-explanatory.
6 #
7 # Currently supported test options:
8 # One of the following three:
9 #
10 # (default) generate HTML output
11 # pst apply pre-save transform
12 # msg apply message transform
13 #
14 # Plus any combination of these:
15 #
16 # cat add category links
17 # ill add inter-language links
18 # subpage enable subpages (disabled by default)
19 # noxml don't check for XML well formdness
20 # title=[[XXX]] run test using article title XXX
21 # language=XXX set content language to XXX for this test
22 # variant=XXX set the variant of language for this test (eg zh-tw)
23 # disabled do not run test
24 #
25 # For testing purposes, temporary articles can created:
26 # !!article / NAMESPACE:TITLE / !!text / ARTICLE TEXT / !!endarticle
27 # where '/' denotes a newline.
28
29 # This is the standard article assumed to exist.
30 !! article
31 Main Page
32 !! text
33 blah blah
34 !! endarticle
35
36 !!article
37 Template:Foo
38 !!text
39 FOO
40 !!endarticle
41
42 !! article
43 Template:Blank
44 !! text
45 !! endarticle
46
47 !! article
48 Template:!
49 !! text
50 |
51 !! endarticle
52
53 ###
54 ### Basic tests
55 ###
56 !! test
57 Blank input
58 !! input
59 !! result
60 !! end
61
62
63 !! test
64 Simple paragraph
65 !! input
66 This is a simple paragraph.
67 !! result
68 <p>This is a simple paragraph.
69 </p>
70 !! end
71
72 !! test
73 Simple list
74 !! input
75 * Item 1
76 * Item 2
77 !! result
78 <ul><li> Item 1
79 </li><li> Item 2
80 </li></ul>
81
82 !! end
83
84 !! test
85 Italics and bold
86 !! input
87 * plain
88 * plain''italic''plain
89 * plain''italic''plain''italic''plain
90 * plain'''bold'''plain
91 * plain'''bold'''plain'''bold'''plain
92 * plain''italic''plain'''bold'''plain
93 * plain'''bold'''plain''italic''plain
94 * plain''italic'''bold-italic'''italic''plain
95 * plain'''bold''bold-italic''bold'''plain
96 * plain'''''bold-italic'''italic''plain
97 * plain'''''bold-italic''bold'''plain
98 * plain''italic'''bold-italic'''''plain
99 * plain'''bold''bold-italic'''''plain
100 * plain l'''italic''plain
101 * plain l''''bold''' plain
102 !! result
103 <ul><li> plain
104 </li><li> plain<i>italic</i>plain
105 </li><li> plain<i>italic</i>plain<i>italic</i>plain
106 </li><li> plain<b>bold</b>plain
107 </li><li> plain<b>bold</b>plain<b>bold</b>plain
108 </li><li> plain<i>italic</i>plain<b>bold</b>plain
109 </li><li> plain<b>bold</b>plain<i>italic</i>plain
110 </li><li> plain<i>italic<b>bold-italic</b>italic</i>plain
111 </li><li> plain<b>bold<i>bold-italic</i>bold</b>plain
112 </li><li> plain<i><b>bold-italic</b>italic</i>plain
113 </li><li> plain<b><i>bold-italic</i>bold</b>plain
114 </li><li> plain<i>italic<b>bold-italic</b></i>plain
115 </li><li> plain<b>bold<i>bold-italic</i></b>plain
116 </li><li> plain l'<i>italic</i>plain
117 </li><li> plain l'<b>bold</b> plain
118 </li></ul>
119
120 !! end
121
122 ###
123 ### <nowiki> test cases
124 ###
125
126 !! test
127 <nowiki> unordered list
128 !! input
129 <nowiki>* This is not an unordered list item.</nowiki>
130 !! result
131 <p>* This is not an unordered list item.
132 </p>
133 !! end
134
135 !! test
136 <nowiki> spacing
137 !! input
138 <nowiki>Lorem ipsum dolor
139
140 sed abit.
141 sed nullum.
142
143 :and a colon
144 </nowiki>
145 !! result
146 <p>Lorem ipsum dolor
147
148 sed abit.
149 sed nullum.
150
151 :and a colon
152
153 </p>
154 !! end
155
156 !! test
157 nowiki 3
158 !! input
159 :There is not nowiki.
160 :There is <nowiki>nowiki</nowiki>.
161
162 #There is not nowiki.
163 #There is <nowiki>nowiki</nowiki>.
164
165 *There is not nowiki.
166 *There is <nowiki>nowiki</nowiki>.
167 !! result
168 <dl><dd>There is not nowiki.
169 </dd><dd>There is nowiki.
170 </dd></dl>
171 <ol><li>There is not nowiki.
172 </li><li>There is nowiki.
173 </li></ol>
174 <ul><li>There is not nowiki.
175 </li><li>There is nowiki.
176 </li></ul>
177
178 !! end
179
180
181 ###
182 ### Comments
183 ###
184 !! test
185 Comment test 1
186 !! input
187 <!-- comment 1 --> asdf
188 <!-- comment 2 -->
189 !! result
190 <pre>asdf
191 </pre>
192
193 !! end
194
195 !! test
196 Comment test 2
197 !! input
198 asdf
199 <!-- comment 1 -->
200 jkl
201 !! result
202 <p>asdf
203 jkl
204 </p>
205 !! end
206
207 !! test
208 Comment test 3
209 !! input
210 asdf
211 <!-- comment 1 -->
212 <!-- comment 2 -->
213 jkl
214 !! result
215 <p>asdf
216 jkl
217 </p>
218 !! end
219
220 !! test
221 Comment test 4
222 !! input
223 asdf<!-- comment 1 -->jkl
224 !! result
225 <p>asdfjkl
226 </p>
227 !! end
228
229 !! test
230 Comment spacing
231 !! input
232 a
233 <!-- foo --> b <!-- bar -->
234 c
235 !! result
236 <p>a
237 </p>
238 <pre> b
239 </pre>
240 <p>c
241 </p>
242 !! end
243
244 !! test
245 Comment whitespace
246 !! input
247 <!-- returns a single newline, not nothing, since the newline after > is not stripped -->
248 !! result
249
250 !! end
251
252 !! test
253 Comment semantics and delimiters
254 !! input
255 <!-- --><!----><!-----><!------>
256 !! result
257
258 !! end
259
260 !! test
261 Comment semantics and delimiters, redux
262 !! input
263 <!-- In SGML every "foo" here would actually show up in the text -- foo -- bar
264 -- foo -- funky huh? ... -->
265 !! result
266
267 !! end
268
269 !! test
270 Comment semantics and delimiters: directors cut
271 !! input
272 <!-- ... However we like to keep things simple and somewhat XML-ish so we eat
273 everything starting with < followed by !-- until the first -- and > we see,
274 that wouldn't be valid XML however, since in XML -- has to terminate a comment
275 -->-->
276 !! result
277 <p>--&gt;
278 </p>
279 !! end
280
281 !! test
282 Comment semantics: nesting
283 !! input
284 <!--<!-- no, we're not going to do anything fancy here -->-->
285 !! result
286 <p>--&gt;
287 </p>
288 !! end
289
290 !! test
291 Comment semantics: unclosed comment at end
292 !! input
293 <!--This comment will run out to the end of the document
294 !! result
295
296 !! end
297
298 !! test
299 Comment in template title
300 !! input
301 {{f<!---->oo}}
302 !! result
303 <p>FOO
304 </p>
305 !! end
306
307 !! test
308 Comment on its own line post-expand
309 !! input
310 a
311 {{blank}}<!---->
312 b
313 !! result
314 <p>a
315 </p><p>b
316 </p>
317 !! end
318
319 ###
320 ### Preformatted text
321 ###
322 !! test
323 Preformatted text
324 !! input
325 This is some
326 Preformatted text
327 With ''italic''
328 And '''bold'''
329 And a [[Main Page|link]]
330 !! result
331 <pre>This is some
332 Preformatted text
333 With <i>italic</i>
334 And <b>bold</b>
335 And a <a href="/wiki/Main_Page" title="Main Page">link</a>
336 </pre>
337 !! end
338
339 !! test
340 <pre> with <nowiki> inside (compatibility with 1.6 and earlier)
341 !! input
342 <pre><nowiki>
343 <b>
344 <cite>
345 <em>
346 </nowiki></pre>
347 !! result
348 <pre>
349 &lt;b&gt;
350 &lt;cite&gt;
351 &lt;em&gt;
352 </pre>
353
354 !! end
355
356 !! test
357 Regression with preformatted in <center>
358 !! input
359 <center>
360 Blah
361 </center>
362 !! result
363 <center>
364 <pre>Blah
365 </pre>
366 </center>
367
368 !! end
369
370 !! test
371 <pre> with attributes (bug 3202)
372 !! input
373 <pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>
374 !! result
375 <pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>
376
377 !! end
378
379 !! test
380 <pre> with width attribute (bug 3202)
381 !! input
382 <pre width="8">Narrow screen goodies</pre>
383 !! result
384 <pre width="8">Narrow screen goodies</pre>
385
386 !! end
387
388 !! test
389 <pre> with forbidden attribute (bug 3202)
390 !! input
391 <pre width="8" onmouseover="alert(document.cookie)">Narrow screen goodies</pre>
392 !! result
393 <pre width="8">Narrow screen goodies</pre>
394
395 !! end
396
397 !! test
398 <pre> with forbidden attribute values (bug 3202)
399 !! input
400 <pre width="8" style="border-width: expression(alert(document.cookie))">Narrow screen goodies</pre>
401 !! result
402 <pre width="8">Narrow screen goodies</pre>
403
404 !! end
405
406 ###
407 ### Definition lists
408 ###
409 !! test
410 Simple definition
411 !! input
412 ; name : Definition
413 !! result
414 <dl><dt> name&nbsp;</dt><dd> Definition
415 </dd></dl>
416
417 !! end
418
419 !! test
420 Definition list for indentation only
421 !! input
422 : Indented text
423 !! result
424 <dl><dd> Indented text
425 </dd></dl>
426
427 !! end
428
429 !! test
430 Definition list with no space
431 !! input
432 ;name:Definition
433 !! result
434 <dl><dt>name</dt><dd>Definition
435 </dd></dl>
436
437 !!end
438
439 !! test
440 Definition list with URL link
441 !! input
442 ; http://example.com/ : definition
443 !! result
444 <dl><dt> <a href="http://example.com/" class="external free" title="http://example.com/" rel="nofollow">http://example.com/</a>&nbsp;</dt><dd> definition
445 </dd></dl>
446
447 !! end
448
449 !! test
450 Definition list with bracketed URL link
451 !! input
452 ;[http://www.example.com/ Example]:Something about it
453 !! result
454 <dl><dt><a href="http://www.example.com/" class="external text" title="http://www.example.com/" rel="nofollow">Example</a></dt><dd>Something about it
455 </dd></dl>
456
457 !! end
458
459 !! test
460 Definition list with wikilink containing colon
461 !! input
462 ; [[Help:FAQ]]: The least-read page on Wikipedia
463 !! result
464 <dl><dt> <a href="/index.php?title=Help:FAQ&amp;action=edit&amp;redlink=1" class="new" title="Help:FAQ (not yet written)">Help:FAQ</a></dt><dd> The least-read page on Wikipedia
465 </dd></dl>
466
467 !! end
468
469 # At Brion's and JeLuF's insistence... :)
470 !! test
471 Definition list with news link containing colon
472 !! input
473 ; news:alt.wikipedia.rox: This isn't even a real newsgroup!
474 !! result
475 <dl><dt> <a href="news:alt.wikipedia.rox" class="external free" title="news:alt.wikipedia.rox" rel="nofollow">news:alt.wikipedia.rox</a></dt><dd> This isn't even a real newsgroup!
476 </dd></dl>
477
478 !! end
479
480 !! test
481 Malformed definition list with colon
482 !! input
483 ; news:alt.wikipedia.rox -- don't crash or enter an infinite loop
484 !! result
485 <dl><dt> <a href="news:alt.wikipedia.rox" class="external free" title="news:alt.wikipedia.rox" rel="nofollow">news:alt.wikipedia.rox</a> -- don't crash or enter an infinite loop
486 </dt></dl>
487
488 !! end
489
490 !! test
491 Definition lists: colon in external link text
492 !! input
493 ; [http://www.wikipedia2.org/ Wikipedia : The Next Generation]: OK, I made that up
494 !! result
495 <dl><dt> <a href="http://www.wikipedia2.org/" class="external text" title="http://www.wikipedia2.org/" rel="nofollow">Wikipedia&nbsp;: The Next Generation</a></dt><dd> OK, I made that up
496 </dd></dl>
497
498 !! end
499
500 !! test
501 Definition lists: colon in HTML attribute
502 !! input
503 ;<b style="display: inline">bold</b>
504 !! result
505 <dl><dt><b style="display: inline">bold</b>
506 </dt></dl>
507
508 !! end
509
510
511 !! test
512 Definition lists: self-closed tag
513 !! input
514 ;one<br/>two : two-line fun
515 !! result
516 <dl><dt>one<br />two&nbsp;</dt><dd> two-line fun
517 </dd></dl>
518
519 !! end
520
521
522 ###
523 ### External links
524 ###
525 !! test
526 External links: non-bracketed
527 !! input
528 Non-bracketed: http://example.com
529 !! result
530 <p>Non-bracketed: <a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a>
531 </p>
532 !! end
533
534 !! test
535 External links: numbered
536 !! input
537 Numbered: [http://example.com]
538 Numbered: [http://example.net]
539 Numbered: [http://example.org]
540 !! result
541 <p>Numbered: <a href="http://example.com" class="external autonumber" title="http://example.com" rel="nofollow">[1]</a>
542 Numbered: <a href="http://example.net" class="external autonumber" title="http://example.net" rel="nofollow">[2]</a>
543 Numbered: <a href="http://example.org" class="external autonumber" title="http://example.org" rel="nofollow">[3]</a>
544 </p>
545 !!end
546
547 !! test
548 External links: specified text
549 !! input
550 Specified text: [http://example.com link]
551 !! result
552 <p>Specified text: <a href="http://example.com" class="external text" title="http://example.com" rel="nofollow">link</a>
553 </p>
554 !!end
555
556 !! test
557 External links: trail
558 !! input
559 Linktrails should not work for external links: [http://example.com link]s
560 !! result
561 <p>Linktrails should not work for external links: <a href="http://example.com" class="external text" title="http://example.com" rel="nofollow">link</a>s
562 </p>
563 !! end
564
565 !! test
566 External links: dollar sign in URL
567 !! input
568 http://example.com/1$2345
569 !! result
570 <p><a href="http://example.com/1$2345" class="external free" title="http://example.com/1$2345" rel="nofollow">http://example.com/1$2345</a>
571 </p>
572 !! end
573
574 !! test
575 External links: dollar sign in URL (named)
576 !! input
577 [http://example.com/1$2345]
578 !! result
579 <p><a href="http://example.com/1$2345" class="external autonumber" title="http://example.com/1$2345" rel="nofollow">[1]</a>
580 </p>
581 !!end
582
583 !! test
584 External links: open square bracket forbidden in URL (bug 4377)
585 !! input
586 http://example.com/1[2345
587 !! result
588 <p><a href="http://example.com/1" class="external free" title="http://example.com/1" rel="nofollow">http://example.com/1</a>[2345
589 </p>
590 !! end
591
592 !! test
593 External links: open square bracket forbidden in URL (named) (bug 4377)
594 !! input
595 [http://example.com/1[2345]
596 !! result
597 <p><a href="http://example.com/1" class="external text" title="http://example.com/1" rel="nofollow">[2345</a>
598 </p>
599 !!end
600
601 !! test
602 External links: nowiki in URL link text (bug 6230)
603 !!input
604 [http://example.com/ <nowiki>''example site''</nowiki>]
605 !! result
606 <p><a href="http://example.com/" class="external text" title="http://example.com/" rel="nofollow">''example site''</a>
607 </p>
608 !! end
609
610 !! test
611 External links: newline forbidden in text (bug 6230 regression check)
612 !! input
613 [http://example.com/ first
614 second]
615 !! result
616 <p>[<a href="http://example.com/" class="external free" title="http://example.com/" rel="nofollow">http://example.com/</a> first
617 second]
618 </p>
619 !!end
620
621 !! test
622 External image
623 !! input
624 External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
625 !! result
626 <p>External image: <img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
627 </p>
628 !! end
629
630 !! test
631 External image from https
632 !! input
633 External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
634 !! result
635 <p>External image from https: <img src="https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
636 </p>
637 !! end
638
639 !! test
640 Link to non-http image, no img tag
641 !! input
642 Link to non-http image, no img tag: ftp://example.com/test.jpg
643 !! result
644 <p>Link to non-http image, no img tag: <a href="ftp://example.com/test.jpg" class="external free" title="ftp://example.com/test.jpg" rel="nofollow">ftp://example.com/test.jpg</a>
645 </p>
646 !! end
647
648 !! test
649 External links: terminating separator
650 !! input
651 Terminating separator: http://example.com/thing,
652 !! result
653 <p>Terminating separator: <a href="http://example.com/thing" class="external free" title="http://example.com/thing" rel="nofollow">http://example.com/thing</a>,
654 </p>
655 !! end
656
657 !! test
658 External links: intervening separator
659 !! input
660 Intervening separator: http://example.com/1,2,3
661 !! result
662 <p>Intervening separator: <a href="http://example.com/1,2,3" class="external free" title="http://example.com/1,2,3" rel="nofollow">http://example.com/1,2,3</a>
663 </p>
664 !! end
665
666 !! test
667 External links: old bug with URL in query
668 !! input
669 Old bug with URL in query: [http://example.com/thing?url=http://example.com link]
670 !! result
671 <p>Old bug with URL in query: <a href="http://example.com/thing?url=http://example.com" class="external text" title="http://example.com/thing?url=http://example.com" rel="nofollow">link</a>
672 </p>
673 !! end
674
675 !! test
676 External links: old URL-in-URL bug, mixed protocols
677 !! input
678 And again with mixed protocols: [ftp://example.com?url=http://example.com link]
679 !! result
680 <p>And again with mixed protocols: <a href="ftp://example.com?url=http://example.com" class="external text" title="ftp://example.com?url=http://example.com" rel="nofollow">link</a>
681 </p>
682 !!end
683
684 !! test
685 External links: URL in text
686 !! input
687 URL in text: [http://example.com http://example.com]
688 !! result
689 <p>URL in text: <a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a>
690 </p>
691 !! end
692
693 !! test
694 External links: Clickable images
695 !! input
696 ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png]
697 !! result
698 <p>ja-style clickable images: <a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"><img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" /></a>
699 </p>
700 !!end
701
702 !! test
703 External links: raw ampersand
704 !! input
705 Old &amp; use: http://x&y
706 !! result
707 <p>Old &amp; use: <a href="http://x&amp;y" class="external free" title="http://x&amp;y" rel="nofollow">http://x&amp;y</a>
708 </p>
709 !! end
710
711 !! test
712 External links: encoded ampersand
713 !! input
714 Old &amp; use: http://x&amp;y
715 !! result
716 <p>Old &amp; use: <a href="http://x&amp;y" class="external free" title="http://x&amp;y" rel="nofollow">http://x&amp;y</a>
717 </p>
718 !! end
719
720 !! test
721 External links: encoded equals (bug 6102)
722 !! input
723 http://example.com/?foo&#61;bar
724 !! result
725 <p><a href="http://example.com/?foo=bar" class="external free" title="http://example.com/?foo=bar" rel="nofollow">http://example.com/?foo=bar</a>
726 </p>
727 !! end
728
729 !! test
730 External links: [raw ampersand]
731 !! input
732 Old &amp; use: [http://x&y]
733 !! result
734 <p>Old &amp; use: <a href="http://x&amp;y" class="external autonumber" title="http://x&amp;y" rel="nofollow">[1]</a>
735 </p>
736 !! end
737
738 !! test
739 External links: [encoded ampersand]
740 !! input
741 Old &amp; use: [http://x&amp;y]
742 !! result
743 <p>Old &amp; use: <a href="http://x&amp;y" class="external autonumber" title="http://x&amp;y" rel="nofollow">[1]</a>
744 </p>
745 !! end
746
747 !! test
748 External links: [encoded equals] (bug 6102)
749 !! input
750 [http://example.com/?foo&#61;bar]
751 !! result
752 <p><a href="http://example.com/?foo=bar" class="external autonumber" title="http://example.com/?foo=bar" rel="nofollow">[1]</a>
753 </p>
754 !! end
755
756 !! test
757 External links: [IDN ignored character reference in hostname; strip it right off]
758 !! input
759 [http://e&zwnj;xample.com/]
760 !! result
761 <p><a href="http://example.com/" class="external autonumber" title="http://example.com/" rel="nofollow">[1]</a>
762 </p>
763 !! end
764
765 !! test
766 External links: IDN ignored character reference in hostname; strip it right off
767 !! input
768 http://e&zwnj;xample.com/
769 !! result
770 <p><a href="http://example.com/" class="external free" title="http://example.com/" rel="nofollow">http://example.com/</a>
771 </p>
772 !! end
773
774 !! test
775 External links: www.jpeg.org (bug 554)
776 !! input
777 http://www.jpeg.org
778 !!result
779 <p><a href="http://www.jpeg.org" class="external free" title="http://www.jpeg.org" rel="nofollow">http://www.jpeg.org</a>
780 </p>
781 !! end
782
783 !! test
784 External links: URL within URL (original bug 2)
785 !! input
786 [http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp]
787 !! result
788 <p><a href="http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp" class="external autonumber" title="http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp" rel="nofollow">[1]</a>
789 </p>
790 !! end
791
792 !! test
793 BUG 361: URL inside bracketed URL
794 !! input
795 [http://www.example.com/foo http://www.example.com/bar]
796 !! result
797 <p><a href="http://www.example.com/foo" class="external text" title="http://www.example.com/foo" rel="nofollow">http://www.example.com/bar</a>
798 </p>
799 !! end
800
801 !! test
802 BUG 361: URL within URL, not bracketed
803 !! input
804 http://www.example.com/foo?=http://www.example.com/bar
805 !! result
806 <p><a href="http://www.example.com/foo?=http://www.example.com/bar" class="external free" title="http://www.example.com/foo?=http://www.example.com/bar" rel="nofollow">http://www.example.com/foo?=http://www.example.com/bar</a>
807 </p>
808 !! end
809
810 !! test
811 BUG 289: ">"-token in URL-tail
812 !! input
813 http://www.example.com/<hello>
814 !! result
815 <p><a href="http://www.example.com/" class="external free" title="http://www.example.com/" rel="nofollow">http://www.example.com/</a>&lt;hello&gt;
816 </p>
817 !!end
818
819 !! test
820 BUG 289: literal ">"-token in URL-tail
821 !! input
822 http://www.example.com/<b>html</b>
823 !! result
824 <p><a href="http://www.example.com/" class="external free" title="http://www.example.com/" rel="nofollow">http://www.example.com/</a><b>html</b>
825 </p>
826 !!end
827
828 !! test
829 BUG 289: ">"-token in bracketed URL
830 !! input
831 [http://www.example.com/<hello> stuff]
832 !! result
833 <p><a href="http://www.example.com/" class="external text" title="http://www.example.com/" rel="nofollow">&lt;hello&gt; stuff</a>
834 </p>
835 !!end
836
837 !! test
838 BUG 289: literal ">"-token in bracketed URL
839 !! input
840 [http://www.example.com/<b>html</b> stuff]
841 !! result
842 <p><a href="http://www.example.com/" class="external text" title="http://www.example.com/" rel="nofollow"><b>html</b> stuff</a>
843 </p>
844 !!end
845
846 !! test
847 BUG 289: literal double quote at end of URL
848 !! input
849 http://www.example.com/"hello"
850 !! result
851 <p><a href="http://www.example.com/" class="external free" title="http://www.example.com/" rel="nofollow">http://www.example.com/</a>"hello"
852 </p>
853 !!end
854
855 !! test
856 BUG 289: literal double quote in bracketed URL
857 !! input
858 [http://www.example.com/"hello" stuff]
859 !! result
860 <p><a href="http://www.example.com/" class="external text" title="http://www.example.com/" rel="nofollow">"hello" stuff</a>
861 </p>
862 !!end
863
864 !! test
865 External links: invalid character
866 Fixme: the missing char seems to have gone missing
867 !! options
868 disabled
869 !! input
870 [http://www.example.com test]
871 !! result
872 <p>[<a href="http://www.example.com" class="external free" title="http://www.example.com" rel="nofollow">http://www.example.com</a> test]
873 </p>
874 !! end
875
876 !! test
877 External links: multiple legal whitespace is fine, Magnus. Don't break it please. (bug 5081)
878 !! input
879 [http://www.example.com test]
880 !! result
881 <p><a href="http://www.example.com" class="external text" title="http://www.example.com" rel="nofollow">test</a>
882 </p>
883 !! end
884
885 !! test
886 External links: wiki links within external link (Bug 3695)
887 !! input
888 [http://example.com [[wikilink]] embedded in ext link]
889 !! result
890 <p><a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"></a><a href="/index.php?title=Wikilink&amp;action=edit&amp;redlink=1" class="new" title="Wikilink (not yet written)">wikilink</a><a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"> embedded in ext link</a>
891 </p>
892 !! end
893
894 !! test
895 BUG 787: Links with one slash after the url protocol are invalid
896 !! input
897 http:/example.com
898
899 [http:/example.com title]
900 !! result
901 <p>http:/example.com
902 </p><p>[http:/example.com title]
903 </p>
904 !! end
905
906 !! test
907 Bug 2702: Mismatched <i>, <b> and <a> tags are invalid
908 !! input
909 ''[http://example.com text'']
910 [http://example.com '''text]'''
911 ''Something [http://example.com in italic'']
912 ''Something [http://example.com mixed''''', even bold]'''
913 '''''Now [http://example.com both''''']
914 !! result
915 <p><a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"><i>text</i></a>
916 <a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"><b>text</b></a>
917 <i>Something </i><a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"><i>in italic</i></a>
918 <i>Something </i><a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"><i>mixed</i><b>, even bold</b></a>
919 <i><b>Now </b></i><a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"><i><b>both</b></i></a>
920 </p>
921 !! end
922
923
924 !! test
925 Bug 4781: %26 in URL
926 !! input
927 http://www.example.com/?title=AT%26T
928 !! result
929 <p><a href="http://www.example.com/?title=AT%26T" class="external free" title="http://www.example.com/?title=AT%26T" rel="nofollow">http://www.example.com/?title=AT%26T</a>
930 </p>
931 !! end
932
933 !! test
934 Bug 4781, 5267: %26 in URL
935 !! input
936 http://www.example.com/?title=100%25_Bran
937 !! result
938 <p><a href="http://www.example.com/?title=100%25_Bran" class="external free" title="http://www.example.com/?title=100%25_Bran" rel="nofollow">http://www.example.com/?title=100%25_Bran</a>
939 </p>
940 !! end
941
942 !! test
943 Bug 4781, 5267: %28, %29 in URL
944 !! input
945 http://www.example.com/?title=Ben-Hur_%281959_film%29
946 !! result
947 <p><a href="http://www.example.com/?title=Ben-Hur_%281959_film%29" class="external free" title="http://www.example.com/?title=Ben-Hur_%281959_film%29" rel="nofollow">http://www.example.com/?title=Ben-Hur_%281959_film%29</a>
948 </p>
949 !! end
950
951
952 !! test
953 Bug 4781: %26 in autonumber URL
954 !! input
955 [http://www.example.com/?title=AT%26T]
956 !! result
957 <p><a href="http://www.example.com/?title=AT%26T" class="external autonumber" title="http://www.example.com/?title=AT%26T" rel="nofollow">[1]</a>
958 </p>
959 !! end
960
961 !! test
962 Bug 4781, 5267: %26 in autonumber URL
963 !! input
964 [http://www.example.com/?title=100%25_Bran]
965 !! result
966 <p><a href="http://www.example.com/?title=100%25_Bran" class="external autonumber" title="http://www.example.com/?title=100%25_Bran" rel="nofollow">[1]</a>
967 </p>
968 !! end
969
970 !! test
971 Bug 4781, 5267: %28, %29 in autonumber URL
972 !! input
973 [http://www.example.com/?title=Ben-Hur_%281959_film%29]
974 !! result
975 <p><a href="http://www.example.com/?title=Ben-Hur_%281959_film%29" class="external autonumber" title="http://www.example.com/?title=Ben-Hur_%281959_film%29" rel="nofollow">[1]</a>
976 </p>
977 !! end
978
979
980 !! test
981 Bug 4781: %26 in bracketed URL
982 !! input
983 [http://www.example.com/?title=AT%26T link]
984 !! result
985 <p><a href="http://www.example.com/?title=AT%26T" class="external text" title="http://www.example.com/?title=AT%26T" rel="nofollow">link</a>
986 </p>
987 !! end
988
989 !! test
990 Bug 4781, 5267: %26 in bracketed URL
991 !! input
992 [http://www.example.com/?title=100%25_Bran link]
993 !! result
994 <p><a href="http://www.example.com/?title=100%25_Bran" class="external text" title="http://www.example.com/?title=100%25_Bran" rel="nofollow">link</a>
995 </p>
996 !! end
997
998 !! test
999 Bug 4781, 5267: %28, %29 in bracketed URL
1000 !! input
1001 [http://www.example.com/?title=Ben-Hur_%281959_film%29 link]
1002 !! result
1003 <p><a href="http://www.example.com/?title=Ben-Hur_%281959_film%29" class="external text" title="http://www.example.com/?title=Ben-Hur_%281959_film%29" rel="nofollow">link</a>
1004 </p>
1005 !! end
1006
1007 !! test
1008 External link containing double-single-quotes in text '' (bug 4598 sanity check)
1009 !! input
1010 Some [http://example.com/ pretty ''italics'' and stuff]!
1011 !! result
1012 <p>Some <a href="http://example.com/" class="external text" title="http://example.com/" rel="nofollow">pretty <i>italics</i> and stuff</a>!
1013 </p>
1014 !! end
1015
1016 !! test
1017 External link containing double-single-quotes in text embedded in italics (bug 4598 sanity check)
1018 !! input
1019 ''Some [http://example.com/ pretty ''italics'' and stuff]!''
1020 !! result
1021 <p><i>Some </i><a href="http://example.com/" class="external text" title="http://example.com/" rel="nofollow"><i>pretty </i>italics<i> and stuff</i></a><i>!</i>
1022 </p>
1023 !! end
1024
1025 !! test
1026 URL-encoding in URL functions (single parameter)
1027 !! input
1028 {{localurl:Some page|amp=&}}
1029 !! result
1030 <p>/index.php?title=Some_page&amp;amp=%26
1031 </p>
1032 !! end
1033
1034 !! test
1035 URL-encoding in URL functions (multiple parameters)
1036 !! input
1037 {{localurl:Some page|q=?&amp=&}}
1038 !! result
1039 <p>/index.php?title=Some_page&amp;q=%3F&amp;amp=%26
1040 </p>
1041 !! end
1042
1043 ###
1044 ### Quotes
1045 ###
1046
1047 !! test
1048 Quotes
1049 !! input
1050 Normal text. '''Bold text.''' Normal text. ''Italic text.''
1051
1052 Normal text. '''''Bold italic text.''''' Normal text.
1053 !!result
1054 <p>Normal text. <b>Bold text.</b> Normal text. <i>Italic text.</i>
1055 </p><p>Normal text. <i><b>Bold italic text.</b></i> Normal text.
1056 </p>
1057 !! end
1058
1059
1060 !! test
1061 Unclosed and unmatched quotes
1062 !! input
1063 '''''Bold italic text '''with bold deactivated''' in between.'''''
1064
1065 '''''Bold italic text ''with italic deactivated'' in between.'''''
1066
1067 '''Bold text..
1068
1069 ..spanning two paragraphs (should not work).'''
1070
1071 '''Bold tag left open
1072
1073 ''Italic tag left open
1074
1075 Normal text.
1076
1077 <!-- Unmatching number of opening, closing tags: -->
1078 '''This year''''s election ''should'' beat '''last year''''s.
1079
1080 ''Tom'''s car is bigger than ''Susan'''s.
1081 !! result
1082 <p><i><b>Bold italic text </b>with bold deactivated<b> in between.</b></i>
1083 </p><p><b><i>Bold italic text </i>with italic deactivated<i> in between.</i></b>
1084 </p><p><b>Bold text..</b>
1085 </p><p>..spanning two paragraphs (should not work).
1086 </p><p><b>Bold tag left open</b>
1087 </p><p><i>Italic tag left open</i>
1088 </p><p>Normal text.
1089 </p><p><b>This year'</b>s election <i>should</i> beat <b>last year'</b>s.
1090 </p><p><i>Tom<b>s car is bigger than </b></i><b>Susan</b>s.
1091 </p>
1092 !! end
1093
1094 ###
1095 ### Tables
1096 ###
1097 ### some content taken from http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide:_Using_tables
1098 ###
1099
1100 # This should not produce <table></table> as <table><tr><td></td></tr></table>
1101 # is the bare minimun required by the spec, see:
1102 # http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_module_Basic_Tables
1103 !! test
1104 A table with no data.
1105 !! input
1106 {||}
1107 !! result
1108 !! end
1109
1110 # A table with nothing but a caption is invalid XHTML, we might want to render
1111 # this as <p>caption</p>
1112 !! test
1113 A table with nothing but a caption
1114 !! input
1115 {|
1116 |+ caption
1117 |}
1118 !! result
1119 <table>
1120 <caption> caption
1121 </caption><tr><td></td></tr></table>
1122
1123 !! end
1124
1125 !! test
1126 Simple table
1127 !! input
1128 {|
1129 | 1 || 2
1130 |-
1131 | 3 || 4
1132 |}
1133 !! result
1134 <table>
1135 <tr>
1136 <td> 1 </td><td> 2
1137 </td></tr>
1138 <tr>
1139 <td> 3 </td><td> 4
1140 </td></tr></table>
1141
1142 !! end
1143
1144 !! test
1145 Multiplication table
1146 !! input
1147 {| border="1" cellpadding="2"
1148 |+Multiplication table
1149 |-
1150 ! &times; !! 1 !! 2 !! 3
1151 |-
1152 ! 1
1153 | 1 || 2 || 3
1154 |-
1155 ! 2
1156 | 2 || 4 || 6
1157 |-
1158 ! 3
1159 | 3 || 6 || 9
1160 |-
1161 ! 4
1162 | 4 || 8 || 12
1163 |-
1164 ! 5
1165 | 5 || 10 || 15
1166 |}
1167 !! result
1168 <table border="1" cellpadding="2">
1169 <caption>Multiplication table
1170 </caption>
1171 <tr>
1172 <th> &times; </th><th> 1 </th><th> 2 </th><th> 3
1173 </th></tr>
1174 <tr>
1175 <th> 1
1176 </th><td> 1 </td><td> 2 </td><td> 3
1177 </td></tr>
1178 <tr>
1179 <th> 2
1180 </th><td> 2 </td><td> 4 </td><td> 6
1181 </td></tr>
1182 <tr>
1183 <th> 3
1184 </th><td> 3 </td><td> 6 </td><td> 9
1185 </td></tr>
1186 <tr>
1187 <th> 4
1188 </th><td> 4 </td><td> 8 </td><td> 12
1189 </td></tr>
1190 <tr>
1191 <th> 5
1192 </th><td> 5 </td><td> 10 </td><td> 15
1193 </td></tr></table>
1194
1195 !! end
1196
1197 !! test
1198 Table rowspan
1199 !! input
1200 {| align=right border=1
1201 | Cell 1, row 1
1202 |rowspan=2| Cell 2, row 1 (and 2)
1203 | Cell 3, row 1
1204 |-
1205 | Cell 1, row 2
1206 | Cell 3, row 2
1207 |}
1208 !! result
1209 <table align="right" border="1">
1210 <tr>
1211 <td> Cell 1, row 1
1212 </td><td rowspan="2"> Cell 2, row 1 (and 2)
1213 </td><td> Cell 3, row 1
1214 </td></tr>
1215 <tr>
1216 <td> Cell 1, row 2
1217 </td><td> Cell 3, row 2
1218 </td></tr></table>
1219
1220 !! end
1221
1222 !! test
1223 Nested table
1224 !! input
1225 {| border=1
1226 | &alpha;
1227 |
1228 {| bgcolor=#ABCDEF border=2
1229 |nested
1230 |-
1231 |table
1232 |}
1233 |the original table again
1234 |}
1235 !! result
1236 <table border="1">
1237 <tr>
1238 <td> &alpha;
1239 </td><td>
1240 <table bgcolor="#ABCDEF" border="2">
1241 <tr>
1242 <td>nested
1243 </td></tr>
1244 <tr>
1245 <td>table
1246 </td></tr></table>
1247 </td><td>the original table again
1248 </td></tr></table>
1249
1250 !! end
1251
1252 !! test
1253 Invalid attributes in table cell (bug 1830)
1254 !! input
1255 {|
1256 |Cell:|broken
1257 |}
1258 !! result
1259 <table>
1260 <tr>
1261 <td>broken
1262 </td></tr></table>
1263
1264 !! end
1265
1266
1267 # FIXME: this one has incorrect tag nesting still.
1268 !! test
1269 Table security: embedded pipes (http://lists.wikimedia.org/mailman/htdig/wikitech-l/2006-April/022293.html)
1270 !! input
1271 {|
1272 | |[ftp://|x||]" onmouseover="alert(document.cookie)">test
1273 !! result
1274 <table>
1275 <tr>
1276 <td><a href="ftp://|x||" class="external autonumber" title="ftp://|x||" rel="nofollow">[1]</td><td></a>" onmouseover="alert(document.cookie)">test
1277 </td>
1278 </tr>
1279 </table>
1280
1281 !! end
1282
1283
1284 ###
1285 ### Internal links
1286 ###
1287 !! test
1288 Plain link, capitalized
1289 !! input
1290 [[Main Page]]
1291 !! result
1292 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
1293 </p>
1294 !! end
1295
1296 !! test
1297 Plain link, uncapitalized
1298 !! input
1299 [[main Page]]
1300 !! result
1301 <p><a href="/wiki/Main_Page" title="Main Page">main Page</a>
1302 </p>
1303 !! end
1304
1305 !! test
1306 Piped link
1307 !! input
1308 [[Main Page|The Main Page]]
1309 !! result
1310 <p><a href="/wiki/Main_Page" title="Main Page">The Main Page</a>
1311 </p>
1312 !! end
1313
1314 !! test
1315 Broken link
1316 !! input
1317 [[Zigzagzogzagzig]]
1318 !! result
1319 <p><a href="/index.php?title=Zigzagzogzagzig&amp;action=edit&amp;redlink=1" class="new" title="Zigzagzogzagzig (not yet written)">Zigzagzogzagzig</a>
1320 </p>
1321 !! end
1322
1323 !! test
1324 Link with prefix
1325 !! input
1326 xxx[[main Page]], xxx[[Main Page]], Xxx[[main Page]] XXX[[main Page]], XXX[[Main Page]]
1327 !! result
1328 <p>xxx<a href="/wiki/Main_Page" title="Main Page">main Page</a>, xxx<a href="/wiki/Main_Page" title="Main Page">Main Page</a>, Xxx<a href="/wiki/Main_Page" title="Main Page">main Page</a> XXX<a href="/wiki/Main_Page" title="Main Page">main Page</a>, XXX<a href="/wiki/Main_Page" title="Main Page">Main Page</a>
1329 </p>
1330 !! end
1331
1332 !! test
1333 Link with suffix
1334 !! input
1335 [[Main Page]]xxx, [[Main Page]]XXX
1336 !! result
1337 <p><a href="/wiki/Main_Page" title="Main Page">Main Pagexxx</a>, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>XXX
1338 </p>
1339 !! end
1340
1341 !! test
1342 Link with 3 brackets
1343 !! input
1344 [[[main page]]]
1345 !! result
1346 <p>[[[main page]]]
1347 </p>
1348 !! end
1349
1350 !! test
1351 Piped link with 3 brackets
1352 !! input
1353 [[[main page|the main page]]]
1354 !! result
1355 <p>[[[main page|the main page]]]
1356 </p>
1357 !! end
1358
1359 !! test
1360 Link with multiple pipes
1361 !! input
1362 [[Main Page|The|Main|Page]]
1363 !! result
1364 <p><a href="/wiki/Main_Page" title="Main Page">The|Main|Page</a>
1365 </p>
1366 !! end
1367
1368 !! test
1369 Link to namespaces
1370 !! input
1371 [[Talk:Parser testing]], [[Meta:Disclaimers]]
1372 !! result
1373 <p><a href="/index.php?title=Talk:Parser_testing&amp;action=edit&amp;redlink=1" class="new" title="Talk:Parser testing (not yet written)">Talk:Parser testing</a>, <a href="/index.php?title=Meta:Disclaimers&amp;action=edit&amp;redlink=1" class="new" title="Meta:Disclaimers (not yet written)">Meta:Disclaimers</a>
1374 </p>
1375 !! end
1376
1377 !! test
1378 Piped link to namespace
1379 !! input
1380 [[Meta:Disclaimers|The disclaimers]]
1381 !! result
1382 <p><a href="/index.php?title=Meta:Disclaimers&amp;action=edit&amp;redlink=1" class="new" title="Meta:Disclaimers (not yet written)">The disclaimers</a>
1383 </p>
1384 !! end
1385
1386 !! test
1387 Link containing }
1388 !! input
1389 [[Usually caused by a typo (oops}]]
1390 !! result
1391 <p>[[Usually caused by a typo (oops}]]
1392 </p>
1393 !! end
1394
1395 !! test
1396 Link containing % (not as a hex sequence)
1397 !! input
1398 [[7% Solution]]
1399 !! result
1400 <p><a href="/index.php?title=7%25_Solution&amp;action=edit&amp;redlink=1" class="new" title="7% Solution (not yet written)">7% Solution</a>
1401 </p>
1402 !! end
1403
1404 !! test
1405 Link containing % as a single hex sequence interpreted to char
1406 !! input
1407 [[7%25 Solution]]
1408 !! result
1409 <p><a href="/index.php?title=7%25_Solution&amp;action=edit&amp;redlink=1" class="new" title="7% Solution (not yet written)">7% Solution</a>
1410 </p>
1411 !!end
1412
1413 !! test
1414 Link containing % as a double hex sequence interpreted to hex sequence
1415 !! input
1416 [[7%2525 Solution]]
1417 !! result
1418 <p>[[7%2525 Solution]]
1419 </p>
1420 !!end
1421
1422 !! test
1423 Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors
1424 Example for such a section: == < ==
1425 !! input
1426 [[%23%3c]][[%23%3e]]
1427 !! result
1428 <p><a href="#.3C" title="">#&lt;</a><a href="#.3E" title="">#&gt;</a>
1429 </p>
1430 !! end
1431
1432 !! test
1433 Link containing "<#" and ">#" as a hex sequences
1434 !! input
1435 [[%3c%23]][[%3e%23]]
1436 !! result
1437 <p>[[%3c%23]][[%3e%23]]
1438 </p>
1439 !! end
1440
1441 !! test
1442 Link containing double-single-quotes '' (bug 4598)
1443 !! input
1444 [[Lista d''e paise d''o munno]]
1445 !! result
1446 <p><a href="/index.php?title=Lista_d%27%27e_paise_d%27%27o_munno&amp;action=edit" class="new" title="Lista d''e paise d''o munno">Lista d''e paise d''o munno</a>
1447 </p>
1448 !! end
1449
1450 !! test
1451 Link containing double-single-quotes '' in text (bug 4598 sanity check)
1452 !! input
1453 Some [[Link|pretty ''italics'' and stuff]]!
1454 !! result
1455 <p>Some <a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (not yet written)">pretty <i>italics</i> and stuff</a>!
1456 </p>
1457 !! end
1458
1459 !! test
1460 Link containing double-single-quotes '' in text embedded in italics (bug 4598 sanity check)
1461 !! input
1462 ''Some [[Link|pretty ''italics'' and stuff]]!
1463 !! result
1464 <p><i>Some </i><a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (not yet written)"><i>pretty </i>italics<i> and stuff</i></a><i>!</i>
1465 </p>
1466 !! end
1467
1468 !! test
1469 Plain link to URL
1470 !! input
1471 [[http://www.example.org]]
1472 !! result
1473 <p>[<a href="http://www.example.org" class="external autonumber" title="http://www.example.org" rel="nofollow">[1]</a>]
1474 </p>
1475 !! end
1476
1477 # I'm fairly sure the expected result here is wrong.
1478 # We want these to be URL links, not pseudo-pages with URLs for titles....
1479 # However the current output is also pretty screwy.
1480 #
1481 # ----
1482 # I'm changing it to match the current output--it arguably makes more
1483 # sense in the light of the test above. Old expected result was:
1484 #<p>Piped link to URL: <a href="/index.php?title=Http://www.example.org&amp;action=edit" class="new" title="Http://www.example.org">an example URL</a>
1485 #</p>
1486 # But I think this test is bordering on "garbage in, garbage out" anyway.
1487 # -- wtm
1488 !! test
1489 Piped link to URL
1490 !! input
1491 Piped link to URL: [[http://www.example.org|an example URL]]
1492 !! result
1493 <p>Piped link to URL: [<a href="http://www.example.org|an" class="external text" title="http://www.example.org|an" rel="nofollow">example URL</a>]
1494 </p>
1495 !! end
1496
1497 !! test
1498 BUG 2: [[page|http://url/]] should link to page, not http://url/
1499 !! input
1500 [[Main Page|http://url/]]
1501 !! result
1502 <p><a href="/wiki/Main_Page" title="Main Page">http://url/</a>
1503 </p>
1504 !! end
1505
1506 !! test
1507 BUG 337: Escaped self-links should be bold
1508 !! options
1509 title=[[Bug462]]
1510 !! input
1511 [[Bu&#103;462]] [[Bug462]]
1512 !! result
1513 <p><strong class="selflink">Bu&#103;462</strong> <strong class="selflink">Bug462</strong>
1514 </p>
1515 !! end
1516
1517 !! test
1518 Self-link to section should not be bold
1519 !! options
1520 title=[[Main Page]]
1521 !! input
1522 [[Main Page#section]]
1523 !! result
1524 <p><a href="/wiki/Main_Page#section" title="Main Page">Main Page#section</a>
1525 </p>
1526 !! end
1527
1528 !! article
1529 00
1530 !! text
1531 This is 00.
1532 !! endarticle
1533
1534 !!test
1535 Self-link to numeric title
1536 !!options
1537 title=[[0]]
1538 !!input
1539 [[0]]
1540 !!result
1541 <p><strong class="selflink">0</strong>
1542 </p>
1543 !!end
1544
1545 !!test
1546 Link to numeric-equivalent title
1547 !!options
1548 title=[[0]]
1549 !!input
1550 [[00]]
1551 !!result
1552 <p><a href="/wiki/00" title="00">00</a>
1553 </p>
1554 !!end
1555
1556 !! test
1557 <nowiki> inside a link
1558 !! input
1559 [[Main<nowiki> Page</nowiki>]] [[Main Page|the main page <nowiki>[it's not very good]</nowiki>]]
1560 !! result
1561 <p>[[Main Page]] <a href="/wiki/Main_Page" title="Main Page">the main page [it's not very good]</a>
1562 </p>
1563 !! end
1564
1565 ###
1566 ### Interwiki links (see maintenance/interwiki.sql)
1567 ###
1568
1569 !! test
1570 Inline interwiki link
1571 !! input
1572 [[MeatBall:SoftSecurity]]
1573 !! result
1574 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity</a>
1575 </p>
1576 !! end
1577
1578 !! test
1579 Inline interwiki link with empty title (bug 2372)
1580 !! input
1581 [[MeatBall:]]
1582 !! result
1583 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?" class="extiw" title="meatball:">MeatBall:</a>
1584 </p>
1585 !! end
1586
1587 !! test
1588 Interwiki link encoding conversion (bug 1636)
1589 !! input
1590 *[[Wikipedia:ro:Olteni&#0355;a]]
1591 *[[Wikipedia:ro:Olteni&#355;a]]
1592 !! result
1593 <ul><li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteni&#355;a</a>
1594 </li><li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteni&#355;a</a>
1595 </li></ul>
1596
1597 !! end
1598
1599 !! test
1600 Interwiki link with fragment (bug 2130)
1601 !! input
1602 [[MeatBall:SoftSecurity#foo]]
1603 !! result
1604 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity#foo" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity#foo</a>
1605 </p>
1606 !! end
1607
1608 !! test
1609 Interlanguage link
1610 !! input
1611 Blah blah blah
1612 [[zh:Chinese]]
1613 !!result
1614 <p>Blah blah blah
1615 </p>
1616 !! end
1617
1618 !! test
1619 Double interlanguage link
1620 !! input
1621 Blah blah blah
1622 [[es:Spanish]]
1623 [[zh:Chinese]]
1624 !!result
1625 <p>Blah blah blah
1626 </p>
1627 !! end
1628
1629 !! test
1630 Interlanguage link, with prefix links
1631 !! options
1632 language=ln
1633 !! input
1634 Blah blah blah
1635 [[zh:Chinese]]
1636 !!result
1637 <p>Blah blah blah
1638 </p>
1639 !! end
1640
1641 !! test
1642 Double interlanguage link, with prefix links (bug 8897)
1643 !! options
1644 language=ln
1645 !! input
1646 Blah blah blah
1647 [[es:Spanish]]
1648 [[zh:Chinese]]
1649 !!result
1650 <p>Blah blah blah
1651 </p>
1652 !! end
1653
1654
1655 ##
1656 ## XHTML tidiness
1657 ###
1658
1659 !! test
1660 <br> to <br />
1661 !! input
1662 1<br>2<br />3
1663 !! result
1664 <p>1<br />2<br />3
1665 </p>
1666 !! end
1667
1668 !! test
1669 Incorrecly removing closing slashes from correctly formed XHTML
1670 !! input
1671 <br style="clear:both;" />
1672 !! result
1673 <p><br style="clear:both;" />
1674 </p>
1675 !! end
1676
1677 !! test
1678 Failing to transform badly formed HTML into correct XHTML
1679 !! input
1680 <br clear=left>
1681 <br clear=right>
1682 <br clear=all>
1683 !! result
1684 <p><br clear="left" />
1685 <br clear="right" />
1686 <br clear="all" />
1687 </p>
1688 !!end
1689
1690 !! test
1691 Horizontal ruler (should it add that extra space?)
1692 !! input
1693 <hr>
1694 <hr >
1695 foo <hr
1696 > bar
1697 !! result
1698 <hr />
1699 <hr />
1700 foo <hr /> bar
1701
1702 !! end
1703
1704 ###
1705 ### Block-level elements
1706 ###
1707 !! test
1708 Common list
1709 !! input
1710 *Common list
1711 * item 2
1712 *item 3
1713 !! result
1714 <ul><li>Common list
1715 </li><li> item 2
1716 </li><li>item 3
1717 </li></ul>
1718
1719 !! end
1720
1721 !! test
1722 Numbered list
1723 !! input
1724 #Numbered list
1725 #item 2
1726 # item 3
1727 !! result
1728 <ol><li>Numbered list
1729 </li><li>item 2
1730 </li><li> item 3
1731 </li></ol>
1732
1733 !! end
1734
1735 !! test
1736 Mixed list
1737 !! input
1738 *Mixed list
1739 *# with numbers
1740 ** and bullets
1741 *# and numbers
1742 *bullets again
1743 **bullet level 2
1744 ***bullet level 3
1745 ***#Number on level 4
1746 **bullet level 2
1747 **#Number on level 3
1748 **#Number on level 3
1749 *#number level 2
1750 *Level 1
1751 !! result
1752 <ul><li>Mixed list
1753 <ol><li> with numbers
1754 </li></ol>
1755 <ul><li> and bullets
1756 </li></ul>
1757 <ol><li> and numbers
1758 </li></ol>
1759 </li><li>bullets again
1760 <ul><li>bullet level 2
1761 <ul><li>bullet level 3
1762 <ol><li>Number on level 4
1763 </li></ol>
1764 </li></ul>
1765 </li><li>bullet level 2
1766 <ol><li>Number on level 3
1767 </li><li>Number on level 3
1768 </li></ol>
1769 </li></ul>
1770 <ol><li>number level 2
1771 </li></ol>
1772 </li><li>Level 1
1773 </li></ul>
1774
1775 !! end
1776
1777 !! test
1778 List items are not parsed correctly following a <pre> block (bug 785)
1779 !! input
1780 * <pre>foo</pre>
1781 * <pre>bar</pre>
1782 * zar
1783 !! result
1784 <ul><li> <pre>foo</pre>
1785 </li><li> <pre>bar</pre>
1786 </li><li> zar
1787 </li></ul>
1788
1789 !! end
1790
1791 ###
1792 ### Magic Words
1793 ###
1794
1795 !! test
1796 Magic Word: {{CURRENTDAY}}
1797 !! input
1798 {{CURRENTDAY}}
1799 !! result
1800 <p>1
1801 </p>
1802 !! end
1803
1804 !! test
1805 Magic Word: {{CURRENTDAY2}}
1806 !! input
1807 {{CURRENTDAY2}}
1808 !! result
1809 <p>01
1810 </p>
1811 !! end
1812
1813 !! test
1814 Magic Word: {{CURRENTDAYNAME}}
1815 !! input
1816 {{CURRENTDAYNAME}}
1817 !! result
1818 <p>Thursday
1819 </p>
1820 !! end
1821
1822 !! test
1823 Magic Word: {{CURRENTDOW}}
1824 !! input
1825 {{CURRENTDOW}}
1826 !! result
1827 <p>4
1828 </p>
1829 !! end
1830
1831 !! test
1832 Magic Word: {{CURRENTMONTH}}
1833 !! input
1834 {{CURRENTMONTH}}
1835 !! result
1836 <p>01
1837 </p>
1838 !! end
1839
1840 !! test
1841 Magic Word: {{CURRENTMONTHABBREV}}
1842 !! input
1843 {{CURRENTMONTHABBREV}}
1844 !! result
1845 <p>Jan
1846 </p>
1847 !! end
1848
1849 !! test
1850 Magic Word: {{CURRENTMONTHNAME}}
1851 !! input
1852 {{CURRENTMONTHNAME}}
1853 !! result
1854 <p>January
1855 </p>
1856 !! end
1857
1858 !! test
1859 Magic Word: {{CURRENTMONTHNAMEGEN}}
1860 !! input
1861 {{CURRENTMONTHNAMEGEN}}
1862 !! result
1863 <p>January
1864 </p>
1865 !! end
1866
1867 !! test
1868 Magic Word: {{CURRENTTIME}}
1869 !! input
1870 {{CURRENTTIME}}
1871 !! result
1872 <p>00:02
1873 </p>
1874 !! end
1875
1876 !! test
1877 Magic Word: {{CURRENTWEEK}} (@bug 4594)
1878 !! input
1879 {{CURRENTWEEK}}
1880 !! result
1881 <p>1
1882 </p>
1883 !! end
1884
1885 !! test
1886 Magic Word: {{CURRENTYEAR}}
1887 !! input
1888 {{CURRENTYEAR}}
1889 !! result
1890 <p>1970
1891 </p>
1892 !! end
1893
1894 !! test
1895 Magic Word: {{FULLPAGENAME}}
1896 !! options
1897 title=[[User:Ævar Arnfjörð Bjarmason]]
1898 !! input
1899 {{FULLPAGENAME}}
1900 !! result
1901 <p>User:Ævar Arnfjörð Bjarmason
1902 </p>
1903 !! end
1904
1905 !! test
1906 Magic Word: {{FULLPAGENAMEE}}
1907 !! options
1908 title=[[User:Ævar Arnfjörð Bjarmason]]
1909 !! input
1910 {{FULLPAGENAMEE}}
1911 !! result
1912 <p>User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
1913 </p>
1914 !! end
1915
1916 !! test
1917 Magic Word: {{NAMESPACE}}
1918 !! options
1919 title=[[User:Ævar Arnfjörð Bjarmason]]
1920 disabled # FIXME
1921 !! input
1922 {{NAMESPACE}}
1923 !! result
1924 <p>User
1925 </p>
1926 !! end
1927
1928 !! test
1929 Magic Word: {{NAMESPACEE}}
1930 !! options
1931 title=[[User:Ævar Arnfjörð Bjarmason]]
1932 disabled # FIXME
1933 !! input
1934 {{NAMESPACEE}}
1935 !! result
1936 <p>User
1937 </p>
1938 !! end
1939
1940 !! test
1941 Magic Word: {{NUMBEROFARTICLES}}
1942 !! input
1943 {{NUMBEROFARTICLES}}
1944 !! result
1945 <p>2
1946 </p>
1947 !! end
1948
1949 !! test
1950 Magic Word: {{NUMBEROFFILES}}
1951 !! input
1952 {{NUMBEROFFILES}}
1953 !! result
1954 <p>1
1955 </p>
1956 !! end
1957
1958 !! test
1959 Magic Word: {{PAGENAME}}
1960 !! options
1961 title=[[User:Ævar Arnfjörð Bjarmason]]
1962 disabled # FIXME
1963 !! input
1964 {{PAGENAME}}
1965 !! result
1966 <p>Ævar Arnfjörð Bjarmason
1967 </p>
1968 !! end
1969
1970 !! test
1971 Magic Word: {{PAGENAMEE}}
1972 !! options
1973 title=[[User:Ævar Arnfjörð Bjarmason]]
1974 !! input
1975 {{PAGENAMEE}}
1976 !! result
1977 <p>User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
1978 </p>
1979 !! end
1980
1981 !! test
1982 Magic Word: {{REVISIONID}}
1983 !! input
1984 {{REVISIONID}}
1985 !! result
1986 <p>1337
1987 </p>
1988 !! end
1989
1990 !! test
1991 Magic Word: {{SCRIPTPATH}}
1992 !! input
1993 {{SCRIPTPATH}}
1994 !! result
1995 <p>/
1996 </p>
1997 !! end
1998
1999 !! test
2000 Magic Word: {{SERVER}}
2001 !! input
2002 {{SERVER}}
2003 !! result
2004 <p><a href="http://localhost" class="external free" title="http://localhost" rel="nofollow">http://localhost</a>
2005 </p>
2006 !! end
2007
2008 !! test
2009 Magic Word: {{SERVERNAME}}
2010 !! input
2011 {{SERVERNAME}}
2012 !! result
2013 <p>Britney Spears
2014 </p>
2015 !! end
2016
2017 !! test
2018 Magic Word: {{SITENAME}}
2019 !! input
2020 {{SITENAME}}
2021 !! result
2022 <p>MediaWiki
2023 </p>
2024 !! end
2025
2026 !! test
2027 Namespace 1 {{ns:1}}
2028 !! input
2029 {{ns:1}}
2030 !! result
2031 <p>Talk
2032 </p>
2033 !! end
2034
2035 !! test
2036 Namespace 1 {{ns:01}}
2037 !! input
2038 {{ns:01}}
2039 !! result
2040 <p>Talk
2041 </p>
2042 !! end
2043
2044 !! test
2045 Namespace 0 {{ns:0}} (bug 4783)
2046 !! input
2047 {{ns:0}}
2048 !! result
2049
2050 !! end
2051
2052 !! test
2053 Namespace 0 {{ns:00}} (bug 4783)
2054 !! input
2055 {{ns:00}}
2056 !! result
2057
2058 !! end
2059
2060 !! test
2061 Namespace -1 {{ns:-1}}
2062 !! input
2063 {{ns:-1}}
2064 !! result
2065 <p>Special
2066 </p>
2067 !! end
2068
2069 !! test
2070 Namespace Project {{ns:User}}
2071 !! input
2072 {{ns:User}}
2073 !! result
2074 <p>User
2075 </p>
2076 !! end
2077
2078
2079 ###
2080 ### Magic links
2081 ###
2082 !! test
2083 Magic links: internal link to RFC (bug 479)
2084 !! input
2085 [[RFC 123]]
2086 !! result
2087 <p><a href="/index.php?title=RFC_123&amp;action=edit&amp;redlink=1" class="new" title="RFC 123 (not yet written)">RFC 123</a>
2088 </p>
2089 !! end
2090
2091 !! test
2092 Magic links: RFC (bug 479)
2093 !! input
2094 RFC 822
2095 !! result
2096 <p><a href="http://tools.ietf.org/html/rfc822" class="external" title="http://tools.ietf.org/html/rfc822">RFC 822</a>
2097 </p>
2098 !! end
2099
2100 !! test
2101 Magic links: ISBN (bug 1937)
2102 !! input
2103 ISBN 0-306-40615-2
2104 !! result
2105 <p><a href="/wiki/Special:BookSources/0306406152" class="internal">ISBN 0-306-40615-2</a>
2106 </p>
2107 !! end
2108
2109 !! test
2110 Magic links: PMID incorrectly converts space to underscore
2111 !! input
2112 PMID 1234
2113 !! result
2114 <p><a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&amp;db=pubmed&amp;dopt=Abstract&amp;list_uids=1234" class="external" title="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&amp;db=pubmed&amp;dopt=Abstract&amp;list_uids=1234">PMID 1234</a>
2115 </p>
2116 !! end
2117
2118 ###
2119 ### Templates
2120 ####
2121
2122 !! test
2123 Nonexistant template
2124 !! input
2125 {{thistemplatedoesnotexist}}
2126 !! result
2127 <p><a href="/index.php?title=Template:Thistemplatedoesnotexist&amp;action=edit&amp;redlink=1" class="new" title="Template:Thistemplatedoesnotexist (not yet written)">Template:Thistemplatedoesnotexist</a>
2128 </p>
2129 !! end
2130
2131 !! article
2132 Template:test
2133 !! text
2134 This is a test template
2135 !! endarticle
2136
2137 !! test
2138 Simple template
2139 !! input
2140 {{test}}
2141 !! result
2142 <p>This is a test template
2143 </p>
2144 !! end
2145
2146 !! test
2147 Template with explicit namespace
2148 !! input
2149 {{Template:test}}
2150 !! result
2151 <p>This is a test template
2152 </p>
2153 !! end
2154
2155
2156 !! article
2157 Template:paramtest
2158 !! text
2159 This is a test template with parameter {{{param}}}
2160 !! endarticle
2161
2162 !! test
2163 Template parameter
2164 !! input
2165 {{paramtest|param=foo}}
2166 !! result
2167 <p>This is a test template with parameter foo
2168 </p>
2169 !! end
2170
2171 !! article
2172 Template:paramtestnum
2173 !! text
2174 [[{{{1}}}|{{{2}}}]]
2175 !! endarticle
2176
2177 !! test
2178 Template unnamed parameter
2179 !! input
2180 {{paramtestnum|Main Page|the main page}}
2181 !! result
2182 <p><a href="/wiki/Main_Page" title="Main Page">the main page</a>
2183 </p>
2184 !! end
2185
2186 !! article
2187 Template:templatesimple
2188 !! text
2189 (test)
2190 !! endarticle
2191
2192 !! article
2193 Template:templateredirect
2194 !! text
2195 #redirect [[Template:templatesimple]]
2196 !! endarticle
2197
2198 !! article
2199 Template:templateasargtestnum
2200 !! text
2201 {{{{{1}}}}}
2202 !! endarticle
2203
2204 !! article
2205 Template:templateasargtest
2206 !! text
2207 {{template{{{templ}}}}}
2208 !! endarticle
2209
2210 !! article
2211 Template:templateasargtest2
2212 !! text
2213 {{{{{templ}}}}}
2214 !! endarticle
2215
2216 !! test
2217 Template with template name as unnamed argument
2218 !! input
2219 {{templateasargtestnum|templatesimple}}
2220 !! result
2221 <p>(test)
2222 </p>
2223 !! end
2224
2225 !! test
2226 Template with template name as argument
2227 !! input
2228 {{templateasargtest|templ=simple}}
2229 !! result
2230 <p>(test)
2231 </p>
2232 !! end
2233
2234 !! test
2235 Template with template name as argument (2)
2236 !! input
2237 {{templateasargtest2|templ=templatesimple}}
2238 !! result
2239 <p>(test)
2240 </p>
2241 !! end
2242
2243 !! article
2244 Template:templateasargtestdefault
2245 !! text
2246 {{{{{templ|templatesimple}}}}}
2247 !! endarticle
2248
2249 !! article
2250 Template:templa
2251 !! text
2252 '''templ'''
2253 !! endarticle
2254
2255 !! test
2256 Template with default value
2257 !! input
2258 {{templateasargtestdefault}}
2259 !! result
2260 <p>(test)
2261 </p>
2262 !! end
2263
2264 !! test
2265 Template with default value (value set)
2266 !! input
2267 {{templateasargtestdefault|templ=templa}}
2268 !! result
2269 <p><b>templ</b>
2270 </p>
2271 !! end
2272
2273 !! test
2274 Template redirect
2275 !! input
2276 {{templateredirect}}
2277 !! result
2278 <p>(test)
2279 </p>
2280 !! end
2281
2282 !! test
2283 Template with argument in separate line
2284 !! input
2285 {{ templateasargtest |
2286 templ = simple }}
2287 !! result
2288 <p>(test)
2289 </p>
2290 !! end
2291
2292 !! test
2293 Template with complex template as argument
2294 !! input
2295 {{paramtest|
2296 param ={{ templateasargtest |
2297 templ = simple }}}}
2298 !! result
2299 <p>This is a test template with parameter (test)
2300 </p>
2301 !! end
2302
2303 !! test
2304 Template with thumb image (with link in description)
2305 !! input
2306 {{paramtest|
2307 param =[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]}}
2308 !! result
2309 This is a test template with parameter <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Noimage.png" class="new" title="Image:Noimage.png">Image:Noimage.png</a> <div class="thumbcaption"><a href="/index.php?title=No_link&amp;action=edit" class="new" title="No link (not yet written)">link</a> <a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (not yet written)">caption</a></div></div></div>
2310
2311 !! end
2312
2313 !! article
2314 Template:complextemplate
2315 !! text
2316 {{{1}}} {{paramtest|
2317 param ={{{param}}}}}
2318 !! endarticle
2319
2320 !! test
2321 Template with complex arguments
2322 !! input
2323 {{complextemplate|
2324 param ={{ templateasargtest |
2325 templ = simple }}|[[Template:complextemplate|link]]}}
2326 !! result
2327 <p><a href="/wiki/Template:Complextemplate" title="Template:Complextemplate">link</a> This is a test template with parameter (test)
2328 </p>
2329 !! end
2330
2331 !! test
2332 BUG 553: link with two variables in a piped link
2333 !! input
2334 {|
2335 |[[{{{1}}}|{{{2}}}]]
2336 |}
2337 !! result
2338 <table>
2339 <tr>
2340 <td>[[{{{1}}}|{{{2}}}]]
2341 </td></tr></table>
2342
2343 !! end
2344
2345 !! test
2346 Magic variable as template parameter
2347 !! input
2348 {{paramtest|param={{SITENAME}}}}
2349 !! result
2350 <p>This is a test template with parameter MediaWiki
2351 </p>
2352 !! end
2353
2354 !! article
2355 Template:linktest
2356 !! text
2357 [[{{{param}}}|link]]
2358 !! endarticle
2359
2360 !! test
2361 Template parameter as link source
2362 !! input
2363 {{linktest|param=Main Page}}
2364 !! result
2365 <p><a href="/wiki/Main_Page" title="Main Page">link</a>
2366 </p>
2367 !! end
2368
2369
2370 !!article
2371 Template:paramtest2
2372 !! text
2373 including another template, {{paramtest|param={{{arg}}}}}
2374 !! endarticle
2375
2376 !! test
2377 Template passing argument to another template
2378 !! input
2379 {{paramtest2|arg='hmm'}}
2380 !! result
2381 <p>including another template, This is a test template with parameter 'hmm'
2382 </p>
2383 !! end
2384
2385 !! article
2386 Template:Linktest2
2387 !! text
2388 Main Page
2389 !! endarticle
2390
2391 !! test
2392 Template as link source
2393 !! input
2394 [[{{linktest2}}]]
2395 !! result
2396 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
2397 </p>
2398 !! end
2399
2400
2401 !! article
2402 Template:loop1
2403 !! text
2404 {{loop2}}
2405 !! endarticle
2406
2407 !! article
2408 Template:loop2
2409 !! text
2410 {{loop1}}
2411 !! endarticle
2412
2413 !! test
2414 Template infinite loop
2415 !! input
2416 {{loop1}}
2417 !! result
2418 <p><span class="error">Template loop detected: <a href="/wiki/Template:Loop1" title="Template:Loop1">Template:Loop1</a></span>
2419 </p>
2420 !! end
2421
2422 !! test
2423 Template from main namespace
2424 !! input
2425 {{:Main Page}}
2426 !! result
2427 <p>blah blah
2428 </p>
2429 !! end
2430
2431 !! article
2432 Template:table
2433 !! text
2434 {|
2435 | 1 || 2
2436 |-
2437 | 3 || 4
2438 |}
2439 !! endarticle
2440
2441 !! test
2442 BUG 529: Template with table, not included at beginning of line
2443 !! input
2444 foo {{table}}
2445 !! result
2446 <p>foo
2447 </p>
2448 <table>
2449 <tr>
2450 <td> 1 </td><td> 2
2451 </td></tr>
2452 <tr>
2453 <td> 3 </td><td> 4
2454 </td></tr></table>
2455
2456 !! end
2457
2458 !! test
2459 BUG 523: Template shouldn't eat newline (or add an extra one before table)
2460 !! input
2461 foo
2462 {{table}}
2463 !! result
2464 <p>foo
2465 </p>
2466 <table>
2467 <tr>
2468 <td> 1 </td><td> 2
2469 </td></tr>
2470 <tr>
2471 <td> 3 </td><td> 4
2472 </td></tr></table>
2473
2474 !! end
2475
2476 !! test
2477 BUG 41: Template parameters shown as broken links
2478 !! input
2479 {{{parameter}}}
2480 !! result
2481 <p>{{{parameter}}}
2482 </p>
2483 !! end
2484
2485
2486 !! article
2487 Template:MSGNW test
2488 !! text
2489 ''None'' of '''this''' should be
2490 * interepreted
2491 but rather passed unmodified
2492 {{test}}
2493 !! endarticle
2494
2495 # hmm, fix this or just deprecate msgnw and document its behavior?
2496 !! test
2497 msgnw keyword
2498 !! options
2499 disabled
2500 !! input
2501 {{msgnw:MSGNW test}}
2502 !! result
2503 <p>''None'' of '''this''' should be
2504 * interepreted
2505 but rather passed unmodified
2506 {{test}}
2507 </p>
2508 !! end
2509
2510 !! test
2511 int keyword
2512 !! input
2513 {{int:youhavenewmessages|lots of money|not!}}
2514 !! result
2515 <p>You have lots of money (not!).
2516 </p>
2517 !! end
2518
2519 !! article
2520 Template:Includes
2521 !! text
2522 Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
2523 !! endarticle
2524
2525 !! test
2526 <includeonly> and <noinclude> being included
2527 !! input
2528 {{Includes}}
2529 !! result
2530 <p>Foobar
2531 </p>
2532 !! end
2533
2534 !! article
2535 Template:Includes2
2536 !! text
2537 <onlyinclude>Foo</onlyinclude>bar
2538 !! endarticle
2539
2540 !! test
2541 <onlyinclude> being included
2542 !! input
2543 {{Includes2}}
2544 !! result
2545 <p>Foo
2546 </p>
2547 !! end
2548
2549
2550 !! article
2551 Template:Includes3
2552 !! text
2553 <onlyinclude>Foo</onlyinclude>bar<includeonly>zar</includeonly>
2554 !! endarticle
2555
2556 !! test
2557 <onlyinclude> and <includeonly> being included
2558 !! input
2559 {{Includes3}}
2560 !! result
2561 <p>Foo
2562 </p>
2563 !! end
2564
2565 !! test
2566 <includeonly> and <noinclude> on a page
2567 !! input
2568 Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
2569 !! result
2570 <p>Foozar
2571 </p>
2572 !! end
2573
2574 !! test
2575 <onlyinclude> on a page
2576 !! input
2577 <onlyinclude>Foo</onlyinclude>bar
2578 !! result
2579 <p>Foobar
2580 </p>
2581 !! end
2582
2583 !! article
2584 Template:Includeonly section
2585 !! text
2586 <includeonly>
2587 ==Includeonly section==
2588 </includeonly>
2589 ==Section T-1==
2590 !!endarticle
2591
2592 !! test
2593 Bug 6563: Edit link generation for section shown by <includeonly>
2594 !! input
2595 {{includeonly section}}
2596 !! result
2597 <a name="Includeonly_section"></a><h2><span class="editsection">[<a href="/index.php?title=Template:Includeonly_section&amp;action=edit&amp;section=T-1" title="Template:Includeonly section">edit</a>]</span> <span class="mw-headline">Includeonly section</span></h2>
2598 <a name="Section_T-1"></a><h2><span class="editsection">[<a href="/index.php?title=Template:Includeonly_section&amp;action=edit&amp;section=T-2" title="Template:Includeonly section">edit</a>]</span> <span class="mw-headline">Section T-1</span></h2>
2599
2600 !! end
2601
2602 # Uses same input as the contents of [[Template:Includeonly section]]
2603 !! test
2604 Bug 6563: Section extraction for section shown by <includeonly>
2605 !! options
2606 section=T-2
2607 !! input
2608 <includeonly>
2609 ==Includeonly section==
2610 </includeonly>
2611 ==Section T-2==
2612 !! result
2613 ==Section T-2==
2614 !! end
2615
2616 !! test
2617 Bug 6563: Edit link generation for section suppressed by <includeonly>
2618 !! input
2619 <includeonly>
2620 ==Includeonly section==
2621 </includeonly>
2622 ==Section 1==
2623 !! result
2624 <a name="Section_1"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 1">edit</a>]</span> <span class="mw-headline">Section 1</span></h2>
2625
2626 !! end
2627
2628 !! test
2629 Bug 6563: Section extraction for section suppressed by <includeonly>
2630 !! options
2631 section=1
2632 !! input
2633 <includeonly>
2634 ==Includeonly section==
2635 </includeonly>
2636 ==Section 1==
2637 !! result
2638 ==Section 1==
2639 !! end
2640
2641 ###
2642 ### Pre-save transform tests
2643 ###
2644 !! test
2645 pre-save transform: subst:
2646 !! options
2647 PST
2648 !! input
2649 {{subst:test}}
2650 !! result
2651 This is a test template
2652 !! end
2653
2654 !! test
2655 pre-save transform: normal template
2656 !! options
2657 PST
2658 !! input
2659 {{test}}
2660 !! result
2661 {{test}}
2662 !! end
2663
2664 !! test
2665 pre-save transform: nonexistant template
2666 !! options
2667 PST
2668 !! input
2669 {{thistemplatedoesnotexist}}
2670 !! result
2671 {{thistemplatedoesnotexist}}
2672 !! end
2673
2674
2675 !! test
2676 pre-save transform: subst magic variables
2677 !! options
2678 PST
2679 !! input
2680 {{subst:SITENAME}}
2681 !! result
2682 MediaWiki
2683 !! end
2684
2685 # This is bug 89, which I fixed. -- wtm
2686 !! test
2687 pre-save transform: subst: templates with parameters
2688 !! options
2689 pst
2690 !! input
2691 {{subst:paramtest|param="something else"}}
2692 !! result
2693 This is a test template with parameter "something else"
2694 !! end
2695
2696 !! article
2697 Template:nowikitest
2698 !! text
2699 <nowiki>'''not wiki'''</nowiki>
2700 !! endarticle
2701
2702 !! test
2703 pre-save transform: nowiki in subst (bug 1188)
2704 !! options
2705 pst
2706 !! input
2707 {{subst:nowikitest}}
2708 !! result
2709 <nowiki>'''not wiki'''</nowiki>
2710 !! end
2711
2712
2713 !! article
2714 Template:commenttest
2715 !! text
2716 This template has <!-- a comment --> in it.
2717 !! endarticle
2718
2719 !! test
2720 pre-save transform: comment in subst (bug 1936)
2721 !! options
2722 pst
2723 !! input
2724 {{subst:commenttest}}
2725 !! result
2726 This template has <!-- a comment --> in it.
2727 !! end
2728
2729 !! test
2730 pre-save transform: unclosed tag
2731 !! options
2732 pst noxml
2733 !! input
2734 <nowiki>'''not wiki'''
2735 !! result
2736 <nowiki>'''not wiki'''
2737 !! end
2738
2739 !! test
2740 pre-save transform: mixed tag case
2741 !! options
2742 pst noxml
2743 !! input
2744 <NOwiki>'''not wiki'''</noWIKI>
2745 !! result
2746 <NOwiki>'''not wiki'''</noWIKI>
2747 !! end
2748
2749 !! test
2750 pre-save transform: unclosed comment in <nowiki>
2751 !! options
2752 pst noxml
2753 !! input
2754 wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
2755 !! result
2756 wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
2757 !!end
2758
2759 !! article
2760 Template:dangerous
2761 !!text
2762 <span onmouseover="alert('crap')">Oh no</span>
2763 !!endarticle
2764
2765 !!test
2766 (confirming safety of fix for subst bug 1936)
2767 !! input
2768 {{Template:dangerous}}
2769 !! result
2770 <p><span>Oh no</span>
2771 </p>
2772 !! end
2773
2774 !! test
2775 pre-save transform: comment containing gallery (bug 5024)
2776 !! options
2777 pst
2778 !! input
2779 <!-- <gallery>data</gallery> -->
2780 !!result
2781 <!-- <gallery>data</gallery> -->
2782 !!end
2783
2784 !! test
2785 pre-save transform: comment containing extension
2786 !! options
2787 pst
2788 !! input
2789 <!-- <tag>data</tag> -->
2790 !!result
2791 <!-- <tag>data</tag> -->
2792 !!end
2793
2794 !! test
2795 pre-save transform: comment containing nowiki
2796 !! options
2797 pst
2798 !! input
2799 <!-- <nowiki>data</nowiki> -->
2800 !!result
2801 <!-- <nowiki>data</nowiki> -->
2802 !!end
2803
2804 !! test
2805 pre-save transform: comment containing math
2806 !! options
2807 pst
2808 !! input
2809 <!-- <math>data</math> -->
2810 !!result
2811 <!-- <math>data</math> -->
2812 !!end
2813
2814 !! test
2815 pre-save transform: <noinclude> in subst (bug 3298)
2816 !! options
2817 pst
2818 !! input
2819 {{subst:Includes}}
2820 !! result
2821 Foobar
2822 !! end
2823
2824 !! test
2825 pre-save transform: <onlyinclude> in subst (bug 3298)
2826 !! options
2827 pst
2828 !! input
2829 {{subst:Includes2}}
2830 !! result
2831 Foo
2832 !! end
2833
2834 !! test
2835 pre-save transform: context links ("pipe trick")
2836 !! options
2837 pst
2838 !! input
2839 [[Article (context)|]]
2840 [[Bar:Article|]]
2841 [[:Bar:Article|]]
2842 [[Bar:Article (context)|]]
2843 [[:Bar:Article (context)|]]
2844 [[|Article]]
2845 [[|Article (context)]]
2846 [[Bar:X (Y) Z|]]
2847 [[:Bar:X (Y) Z|]]
2848 !! result
2849 [[Article (context)|Article]]
2850 [[Bar:Article|Article]]
2851 [[:Bar:Article|Article]]
2852 [[Bar:Article (context)|Article]]
2853 [[:Bar:Article (context)|Article]]
2854 [[Article]]
2855 [[Article (context)]]
2856 [[Bar:X (Y) Z|X (Y) Z]]
2857 [[:Bar:X (Y) Z|X (Y) Z]]
2858 !! end
2859
2860 !! test
2861 pre-save transform: context links ("pipe trick") with interwiki prefix
2862 !! options
2863 pst
2864 !! input
2865 [[interwiki:Article|]]
2866 [[:interwiki:Article|]]
2867 [[interwiki:Bar:Article|]]
2868 [[:interwiki:Bar:Article|]]
2869 !! result
2870 [[interwiki:Article|Article]]
2871 [[:interwiki:Article|Article]]
2872 [[interwiki:Bar:Article|Bar:Article]]
2873 [[:interwiki:Bar:Article|Bar:Article]]
2874 !! end
2875
2876 !! test
2877 pre-save transform: context links ("pipe trick") with parens in title
2878 !! options
2879 pst title=[[Somearticle (context)]]
2880 !! input
2881 [[|Article]]
2882 !! result
2883 [[Article (context)|Article]]
2884 !! end
2885
2886 !! test
2887 pre-save transform: context links ("pipe trick") with comma in title
2888 !! options
2889 pst title=[[Someplace, Somewhere]]
2890 !! input
2891 [[|Otherplace]]
2892 [[Otherplace, Elsewhere|]]
2893 [[Otherplace, Elsewhere, Anywhere|]]
2894 !! result
2895 [[Otherplace, Somewhere|Otherplace]]
2896 [[Otherplace, Elsewhere|Otherplace]]
2897 [[Otherplace, Elsewhere, Anywhere|Otherplace]]
2898 !! end
2899
2900 !! test
2901 pre-save transform: context links ("pipe trick") with parens and comma
2902 !! options
2903 pst title=[[Someplace (IGNORED), Somewhere]]
2904 !! input
2905 [[|Otherplace]]
2906 [[Otherplace (place), Elsewhere|]]
2907 !! result
2908 [[Otherplace, Somewhere|Otherplace]]
2909 [[Otherplace (place), Elsewhere|Otherplace]]
2910 !! end
2911
2912 !! test
2913 pre-save transform: context links ("pipe trick") with comma and parens
2914 !! options
2915 pst title=[[Who, me? (context)]]
2916 !! input
2917 [[|Yes, you.]]
2918 [[Me, Myself, and I (1937 song)|]]
2919 !! result
2920 [[Yes, you. (context)|Yes, you.]]
2921 [[Me, Myself, and I (1937 song)|Me, Myself, and I]]
2922 !! end
2923
2924 !! test
2925 pre-save transform: context links ("pipe trick") with namespace
2926 !! options
2927 pst title=[[Ns:Somearticle]]
2928 !! input
2929 [[|Article]]
2930 !! result
2931 [[Ns:Article|Article]]
2932 !! end
2933
2934 !! test
2935 pre-save transform: context links ("pipe trick") with namespace and parens
2936 !! options
2937 pst title=[[Ns:Somearticle (context)]]
2938 !! input
2939 [[|Article]]
2940 !! result
2941 [[Ns:Article (context)|Article]]
2942 !! end
2943
2944 !! test
2945 pre-save transform: context links ("pipe trick") with namespace and comma
2946 !! options
2947 pst title=[[Ns:Somearticle, Context, Whatever]]
2948 !! input
2949 [[|Article]]
2950 !! result
2951 [[Ns:Article, Context, Whatever|Article]]
2952 !! end
2953
2954 !! test
2955 pre-save transform: context links ("pipe trick") with namespace, comma and parens
2956 !! options
2957 pst title=[[Ns:Somearticle, Context (context)]]
2958 !! input
2959 [[|Article]]
2960 !! result
2961 [[Ns:Article (context)|Article]]
2962 !! end
2963
2964 !! test
2965 pre-save transform: context links ("pipe trick") with namespace, parens and comma
2966 !! options
2967 pst title=[[Ns:Somearticle (IGNORED), Context]]
2968 !! input
2969 [[|Article]]
2970 !! result
2971 [[Ns:Article, Context|Article]]
2972 !! end
2973
2974
2975 ###
2976 ### Message transform tests
2977 ###
2978 !! test
2979 message transform: magic variables
2980 !! options
2981 msg
2982 !! input
2983 {{SITENAME}}
2984 !! result
2985 MediaWiki
2986 !! end
2987
2988 !! test
2989 message transform: should not transform wiki markup
2990 !! options
2991 msg
2992 !! input
2993 ''test''
2994 !! result
2995 ''test''
2996 !! end
2997
2998 !! test
2999 message transform: <noinclude> in transcluded template (bug 4926)
3000 !! options
3001 msg
3002 !! input
3003 {{Includes}}
3004 !! result
3005 Foobar
3006 !! end
3007
3008 !! test
3009 message transform: <onlyinclude> in transcluded template (bug 4926)
3010 !! options
3011 msg
3012 !! input
3013 {{Includes2}}
3014 !! result
3015 Foo
3016 !! end
3017
3018 !! test
3019 {{#special:}} page name, known
3020 !! options
3021 msg
3022 !! input
3023 {{#special:Recentchanges}}
3024 !! result
3025 Special:RecentChanges
3026 !! end
3027
3028 !! test
3029 {{#special:}} page name, unknown
3030 !! options
3031 msg
3032 !! input
3033 {{#special:foobarnonexistent}}
3034 !! result
3035 No such special page
3036 !! end
3037
3038 ###
3039 ### Images
3040 ###
3041 !! test
3042 Simple image
3043 !! input
3044 [[Image:foobar.jpg]]
3045 !! result
3046 <p><a href="/wiki/Image:Foobar.jpg" class="image" title="Image:foobar.jpg"><img alt="Image:foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a>
3047 </p>
3048 !! end
3049
3050 !! test
3051 Right-aligned image
3052 !! input
3053 [[Image:foobar.jpg|right]]
3054 !! result
3055 <div class="floatright"><span><a href="/wiki/Image:Foobar.jpg" class="image" title="Foobar.jpg"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a></span></div>
3056
3057 !! end
3058
3059 !! test
3060 Image with caption
3061 !! input
3062 [[Image:foobar.jpg|right|Caption text]]
3063 !! result
3064 <div class="floatright"><span><a href="/wiki/Image:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a></span></div>
3065
3066 !! end
3067
3068 !! test
3069 Image with frame and link
3070 !! input
3071 [[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]]]
3072 !! result
3073 <div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/Image:Foobar.jpg" class="image" title="This is a test image Main Page"><img alt="This is a test image Main Page" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" class="thumbimage" /></a> <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
3074
3075 !! end
3076
3077 !! test
3078 Link to image page- image page normally doesn't exists, hence edit link
3079 Add test with existing image page
3080 #<p><a href="/wiki/Image:Test" title="Image:Test">Image:test</a>
3081 !! input
3082 [[:Image:test]]
3083 !! result
3084 <p><a href="/index.php?title=Image:Test&amp;action=edit" class="new" title="Image:Test">Image:test</a>
3085 </p>
3086 !! end
3087
3088 !! test
3089 Frameless image caption with a free URL
3090 !! input
3091 [[Image:foobar.jpg|http://example.com]]
3092 !! result
3093 <p><a href="/wiki/Image:Foobar.jpg" class="image" title="http://example.com"><img alt="http://example.com" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a>
3094 </p>
3095 !! end
3096
3097 !! test
3098 Thumbnail image caption with a free URL
3099 !! input
3100 [[Image:foobar.jpg|thumb|http://example.com]]
3101 !! result
3102 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="image" title="http://example.com"><img alt="http://example.com" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" border="0" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div><a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a></div></div></div>
3103
3104 !! end
3105
3106 !! test
3107 BUG 1887: A ISBN with a thumbnail
3108 !! input
3109 [[Image:foobar.jpg|thumb|ISBN 1235467890]]
3110 !! result
3111 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="image" title="ISBN 1235467890"><img alt="ISBN 1235467890" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" border="0" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div><a href="/wiki/Special:BookSources/1235467890" class="internal">ISBN 1235467890</a></div></div></div>
3112
3113 !! end
3114
3115 !! test
3116 BUG 1887: A RFC with a thumbnail
3117 !! input
3118 [[Image:foobar.jpg|thumb|This is RFC 12354]]
3119 !! result
3120 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="image" title="This is RFC 12354"><img alt="This is RFC 12354" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" border="0" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is <a href="http://tools.ietf.org/html/rfc12354" class="external" title="http://tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>
3121
3122 !! end
3123
3124 !! test
3125 BUG 1887: A mailto link with a thumbnail
3126 !! input
3127 [[Image:foobar.jpg|thumb|Please mailto:nobody@example.com]]
3128 !! result
3129 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="image" title="Please mailto:nobody@example.com"><img alt="Please mailto:nobody@example.com" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" border="0" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Please <a href="mailto:nobody@example.com" class="external free" title="mailto:nobody@example.com" rel="nofollow">mailto:nobody@example.com</a></div></div></div>
3130
3131 !! end
3132
3133 !! test
3134 BUG 1887: A <math> with a thumbnail- we don't render math in the parsertests by default,
3135 so math is not stripped and turns up as escaped &lt;math&gt; tags.
3136 !! input
3137 [[Image:foobar.jpg|thumb|<math>2+2</math>]]
3138 !! result
3139 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="image" title="&lt;math&gt;2+2&lt;/math&gt;"><img alt="&lt;math&gt;2+2&lt;/math&gt;" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" border="0" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>&lt;math&gt;2+2&lt;/math&gt;</div></div></div>
3140
3141 !! end
3142
3143 !! test
3144 BUG 1887, part 2: A <math> with a thumbnail- math enabled
3145 !! options
3146 math
3147 !! input
3148 [[Image:foobar.jpg|thumb|<math>2+2</math>]]
3149 !! result
3150 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="image" title="2 + 2"><img alt="2 + 2" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" border="0" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div><span class="texhtml">2 + 2</span></div></div></div>
3151
3152 !! end
3153
3154 # Pending resolution to bug 368
3155 !! test
3156 BUG 648: Frameless image caption with a link
3157 !! input
3158 [[Image:foobar.jpg|text with a [[link]] in it]]
3159 !! result
3160 <p><a href="/wiki/Image:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a>
3161 </p>
3162 !! end
3163
3164 !! test
3165 BUG 648: Frameless image caption with a link (suffix)
3166 !! input
3167 [[Image:foobar.jpg|text with a [[link]]foo in it]]
3168 !! result
3169 <p><a href="/wiki/Image:Foobar.jpg" class="image" title="text with a linkfoo in it"><img alt="text with a linkfoo in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a>
3170 </p>
3171 !! end
3172
3173 !! test
3174 BUG 648: Frameless image caption with an interwiki link
3175 !! input
3176 [[Image:foobar.jpg|text with a [[MeatBall:Link]] in it]]
3177 !! result
3178 <p><a href="/wiki/Image:Foobar.jpg" class="image" title="text with a MeatBall:Link in it"><img alt="text with a MeatBall:Link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a>
3179 </p>
3180 !! end
3181
3182 !! test
3183 BUG 648: Frameless image caption with a piped interwiki link
3184 !! input
3185 [[Image:foobar.jpg|text with a [[MeatBall:Link|link]] in it]]
3186 !! result
3187 <p><a href="/wiki/Image:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a>
3188 </p>
3189 !! end
3190
3191 !! test
3192 Escape HTML special chars in image alt text
3193 !! input
3194 [[Image:foobar.jpg|& < > "]]
3195 !! result
3196 <p><a href="/wiki/Image:Foobar.jpg" class="image" title="&amp; &lt; &gt; &quot;"><img alt="&amp; &lt; &gt; &quot;" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a>
3197 </p>
3198 !! end
3199
3200 !! test
3201 BUG 499: Alt text should have &#1234;, not &amp;1234;
3202 !! input
3203 [[Image:foobar.jpg|&#9792;]]
3204 !! result
3205 <p><a href="/wiki/Image:Foobar.jpg" class="image" title="♀"><img alt="♀" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a>
3206 </p>
3207 !! end
3208
3209 !! test
3210 Broken image caption with link
3211 !! input
3212 [[Image:Foobar.jpg|thumb|This is a broken caption. But [[Main Page|this]] is just an ordinary link.
3213 !! result
3214 <p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a href="/wiki/Main_Page" title="Main Page">this</a> is just an ordinary link.
3215 </p>
3216 !! end
3217
3218 !! test
3219 Image caption containing another image
3220 !! input
3221 [[Image:Foobar.jpg|thumb|This is a caption with another [[Image:icon.png|image]] inside it!]]
3222 !! result
3223 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="image" title="This is a caption with another Image:Icon.png inside it!"><img alt="This is a caption with another Image:Icon.png inside it!" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" border="0" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is a caption with another <a href="/index.php?title=Special:Upload&amp;wpDestFile=Icon.png" class="new" title="Image:Icon.png">Image:Icon.png</a> inside it!</div></div></div>
3224
3225 !! end
3226
3227 !! test
3228 Image caption containing a newline
3229 !! input
3230 [[Image:Foobar.jpg|This
3231 *is some text]]
3232 !! result
3233 <p><a href="/wiki/Image:Foobar.jpg" class="image" title="This *is some text"><img alt="This *is some text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a>
3234 </p>
3235 !!end
3236
3237
3238 !! test
3239 Bug 3090: External links other than http: in image captions
3240 !! input
3241 [[Image:Foobar.jpg|thumb|200px|This caption has [irc://example.net irc] and [https://example.com Secure] ext links in it.]]
3242 !! result
3243 <div class="thumb tright"><div class="thumbinner" style="width:202px;"><a href="/wiki/Image:Foobar.jpg" class="image" title="This caption has irc and Secure ext links in it."><img alt="This caption has irc and Secure ext links in it." src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" border="0" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This caption has <a href="irc://example.net" class="external text" title="irc://example.net" rel="nofollow">irc</a> and <a href="https://example.com" class="external text" title="https://example.com" rel="nofollow">Secure</a> ext links in it.</div></div></div>
3244
3245 !! end
3246
3247
3248 ###
3249 ### Subpages
3250 ###
3251 !! article
3252 Subpage test/subpage
3253 !! text
3254 foo
3255 !! endarticle
3256
3257 !! test
3258 Subpage link
3259 !! options
3260 subpage title=[[Subpage test]]
3261 !! input
3262 [[/subpage]]
3263 !! result
3264 <p><a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">/subpage</a>
3265 </p>
3266 !! end
3267
3268 !! test
3269 Subpage noslash link
3270 !! options
3271 subpage title=[[Subpage test]]
3272 !!input
3273 [[/subpage/]]
3274 !! result
3275 <p><a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">subpage</a>
3276 </p>
3277 !! end
3278
3279 !! test
3280 Disabled subpages
3281 !! input
3282 [[/subpage]]
3283 !! result
3284 <p><a href="/index.php?title=/subpage&amp;action=edit&amp;redlink=1" class="new" title="/subpage (not yet written)">/subpage</a>
3285 </p>
3286 !! end
3287
3288 !! test
3289 BUG 561: {{/Subpage}}
3290 !! options
3291 subpage title=[[Page]]
3292 !! input
3293 {{/Subpage}}
3294 !! result
3295 <p><a href="/index.php?title=Page/Subpage&amp;action=edit&amp;redlink=1" class="new" title="Page/Subpage (not yet written)">Page/Subpage</a>
3296 </p>
3297 !! end
3298
3299 ###
3300 ### Categories
3301 ###
3302 !! article
3303 Category:MediaWiki User's Guide
3304 !! text
3305 blah
3306 !! endarticle
3307
3308 !! test
3309 Link to category
3310 !! input
3311 [[:Category:MediaWiki User's Guide]]
3312 !! result
3313 <p><a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">Category:MediaWiki User's Guide</a>
3314 </p>
3315 !! end
3316
3317 !! test
3318 Simple category
3319 !! options
3320 cat
3321 !! input
3322 [[Category:MediaWiki User's Guide]]
3323 !! result
3324 <a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">MediaWiki User's Guide</a>
3325 !! end
3326
3327 ###
3328 ### Inter-language links
3329 ###
3330 !! test
3331 Inter-language links
3332 !! options
3333 ill
3334 !! input
3335 [[es:Alimento]]
3336 [[fr:Nourriture]]
3337 [[zh:&#39135;&#21697;]]
3338 !! result
3339 es:Alimento fr:Nourriture zh:食品
3340 !! end
3341
3342 ###
3343 ### Sections
3344 ###
3345 !! test
3346 Basic section headings
3347 !! input
3348 == Headline 1 ==
3349 Some text
3350
3351 ==Headline 2==
3352 More
3353 ===Smaller headline===
3354 Blah blah
3355 !! result
3356 <a name="Headline_1"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a>]</span> <span class="mw-headline"> Headline 1 </span></h2>
3357 <p>Some text
3358 </p>
3359 <a name="Headline_2"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Headline 2">edit</a>]</span> <span class="mw-headline">Headline 2</span></h2>
3360 <p>More
3361 </p>
3362 <a name="Smaller_headline"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Smaller headline">edit</a>]</span> <span class="mw-headline">Smaller headline</span></h3>
3363 <p>Blah blah
3364 </p>
3365 !! end
3366
3367 !! test
3368 Section headings with TOC
3369 !! input
3370 == Headline 1 ==
3371 === Subheadline 1 ===
3372 ===== Skipping a level =====
3373 ====== Skipping a level ======
3374
3375 == Headline 2 ==
3376 Some text
3377 ===Another headline===
3378 !! result
3379 <table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
3380 <ul>
3381 <li class="toclevel-1"><a href="#Headline_1"><span class="tocnumber">1</span> <span class="toctext">Headline 1</span></a>
3382 <ul>
3383 <li class="toclevel-2"><a href="#Subheadline_1"><span class="tocnumber">1.1</span> <span class="toctext">Subheadline 1</span></a>
3384 <ul>
3385 <li class="toclevel-3"><a href="#Skipping_a_level"><span class="tocnumber">1.1.1</span> <span class="toctext">Skipping a level</span></a>
3386 <ul>
3387 <li class="toclevel-4"><a href="#Skipping_a_level_2"><span class="tocnumber">1.1.1.1</span> <span class="toctext">Skipping a level</span></a></li>
3388 </ul>
3389 </li>
3390 </ul>
3391 </li>
3392 </ul>
3393 </li>
3394 <li class="toclevel-1"><a href="#Headline_2"><span class="tocnumber">2</span> <span class="toctext">Headline 2</span></a>
3395 <ul>
3396 <li class="toclevel-2"><a href="#Another_headline"><span class="tocnumber">2.1</span> <span class="toctext">Another headline</span></a></li>
3397 </ul>
3398 </li>
3399 </ul>
3400 </td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
3401 <a name="Headline_1"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a>]</span> <span class="mw-headline"> Headline 1 </span></h2>
3402 <a name="Subheadline_1"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Subheadline 1">edit</a>]</span> <span class="mw-headline"> Subheadline 1 </span></h3>
3403 <a name="Skipping_a_level"></a><h5><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Skipping a level">edit</a>]</span> <span class="mw-headline"> Skipping a level </span></h5>
3404 <a name="Skipping_a_level_2"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Skipping a level">edit</a>]</span> <span class="mw-headline"> Skipping a level </span></h6>
3405 <a name="Headline_2"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Headline 2">edit</a>]</span> <span class="mw-headline"> Headline 2 </span></h2>
3406 <p>Some text
3407 </p>
3408 <a name="Another_headline"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Another headline">edit</a>]</span> <span class="mw-headline">Another headline</span></h3>
3409
3410 !! end
3411
3412 # perl -e 'print "="x$_," Level $_ heading","="x$_,"\n" for 1..10'
3413 !! test
3414 Handling of sections up to level 6 and beyond
3415 !! input
3416 = Level 1 Heading=
3417 == Level 2 Heading==
3418 === Level 3 Heading===
3419 ==== Level 4 Heading====
3420 ===== Level 5 Heading=====
3421 ====== Level 6 Heading======
3422 ======= Level 7 Heading=======
3423 ======== Level 8 Heading========
3424 ========= Level 9 Heading=========
3425 ========== Level 10 Heading==========
3426 !! result
3427 <table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
3428 <ul>
3429 <li class="toclevel-1"><a href="#Level_1_Heading"><span class="tocnumber">1</span> <span class="toctext">Level 1 Heading</span></a>
3430 <ul>
3431 <li class="toclevel-2"><a href="#Level_2_Heading"><span class="tocnumber">1.1</span> <span class="toctext">Level 2 Heading</span></a>
3432 <ul>
3433 <li class="toclevel-3"><a href="#Level_3_Heading"><span class="tocnumber">1.1.1</span> <span class="toctext">Level 3 Heading</span></a>
3434 <ul>
3435 <li class="toclevel-4"><a href="#Level_4_Heading"><span class="tocnumber">1.1.1.1</span> <span class="toctext">Level 4 Heading</span></a>
3436 <ul>
3437 <li class="toclevel-5"><a href="#Level_5_Heading"><span class="tocnumber">1.1.1.1.1</span> <span class="toctext">Level 5 Heading</span></a>
3438 <ul>
3439 <li class="toclevel-6"><a href="#Level_6_Heading"><span class="tocnumber">1.1.1.1.1.1</span> <span class="toctext">Level 6 Heading</span></a></li>
3440 <li class="toclevel-6"><a href="#.3D_Level_7_Heading.3D"><span class="tocnumber">1.1.1.1.1.2</span> <span class="toctext">= Level 7 Heading=</span></a></li>
3441 <li class="toclevel-6"><a href="#.3D.3D_Level_8_Heading.3D.3D"><span class="tocnumber">1.1.1.1.1.3</span> <span class="toctext">== Level 8 Heading==</span></a></li>
3442 <li class="toclevel-6"><a href="#.3D.3D.3D_Level_9_Heading.3D.3D.3D"><span class="tocnumber">1.1.1.1.1.4</span> <span class="toctext">=== Level 9 Heading===</span></a></li>
3443 <li class="toclevel-6"><a href="#.3D.3D.3D.3D_Level_10_Heading.3D.3D.3D.3D"><span class="tocnumber">1.1.1.1.1.5</span> <span class="toctext">==== Level 10 Heading====</span></a></li>
3444 </ul>
3445 </li>
3446 </ul>
3447 </li>
3448 </ul>
3449 </li>
3450 </ul>
3451 </li>
3452 </ul>
3453 </li>
3454 </ul>
3455 </td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
3456 <a name="Level_1_Heading"></a><h1><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Level 1 Heading">edit</a>]</span> <span class="mw-headline"> Level 1 Heading</span></h1>
3457 <a name="Level_2_Heading"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Level 2 Heading">edit</a>]</span> <span class="mw-headline"> Level 2 Heading</span></h2>
3458 <a name="Level_3_Heading"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Level 3 Heading">edit</a>]</span> <span class="mw-headline"> Level 3 Heading</span></h3>
3459 <a name="Level_4_Heading"></a><h4><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Level 4 Heading">edit</a>]</span> <span class="mw-headline"> Level 4 Heading</span></h4>
3460 <a name="Level_5_Heading"></a><h5><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Level 5 Heading">edit</a>]</span> <span class="mw-headline"> Level 5 Heading</span></h5>
3461 <a name="Level_6_Heading"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Level 6 Heading">edit</a>]</span> <span class="mw-headline"> Level 6 Heading</span></h6>
3462 <a name=".3D_Level_7_Heading.3D"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=7" title="Edit section: = Level 7 Heading=">edit</a>]</span> <span class="mw-headline">= Level 7 Heading=</span></h6>
3463 <a name=".3D.3D_Level_8_Heading.3D.3D"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=8" title="Edit section: == Level 8 Heading==">edit</a>]</span> <span class="mw-headline">== Level 8 Heading==</span></h6>
3464 <a name=".3D.3D.3D_Level_9_Heading.3D.3D.3D"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=9" title="Edit section: === Level 9 Heading===">edit</a>]</span> <span class="mw-headline">=== Level 9 Heading===</span></h6>
3465 <a name=".3D.3D.3D.3D_Level_10_Heading.3D.3D.3D.3D"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=10" title="Edit section: ==== Level 10 Heading====">edit</a>]</span> <span class="mw-headline">==== Level 10 Heading====</span></h6>
3466
3467 !! end
3468
3469 !! test
3470 TOC regression (bug 9764)
3471 !! input
3472 == title 1 ==
3473 === title 1.1 ===
3474 ==== title 1.1.1 ====
3475 === title 1.2 ===
3476 == title 2 ==
3477 === title 2.1 ===
3478 !! result
3479 <table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
3480 <ul>
3481 <li class="toclevel-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
3482 <ul>
3483 <li class="toclevel-2"><a href="#title_1.1"><span class="tocnumber">1.1</span> <span class="toctext">title 1.1</span></a>
3484 <ul>
3485 <li class="toclevel-3"><a href="#title_1.1.1"><span class="tocnumber">1.1.1</span> <span class="toctext">title 1.1.1</span></a></li>
3486 </ul>
3487 </li>
3488 <li class="toclevel-2"><a href="#title_1.2"><span class="tocnumber">1.2</span> <span class="toctext">title 1.2</span></a></li>
3489 </ul>
3490 </li>
3491 <li class="toclevel-1"><a href="#title_2"><span class="tocnumber">2</span> <span class="toctext">title 2</span></a>
3492 <ul>
3493 <li class="toclevel-2"><a href="#title_2.1"><span class="tocnumber">2.1</span> <span class="toctext">title 2.1</span></a></li>
3494 </ul>
3495 </li>
3496 </ul>
3497 </td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
3498 <a name="title_1"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a>]</span> <span class="mw-headline"> title 1 </span></h2>
3499 <a name="title_1.1"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a>]</span> <span class="mw-headline"> title 1.1 </span></h3>
3500 <a name="title_1.1.1"></a><h4><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 1.1.1">edit</a>]</span> <span class="mw-headline"> title 1.1.1 </span></h4>
3501 <a name="title_1.2"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: title 1.2">edit</a>]</span> <span class="mw-headline"> title 1.2 </span></h3>
3502 <a name="title_2"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: title 2">edit</a>]</span> <span class="mw-headline"> title 2 </span></h2>
3503 <a name="title_2.1"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: title 2.1">edit</a>]</span> <span class="mw-headline"> title 2.1 </span></h3>
3504
3505 !! end
3506
3507 !! test
3508 TOC with wgMaxTocLevel=3 (bug 6204)
3509 !! options
3510 wgMaxTocLevel=3
3511 !! input
3512 == title 1 ==
3513 === title 1.1 ===
3514 ==== title 1.1.1 ====
3515 === title 1.2 ===
3516 == title 2 ==
3517 === title 2.1 ===
3518 !! result
3519 <table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
3520 <ul>
3521 <li class="toclevel-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
3522 <ul>
3523 <li class="toclevel-2"><a href="#title_1.1"><span class="tocnumber">1.1</span> <span class="toctext">title 1.1</span></a></li>
3524 <li class="toclevel-2"><a href="#title_1.2"><span class="tocnumber">1.2</span> <span class="toctext">title 1.2</span></a></li>
3525 </ul>
3526 </li>
3527 <li class="toclevel-1"><a href="#title_2"><span class="tocnumber">2</span> <span class="toctext">title 2</span></a>
3528 <ul>
3529 <li class="toclevel-2"><a href="#title_2.1"><span class="tocnumber">2.1</span> <span class="toctext">title 2.1</span></a></li>
3530 </ul>
3531 </li>
3532 </ul>
3533 </td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
3534 <a name="title_1"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a>]</span> <span class="mw-headline"> title 1 </span></h2>
3535 <a name="title_1.1"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a>]</span> <span class="mw-headline"> title 1.1 </span></h3>
3536 <a name="title_1.1.1"></a><h4><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 1.1.1">edit</a>]</span> <span class="mw-headline"> title 1.1.1 </span></h4>
3537 <a name="title_1.2"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: title 1.2">edit</a>]</span> <span class="mw-headline"> title 1.2 </span></h3>
3538 <a name="title_2"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: title 2">edit</a>]</span> <span class="mw-headline"> title 2 </span></h2>
3539 <a name="title_2.1"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: title 2.1">edit</a>]</span> <span class="mw-headline"> title 2.1 </span></h3>
3540
3541 !! end
3542
3543 !! test
3544 Resolving duplicate section names
3545 !! input
3546 == Foo bar ==
3547 == Foo bar ==
3548 !! result
3549 <a name="Foo_bar"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a>]</span> <span class="mw-headline"> Foo bar </span></h2>
3550 <a name="Foo_bar_2"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo bar">edit</a>]</span> <span class="mw-headline"> Foo bar </span></h2>
3551
3552 !! end
3553
3554 !! test
3555 Resolving duplicate section names with differing case (bug 10721)
3556 !! input
3557 == Foo bar ==
3558 == Foo Bar ==
3559 !! result
3560 <a name="Foo_bar"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a>]</span> <span class="mw-headline"> Foo bar </span></h2>
3561 <a name="Foo_Bar_2"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a>]</span> <span class="mw-headline"> Foo Bar </span></h2>
3562
3563 !! end
3564
3565 !! article
3566 Template:sections
3567 !! text
3568 ===Section 1===
3569 ==Section 2==
3570 !! endarticle
3571
3572 !! test
3573 Template with sections, __NOTOC__
3574 !! input
3575 __NOTOC__
3576 ==Section 0==
3577 {{sections}}
3578 ==Section 4==
3579 !! result
3580 <a name="Section_0"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 0">edit</a>]</span> <span class="mw-headline">Section 0</span></h2>
3581 <a name="Section_1"></a><h3><span class="editsection">[<a href="/index.php?title=Template:Sections&amp;action=edit&amp;section=T-1" title="Template:Sections">edit</a>]</span> <span class="mw-headline">Section 1</span></h3>
3582 <a name="Section_2"></a><h2><span class="editsection">[<a href="/index.php?title=Template:Sections&amp;action=edit&amp;section=T-2" title="Template:Sections">edit</a>]</span> <span class="mw-headline">Section 2</span></h2>
3583 <a name="Section_4"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Section 4">edit</a>]</span> <span class="mw-headline">Section 4</span></h2>
3584
3585 !! end
3586
3587 !! test
3588 __NOEDITSECTION__ keyword
3589 !! input
3590 __NOEDITSECTION__
3591 ==Section 1==
3592 ==Section 2==
3593 !! result
3594 <a name="Section_1"></a><h2> <span class="mw-headline">Section 1</span></h2>
3595 <a name="Section_2"></a><h2> <span class="mw-headline">Section 2</span></h2>
3596
3597 !! end
3598
3599 !! test
3600 Link inside a section heading
3601 !! input
3602 ==Section with a [[Main Page|link]] in it==
3603 !! result
3604 <a name="Section_with_a_link_in_it"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section with a link in it">edit</a>]</span> <span class="mw-headline">Section with a <a href="/wiki/Main_Page" title="Main Page">link</a> in it</span></h2>
3605
3606 !! end
3607
3608
3609 !! test
3610 BUG 1219 URL next to image (good)
3611 !! input
3612 http://example.com [[Image:foobar.jpg]]
3613 !! result
3614 <p><a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a> <a href="/wiki/Image:Foobar.jpg" class="image" title="Image:foobar.jpg"><img alt="Image:foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a>
3615 </p>
3616 !!end
3617
3618 !! test
3619 BUG 1219 URL next to image (broken)
3620 !! input
3621 http://example.com[[Image:foobar.jpg]]
3622 !! result
3623 <p><a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a><a href="/wiki/Image:Foobar.jpg" class="image" title="Image:foobar.jpg"><img alt="Image:foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a>
3624 </p>
3625 !!end
3626
3627 !! test
3628 Bug 1186 news: in the middle of text
3629 !! input
3630 http://en.wikinews.org/wiki/Wikinews:Workplace
3631 !! result
3632 <p><a href="http://en.wikinews.org/wiki/Wikinews:Workplace" class="external free" title="http://en.wikinews.org/wiki/Wikinews:Workplace" rel="nofollow">http://en.wikinews.org/wiki/Wikinews:Workplace</a>
3633 </p>
3634 !!end
3635
3636
3637 !! test
3638 Namespaced link must have a title
3639 !! input
3640 [[Project:]]
3641 !! result
3642 <p>[[Project:]]
3643 </p>
3644 !!end
3645
3646 !! test
3647 Namespaced link must have a title (bad fragment version)
3648 !! input
3649 [[Project:#fragment]]
3650 !! result
3651 <p>[[Project:#fragment]]
3652 </p>
3653 !!end
3654
3655
3656 !! test
3657 div with no attributes
3658 !! input
3659 <div>HTML rocks</div>
3660 !! result
3661 <div>HTML rocks</div>
3662
3663 !! end
3664
3665 !! test
3666 div with double-quoted attribute
3667 !! input
3668 <div id="rock">HTML rocks</div>
3669 !! result
3670 <div id="rock">HTML rocks</div>
3671
3672 !! end
3673
3674 !! test
3675 div with single-quoted attribute
3676 !! input
3677 <div id='rock'>HTML rocks</div>
3678 !! result
3679 <div id="rock">HTML rocks</div>
3680
3681 !! end
3682
3683 !! test
3684 div with unquoted attribute
3685 !! input
3686 <div id=rock>HTML rocks</div>
3687 !! result
3688 <div id="rock">HTML rocks</div>
3689
3690 !! end
3691
3692 !! test
3693 div with illegal double attributes
3694 !! input
3695 <div align="center" align="right">HTML rocks</div>
3696 !! result
3697 <div align="right">HTML rocks</div>
3698
3699 !!end
3700
3701 !! test
3702 HTML multiple attributes correction
3703 !! input
3704 <p class="error" class="awesome">Awesome!</p>
3705 !! result
3706 <p class="awesome">Awesome!</p>
3707
3708 !!end
3709
3710 !! test
3711 Table multiple attributes correction
3712 !! input
3713 {|
3714 !+ class="error" class="awesome"| status
3715 |}
3716 !! result
3717 <table>
3718 <tr>
3719 <th class="awesome"> status
3720 </th></tr></table>
3721
3722 !!end
3723
3724 !! test
3725 DIV IN UPPERCASE
3726 !! input
3727 <DIV ALIGN="center">HTML ROCKS</DIV>
3728 !! result
3729 <div align="center">HTML ROCKS</div>
3730
3731 !!end
3732
3733
3734 !! test
3735 text with amp in the middle of nowhere
3736 !! input
3737 Remember AT&T?
3738 !!result
3739 <p>Remember AT&amp;T?
3740 </p>
3741 !! end
3742
3743 !! test
3744 text with character entity: eacute
3745 !! input
3746 I always thought &eacute; was a cute letter.
3747 !! result
3748 <p>I always thought &eacute; was a cute letter.
3749 </p>
3750 !! end
3751
3752 !! test
3753 text with undefined character entity: xacute
3754 !! input
3755 I always thought &xacute; was a cute letter.
3756 !! result
3757 <p>I always thought &amp;xacute; was a cute letter.
3758 </p>
3759 !! end
3760
3761
3762 ###
3763 ### Media links
3764 ###
3765
3766 !! test
3767 Media link
3768 !! input
3769 [[Media:Foobar.jpg]]
3770 !! result
3771 <p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Media:Foobar.jpg</a>
3772 </p>
3773 !! end
3774
3775 !! test
3776 Media link with text
3777 !! input
3778 [[Media:Foobar.jpg|A neat file to look at]]
3779 !! result
3780 <p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">A neat file to look at</a>
3781 </p>
3782 !! end
3783
3784 # FIXME: this is still bad HTML tag nesting
3785 !! test
3786 Media link with nasty text
3787 fixme: doBlockLevels won't wrap this in a paragraph because it contains a div
3788 !! input
3789 [[Media:Foobar.jpg|Safe Link<div style=display:none>" onmouseover="alert(document.cookie)" onfoo="</div>]]
3790 !! result
3791 <a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Safe Link&lt;div style="display:none"&gt;" onmouseover="alert(document.cookie)" onfoo="&lt;/div&gt;</a>
3792
3793 !! end
3794
3795 !! test
3796 Media link to nonexistent file (bug 1702)
3797 !! input
3798 [[Media:No such.jpg]]
3799 !! result
3800 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such.jpg" class="new" title="No such.jpg">Media:No such.jpg</a>
3801 </p>
3802 !! end
3803
3804 !! test
3805 Image link to nonexistent file (bug 1850 - good)
3806 !! input
3807 [[Image:No such.jpg]]
3808 !! result
3809 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such.jpg" class="new" title="Image:No such.jpg">Image:No such.jpg</a>
3810 </p>
3811 !! end
3812
3813 !! test
3814 :Image link to nonexistent file (bug 1850 - bad)
3815 !! input
3816 [[:Image:No such.jpg]]
3817 !! result
3818 <p><a href="/index.php?title=Image:No_such.jpg&amp;action=edit&amp;redlink=1" class="new" title="No such.jpg (not yet written)">Image:No such.jpg</a>
3819 </p>
3820 !! end
3821
3822
3823
3824 !! test
3825 Character reference normalization in link text (bug 1938)
3826 !! input
3827 [[Main Page|this&that]]
3828 !! result
3829 <p><a href="/wiki/Main_Page" title="Main Page">this&amp;that</a>
3830 </p>
3831 !!end
3832
3833 !! test
3834 Empty attribute crash test (bug 2067)
3835 !! input
3836 <font color="">foo</font>
3837 !! result
3838 <p><font color="">foo</font>
3839 </p>
3840 !! end
3841
3842 !! test
3843 Empty attribute crash test single-quotes (bug 2067)
3844 !! input
3845 <font color=''>foo</font>
3846 !! result
3847 <p><font color="">foo</font>
3848 </p>
3849 !! end
3850
3851 !! test
3852 Attribute test: equals, then nothing
3853 !! input
3854 <font color=>foo</font>
3855 !! result
3856 <p><font>foo</font>
3857 </p>
3858 !! end
3859
3860 !! test
3861 Attribute test: unquoted value
3862 !! input
3863 <font color=x>foo</font>
3864 !! result
3865 <p><font color="x">foo</font>
3866 </p>
3867 !! end
3868
3869 !! test
3870 Attribute test: unquoted but illegal value (hash)
3871 !! input
3872 <font color=#x>foo</font>
3873 !! result
3874 <p><font color="#x">foo</font>
3875 </p>
3876 !! end
3877
3878 !! test
3879 Attribute test: no value
3880 !! input
3881 <font color>foo</font>
3882 !! result
3883 <p><font color="color">foo</font>
3884 </p>
3885 !! end
3886
3887 !! test
3888 Bug 2095: link with three closing brackets
3889 !! input
3890 [[Main Page]]]
3891 !! result
3892 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>]
3893 </p>
3894 !! end
3895
3896 !! test
3897 Bug 2095: link with pipe and three closing brackets
3898 !! input
3899 [[Main Page|link]]]
3900 !! result
3901 <p><a href="/wiki/Main_Page" title="Main Page">link</a>]
3902 </p>
3903 !! end
3904
3905 !! test
3906 Bug 2095: link with pipe and three closing brackets, version 2
3907 !! input
3908 [[Main Page|[http://example.com/]]]
3909 !! result
3910 <p><a href="/wiki/Main_Page" title="Main Page">[http://example.com/]</a>
3911 </p>
3912 !! end
3913
3914
3915 ###
3916 ### Safety
3917 ###
3918
3919 !! article
3920 Template:Dangerous attribute
3921 !! text
3922 " onmouseover="alert(document.cookie)
3923 !! endarticle
3924
3925 !! article
3926 Template:Dangerous style attribute
3927 !! text
3928 border-size: expression(alert(document.cookie))
3929 !! endarticle
3930
3931 !! article
3932 Template:Div style
3933 !! text
3934 <div style="float: right; {{{1}}}">Magic div</div>
3935 !! endarticle
3936
3937 !! test
3938 Bug 2304: HTML attribute safety (safe template; regression bug 2309)
3939 !! input
3940 <div title="{{test}}"></div>
3941 !! result
3942 <div title="This is a test template"></div>
3943
3944 !! end
3945
3946 !! test
3947 Bug 2304: HTML attribute safety (dangerous template; 2309)
3948 !! input
3949 <div title="{{dangerous attribute}}"></div>
3950 !! result
3951 <div title=""></div>
3952
3953 !! end
3954
3955 !! test
3956 Bug 2304: HTML attribute safety (dangerous style template; 2309)
3957 !! input
3958 <div style="{{dangerous style attribute}}"></div>
3959 !! result
3960 <div></div>
3961
3962 !! end
3963
3964 !! test
3965 Bug 2304: HTML attribute safety (safe parameter; 2309)
3966 !! input
3967 {{div style|width: 200px}}
3968 !! result
3969 <div style="float: right; width: 200px">Magic div</div>
3970
3971 !! end
3972
3973 !! test
3974 Bug 2304: HTML attribute safety (unsafe parameter; 2309)
3975 !! input
3976 {{div style|width: expression(alert(document.cookie))}}
3977 !! result
3978 <div>Magic div</div>
3979
3980 !! end
3981
3982 !! test
3983 Bug 2304: HTML attribute safety (unsafe breakout parameter; 2309)
3984 !! input
3985 {{div style|"><script>alert(document.cookie)</script>}}
3986 !! result
3987 <div style="float: right;">&lt;script&gt;alert(document.cookie)&lt;/script&gt;"&gt;Magic div</div>
3988
3989 !! end
3990
3991 !! test
3992 Bug 2304: HTML attribute safety (unsafe breakout parameter 2; 2309)
3993 !! input
3994 {{div style|" ><script>alert(document.cookie)</script>}}
3995 !! result
3996 <div style="float: right;">&lt;script&gt;alert(document.cookie)&lt;/script&gt;"&gt;Magic div</div>
3997
3998 !! end
3999
4000 !! test
4001 Bug 2304: HTML attribute safety (link)
4002 !! input
4003 <div title="[[Main Page]]"></div>
4004 !! result
4005 <div title="&#91;&#91;Main Page]]"></div>
4006
4007 !! end
4008
4009 !! test
4010 Bug 2304: HTML attribute safety (italics)
4011 !! input
4012 <div title="''foobar''"></div>
4013 !! result
4014 <div title="&#39;&#39;foobar&#39;&#39;"></div>
4015
4016 !! end
4017
4018 !! test
4019 Bug 2304: HTML attribute safety (bold)
4020 !! input
4021 <div title="'''foobar'''"></div>
4022 !! result
4023 <div title="&#39;&#39;&#39;foobar&#39;&#39;&#39;"></div>
4024
4025 !! end
4026
4027
4028 !! test
4029 Bug 2304: HTML attribute safety (ISBN)
4030 !! input
4031 <div title="ISBN 1234567890"></div>
4032 !! result
4033 <div title="&#73;SBN 1234567890"></div>
4034
4035 !! end
4036
4037 !! test
4038 Bug 2304: HTML attribute safety (RFC)
4039 !! input
4040 <div title="RFC 1234"></div>
4041 !! result
4042 <div title="&#82;FC 1234"></div>
4043
4044 !! end
4045
4046 !! test
4047 Bug 2304: HTML attribute safety (PMID)
4048 !! input
4049 <div title="PMID 1234567890"></div>
4050 !! result
4051 <div title="&#80;MID 1234567890"></div>
4052
4053 !! end
4054
4055 !! test
4056 Bug 2304: HTML attribute safety (web link)
4057 !! input
4058 <div title="http://example.com/"></div>
4059 !! result
4060 <div title="http&#58;//example.com/"></div>
4061
4062 !! end
4063
4064 !! test
4065 Bug 2304: HTML attribute safety (named web link)
4066 !! input
4067 <div title="[http://example.com/ link]"></div>
4068 !! result
4069 <div title="&#91;http&#58;//example.com/ link]"></div>
4070
4071 !! end
4072
4073 !! test
4074 Bug 3244: HTML attribute safety (extension; safe)
4075 !! input
4076 <div style="<nowiki>background:blue</nowiki>"></div>
4077 !! result
4078 <div style="background:blue"></div>
4079
4080 !! end
4081
4082 !! test
4083 Bug 3244: HTML attribute safety (extension; unsafe)
4084 !! input
4085 <div style="<nowiki>border-left:expression(alert(document.cookie))</nowiki>"></div>
4086 !! result
4087 <div></div>
4088
4089 !! end
4090
4091 !! test
4092 Math section safety when disabled
4093 !! input
4094 <math><script>alert(document.cookies);</script></math>
4095 !! result
4096 <p>&lt;math&gt;&lt;script&gt;alert(document.cookies);&lt;/script&gt;&lt;/math&gt;
4097 </p>
4098 !! end
4099
4100 # More MSIE fun discovered by Tom Gilder
4101
4102 !! test
4103 MSIE CSS safety test: spurious slash
4104 !! input
4105 <div style="background-image:u\rl(javascript:alert('boo'))">evil</div>
4106 !! result
4107 <div>evil</div>
4108
4109 !! end
4110
4111 !! test
4112 MSIE CSS safety test: hex code
4113 !! input
4114 <div style="background-image:u\72l(javascript:alert('boo'))">evil</div>
4115 !! result
4116 <div>evil</div>
4117
4118 !! end
4119
4120 !! test
4121 MSIE CSS safety test: comment in url
4122 !! input
4123 <div style="background-image:u/**/rl(javascript:alert('boo'))">evil</div>
4124 !! result
4125 <div style="background-image:u rl(javascript:alert(&#39;boo&#39;))">evil</div>
4126
4127 !! end
4128
4129 !! test
4130 MSIE CSS safety test: comment in expression
4131 !! input
4132 <div style="background-image:expres/**/sion(alert('boo4'))">evil4</div>
4133 !! result
4134 <div style="background-image:expres sion(alert(&#39;boo4&#39;))">evil4</div>
4135
4136 !! end
4137
4138
4139 !! test
4140 Table attribute legitimate extension
4141 !! input
4142 {|
4143 !+ style="<nowiki>color:blue</nowiki>"| status
4144 |}
4145 !! result
4146 <table>
4147 <tr>
4148 <th style="color:blue"> status
4149 </th></tr></table>
4150
4151 !!end
4152
4153 !! test
4154 Table attribute safety
4155 !! input
4156 {|
4157 !+ style="<nowiki>border-width:expression(0+alert(document.cookie))</nowiki>"| status
4158 |}
4159 !! result
4160 <table>
4161 <tr>
4162 <th> status
4163 </th></tr></table>
4164
4165 !! end
4166
4167
4168 !! article
4169 Template:Identity
4170 !! text
4171 {{{1}}}
4172 !! endarticle
4173
4174 !! test
4175 Expansion of multi-line templates in attribute values (bug 6255)
4176 !! input
4177 <div style="background: {{identity|#00FF00}}">-</div>
4178 !! result
4179 <div style="background: #00FF00">-</div>
4180
4181 !! end
4182
4183
4184 !! test
4185 Expansion of multi-line templates in attribute values (bug 6255 sanity check)
4186 !! input
4187 <div style="background:
4188 #00FF00">-</div>
4189 !! result
4190 <div style="background: #00FF00">-</div>
4191
4192 !! end
4193
4194 !! test
4195 Expansion of multi-line templates in attribute values (bug 6255 sanity check 2)
4196 !! input
4197 <div style="background: &#10;#00FF00">-</div>
4198 !! result
4199 <div style="background: &#10;#00FF00">-</div>
4200
4201 !! end
4202
4203 ###
4204 ### Parser hooks (see maintenance/parserTestsParserHook.php for the <tag> extension)
4205 ###
4206 !! test
4207 Parser hook: empty input
4208 !! input
4209 <tag></tag>
4210 !! result
4211 <pre>
4212 string(0) ""
4213 array(0) {
4214 }
4215 </pre>
4216
4217 !! end
4218
4219 !! test
4220 Parser hook: empty input using terminated empty elements
4221 !! input
4222 <tag/>
4223 !! result
4224 <pre>
4225 NULL
4226 array(0) {
4227 }
4228 </pre>
4229
4230 !! end
4231
4232 !! test
4233 Parser hook: empty input using terminated empty elements (space before)
4234 !! input
4235 <tag />
4236 !! result
4237 <pre>
4238 NULL
4239 array(0) {
4240 }
4241 </pre>
4242
4243 !! end
4244
4245 !! test
4246 Parser hook: basic input
4247 !! input
4248 <tag>input</tag>
4249 !! result
4250 <pre>
4251 string(5) "input"
4252 array(0) {
4253 }
4254 </pre>
4255
4256 !! end
4257
4258
4259 !! test
4260 Parser hook: case insensitive
4261 !! input
4262 <TAG>input</TAG>
4263 !! result
4264 <pre>
4265 string(5) "input"
4266 array(0) {
4267 }
4268 </pre>
4269
4270 !! end
4271
4272
4273 !! test
4274 Parser hook: case insensitive, redux
4275 !! input
4276 <TaG>input</TAg>
4277 !! result
4278 <pre>
4279 string(5) "input"
4280 array(0) {
4281 }
4282 </pre>
4283
4284 !! end
4285
4286 !! test
4287 Parser hook: nested tags
4288 !! options
4289 noxml
4290 !! input
4291 <tag><tag></tag></tag>
4292 !! result
4293 <pre>
4294 string(5) "<tag>"
4295 array(0) {
4296 }
4297 </pre>&lt;/tag&gt;
4298
4299 !! end
4300
4301 !! test
4302 Parser hook: basic arguments
4303 !! input
4304 <tag width=200 height = "100" depth = '50' square></tag>
4305 !! result
4306 <pre>
4307 string(0) ""
4308 array(4) {
4309 ["width"]=>
4310 string(3) "200"
4311 ["height"]=>
4312 string(3) "100"
4313 ["depth"]=>
4314 string(2) "50"
4315 ["square"]=>
4316 string(6) "square"
4317 }
4318 </pre>
4319
4320 !! end
4321
4322 !! test
4323 Parser hook: argument containing a forward slash (bug 5344)
4324 !! input
4325 <tag filename='/tmp/bla'></tag>
4326 !! result
4327 <pre>
4328 string(0) ""
4329 array(1) {
4330 ["filename"]=>
4331 string(8) "/tmp/bla"
4332 }
4333 </pre>
4334
4335 !! end
4336
4337 !! test
4338 Parser hook: empty input using terminated empty elements (bug 2374)
4339 !! input
4340 <tag foo=bar/>text
4341 !! result
4342 <pre>
4343 NULL
4344 array(1) {
4345 ["foo"]=>
4346 string(3) "bar"
4347 }
4348 </pre>text
4349
4350 !! end
4351
4352 # </tag> should be output literally since there is no matching tag that begins it
4353 !! test
4354 Parser hook: basic arguments using terminated empty elements (bug 2374)
4355 !! input
4356 <tag width=200 height = "100" depth = '50' square/>
4357 other stuff
4358 </tag>
4359 !! result
4360 <pre>
4361 NULL
4362 array(4) {
4363 ["width"]=>
4364 string(3) "200"
4365 ["height"]=>
4366 string(3) "100"
4367 ["depth"]=>
4368 string(2) "50"
4369 ["square"]=>
4370 string(6) "square"
4371 }
4372 </pre>
4373 <p>other stuff
4374 &lt;/tag&gt;
4375 </p>
4376 !! end
4377
4378 ###
4379 ### (see maintenance/parserTestsStaticParserHook.php for the <statictag> extension)
4380 ###
4381
4382 !! test
4383 Parser hook: static parser hook not inside a comment
4384 !! input
4385 <statictag>hello, world</statictag>
4386 <statictag action=flush/>
4387 !! result
4388 <p>hello, world
4389 </p>
4390 !! end
4391
4392
4393 !! test
4394 Parser hook: static parser hook inside a comment
4395 !! input
4396 <!-- <statictag>hello, world</statictag> -->
4397 <statictag action=flush/>
4398 !! result
4399 <p><br />
4400 </p>
4401 !! end
4402
4403 # Nested template calls; this case was broken by Parser.php rev 1.506,
4404 # since reverted.
4405
4406 !! article
4407 Template:One-parameter
4408 !! text
4409 (My parameter is: {{{1}}})
4410 !! endarticle
4411
4412 !! article
4413 Template:Map-one-parameter
4414 !! text
4415 {{{{{1}}}|{{{2}}}}}
4416 !! endarticle
4417
4418 !! test
4419 Nested template calls
4420 !! input
4421 {{Map-one-parameter|One-parameter|param}}
4422 !! result
4423 <p>(My parameter is: param)
4424 </p>
4425 !! end
4426
4427
4428 ###
4429 ### Sanitizer
4430 ###
4431 !! test
4432 Sanitizer: Closing of open tags
4433 !! input
4434 <s></s><table></table>
4435 !! result
4436 <s></s><table></table>
4437
4438 !! end
4439
4440 !! test
4441 Sanitizer: Closing of open but not closed tags
4442 !! input
4443 <s>foo
4444 !! result
4445 <p><s>foo</s>
4446 </p>
4447 !! end
4448
4449 !! test
4450 Sanitizer: Closing of closed but not open tags
4451 !! input
4452 </s>
4453 !! result
4454 <p>&lt;/s&gt;
4455 </p>
4456 !! end
4457
4458 !! test
4459 Sanitizer: Closing of closed but not open table tags
4460 !! input
4461 Table not started</td></tr></table>
4462 !! result
4463 <p>Table not started&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
4464 </p>
4465 !! end
4466
4467 !! test
4468 Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id=""
4469 !! input
4470 <span id="æ: v">byte</span>[[#æ: v|backlink]]
4471 !! result
4472 <p><span id=".C3.A6:_v">byte</span><a href="#.C3.A6:_v" title="">backlink</a>
4473 </p>
4474 !! end
4475
4476 !! test
4477 Sanitizer: Validating the contents of the id attribute (bug 4515)
4478 !! options
4479 disabled
4480 !! input
4481 <br id=9 />
4482 !! result
4483 Something, but defenetly not <br id="9" />...
4484 !! end
4485
4486 !! test
4487 Sanitizer: Validating id attribute uniqueness (bug 4515, bug 6301)
4488 !! options
4489 disabled
4490 !! input
4491 <br id="foo" /><br id="foo" />
4492 !! result
4493 Something need to be done. foo-2 ?
4494 !! end
4495
4496 !! test
4497 Language converter: output gets cut off unexpectedly (bug 5757)
4498 !! options
4499 language=zh
4500 !! input
4501 this bit is safe: }-
4502
4503 but if we add a conversion instance: -{zh-cn:xxx;zh-tw:yyy}-
4504
4505 then we get cut off here: }-
4506
4507 all additional text is vanished
4508 !! result
4509 <p>this bit is safe: }-
4510 </p><p>but if we add a conversion instance: xxx
4511 </p><p>then we get cut off here: }-
4512 </p><p>all additional text is vanished
4513 </p>
4514 !! end
4515
4516 !! test
4517 Self closed html pairs (bug 5487)
4518 !! options
4519 !! input
4520 <center><font id="bug" />Centered text</center>
4521 <div><font id="bug2" />In div text</div>
4522 !! result
4523 <center>&lt;font id="bug" /&gt;Centered text</center>
4524 <div>&lt;font id="bug2" /&gt;In div text</div>
4525
4526 !! end
4527
4528 #
4529 #
4530 #
4531
4532 !! test
4533 Punctuation: nbsp before exclamation
4534 !! input
4535 C'est grave !
4536 !! result
4537 <p>C'est grave&nbsp;!
4538 </p>
4539 !! end
4540
4541 !! test
4542 Punctuation: CSS !important (bug 11874)
4543 !! input
4544 <div style="width:50% !important">important</div>
4545 !! result
4546 <div style="width:50% !important">important</div>
4547
4548 !!end
4549
4550
4551 !! test
4552 HTML bullet list, closed tags (bug 5497)
4553 !! input
4554 <ul>
4555 <li>One</li>
4556 <li>Two</li>
4557 </ul>
4558 !! result
4559 <ul>
4560 <li>One</li>
4561 <li>Two</li>
4562 </ul>
4563
4564 !! end
4565
4566 !! test
4567 HTML bullet list, unclosed tags (bug 5497)
4568 !! input
4569 <ul>
4570 <li>One
4571 <li>Two
4572 </ul>
4573 !! result
4574 <ul>
4575 <li>One
4576 </li><li>Two
4577 </li></ul>
4578
4579 !! end
4580
4581 !! test
4582 HTML ordered list, closed tags (bug 5497)
4583 !! input
4584 <ol>
4585 <li>One</li>
4586 <li>Two</li>
4587 </ol>
4588 !! result
4589 <ol>
4590 <li>One</li>
4591 <li>Two</li>
4592 </ol>
4593
4594 !! end
4595
4596 !! test
4597 HTML ordered list, unclosed tags (bug 5497)
4598 !! input
4599 <ol>
4600 <li>One
4601 <li>Two
4602 </ol>
4603 !! result
4604 <ol>
4605 <li>One
4606 </li><li>Two
4607 </li></ol>
4608
4609 !! end
4610
4611 !! test
4612 HTML nested bullet list, closed tags (bug 5497)
4613 !! input
4614 <ul>
4615 <li>One</li>
4616 <li>Two:
4617 <ul>
4618 <li>Sub-one</li>
4619 <li>Sub-two</li>
4620 </ul>
4621 </li>
4622 </ul>
4623 !! result
4624 <ul>
4625 <li>One</li>
4626 <li>Two:
4627 <ul>
4628 <li>Sub-one</li>
4629 <li>Sub-two</li>
4630 </ul>
4631 </li>
4632 </ul>
4633
4634 !! end
4635
4636 !! test
4637 HTML nested bullet list, open tags (bug 5497)
4638 !! input
4639 <ul>
4640 <li>One
4641 <li>Two:
4642 <ul>
4643 <li>Sub-one
4644 <li>Sub-two
4645 </ul>
4646 </ul>
4647 !! result
4648 <ul>
4649 <li>One
4650 </li><li>Two:
4651 <ul>
4652 <li>Sub-one
4653 </li><li>Sub-two
4654 </li></ul>
4655 </li></ul>
4656
4657 !! end
4658
4659 !! test
4660 HTML nested ordered list, closed tags (bug 5497)
4661 !! input
4662 <ol>
4663 <li>One</li>
4664 <li>Two:
4665 <ol>
4666 <li>Sub-one</li>
4667 <li>Sub-two</li>
4668 </ol>
4669 </li>
4670 </ol>
4671 !! result
4672 <ol>
4673 <li>One</li>
4674 <li>Two:
4675 <ol>
4676 <li>Sub-one</li>
4677 <li>Sub-two</li>
4678 </ol>
4679 </li>
4680 </ol>
4681
4682 !! end
4683
4684 !! test
4685 HTML nested ordered list, open tags (bug 5497)
4686 !! input
4687 <ol>
4688 <li>One
4689 <li>Two:
4690 <ol>
4691 <li>Sub-one
4692 <li>Sub-two
4693 </ol>
4694 </ol>
4695 !! result
4696 <ol>
4697 <li>One
4698 </li><li>Two:
4699 <ol>
4700 <li>Sub-one
4701 </li><li>Sub-two
4702 </li></ol>
4703 </li></ol>
4704
4705 !! end
4706
4707 !! test
4708 HTML ordered list item with parameters oddity
4709 !! input
4710 <ol><li id="fragment">One</li></ol>
4711 !! result
4712 <ol><li id="fragment">One</li></ol>
4713
4714 !! end
4715
4716 !!test
4717 bug 5918: autonumbering
4718 !! input
4719 [http://first/] [http://second] [ftp://ftp]
4720
4721 ftp://inlineftp
4722
4723 [mailto:enclosed@mail.tld With target]
4724
4725 [mailto:enclosed@mail.tld]
4726
4727 mailto:inline@mail.tld
4728 !! result
4729 <p><a href="http://first/" class="external autonumber" title="http://first/" rel="nofollow">[1]</a> <a href="http://second" class="external autonumber" title="http://second" rel="nofollow">[2]</a> <a href="ftp://ftp" class="external autonumber" title="ftp://ftp" rel="nofollow">[3]</a>
4730 </p><p><a href="ftp://inlineftp" class="external free" title="ftp://inlineftp" rel="nofollow">ftp://inlineftp</a>
4731 </p><p><a href="mailto:enclosed@mail.tld" class="external text" title="mailto:enclosed@mail.tld" rel="nofollow">With target</a>
4732 </p><p><a href="mailto:enclosed@mail.tld" class="external autonumber" title="mailto:enclosed@mail.tld" rel="nofollow">[4]</a>
4733 </p><p><a href="mailto:inline@mail.tld" class="external free" title="mailto:inline@mail.tld" rel="nofollow">mailto:inline@mail.tld</a>
4734 </p>
4735 !! end
4736
4737
4738 #
4739 # Security and HTML correctness
4740 # From Nick Jenkins' fuzz testing
4741 #
4742
4743 !! test
4744 Fuzz testing: Parser13
4745 !! input
4746 {|
4747 | http://a|
4748 !! result
4749 <table>
4750 <tr>
4751 <td>
4752 </td>
4753 </tr>
4754 </table>
4755
4756 !! end
4757
4758 !! test
4759 Fuzz testing: Parser14
4760 !! input
4761 == onmouseover= ==
4762 http://__TOC__
4763 !! result
4764 <a name="onmouseover.3D"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: onmouseover=">edit</a>]</span> <span class="mw-headline"> onmouseover= </span></h2>
4765 http://<table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
4766 <ul>
4767 <li class="toclevel-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
4768 </ul>
4769 </td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
4770
4771 !! end
4772
4773 !! test
4774 Fuzz testing: Parser14-table
4775 !! input
4776 ==a==
4777 {| STYLE=__TOC__
4778 !! result
4779 <a name="a"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: a">edit</a>]</span> <span class="mw-headline">a</span></h2>
4780 <table style="&#95;_TOC&#95;_">
4781 <tr><td></td></tr>
4782 </table>
4783
4784 !! end
4785
4786 # Known to produce bogus xml (extra </td>)
4787 !! test
4788 Fuzz testing: Parser16
4789 !! options
4790 noxml
4791 !! input
4792 {|
4793 !https://||||||
4794 !! result
4795 <table>
4796 <tr>
4797 <th>https://</th><th></th><th></th><th>
4798 </td>
4799 </tr>
4800 </table>
4801
4802 !! end
4803
4804 !! test
4805 Fuzz testing: Parser21
4806 !! input
4807 {|
4808 ! irc://{{ftp://a" onmouseover="alert('hello world');"
4809 |
4810 !! result
4811 <table>
4812 <tr>
4813 <th> <a href="irc://{{ftp://a" class="external free" title="irc://{{ftp://a" rel="nofollow">irc://{{ftp://a</a>" onmouseover="alert('hello world');"
4814 </th><td>
4815 </td>
4816 </tr>
4817 </table>
4818
4819 !! end
4820
4821 !! test
4822 Fuzz testing: Parser22
4823 !! input
4824 http://===r:::https://b
4825
4826 {|
4827 !!result
4828 <p><a href="http://===r:::https://b" class="external free" title="http://===r:::https://b" rel="nofollow">http://===r:::https://b</a>
4829 </p>
4830 <table>
4831 <tr><td></td></tr>
4832 </table>
4833
4834 !! end
4835
4836 # Known to produce bad XML for now
4837 !! test
4838 Fuzz testing: Parser24
4839 !! options
4840 noxml
4841 !! input
4842 {|
4843 {{{|
4844 <u CLASS=
4845 | {{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--><noinclude>}}}} >
4846 <br style="onmouseover='alert(document.cookie);' " />
4847
4848 MOVE YOUR MOUSE CURSOR OVER THIS TEXT
4849 |
4850 !! result
4851 <table>
4852 {{{|
4853 <u class="&#124;">}}}} &gt;
4854 <br style="onmouseover=&#39;alert(document.cookie);&#39;" />
4855
4856 MOVE YOUR MOUSE CURSOR OVER THIS TEXT
4857 <tr>
4858 <td></u>
4859 </td>
4860 </tr>
4861 </table>
4862
4863 !! end
4864
4865 # Known to produce bad XML for now
4866 !!test
4867 Fuzz testing: Parser25 (bug 6055)
4868 !! options
4869 noxml
4870 !! input
4871 {{{
4872 |
4873 <LI CLASS=||
4874 >
4875 }}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE
4876 !! result
4877 <p>{{{|
4878 </p>
4879 <li class="&#124;&#124;">
4880 }}}blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
4881
4882 !! end
4883
4884 !!test
4885 Fuzz testing: URL adjacent extension (with space, clean)
4886 !! options
4887 !! input
4888 http://example.com <nowiki>junk</nowiki>
4889 !! result
4890 <p><a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a> junk
4891 </p>
4892 !!end
4893
4894 !!test
4895 Fuzz testing: URL adjacent extension (no space, dirty; nowiki)
4896 !! options
4897 !! input
4898 http://example.com<nowiki>junk</nowiki>
4899 !! result
4900 <p><a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a>junk
4901 </p>
4902 !!end
4903
4904 !!test
4905 Fuzz testing: URL adjacent extension (no space, dirty; pre)
4906 !! options
4907 !! input
4908 http://example.com<pre>junk</pre>
4909 !! result
4910 <a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a><pre>junk</pre>
4911
4912 !!end
4913
4914 !!test
4915 Fuzz testing: image with bogus manual thumbnail
4916 !!input
4917 [[Image:foobar.jpg|thumbnail= ]]
4918 !!result
4919 <div class="thumb tright"><div class="thumbinner" style="width:1943px;">Error creating thumbnail: <div class="thumbcaption"></div></div></div>
4920
4921 !!end
4922
4923 !! test
4924 Fuzz testing: encoded newline in generated HTML replacements (bug 6577)
4925 !! input
4926 <pre dir="&#10;"></pre>
4927 !! result
4928 <pre dir="&#10;"></pre>
4929
4930 !! end
4931
4932 !! test
4933 Parsing optional HTML elements (Bug 6171)
4934 !! options
4935 !! input
4936 <table>
4937 <tr>
4938 <td> Some tabular data</td>
4939 <td> More tabular data ...
4940 <td> And yet som tabular data</td>
4941 </tr>
4942 </table>
4943 !! result
4944 <table>
4945 <tr>
4946 <td> Some tabular data</td>
4947 <td> More tabular data ...
4948 </td><td> And yet som tabular data</td>
4949 </tr>
4950 </table>
4951
4952 !! end
4953
4954 !! test
4955 Correct handling of <td>, <tr> (Bug 6171)
4956 !! options
4957 !! input
4958 <table>
4959 <tr>
4960 <td> Some tabular data</td>
4961 <td> More tabular data ...</td>
4962 <td> And yet som tabular data</td>
4963 </tr>
4964 </table>
4965 !! result
4966 <table>
4967 <tr>
4968 <td> Some tabular data</td>
4969 <td> More tabular data ...</td>
4970 <td> And yet som tabular data</td>
4971 </tr>
4972 </table>
4973
4974 !! end
4975
4976
4977 !! test
4978 Parsing crashing regression (fr:JavaScript)
4979 !! input
4980 </body></x>
4981 !! result
4982 <p>&lt;/body&gt;&lt;/x&gt;
4983 </p>
4984 !! end
4985
4986 !! test
4987 Inline wiki vs wiki block nesting
4988 !! input
4989 '''Bold paragraph
4990
4991 New wiki paragraph
4992 !! result
4993 <p><b>Bold paragraph</b>
4994 </p><p>New wiki paragraph
4995 </p>
4996 !! end
4997
4998 !! test
4999 Inline HTML vs wiki block nesting
5000 !! input
5001 <b>Bold paragraph
5002
5003 New wiki paragraph
5004 !! result
5005 <p><b>Bold paragraph</b>
5006 </p><p>New wiki paragraph
5007 </p>
5008 !! end
5009
5010
5011 !!test
5012 Mixing markup for italics and bold
5013 !! options
5014 !! input
5015 '''bold''''''bold''bolditalics'''''
5016 !! result
5017 <p><b>bold</b><b>bold<i>bolditalics</i></b>
5018 </p>
5019 !! end
5020
5021
5022 !! article
5023 Xyzzyx
5024 !! text
5025 Article for special page transclusion test
5026 !! endarticle
5027
5028 !! test
5029 Special page transclusion
5030 !! options
5031 !! input
5032 {{Special:Prefixindex/Xyzzyx}}
5033 !! result
5034 <p><br />
5035 </p>
5036 <table style="background: inherit;" border="0" width="100%"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
5037
5038 !! end
5039
5040 !! test
5041 Special page transclusion twice (bug 5021)
5042 !! options
5043 !! input
5044 {{Special:Prefixindex/Xyzzyx}}
5045 {{Special:Prefixindex/Xyzzyx}}
5046 !! result
5047 <p><br />
5048 </p>
5049 <table style="background: inherit;" border="0" width="100%"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
5050 <p><br />
5051 </p>
5052 <table style="background: inherit;" border="0" width="100%"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
5053
5054 !! end
5055
5056 !! test
5057 Transclusion of default MediaWiki message
5058 !! input
5059 {{MediaWiki:Mainpage}}
5060 !!result
5061 <p>Main Page
5062 </p>
5063 !! end
5064
5065 !! test
5066 Transclusion of nonexistent MediaWiki message
5067 !! input
5068 {{MediaWiki:Mainpagexxx}}
5069 !!result
5070 <p><a href="/index.php?title=MediaWiki:Mainpagexxx&amp;action=edit&amp;redlink=1" class="new" title="MediaWiki:Mainpagexxx (not yet written)">MediaWiki:Mainpagexxx</a>
5071 </p>
5072 !! end
5073
5074 !! test
5075 Transclusion of MediaWiki message with underscore
5076 !! input
5077 {{MediaWiki:history_short}}
5078 !! result
5079 <p>History
5080 </p>
5081 !! end
5082
5083 !! test
5084 Transclusion of MediaWiki message with space
5085 !! input
5086 {{MediaWiki:history short}}
5087 !! result
5088 <p>History
5089 </p>
5090 !! end
5091
5092 !! test
5093 Invalid header with following text
5094 !! input
5095 = x = y
5096 !! result
5097 <p>= x = y
5098 </p>
5099 !! end
5100
5101
5102 !! test
5103 Section extraction test (section 0)
5104 !! options
5105 section=0
5106 !! input
5107 start
5108 ==a==
5109 ===aa===
5110 ====aaa====
5111 ==b==
5112 ===ba===
5113 ===bb===
5114 ====bba====
5115 ===bc===
5116 ==c==
5117 ===ca===
5118 !! result
5119 start
5120 !! end
5121
5122 !! test
5123 Section extraction test (section 1)
5124 !! options
5125 section=1
5126 !! input
5127 start
5128 ==a==
5129 ===aa===
5130 ====aaa====
5131 ==b==
5132 ===ba===
5133 ===bb===
5134 ====bba====
5135 ===bc===
5136 ==c==
5137 ===ca===
5138 !! result
5139 ==a==
5140 ===aa===
5141 ====aaa====
5142 !! end
5143
5144 !! test
5145 Section extraction test (section 2)
5146 !! options
5147 section=2
5148 !! input
5149 start
5150 ==a==
5151 ===aa===
5152 ====aaa====
5153 ==b==
5154 ===ba===
5155 ===bb===
5156 ====bba====
5157 ===bc===
5158 ==c==
5159 ===ca===
5160 !! result
5161 ===aa===
5162 ====aaa====
5163 !! end
5164
5165 !! test
5166 Section extraction test (section 3)
5167 !! options
5168 section=3
5169 !! input
5170 start
5171 ==a==
5172 ===aa===
5173 ====aaa====
5174 ==b==
5175 ===ba===
5176 ===bb===
5177 ====bba====
5178 ===bc===
5179 ==c==
5180 ===ca===
5181 !! result
5182 ====aaa====
5183 !! end
5184
5185 !! test
5186 Section extraction test (section 4)
5187 !! options
5188 section=4
5189 !! input
5190 start
5191 ==a==
5192 ===aa===
5193 ====aaa====
5194 ==b==
5195 ===ba===
5196 ===bb===
5197 ====bba====
5198 ===bc===
5199 ==c==
5200 ===ca===
5201 !! result
5202 ==b==
5203 ===ba===
5204 ===bb===
5205 ====bba====
5206 ===bc===
5207 !! end
5208
5209 !! test
5210 Section extraction test (section 5)
5211 !! options
5212 section=5
5213 !! input
5214 start
5215 ==a==
5216 ===aa===
5217 ====aaa====
5218 ==b==
5219 ===ba===
5220 ===bb===
5221 ====bba====
5222 ===bc===
5223 ==c==
5224 ===ca===
5225 !! result
5226 ===ba===
5227 !! end
5228
5229 !! test
5230 Section extraction test (section 6)
5231 !! options
5232 section=6
5233 !! input
5234 start
5235 ==a==
5236 ===aa===
5237 ====aaa====
5238 ==b==
5239 ===ba===
5240 ===bb===
5241 ====bba====
5242 ===bc===
5243 ==c==
5244 ===ca===
5245 !! result
5246 ===bb===
5247 ====bba====
5248 !! end
5249
5250 !! test
5251 Section extraction test (section 7)
5252 !! options
5253 section=7
5254 !! input
5255 start
5256 ==a==
5257 ===aa===
5258 ====aaa====
5259 ==b==
5260 ===ba===
5261 ===bb===
5262 ====bba====
5263 ===bc===
5264 ==c==
5265 ===ca===
5266 !! result
5267 ====bba====
5268 !! end
5269
5270 !! test
5271 Section extraction test (section 8)
5272 !! options
5273 section=8
5274 !! input
5275 start
5276 ==a==
5277 ===aa===
5278 ====aaa====
5279 ==b==
5280 ===ba===
5281 ===bb===
5282 ====bba====
5283 ===bc===
5284 ==c==
5285 ===ca===
5286 !! result
5287 ===bc===
5288 !! end
5289
5290 !! test
5291 Section extraction test (section 9)
5292 !! options
5293 section=9
5294 !! input
5295 start
5296 ==a==
5297 ===aa===
5298 ====aaa====
5299 ==b==
5300 ===ba===
5301 ===bb===
5302 ====bba====
5303 ===bc===
5304 ==c==
5305 ===ca===
5306 !! result
5307 ==c==
5308 ===ca===
5309 !! end
5310
5311 !! test
5312 Section extraction test (section 10)
5313 !! options
5314 section=10
5315 !! input
5316 start
5317 ==a==
5318 ===aa===
5319 ====aaa====
5320 ==b==
5321 ===ba===
5322 ===bb===
5323 ====bba====
5324 ===bc===
5325 ==c==
5326 ===ca===
5327 !! result
5328 ===ca===
5329 !! end
5330
5331 !! test
5332 Section extraction test (nonexistent section 11)
5333 !! options
5334 section=11
5335 !! input
5336 start
5337 ==a==
5338 ===aa===
5339 ====aaa====
5340 ==b==
5341 ===ba===
5342 ===bb===
5343 ====bba====
5344 ===bc===
5345 ==c==
5346 ===ca===
5347 !! result
5348 !! end
5349
5350 !! test
5351 Section extraction test with bogus heading (section 1)
5352 !! options
5353 section=1
5354 !! input
5355 ==a==
5356 ==bogus== not a legal section
5357 ==b==
5358 !! result
5359 ==a==
5360 ==bogus== not a legal section
5361 !! end
5362
5363 !! test
5364 Section extraction test with bogus heading (section 2)
5365 !! options
5366 section=2
5367 !! input
5368 ==a==
5369 ==bogus== not a legal section
5370 ==b==
5371 !! result
5372 ==b==
5373 !! end
5374
5375 !! test
5376 Section extraction test with comment after heading (section 1)
5377 !! options
5378 section=1
5379 !! input
5380 ==a==
5381 ==b== <!-- -->
5382 ==c==
5383 !! result
5384 ==a==
5385 !! end
5386
5387 !! test
5388 Section extraction test with comment after heading (section 2)
5389 !! options
5390 section=2
5391 !! input
5392 ==a==
5393 ==b== <!-- -->
5394 ==c==
5395 !! result
5396 ==b== <!-- -->
5397 !! end
5398
5399 !! test
5400 Section extraction test with bogus <nowiki> heading (section 1)
5401 !! options
5402 section=1
5403 !! input
5404 ==a==
5405 ==bogus== <nowiki>not a legal section</nowiki>
5406 ==b==
5407 !! result
5408 ==a==
5409 ==bogus== <nowiki>not a legal section</nowiki>
5410 !! end
5411
5412 !! test
5413 Section extraction test with bogus <nowiki> heading (section 2)
5414 !! options
5415 section=2
5416 !! input
5417 ==a==
5418 ==bogus== <nowiki>not a legal section</nowiki>
5419 ==b==
5420 !! result
5421 ==b==
5422 !! end
5423
5424
5425 # Formerly testing for bug 2587, now resolved by the use of unmarked sections
5426 # instead of respecting commented sections
5427 !! test
5428 Section extraction prefixed by comment (section 1)
5429 !! options
5430 section=1
5431 !! input
5432 <!-- -->==sec1==
5433 ==sec2==
5434 !!result
5435 ==sec2==
5436 !!end
5437
5438 !! test
5439 Section extraction prefixed by comment (section 2)
5440 !! options
5441 section=2
5442 !! input
5443 <!-- -->==sec1==
5444 ==sec2==
5445 !!result
5446
5447 !!end
5448
5449
5450 # Formerly testing for bug 2607, now resolved by the use of unmarked sections
5451 # instead of respecting HTML-style headings
5452 !! test
5453 Section extraction, mixed wiki and html (section 1)
5454 !! options
5455 section=1
5456 !! input
5457 <h2>unmarked</h2>
5458 unmarked
5459 ==1==
5460 one
5461 ==2==
5462 two
5463 !! result
5464 ==1==
5465 one
5466 !! end
5467
5468 !! test
5469 Section extraction, mixed wiki and html (section 2)
5470 !! options
5471 section=2
5472 !! input
5473 <h2>unmarked</h2>
5474 unmarked
5475 ==1==
5476 one
5477 ==2==
5478 two
5479 !! result
5480 ==2==
5481 two
5482 !! end
5483
5484
5485 # Formerly testing for bug 3342
5486 !! test
5487 Section extraction, heading surrounded by <noinclude>
5488 !! options
5489 section=1
5490 !! input
5491 <noinclude>==unmarked==</noinclude>
5492 ==marked==
5493 !! result
5494 ==marked==
5495 !!end
5496
5497
5498 !! test
5499 Section replacement test (section 0)
5500 !! options
5501 replace=0,"xxx"
5502 !! input
5503 start
5504 ==a==
5505 ===aa===
5506 ====aaa====
5507 ==b==
5508 ===ba===
5509 ===bb===
5510 ====bba====
5511 ===bc===
5512 ==c==
5513 ===ca===
5514 !! result
5515 xxx
5516
5517 ==a==
5518 ===aa===
5519 ====aaa====
5520 ==b==
5521 ===ba===
5522 ===bb===
5523 ====bba====
5524 ===bc===
5525 ==c==
5526 ===ca===
5527 !! end
5528
5529 !! test
5530 Section replacement test (section 1)
5531 !! options
5532 replace=1,"xxx"
5533 !! input
5534 start
5535 ==a==
5536 ===aa===
5537 ====aaa====
5538 ==b==
5539 ===ba===
5540 ===bb===
5541 ====bba====
5542 ===bc===
5543 ==c==
5544 ===ca===
5545 !! result
5546 start
5547 xxx
5548
5549 ==b==
5550 ===ba===
5551 ===bb===
5552 ====bba====
5553 ===bc===
5554 ==c==
5555 ===ca===
5556 !! end
5557
5558 !! test
5559 Section replacement test (section 2)
5560 !! options
5561 replace=2,"xxx"
5562 !! input
5563 start
5564 ==a==
5565 ===aa===
5566 ====aaa====
5567 ==b==
5568 ===ba===
5569 ===bb===
5570 ====bba====
5571 ===bc===
5572 ==c==
5573 ===ca===
5574 !! result
5575 start
5576 ==a==
5577 xxx
5578
5579 ==b==
5580 ===ba===
5581 ===bb===
5582 ====bba====
5583 ===bc===
5584 ==c==
5585 ===ca===
5586 !! end
5587
5588 !! test
5589 Section replacement test (section 3)
5590 !! options
5591 replace=3,"xxx"
5592 !! input
5593 start
5594 ==a==
5595 ===aa===
5596 ====aaa====
5597 ==b==
5598 ===ba===
5599 ===bb===
5600 ====bba====
5601 ===bc===
5602 ==c==
5603 ===ca===
5604 !! result
5605 start
5606 ==a==
5607 ===aa===
5608 xxx
5609
5610 ==b==
5611 ===ba===
5612 ===bb===
5613 ====bba====
5614 ===bc===
5615 ==c==
5616 ===ca===
5617 !! end
5618
5619 !! test
5620 Section replacement test (section 4)
5621 !! options
5622 replace=4,"xxx"
5623 !! input
5624 start
5625 ==a==
5626 ===aa===
5627 ====aaa====
5628 ==b==
5629 ===ba===
5630 ===bb===
5631 ====bba====
5632 ===bc===
5633 ==c==
5634 ===ca===
5635 !! result
5636 start
5637 ==a==
5638 ===aa===
5639 ====aaa====
5640 xxx
5641
5642 ==c==
5643 ===ca===
5644 !! end
5645
5646 !! test
5647 Section replacement test (section 5)
5648 !! options
5649 replace=5,"xxx"
5650 !! input
5651 start
5652 ==a==
5653 ===aa===
5654 ====aaa====
5655 ==b==
5656 ===ba===
5657 ===bb===
5658 ====bba====
5659 ===bc===
5660 ==c==
5661 ===ca===
5662 !! result
5663 start
5664 ==a==
5665 ===aa===
5666 ====aaa====
5667 ==b==
5668 xxx
5669
5670 ===bb===
5671 ====bba====
5672 ===bc===
5673 ==c==
5674 ===ca===
5675 !! end
5676
5677 !! test
5678 Section replacement test (section 6)
5679 !! options
5680 replace=6,"xxx"
5681 !! input
5682 start
5683 ==a==
5684 ===aa===
5685 ====aaa====
5686 ==b==
5687 ===ba===
5688 ===bb===
5689 ====bba====
5690 ===bc===
5691 ==c==
5692 ===ca===
5693 !! result
5694 start
5695 ==a==
5696 ===aa===
5697 ====aaa====
5698 ==b==
5699 ===ba===
5700 xxx
5701
5702 ===bc===
5703 ==c==
5704 ===ca===
5705 !! end
5706
5707 !! test
5708 Section replacement test (section 7)
5709 !! options
5710 replace=7,"xxx"
5711 !! input
5712 start
5713 ==a==
5714 ===aa===
5715 ====aaa====
5716 ==b==
5717 ===ba===
5718 ===bb===
5719 ====bba====
5720 ===bc===
5721 ==c==
5722 ===ca===
5723 !! result
5724 start
5725 ==a==
5726 ===aa===
5727 ====aaa====
5728 ==b==
5729 ===ba===
5730 ===bb===
5731 xxx
5732
5733 ===bc===
5734 ==c==
5735 ===ca===
5736 !! end
5737
5738 !! test
5739 Section replacement test (section 8)
5740 !! options
5741 replace=8,"xxx"
5742 !! input
5743 start
5744 ==a==
5745 ===aa===
5746 ====aaa====
5747 ==b==
5748 ===ba===
5749 ===bb===
5750 ====bba====
5751 ===bc===
5752 ==c==
5753 ===ca===
5754 !! result
5755 start
5756 ==a==
5757 ===aa===
5758 ====aaa====
5759 ==b==
5760 ===ba===
5761 ===bb===
5762 ====bba====
5763 xxx
5764
5765 ==c==
5766 ===ca===
5767 !!end
5768
5769 !! test
5770 Section replacement test (section 9)
5771 !! options
5772 replace=9,"xxx"
5773 !! input
5774 start
5775 ==a==
5776 ===aa===
5777 ====aaa====
5778 ==b==
5779 ===ba===
5780 ===bb===
5781 ====bba====
5782 ===bc===
5783 ==c==
5784 ===ca===
5785 !! result
5786 start
5787 ==a==
5788 ===aa===
5789 ====aaa====
5790 ==b==
5791 ===ba===
5792 ===bb===
5793 ====bba====
5794 ===bc===
5795 xxx
5796 !! end
5797
5798 !! test
5799 Section replacement test (section 10)
5800 !! options
5801 replace=10,"xxx"
5802 !! input
5803 start
5804 ==a==
5805 ===aa===
5806 ====aaa====
5807 ==b==
5808 ===ba===
5809 ===bb===
5810 ====bba====
5811 ===bc===
5812 ==c==
5813 ===ca===
5814 !! result
5815 start
5816 ==a==
5817 ===aa===
5818 ====aaa====
5819 ==b==
5820 ===ba===
5821 ===bb===
5822 ====bba====
5823 ===bc===
5824 ==c==
5825 xxx
5826 !! end
5827
5828
5829 !! test
5830 Section extraction, heading followed by pre with 20 spaces (bug 6398)
5831 !! options
5832 section=1
5833 !! input
5834 ==a==
5835 a
5836 !! result
5837 ==a==
5838 a
5839 !! end
5840
5841 !! test
5842 Section extraction, heading followed by pre with 19 spaces (bug 6398 sanity check)
5843 !! options
5844 section=1
5845 !! input
5846 ==a==
5847 a
5848 !! result
5849 ==a==
5850 a
5851 !! end
5852
5853
5854 !! test
5855 Section extraction, <pre> around bogus header (bug 10309)
5856 !! options
5857 noxml section=2
5858 !! input
5859 == Section One ==
5860 <pre>
5861 =======
5862 </pre>
5863
5864 == Section Two ==
5865 stuff
5866 !! result
5867 == Section Two ==
5868 stuff
5869 !! end
5870
5871 !! test
5872 Section replacement, <pre> around bogus header (bug 10309)
5873 !! options
5874 noxml replace=2,"xxx"
5875 !! input
5876 == Section One ==
5877 <pre>
5878 =======
5879 </pre>
5880
5881 == Section Two ==
5882 stuff
5883 !! result
5884 == Section One ==
5885 <pre>
5886 =======
5887 </pre>
5888
5889 xxx
5890 !! end
5891
5892
5893
5894 !! test
5895 Handling of &#x0A; in URLs
5896 !! input
5897 **irc://&#x0A;a
5898 !! result
5899 <ul><li><ul><li><a href="irc://%0Aa" class="external free" title="irc://%0Aa" rel="nofollow">irc://%0Aa</a>
5900 </li></ul>
5901 </li></ul>
5902
5903 !!end
5904
5905 !! test
5906 5 quotes, code coverage +1 line
5907 !! input
5908 '''''
5909 !! result
5910 !! end
5911
5912 !! test
5913 Special:Search page linking.
5914 !! input
5915 {{Special:search}}
5916 !! result
5917 <p><a href="/wiki/Special:Search" title="Special:Search">Special:Search</a>
5918 </p>
5919 !! end
5920
5921 !! test
5922 Say the magic word
5923 !! input
5924 * {{PAGENAME}}
5925 * {{BASEPAGENAME}}
5926 * {{SUBPAGENAME}}
5927 * {{SUBPAGENAMEE}}
5928 * {{BASEPAGENAME}}
5929 * {{BASEPAGENAMEE}}
5930 * {{TALKPAGENAME}}
5931 * {{TALKPAGENAMEE}}
5932 * {{SUBJECTPAGENAME}}
5933 * {{SUBJECTPAGENAMEE}}
5934 * {{NAMESPACEE}}
5935 * {{NAMESPACE}}
5936 * {{TALKSPACE}}
5937 * {{TALKSPACEE}}
5938 * {{SUBJECTSPACE}}
5939 * {{SUBJECTSPACEE}}
5940 * {{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}
5941 !! result
5942 <ul><li> Parser test
5943 </li><li> Parser test
5944 </li><li> Parser test
5945 </li><li> Parser_test
5946 </li><li> Parser test
5947 </li><li> Parser_test
5948 </li><li> Talk:Parser test
5949 </li><li> Talk:Parser_test
5950 </li><li> Parser test
5951 </li><li> Parser_test
5952 </li><li>
5953 </li><li>
5954 </li><li> Talk
5955 </li><li> Talk
5956 </li><li>
5957 </li><li>
5958 </li><li> <a href="/index.php?title=Template:Dynamic&amp;action=edit&amp;redlink=1" class="new" title="Template:Dynamic (not yet written)">Template:Dynamic</a>
5959 </li></ul>
5960
5961 !! end
5962 ### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included.
5963
5964 !! test
5965 Gallery
5966 !! input
5967 <gallery>
5968 image1.png |
5969 image2.gif|||||
5970
5971 image3|
5972 image4 |300px| centre
5973 image5.svg| http://///////
5974 [[x|xx]]]]
5975 * image6
5976 </gallery>
5977 !! result
5978 <table class="gallery" cellspacing="0" cellpadding="0">
5979 <tr>
5980 <td><div class="gallerybox" style="width: 155px;">
5981 <div style="height: 152px;">Image1.png</div>
5982 <div class="gallerytext">
5983 </div>
5984 </div></td>
5985 <td><div class="gallerybox" style="width: 155px;">
5986 <div style="height: 152px;">Image2.gif</div>
5987 <div class="gallerytext">
5988 <p>||||
5989 </p>
5990 </div>
5991 </div></td>
5992 <td><div class="gallerybox" style="width: 155px;">
5993 <div style="height: 152px;">Image3</div>
5994 <div class="gallerytext">
5995 </div>
5996 </div></td>
5997 <td><div class="gallerybox" style="width: 155px;">
5998 <div style="height: 152px;">Image4</div>
5999 <div class="gallerytext">
6000 <p>300px| centre
6001 </p>
6002 </div>
6003 </div></td>
6004 </tr>
6005 <tr>
6006 <td><div class="gallerybox" style="width: 155px;">
6007 <div style="height: 152px;">Image5.svg</div>
6008 <div class="gallerytext">
6009 <p><a href="http://///////" class="external free" title="http://///////" rel="nofollow">http://///////</a>
6010 </p>
6011 </div>
6012 </div></td>
6013 <td><div class="gallerybox" style="width: 155px;">
6014 <div style="height: 152px;">* image6</div>
6015 <div class="gallerytext">
6016 </div>
6017 </div></td>
6018 </tr>
6019 </table>
6020
6021 !! end
6022
6023 !! test
6024 HTML Hex character encoding (spells the word "JavaScript")
6025 !! input
6026 &#x4A;&#x061;&#x0076;&#x00061;&#x000053;&#x0000063;&#114;&#x0000069;&#00000112;&#x0000000074;
6027 !! result
6028 <p>&#x4a;&#x61;&#x76;&#x61;&#x53;&#x63;&#114;&#x69;&#112;&#x74;
6029 </p>
6030 !! end
6031
6032 !! test
6033 __FORCETOC__ override
6034 !! input
6035 __NEWSECTIONLINK__
6036 __FORCETOC__
6037 !! result
6038 <p><br />
6039 </p>
6040 !! end
6041
6042 !! test
6043 ISBN code coverage
6044 !! input
6045 ISBN 978-0-1234-56&#x20;789
6046 !! result
6047 <p><a href="/wiki/Special:BookSources/9780123456" class="internal">ISBN 978-0-1234-56</a>&#x20;789
6048 </p>
6049 !! end
6050
6051 !! test
6052 ISBN followed by 5 spaces
6053 !! input
6054 ISBN
6055 !! result
6056 <p>ISBN
6057 </p>
6058 !! end
6059
6060 !! test
6061 Double ISBN
6062 !! input
6063 ISBN ISBN 1234567890
6064 !! result
6065 <p>ISBN <a href="/wiki/Special:BookSources/1234567890" class="internal">ISBN 1234567890</a>
6066 </p>
6067 !! end
6068
6069 !! test
6070 Double RFC
6071 !! input
6072 RFC RFC 1234
6073 !! result
6074 <p>RFC <a href="http://tools.ietf.org/html/rfc1234" class="external" title="http://tools.ietf.org/html/rfc1234">RFC 1234</a>
6075 </p>
6076 !! end
6077
6078 !! test
6079 Double RFC with a wiki link
6080 !! input
6081 RFC [[RFC 1234]]
6082 !! result
6083 <p>RFC <a href="/index.php?title=RFC_1234&amp;action=edit&amp;redlink=1" class="new" title="RFC 1234 (not yet written)">RFC 1234</a>
6084 </p>
6085 !! end
6086
6087 !! test
6088 RFC code coverage
6089 !! input
6090 RFC 983&#x20;987
6091 !! result
6092 <p><a href="http://tools.ietf.org/html/rfc983" class="external" title="http://tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
6093 </p>
6094 !! end
6095
6096 !! test
6097 Centre-aligned image
6098 !! input
6099 [[Image:foobar.jpg|centre]]
6100 !! result
6101 <div class="center"><div class="floatnone"><span><a href="/wiki/Image:Foobar.jpg" class="image" title="Foobar.jpg"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a></span></div></div>
6102
6103 !!end
6104
6105 !! test
6106 None-aligned image
6107 !! input
6108 [[Image:foobar.jpg|none]]
6109 !! result
6110 <div class="floatnone"><span><a href="/wiki/Image:Foobar.jpg" class="image" title="Foobar.jpg"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" border="0" /></a></span></div>
6111
6112 !!end
6113
6114 !! test
6115 Width + Height sized image (using px) (height is ignored)
6116 !! input
6117 [[Image:foobar.jpg|640x480px]]
6118 !! result
6119 <p><a href="/wiki/Image:Foobar.jpg" class="image" title="Foobar.jpg"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" border="0" /></a>
6120 </p>
6121 !!end
6122
6123 !! test
6124 Another italics / bold test
6125 !! input
6126 ''' ''x'
6127 !! result
6128 <pre>'<i> </i>x'
6129 </pre>
6130 !!end
6131
6132 # Note the results may be incorrect, as parserTest output included this:
6133 # XML error: Mismatched tag at byte 6120:
6134 # ...<dd> </dt></dl> </dd...
6135 !! test
6136 dt/dd/dl test
6137 !! input
6138 :;;;::
6139 !! result
6140 <dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd>
6141 </dd></dl>
6142 </dd></dl>
6143 </dt></dl>
6144 </dt></dl>
6145 </dt></dl>
6146 </dd></dl>
6147
6148 !!end
6149
6150
6151 # Images with the "|" character in external URLs in comment tags; Eats half the comment, leaves unmatched "</a>" tag.
6152 !! test
6153 Images with the "|" character in the comment
6154 !! input
6155 [[image:Foobar.jpg|thumb|An [http://test/?param1=|left|&param2=|x external] URL]]
6156 !! result
6157 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="image" title="An external URL"><img alt="An external URL" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" border="0" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>An <a href="http://test/?param1=|left|&amp;param2=|x" class="external text" title="http://test/?param1=|left|&amp;param2=|x" rel="nofollow">external</a> URL</div></div></div>
6158
6159 !!end
6160
6161 !! test
6162 [Before] HTML without raw HTML enabled ($wgRawHtml==false)
6163 !! input
6164 <html><script>alert(1);</script></html>
6165 !! result
6166 <p>&lt;html&gt;&lt;script&gt;alert(1);&lt;/script&gt;&lt;/html&gt;
6167 </p>
6168 !! end
6169
6170 !! test
6171 HTML with raw HTML ($wgRawHtml==true)
6172 !! options
6173 rawhtml
6174 !! input
6175 <html><script>alert(1);</script></html>
6176 !! result
6177 <p><script>alert(1);</script>
6178 </p>
6179 !! end
6180
6181 !! test
6182 Parents of subpages, one level up
6183 !! options
6184 subpage title=[[Subpage test/L1/L2/L3]]
6185 !! input
6186 [[../|L2]]
6187 !! result
6188 <p><a href="/index.php?title=Subpage_test/L1/L2&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1/L2 (not yet written)">L2</a>
6189 </p>
6190 !! end
6191
6192
6193 !! test
6194 Parents of subpages, one level up, not named
6195 !! options
6196 subpage title=[[Subpage test/L1/L2/L3]]
6197 !! input
6198 [[../]]
6199 !! result
6200 <p><a href="/index.php?title=Subpage_test/L1/L2&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1/L2 (not yet written)">Subpage test/L1/L2</a>
6201 </p>
6202 !! end
6203
6204
6205
6206 !! test
6207 Parents of subpages, two levels up
6208 !! options
6209 disabled
6210 subpage title=[[Subpage test/L1/L2/L3]]
6211 !! input
6212 [[../../|L1]]2
6213 !! result
6214 <p><a href="/index.php?title=Subpage_test/L1&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1 (not yet written)">L1</a>
6215 </p>
6216 !! end
6217
6218
6219 # Question: should result be "/index.php?title=Subpage_test/L1&amp;action=edit" instead?
6220 !! test
6221 Parents of subpages, two levels up, without trailing slash or name.
6222 !! options
6223 subpage title=[[Subpage test/L1/L2/L3]]
6224 !! input
6225 [[../..]]
6226 !! result
6227 <p><a href="/index.php?title=Subpage_test/L1/L2/..&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1 (not yet written)">../..</a>
6228 </p>
6229 !! end
6230
6231 # Question: Why should the link text in the above test be "../..", yet in this test the "../.." part is silently dropped?
6232 # Current result: <p><a href="/index.php?title=Subpage_test/L1////&amp;action=edit" class="new" title="Subpage test/L1////">///
6233 !! test
6234 Parents of subpages, two levels up, with lots of extra trailing slashes.
6235 !! options
6236 subpage title=[[Subpage test/L1/L2/L3]]
6237 !! input
6238 [[../../////]]
6239 !! result
6240 <p><a href="/index.php?title=Subpage_test/L1&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1 (not yet written)">Subpage test/L1</a>
6241 </p>
6242 !! end
6243
6244 !! test
6245 Definition list code coverage
6246 !! input
6247 ; title : def
6248 ; title : def
6249 ;title: def
6250 !! result
6251 <dl><dt> title &nbsp;</dt><dd> def
6252 </dd><dt> title&nbsp;</dt><dd> def
6253 </dd><dt>title</dt><dd> def
6254 </dd></dl>
6255
6256 !! end
6257
6258 !! test
6259 Don't fall for the self-closing div
6260 !! input
6261 <div>hello world</div/>
6262 !! result
6263 <div>hello world</div>
6264
6265 !! end
6266
6267 !! test
6268 MSGNW magic word
6269 !! input
6270 {{MSGNW:msg}}
6271 !! result
6272 <p>&#91;&#91;:Template:Msg&#93;&#93;
6273 </p>
6274 !! end
6275
6276 !! test
6277 RAW magic word
6278 !! input
6279 {{RAW:QUERTY}}
6280 !! result
6281 <p><a href="/index.php?title=Template:QUERTY&amp;action=edit&amp;redlink=1" class="new" title="Template:QUERTY (not yet written)">Template:QUERTY</a>
6282 </p>
6283 !! end
6284
6285 # This isn't needed for XHTML conformance, but would be handy as a fallback security measure
6286 !! test
6287 Always escape literal '>' in output, not just after '<'
6288 !! input
6289 ><>
6290 !! result
6291 <p>&gt;&lt;&gt;
6292 </p>
6293 !! end
6294
6295 !! test
6296 Template caching
6297 !! input
6298 {{Test}}
6299 {{Test}}
6300 !! result
6301 <p>This is a test template
6302 This is a test template
6303 </p>
6304 !! end
6305
6306
6307 !! article
6308 MediaWiki:Fake
6309 !! text
6310 ==header==
6311 !! endarticle
6312
6313 !! test
6314 Inclusion of !userCanEdit() content
6315 !! input
6316 {{MediaWiki:Fake}}
6317 !! result
6318 <a name="header"></a><h2><span class="editsection">[<a href="/index.php?title=MediaWiki:Fake&amp;action=edit&amp;section=T-1" title="MediaWiki:Fake">edit</a>]</span> <span class="mw-headline">header</span></h2>
6319
6320 !! end
6321
6322
6323 !! test
6324 Out-of-order TOC heading levels
6325 !! input
6326 ==2==
6327 ======6======
6328 ===3===
6329 =1=
6330 =====5=====
6331 ==2==
6332 !! result
6333 <table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
6334 <ul>
6335 <li class="toclevel-1"><a href="#2"><span class="tocnumber">1</span> <span class="toctext">2</span></a>
6336 <ul>
6337 <li class="toclevel-2"><a href="#6"><span class="tocnumber">1.1</span> <span class="toctext">6</span></a></li>
6338 <li class="toclevel-2"><a href="#3"><span class="tocnumber">1.2</span> <span class="toctext">3</span></a></li>
6339 </ul>
6340 </li>
6341 <li class="toclevel-1"><a href="#1_7"><span class="tocnumber">2</span> <span class="toctext">1</span></a>
6342 <ul>
6343 <li class="toclevel-2"><a href="#5"><span class="tocnumber">2.1</span> <span class="toctext">5</span></a></li>
6344 <li class="toclevel-2"><a href="#2_4"><span class="tocnumber">2.2</span> <span class="toctext">2</span></a></li>
6345 </ul>
6346 </li>
6347 </ul>
6348 </td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
6349 <a name="2"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: 2">edit</a>]</span> <span class="mw-headline">2</span></h2>
6350 <a name="6"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: 6">edit</a>]</span> <span class="mw-headline">6</span></h6>
6351 <a name="3"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: 3">edit</a>]</span> <span class="mw-headline">3</span></h3>
6352 <a name="1_7"></a><h1><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: 1">edit</a>]</span> <span class="mw-headline">1</span></h1>
6353 <a name="5"></a><h5><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: 5">edit</a>]</span> <span class="mw-headline">5</span></h5>
6354 <a name="2_4"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: 2">edit</a>]</span> <span class="mw-headline">2</span></h2>
6355
6356 !! end
6357
6358
6359 !! test
6360 ISBN with a dummy number
6361 !! input
6362 ISBN ---
6363 !! result
6364 <p>ISBN ---
6365 </p>
6366 !! end
6367
6368
6369 !! test
6370 ISBN with space-delimited number
6371 !! input
6372 ISBN 92 9017 032 8
6373 !! result
6374 <p><a href="/wiki/Special:BookSources/9290170328" class="internal">ISBN 92 9017 032 8</a>
6375 </p>
6376 !! end
6377
6378
6379 !! test
6380 ISBN with multiple spaces, no number
6381 !! input
6382 ISBN foo
6383 !! result
6384 <p>ISBN foo
6385 </p>
6386 !! end
6387
6388
6389 !! test
6390 ISBN length
6391 !! input
6392 ISBN 123456789
6393
6394 ISBN 1234567890
6395
6396 ISBN 12345678901
6397 !! result
6398 <p>ISBN 123456789
6399 </p><p><a href="/wiki/Special:BookSources/1234567890" class="internal">ISBN 1234567890</a>
6400 </p><p>ISBN 12345678901
6401 </p>
6402 !! end
6403
6404
6405 !! test
6406 ISBN with trailing year (bug 8110)
6407 !! input
6408 ISBN 1-234-56789-0 - 2006
6409
6410 ISBN 1 234 56789 0 - 2006
6411 !! result
6412 <p><a href="/wiki/Special:BookSources/1234567890" class="internal">ISBN 1-234-56789-0</a> - 2006
6413 </p><p><a href="/wiki/Special:BookSources/1234567890" class="internal">ISBN 1 234 56789 0</a> - 2006
6414 </p>
6415 !! end
6416
6417
6418 !! test
6419 Pages in namespace (Magic word disabled currently)
6420 !! input
6421 {{PAGESINNAMESPACE:}}
6422 !! result
6423
6424 !! end
6425
6426
6427 !! test
6428 anchorencode
6429 !! input
6430 {{anchorencode:foo bar©#%n}}
6431 !! result
6432 <p>foo_bar.C2.A9.23.25n
6433 </p>
6434 !! end
6435
6436
6437 !! test
6438 Bug 8293: Use of center tag ruins paragraph formatting
6439 !! input
6440 <center>
6441 foo
6442 </center>
6443
6444 bar
6445
6446 baz
6447 !! result
6448 <center>
6449 <p>foo
6450 </p>
6451 </center>
6452 <p>bar
6453 </p>
6454 <pre>baz
6455 </pre>
6456 !! end
6457
6458
6459 ###
6460 ### Language variants related tests
6461 ###
6462 !! test
6463 Self-link in language variants
6464 !! options
6465 title=[[Dunav]] language=sr
6466 !! input
6467 Both [[Dunav]] and [[Дунав]] are names for this river.
6468 !! result
6469 <p>Both <strong class="selflink">Dunav</strong> and <strong class="selflink">Дунав</strong> are names for this river.
6470 </p>
6471 !!end
6472
6473
6474 !! test
6475 Link to pages in language variants
6476 !! options
6477 language=sr
6478 !! input
6479 Main Page can be written as [[Маин Паге]]
6480 !! result
6481 <p>Main Page can be written as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a>
6482 </p>
6483 !!end
6484
6485
6486 !! test
6487 Multiple links to pages in language variants
6488 !! options
6489 language=sr
6490 !! input
6491 [[Main Page]] can be written as [[Маин Паге]] same as [[Маин Паге]].
6492 !! result
6493 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a> can be written as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a> same as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a>.
6494 </p>
6495 !!end
6496
6497
6498 !! test
6499 Simple template in language variants
6500 !! options
6501 language=sr
6502 !! input
6503 {{тест}}
6504 !! result
6505 <p>This is a test template
6506 </p>
6507 !! end
6508
6509
6510 !! test
6511 Template with explicit namespace in language variants
6512 !! options
6513 language=sr
6514 !! input
6515 {{Template:тест}}
6516 !! result
6517 <p>This is a test template
6518 </p>
6519 !! end
6520
6521
6522 !! test
6523 Basic test for template parameter in language variants
6524 !! options
6525 language=sr
6526 !! input
6527 {{парамтест|param=foo}}
6528 !! result
6529 <p>This is a test template with parameter foo
6530 </p>
6531 !! end
6532
6533
6534 !! test
6535 Simple category in language variants
6536 !! options
6537 language=sr cat
6538 !! input
6539 [[:Category:МедиаWики Усер'с Гуиде]]
6540 !! result
6541 <a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">MediaWiki User's Guide</a>
6542 !! end
6543
6544
6545 !! test
6546 Stripping -{}- tags (language variants)
6547 !! options
6548 language=sr
6549 !! input
6550 Latin proverb: -{Ne nuntium necare}-
6551 !! result
6552 <p>Latin proverb: Ne nuntium necare
6553 </p>
6554 !! end
6555
6556
6557 !! test
6558 Prevent conversion with -{}- tags (language variants)
6559 !! options
6560 language=sr variant=sr-ec
6561 !! input
6562 Latinski: -{Ne nuntium necare}-
6563 !! result
6564 <p>Латински: Ne nuntium necare
6565 </p>
6566 !! end
6567
6568
6569 !! test
6570 Prevent conversion of text with -{}- tags (language variants)
6571 !! options
6572 language=sr variant=sr-ec
6573 !! input
6574 Latinski: -{Ne nuntium necare}-
6575 !! result
6576 <p>Латински: Ne nuntium necare
6577 </p>
6578 !! end
6579
6580
6581 !! test
6582 Prevent conversion of links with -{}- tags (language variants)
6583 !! options
6584 language=sr variant=sr-ec
6585 !! input
6586 -{[[Main Page]]}-
6587 !! result
6588 <p><a href="/index.php?title=Main_Page&amp;variant=sr-ec" title="Main Page">Main Page</a>
6589 </p>
6590 !! end
6591
6592
6593 !! test
6594 -{}- tags within headlines (within html for parserConvert())
6595 !! options
6596 language=sr variant=sr-ec
6597 !! input
6598 == -{Naslov}- ==
6599 !! result
6600 <a name="-.7BNaslov.7D-"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Уреди део: Naslov">уреди</a>]</span> <span class="mw-headline"> Naslov </span></h2>
6601
6602 !! end
6603
6604
6605 !! test
6606 Explicit definition of language variant alternatives
6607 !! options
6608 language=zh variant=zh-tw
6609 !! input
6610 -{zh:China;zh-tw:Taiwan}-, not China
6611 !! result
6612 <p>Taiwan, not China
6613 </p>
6614 !! end
6615
6616
6617 !! test
6618 Adding explicit session-wise language variant mapping (A flag)
6619 !! options
6620 language=zh variant=zh-tw
6621 !! input
6622 -{A|zh:China;zh-tw:Taiwan}- is China
6623 !! result
6624 <p>Taiwan is Taiwan
6625 </p>
6626 !! end
6627
6628
6629 !! test
6630 Adding explicit conversion rule for title (T flag)
6631 !! options
6632 language=zh variant=zh-tw
6633 !! input
6634 Should be stripped-{T|zh:China;zh-tw:Taiwan}-!
6635 !! result
6636 <p>Should be stripped!
6637 </p>
6638 !! end
6639
6640
6641 !! test
6642 Raw output of variant escape tags (R flag)
6643 !! options
6644 language=zh variant=zh-tw
6645 !! input
6646 Raw: -{R|zh:China;zh-tw:Taiwan}-
6647 !! result
6648 <p>Raw: zh:China;zh-tw:Taiwan
6649 </p>
6650 !! end
6651
6652
6653 !! test
6654 Do not convert roman numbers to language variants
6655 !! options
6656 language=sr variant=sr-ec
6657 !! input
6658 Fridrih IV je car.
6659 !! result
6660 <p>Фридрих IV је цар.
6661 </p>
6662 !! end
6663
6664 !!article
6665 Template:Bullet
6666 !!text
6667 * Bar
6668 !!endarticle
6669
6670 !! test
6671 Bug 529: Uncovered bullet
6672 !! input
6673 * Foo {{bullet}}
6674 !! result
6675 <ul><li> Foo
6676 </li><li> Bar
6677 </li></ul>
6678
6679 !! end
6680
6681 !! test
6682 Bug 529: Uncovered table already at line-start
6683 !! input
6684 x
6685
6686 {{table}}
6687 y
6688 !! result
6689 <p>x
6690 </p>
6691 <table>
6692 <tr>
6693 <td> 1 </td><td> 2
6694 </td></tr>
6695 <tr>
6696 <td> 3 </td><td> 4
6697 </td></tr></table>
6698 <p>y
6699 </p>
6700 !! end
6701
6702 !! test
6703 Bug 529: Uncovered bullet in parser function result
6704 !! input
6705 * Foo {{lc:{{bullet}} }}
6706 !! result
6707 <ul><li> Foo
6708 </li><li> bar
6709 </li></ul>
6710
6711 !! end
6712
6713 !! test
6714 Bug 5678: Double-parsed template argument
6715 !! input
6716 {{lc:{{{1}}}|hello}}
6717 !! result
6718 <p>{{{1}}}
6719 </p>
6720 !! end
6721
6722 !! test
6723 Bug 5678: Double-parsed template invocation
6724 !! input
6725 {{lc:{{paramtest {{!}} param = hello }} }}
6726 !! result
6727 <p>{{paramtest | param = hello }}
6728 </p>
6729 !! end
6730
6731 !! test
6732 Morwen/13: Unclosed link followed by heading
6733 !! input
6734 [[link
6735 ==heading==
6736 !! result
6737 <p>[[link
6738 </p>
6739 <a name="heading"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: heading">edit</a>]</span> <span class="mw-headline">heading</span></h2>
6740
6741 !! end
6742
6743 !! test
6744 HHP2.1: Heuristics for headings in preprocessor parenthetical structures
6745 !! input
6746 {{foo|
6747 =heading=
6748 !! result
6749 <p>{{foo|
6750 </p>
6751 <a name="heading"></a><h1> <span class="mw-headline">heading</span></h1>
6752
6753 !! end
6754
6755 !! test
6756 HHP2.2: Heuristics for headings in preprocessor parenthetical structures
6757 !! input
6758 {{foo|
6759 ==heading==
6760 !! result
6761 <p>{{foo|
6762 </p>
6763 <a name="heading"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: heading">edit</a>]</span> <span class="mw-headline">heading</span></h2>
6764
6765 !! end
6766
6767 !! test
6768 Tildes in comments
6769 !! options
6770 pst
6771 !! input
6772 <!-- ~~~~ -->
6773 !! result
6774 <!-- ~~~~ -->
6775 !! end
6776
6777 #
6778 #
6779 #
6780
6781 TODO:
6782 more images
6783 more tables
6784 math
6785 character entities
6786 and much more
6787 Try for 100% code coverage