ff574d153c1c0bb0b7385e8c1d3fb53aa2a958aa
[lhc/web/wiklou.git] / tests / parser / parserTests.txt
1 # MediaWiki Parser test cases
2 # Some taken from https://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 # (ignored by Parsoid, since it emits <link>s)
18 # ill add inter-language links
19 # (ignored by Parsoid, since it emits <link>s)
20 # subpage enable subpages (disabled by default)
21 # title=[[XXX]] run test using article title XXX
22 # language=XXX set content language to XXX for this test
23 # variant=XXX set the variant of language for this test (eg zh-tw)
24 # disabled do not run test
25 # parsoid parsoid-specific options (not run by PHP parser unless
26 # the test includes an html/php section)
27 # php php-only test (not run by the parsoid parser unless
28 # the test includes an html/parsoid section)
29 # showtitle make the first line the title
30 # showindicators make the first lines the page status indicators
31 # comment run through Linker::formatComment() instead of main parser
32 # local format section links in edit comment text as local links
33 # notoc disable table of contents
34 # thumbsize=NNN set the default thumb size to NNNpx for this test
35 # wrap include the normal wrapper <div class="mw-parser-output"> (since 1.30)
36 #
37 # You can also set the following parser properties via test options:
38 # wgEnableUploads, wgAllowExternalImages, wgMaxTocLevel,
39 # wgLinkHolderBatchSize, wgRawHtml, wgInterwikiMagic,
40 # wgEnableMagicLinks
41 #
42 # For testing purposes, temporary articles can created:
43 # !!article / NAMESPACE:TITLE / !!text / ARTICLE TEXT / !!endarticle
44 # where '/' denotes a newline.
45
46 # This is the standard article assumed to exist.
47 !! article
48 Main Page
49 !! text
50 blah blah
51 !! endarticle
52
53 !!article
54 Foo
55 !!text
56 FOO
57 !!endarticle
58
59 !!article
60 Template:Foo
61 !!text
62 FOO
63 !!endarticle
64
65 !! article
66 Template:Blank
67 !! text
68 !! endarticle
69
70 !! article
71 Template:pipe
72 !! text
73 |
74 !! endarticle
75
76 !! article
77 Template:=
78 !! text
79 <nowiki>=</nowiki>
80 !! endarticle
81
82 !!article
83 MediaWiki:bad image list
84 !!text
85 * [[File:Bad.jpg]] except [[Nasty page]]
86 !!endarticle
87
88 !! article
89 Template:inner list
90 !! text
91 * item 1
92 !! endarticle
93
94 !! article
95 Template:tbl-start
96 !! text
97 {|
98 !! endarticle
99
100 !! article
101 Template:tbl-end
102 !! text
103 |}
104 !! endarticle
105
106 !! article
107 Template:echo
108 !! text
109 {{{1}}}
110 !! endarticle
111
112 // For Serbian; localize Template namespace
113 !! article
114 Шаблон:Echo
115 !! text
116 {{{1}}}
117 !! endarticle
118
119 !! article
120 Template:echo_with_span
121 !! text
122 <span>{{{1}}}</span>
123 !! endarticle
124
125 !! article
126 Template:echo_with_div
127 !! text
128 <div>{{{1}}}</div>
129 !! endarticle
130
131 !! article
132 Template:blank_param
133 !! text
134 {{{1}}}
135 {{{}}}
136 !! endarticle
137
138 !! article
139 Template:table_attribs
140 !! text
141 <noinclude>
142 |</noinclude>style="color:red;"|Foo
143 !! endarticle
144
145 !! article
146 Template:table_attribs_2
147 !! text
148 <noinclude>
149 |</noinclude>style="color:red;"|Foo
150 |Bar||Baz
151 !! endarticle
152
153 !! article
154 Template:table_attribs_3
155 !! text
156 <noinclude>
157 |</noinclude>style{{=}}"background:&#35;f9f9f9;"|Foo
158 !! endarticle
159
160 !! article
161 Template:table_attribs_4
162 !! text
163 | style="background-color:#DC241f;" width="10px" |
164 !! endarticle
165
166 !! article
167 Template:table_attribs_5
168 !! text
169 <noinclude>
170 |</noinclude>style="color:red;"||Bar
171 !! endarticle
172
173 !! article
174 Template:table_attribs_6
175 !! text
176 style="background: <nowiki>
177
178
179 red;</nowiki>" |
180 !! endarticle
181
182 !! article
183 Template:table_attribs_7
184 !! text
185 <noinclude>
186 |</noinclude>style{{=}}"background:&#35;f9f9f9;"|Foo<ref>foo</ref>
187 !! endarticle
188
189 !! article
190 Template:table_header_cells
191 !! text
192 {{table_attribs}}!!style='color:red;'|''Bar''||style='color:brown;'|''Foo'' and Baz
193 !! endarticle
194
195 !! article
196 Template:table_cells
197 !! text
198 {{table_attribs}}||style='color:red;'|''Bar''||style='color:brown;'|''Foo'' and Baz
199 !! endarticle
200
201 !! article
202 Template:PartialTable
203 !! text
204 {|
205 |-
206 !! endarticle
207
208 !! article
209 Template:image_attribs
210 !! text
211 <noinclude>
212 [[File:foobar.jpg|</noinclude>right|Caption text<noinclude>]]</noinclude>
213 !! endarticle
214
215 ## See T48811 for details
216 !! article
217 Template:mixed_attr_content_template
218 !! text
219 style="color:red;" title="T48811"
220 |-
221 |foo
222 !! endarticle
223
224 !! article
225 Template:definition_list
226 !! text
227 one
228 ::two
229 !! endarticle
230
231 !! article
232 A?b
233 !! text
234 Weirdo titles!
235 !! endarticle
236
237 !!article
238 Template:Bullet
239 !!text
240 * Bar
241 !!endarticle
242
243 !!article
244 Template:OpenTable
245 !!text
246 {|
247 !!endarticle
248
249 !!article
250 Template:EmptyLITest
251 !!text
252 *a
253 *
254 *
255 *b
256 !!endarticle
257
258 !!article
259 Template:EmptyTRTest
260 !!text
261 {|
262 |-
263 |-
264 |foo
265 |-
266 |-
267 |bar
268 |}
269 !!endarticle
270
271 !!article
272 Template:EmptyTRWithHTMLAttrTest
273 !!text
274 <table>
275 <tr align="center"></tr>
276 <tr><td>foo</td></tr>
277 <tr align="center"></tr>
278 <tr><td>bar</td></tr>
279 </table>
280 !!endarticle
281
282 !! article
283 Template:CircularRef
284 !! text
285 <ref>{{CircularRef}}</ref>
286 !! endarticle
287
288 !! article
289 Template:With: Colon
290 !! text
291 Template with colon
292 !! endarticle
293
294 ###
295 ### Basic tests
296 ###
297 !! test
298 Blank input
299 !! wikitext
300 !! html
301 !! end
302
303 !! test
304 CircularRef
305 !! wikitext
306 {{CircularRef}}
307 <references />
308 !! html/parsoid
309 <p><span about="#mwt1" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Transclusion mw:Extension/ref" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"CircularRef","href":"./Template:CircularRef"},"params":{},"i":0}}]}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span></p>
310 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">Error: Expansion loop detected at <a data-parsoid='{"a":{"href":null},"sa":{"href":"Template:CircularRef"}}'>Template:CircularRef</a></span></li></ol>
311 !! end
312
313 !! test
314 Simple paragraph
315 !! wikitext
316 This is a simple paragraph.
317 !! html
318 <p>This is a simple paragraph.
319 </p>
320 !! end
321
322 !! test
323 Paragraphs with extra newline spacing
324 !! wikitext
325 foo
326
327 bar
328
329
330 baz
331
332
333
334 booz
335 !! html
336 <p>foo
337 </p><p>bar
338 </p><p><br />
339 baz
340 </p><p><br />
341 </p><p>booz
342 </p>
343 !! end
344
345 !! test
346 Paragraphs with newline spacing with comment lines in between
347 !! wikitext
348 ----
349 a
350 <!--foo-->
351 b
352 ----
353 a
354 <!--foo--><!--More than 1 comment, still stripped-->
355 b
356 ----
357 a
358 <!--foo--> <!----> <!-- bar -->
359 b
360 ----
361 a
362 <!--foo-->
363
364 b
365 ----
366 a
367
368 <!--foo-->
369 b
370 ----
371 a
372 <!--foo-->
373
374
375 b
376 ----
377 a
378
379
380 <!--foo-->
381 b
382 ----
383 !! html
384 <hr />
385 <p>a
386 b
387 </p>
388 <hr />
389 <p>a
390 b
391 </p>
392 <hr />
393 <p>a
394 b
395 </p>
396 <hr />
397 <p>a
398 </p><p>b
399 </p>
400 <hr />
401 <p>a
402 </p><p>b
403 </p>
404 <hr />
405 <p>a
406 </p><p><br />
407 b
408 </p>
409 <hr />
410 <p>a
411 </p><p><br />
412 b
413 </p>
414 <hr />
415
416 !! end
417
418 !! test
419 Paragraphs with newline spacing with non-empty white-space lines in between
420 !! wikitext
421 ----
422 a
423
424 b
425 ----
426 a
427
428
429 b
430 ----
431 !! html
432 <hr />
433 <p>a
434 </p><p>b
435 </p>
436 <hr />
437 <p>a
438 </p><p><br />
439 b
440 </p>
441 <hr />
442
443 !! end
444
445 !! test
446 Paragraphs with newline spacing with non-empty mixed comment and white-space lines in between
447 !! wikitext
448 ----
449 a
450 <!--foo-->
451 b
452 ----
453 a
454 <!--foo--><!--More than 1 comment doesn't disable stripping of this line!-->
455 b
456 ----
457 a
458
459 <!--foo-->
460 <!--bar-->
461 b
462 ----
463 a
464
465 <!--foo-->
466 <!--bar-->
467
468 b
469 ----
470 !! html
471 <hr />
472 <p>a
473 b
474 </p>
475 <hr />
476 <p>a
477 b
478 </p>
479 <hr />
480 <p>a
481 </p><p>b
482 </p>
483 <hr />
484 <p>a
485 </p><p><br />
486 b
487 </p>
488 <hr />
489
490 !! end
491
492 !! test
493 Extra newlines: More paragraphs with indented comment
494 !! wikitext
495 a
496
497 <!--boo-->
498
499 b
500 !! html
501 <p>a
502 </p><p><br />
503 b
504 </p>
505 !!end
506
507 !! test
508 Extra newlines followed by heading
509 !! wikitext
510 a
511
512
513
514 =b=
515 [[a]]
516
517
518 =b=
519 !! html
520 <p>a
521 </p><p><br />
522 </p>
523 <h1><span class="mw-headline" id="b">b</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
524 <p><a href="/index.php?title=A&amp;action=edit&amp;redlink=1" class="new" title="A (page does not exist)">a</a>
525 </p><p><br />
526 </p>
527 <h1><span class="mw-headline" id="b_2">b</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
528
529 !! end
530
531 !! test
532 Extra newlines between heading and content are swallowed
533 !! wikitext
534 =b=
535
536
537
538 [[a]]
539 !! html
540 <h1><span class="mw-headline" id="b">b</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
541 <p><a href="/index.php?title=A&amp;action=edit&amp;redlink=1" class="new" title="A (page does not exist)">a</a>
542 </p>
543 !! end
544
545 !! test
546 Heading with line break in nowiki
547 !! options
548 parsoid=wt2html
549 !! wikitext
550 == A <nowiki>B
551 C</nowiki> ==
552 !! html
553 <h2><span class="mw-headline" id="A_B.0AC">A B
554 C</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: A B&#10;C">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
555
556 !! html/parsoid
557 <h2 id="A_B.0AC">A <span typeof="mw:Nowiki">B
558 C</span> </h2>
559 !! end
560
561 !! test
562 Parsing an URL
563 !! wikitext
564 http://fr.wikipedia.org/wiki/🍺
565 <!-- EasterEgg we love beer, better be able be able to link to it -->
566 !! html
567 <p><a rel="nofollow" class="external free" href="http://fr.wikipedia.org/wiki/🍺">http://fr.wikipedia.org/wiki/🍺</a>
568 </p>
569 !! end
570
571 # Note that the html+tidy output removes the spaces after the <li>,
572 # which is a bug (https://sourceforge.net/p/tidy/bugs/945/, etc).
573 # This is an issue for all tests with lists. We intentionally do
574 # *not* add html+tidy clauses for these, as we don't want to
575 # document/test the broken behavior. (Parsoid matches the non-tidy
576 # output in these cases.)
577
578 !! test
579 Simple list
580 !! wikitext
581 * Item 1
582 * Item 2
583 !! html
584 <ul><li> Item 1</li>
585 <li> Item 2</li></ul>
586
587 !! end
588
589 !! test
590 Italics and bold
591 !! wikitext
592 * plain
593 * plain''italic''plain
594 * plain''italic''plain''italic''plain
595 * plain'''bold'''plain
596 * plain'''bold'''plain'''bold'''plain
597 * plain''italic''plain'''bold'''plain
598 * plain'''bold'''plain''italic''plain
599 * plain''italic'''bold-italic'''italic''plain
600 * plain'''bold''bold-italic''bold'''plain
601 * plain'''''bold-italic'''italic''plain
602 * plain'''''bold-italic''bold'''plain
603 * plain''italic'''bold-italic'''''plain
604 * plain'''bold''bold-italic'''''plain
605 * plain l'''italic''plain
606 * plain l''''bold''' plain
607 !! html
608 <ul><li> plain</li>
609 <li> plain<i>italic</i>plain</li>
610 <li> plain<i>italic</i>plain<i>italic</i>plain</li>
611 <li> plain<b>bold</b>plain</li>
612 <li> plain<b>bold</b>plain<b>bold</b>plain</li>
613 <li> plain<i>italic</i>plain<b>bold</b>plain</li>
614 <li> plain<b>bold</b>plain<i>italic</i>plain</li>
615 <li> plain<i>italic<b>bold-italic</b>italic</i>plain</li>
616 <li> plain<b>bold<i>bold-italic</i>bold</b>plain</li>
617 <li> plain<i><b>bold-italic</b>italic</i>plain</li>
618 <li> plain<b><i>bold-italic</i>bold</b>plain</li>
619 <li> plain<i>italic<b>bold-italic</b></i>plain</li>
620 <li> plain<b>bold<i>bold-italic</i></b>plain</li>
621 <li> plain l'<i>italic</i>plain</li>
622 <li> plain l'<b>bold</b> plain</li></ul>
623
624 !! end
625
626 # this example taken from the [[simple:Moon]] article (T49326)
627 !! test
628 Italics and possessives (1)
629 !! wikitext
630 obtained by ''[[Lunar Prospector]]'''s gamma-ray spectrometer
631 !! html
632 <p>obtained by <i><a href="/index.php?title=Lunar_Prospector&amp;action=edit&amp;redlink=1" class="new" title="Lunar Prospector (page does not exist)">Lunar Prospector</a>'</i>s gamma-ray spectrometer
633 </p>
634 !! end
635
636 # this example taken from [[en:Flaming Pie]] (T51926)
637 !! test
638 Italics and possessives (2)
639 !! wikitext
640 '''''Flaming Pie''''' is ... released in 1997. In ''Flaming Pie'''s liner notes
641 !! html
642 <p><i><b>Flaming Pie</b></i> is ... released in 1997. In <i>Flaming Pie'</i>s liner notes
643 </p>
644 !! end
645
646 # this example taken from [[en:Dictionary]] (T51926)
647 !! test
648 Italics and possessives (3)
649 !! wikitext
650 The first monolingual dictionary written in a Romance language was ''Sebastián Covarrubias''' ''Tesoro de la lengua castellana o española'', published in 1611 in Madrid. In 1612 the first edition of the ''Vocabolario dell'[[Accademia della Crusca]]'', for Italian, was published. In 1690 in Rotterdam was published, posthumously, the ''Dictionnaire Universel''.
651 !! html
652 <p>The first monolingual dictionary written in a Romance language was <i>Sebastián Covarrubias'</i> <i>Tesoro de la lengua castellana o española</i>, published in 1611 in Madrid. In 1612 the first edition of the <i>Vocabolario dell'<a href="/index.php?title=Accademia_della_Crusca&amp;action=edit&amp;redlink=1" class="new" title="Accademia della Crusca (page does not exist)">Accademia della Crusca</a></i>, for Italian, was published. In 1690 in Rotterdam was published, posthumously, the <i>Dictionnaire Universel</i>.
653 </p>
654 !! end
655
656
657 ###
658 ### 2-quote opening sequence tests
659 ###
660 !! test
661 Italics and bold: 2-quote opening sequence: (2,2)
662 !! wikitext
663 ''foo''
664 !! html
665 <p><i>foo</i>
666 </p>
667 !!end
668
669 !! test
670 Italics and bold: 2-quote opening sequence: (2,3)
671 !! wikitext
672 ''foo'''
673 !! html/*
674 <p><i>foo'</i>
675 </p>
676 !!end
677
678 !! test
679 Italics and bold: 2-quote opening sequence: (2,4)
680 !! options
681 parsoid=wt2html
682 !! wikitext
683 ''foo''''
684 !! html/*
685 <p><i>foo''</i>
686 </p>
687 !!end
688
689 # same html as previous, but wikitext adjusted to match parsoid html2wt
690 !! test
691 Italics and bold: 2-quote opening sequence: (2,4) w/ nowiki
692 !! wikitext
693 ''foo<nowiki>''</nowiki>''
694 !! html
695 <p><i>foo''</i>
696 </p>
697 !! end
698
699 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
700 !! test
701 Italics and bold: 2-quote opening sequence: (2,5)
702 !! options
703 parsoid=wt2html
704 !! wikitext
705 ''foo'''''
706 !! html/php
707 <p><i>foo</i>
708 </p>
709 !! html/parsoid
710 <p><i>foo</i><b></b>
711 </p>
712 !!end
713
714 # same html as previous, but wikitext adjusted to match parsoid html2wt
715 !! test
716 Italics and bold: 2-quote opening sequence: (2,5+3) w/ nowiki
717 !! wikitext
718 ''foo'''''<nowiki/>'''
719 !! html/php
720 <p><i>foo</i>
721 </p>
722 !! html/parsoid
723 <p><i>foo</i><b></b>
724 </p>
725 !! end
726
727
728 ###
729 ### 3-quote opening sequence tests
730 ###
731
732 !! test
733 Italics and bold: 3-quote opening sequence: (3,2)
734 !! wikitext
735 '''foo''
736 !! html/*
737 <p>'<i>foo</i>
738 </p>
739 !!end
740
741 !! test
742 Italics and bold: 3-quote opening sequence: (3,3)
743 !! wikitext
744 '''foo'''
745 !! html
746 <p><b>foo</b>
747 </p>
748 !!end
749
750 !! test
751 Italics and bold: 3-quote opening sequence: (3,4)
752 !! wikitext
753 '''foo''''
754 !! html/*
755 <p><b>foo'</b>
756 </p>
757 !!end
758
759 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
760 !! test
761 Italics and bold: 3-quote opening sequence: (3,5)
762 !! options
763 parsoid=wt2html
764 !! wikitext
765 '''foo'''''
766 !! html/php
767 <p><b>foo</b>
768 </p>
769 !! html/parsoid
770 <p><b>foo</b><i></i>
771 </p>
772 !!end
773
774 # same html as previous, but wikitext adjusted to match parsoid html2wt
775 !! test
776 Italics and bold: 3-quote opening sequence: (3,5+2) w/ nowiki
777 !! wikitext
778 '''foo'''''<nowiki/>''
779 !! html/php
780 <p><b>foo</b>
781 </p>
782 !! html/parsoid
783 <p><b>foo</b><i></i>
784 </p>
785 !! end
786
787
788 ###
789 ### 4-quote opening sequence tests
790 ###
791
792 !! test
793 Italics and bold: 4-quote opening sequence: (4,2)
794 !! options
795 parsoid=wt2html
796 !! wikitext
797 ''''foo''
798 !! html/*
799 <p>''<i>foo</i>
800 </p>
801 !!end
802
803 # same html as previous, but wikitext adjusted to match parsoid html2wt
804 !! test
805 Italics and bold: 4-quote opening sequence: (4,2) w/ nowiki
806 !! wikitext
807 <nowiki>''</nowiki>''foo''
808 !! html
809 <p>''<i>foo</i>
810 </p>
811 !! end
812
813 !! test
814 Italics and bold: 4-quote opening sequence: (4,3)
815 !! wikitext
816 ''''foo'''
817 !! html/*
818 <p>'<b>foo</b>
819 </p>
820 !!end
821
822 !! test
823 Italics and bold: 4-quote opening sequence: (4,4)
824 !! options
825 parsoid=wt2html
826 !! wikitext
827 ''''foo''''
828 !! html/*
829 <p>'<b>foo'</b>
830 </p>
831 !!end
832
833 # same html as previous, but wikitext adjusted to match parsoid html2wt
834 !! test
835 Italics and bold: 4-quote opening sequence: (4,4) w/ nowiki
836 !! wikitext
837 '<nowiki/>'''foo''''
838 !! html
839 <p>'<b>foo'</b>
840 </p>
841 !! end
842
843 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
844 !! test
845 Italics and bold: 4-quote opening sequence: (4,5)
846 !! options
847 parsoid=wt2html
848 !! wikitext
849 ''''foo'''''
850 !! html/php
851 <p>'<b>foo</b>
852 </p>
853 !! html/parsoid
854 <p>'<b>foo</b><i></i>
855 </p>
856 !!end
857
858 # same html as previous, but wikitext adjusted to match parsoid html2wt
859 !! test
860 Italics and bold: 4-quote opening sequence: (4,5+2) w/ nowiki
861 !! wikitext
862 '<nowiki/>'''foo'''''<nowiki/>''
863 !! html/php
864 <p>'<b>foo</b>
865 </p>
866 !! html/parsoid
867 <p>'<b>foo</b><i></i>
868 </p>
869 !! end
870
871
872 ###
873 ### 5-quote opening sequence tests
874 ###
875
876 !! test
877 Italics and bold: 5-quote opening sequence: (5,2)
878 !! options
879 parsoid=wt2html
880 !! wikitext
881 '''''foo''
882 !! html/*
883 <p><b><i>foo</i></b>
884 </p>
885 !!end
886
887 # same html as previous, but wikitext adjusted to match parsoid html2wt
888 !! test
889 Italics and bold: 5-quote opening sequence: (5,2+3)
890 !! wikitext
891 '''''foo'''''
892 !! html/*
893 <p><i><b>foo</b></i>
894 </p>
895 !! end
896
897 !! test
898 Italics and bold: 5-quote opening sequence: (5,3)
899 !! options
900 parsoid=wt2html
901 !! wikitext
902 '''''foo'''
903 !! html/*
904 <p><i><b>foo</b></i>
905 </p>
906 !!end
907
908 # same html as previous, but wikitext adjusted to match parsoid html2wt
909 !! test
910 Italics and bold: 5-quote opening sequence: (5,3+2)
911 !! wikitext
912 '''''foo'''''
913 !! html
914 <p><i><b>foo</b></i>
915 </p>
916 !! end
917
918 !! test
919 Italics and bold: 5-quote opening sequence: (5,4)
920 !! options
921 parsoid=wt2html
922 !! wikitext
923 '''''foo''''
924 !! html/*
925 <p><i><b>foo'</b></i>
926 </p>
927 !!end
928
929 !! test
930 Italics and bold: 5-quote opening sequence: (5,5)
931 !! wikitext
932 '''''foo'''''
933 !! html
934 <p><i><b>foo</b></i>
935 </p>
936 !!end
937
938 !! test
939 Italics and bold: 5-quote opening sequence: (5,6)
940 !! wikitext
941 '''''foo''''''
942 !! html/*
943 <p><i><b>foo'</b></i>
944 </p>
945 !! end
946
947 ###
948 ### multiple quote sequences in a line
949 ###
950
951 !! test
952 Italics and bold: multiple quote sequences: (2,4,2)
953 !! options
954 parsoid=wt2html
955 !! wikitext
956 ''foo''''bar''
957 !! html/*
958 <p><i>foo'<b>bar</b></i>
959 </p>
960 !! end
961
962 # same html as previous, but wikitext adjusted to match parsoid html2wt
963 !! test
964 Italics and bold: multiple quote sequences: (2,4,2+3) w/ nowiki
965 !! wikitext
966 ''foo'<nowiki/>'''bar'''''
967 !! html
968 <p><i>foo'<b>bar</b></i>
969 </p>
970 !! end
971
972 !! test
973 Italics and bold: multiple quote sequences: (2,4,3)
974 !! options
975 parsoid=wt2html
976 !! wikitext
977 ''foo''''bar'''
978 !! html/*
979 <p><i>foo'<b>bar</b></i>
980 </p>
981 !! end
982
983 # same html as previous, but wikitext adjusted to match parsoid html2wt
984 !! test
985 Italics and bold: multiple quote sequences: (2,4,3+2) w/ nowiki
986 !! wikitext
987 ''foo'<nowiki/>'''bar'''''
988 !! html
989 <p><i>foo'<b>bar</b></i>
990 </p>
991 !! end
992
993 !! test
994 Italics and bold: multiple quote sequences: (2,4,4)
995 !! options
996 parsoid=wt2html
997 !! wikitext
998 ''foo''''bar''''
999 !! html/*
1000 <p><i>foo'<b>bar'</b></i>
1001 </p>
1002 !! end
1003
1004 # same html as previous, but wikitext adjusted to match parsoid html2wt
1005 !! test
1006 Italics and bold: multiple quote sequences: (2,4,4+2) w/ nowiki
1007 !! wikitext
1008 ''foo'<nowiki/>'''bar'<nowiki/>'''''
1009 !! html
1010 <p><i>foo'<b>bar'</b></i>
1011 </p>
1012 !! end
1013
1014 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
1015 !! test
1016 Italics and bold: multiple quote sequences: (3,4,2)
1017 !! options
1018 parsoid=wt2html
1019 !! wikitext
1020 '''foo''''bar''
1021 !! html/php
1022 <p><b>foo'</b>bar
1023 </p>
1024 !! html/parsoid
1025 <p><b>foo'</b>bar<i></i>
1026 </p>
1027 !! end
1028
1029 # same html as previous, but wikitext adjusted to match parsoid html2wt
1030 !! test
1031 Italics and bold: multiple quote sequences: (3,4,2+2) w/ nowiki
1032 !! wikitext
1033 '''foo''''bar''<nowiki/>''
1034 !! html/php
1035 <p><b>foo'</b>bar
1036 </p>
1037 !! html/parsoid
1038 <p><b>foo'</b>bar<i></i>
1039 </p>
1040 !! end
1041
1042 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
1043 !! test
1044 Italics and bold: multiple quote sequences: (3,4,3)
1045 !! options
1046 parsoid=wt2html
1047 !! wikitext
1048 '''foo''''bar'''
1049 !! html/php
1050 <p><b>foo'</b>bar
1051 </p>
1052 !! html/parsoid
1053 <p><b>foo'</b>bar<b></b>
1054 </p>
1055 !! end
1056
1057 # same html as previous, but wikitext adjusted to match parsoid html2wt
1058 !! test
1059 Italics and bold: multiple quote sequences: (3,4,3+3) w/ nowiki
1060 !! wikitext
1061 '''foo''''bar'''<nowiki/>'''
1062 !! html/php
1063 <p><b>foo'</b>bar
1064 </p>
1065 !! html/parsoid
1066 <p><b>foo'</b>bar<b></b>
1067 </p>
1068 !! end
1069
1070 ###
1071 ### other quote tests
1072 ###
1073 !! test
1074 Italics and bold: other quote tests: (2,3,5)
1075 !! wikitext
1076 ''this is about '''foo's family'''''
1077 !! html
1078 <p><i>this is about <b>foo's family</b></i>
1079 </p>
1080 !!end
1081
1082
1083 !! test
1084 Italics and bold: other quote tests: (2,(3,3),2)
1085 !! wikitext
1086 ''this is about '''foo's''' family''
1087 !! html
1088 <p><i>this is about <b>foo's</b> family</i>
1089 </p>
1090 !!end
1091
1092
1093 !! test
1094 Italics and bold: other quote tests: (3,2,3,2)
1095 !! options
1096 parsoid=wt2html
1097 !! wikitext
1098 '''this is about ''foo'''s family''
1099 !! html/*
1100 <p><b>this is about <i>foo</i></b><i>s family</i>
1101 </p>
1102 !!end
1103
1104
1105 # same html as previous, but wikitext adjusted to match parsoid html2wt
1106 !! test
1107 Italics and bold: other quote tests: (3,2,3+2+2,2)
1108 !! wikitext
1109 '''this is about ''foo'''''<nowiki/>''s family''
1110 !! html
1111 <p><b>this is about <i>foo</i></b><i>s family</i>
1112 </p>
1113 !! end
1114
1115
1116 !! test
1117 Italics and bold: other quote tests: (3,2,3,3)
1118 !! wikitext
1119 '''this is about ''foo'''s family'''
1120 !! html/*
1121 <p>'<i>this is about </i>foo<b>s family</b>
1122 </p>
1123 !!end
1124
1125
1126 !! test
1127 Italics and bold: other quote tests: (3,(2,2),3)
1128 !! wikitext
1129 '''this is about ''foo's'' family'''
1130 !! html
1131 <p><b>this is about <i>foo's</i> family</b>
1132 </p>
1133 !!end
1134
1135
1136 !! test
1137 Italicized possessive
1138 !! wikitext
1139 The ''[[Main Page]]'''s talk page.
1140 !! html/php
1141 <p>The <i><a href="/wiki/Main_Page" title="Main Page">Main Page</a>'</i>s talk page.
1142 </p>
1143 !! html/parsoid
1144 <p>The <i><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a>'</i>s talk page.</p>
1145 !! end
1146
1147 !! test
1148 Parsoid only: Quote balancing context should be restricted to td/th cells on the same wikitext line
1149 (Requires tidy for PHP parser output to be fixed up)
1150 !! options
1151 parsoid=wt2html,wt2wt
1152 !! wikitext
1153 {|
1154 !''a!!''b
1155 |''a||''b
1156 |}
1157 !! html/php+tidy
1158 <table>
1159 <tr>
1160 <th><i>a</i></th>
1161 <th><i>b</i></th>
1162 <td><i>a</i></td>
1163 <td><i>b</i></td>
1164 </tr>
1165 </table>
1166 !! html/parsoid
1167 <table>
1168 <tbody><tr><th><i>a</i></th><th><i>b</i></th>
1169 <td><i>a</i></td><td><i>b</i></td></tr>
1170 </tbody></table>
1171 !! end
1172
1173 ###
1174 ### Non-html5 tags
1175 ###
1176
1177 !! test
1178 Non-html5 tags should be accepted
1179 !! wikitext
1180 <center>''foo''</center>
1181 <big>''foo''</big>
1182 <font>''foo''</font>
1183 <strike>''foo''</strike>
1184 <tt>''foo''</tt>
1185 !! html
1186 <center><i>foo</i></center>
1187 <p><big><i>foo</i></big>
1188 <font><i>foo</i></font>
1189 <strike><i>foo</i></strike>
1190 <tt><i>foo</i></tt>
1191 </p>
1192 !! end
1193
1194 !! test
1195 <wbr> is valid wikitext (T54468)
1196 !! wikitext
1197 <wbr>
1198 !! html
1199 <p><wbr />
1200 </p>
1201 !! end
1202
1203 # <strike> is HTML4, <s> is HTML4/5.
1204 !! test
1205 <s> or <strike> for strikethrough
1206 !! wikitext
1207 <strike>strike</strike>
1208
1209 <s>s</s>
1210 !! html
1211 <p><strike>strike</strike>
1212 </p><p><s>s</s>
1213 </p>
1214 !! end
1215
1216 ## a not permitted
1217 ## i,b,br omitted
1218 !! test
1219 Text-level semantic html elements in wikitext
1220 !! wikitext
1221 <em>text</em>
1222 <strong>text</strong>
1223 <small>text</small>
1224 <s>text</s>
1225 <cite>text</cite>
1226 <q>text</q>
1227 <dfn>text</dfn>
1228 <abbr>text</abbr>
1229 <data>text</data>
1230 <time>text</time>
1231 <code>text</code>
1232 <var>text</var>
1233 <samp>text</samp>
1234 <kbd>text</kbd>
1235 <sub>text</sub>
1236 <u>text</u>
1237 <mark>text</mark>
1238 <ruby><rb>明日</rb><rp>(</rp><rt>Ashita</rt><rp> </rp><rtc>あした</rtc><rp>)</rp></ruby>
1239 <bdi>text</bdi>
1240 <bdo>text</bdo>
1241 <span>text</span>
1242 <wbr />
1243 !! html
1244 <p><em>text</em>
1245 <strong>text</strong>
1246 <small>text</small>
1247 <s>text</s>
1248 <cite>text</cite>
1249 <q>text</q>
1250 <dfn>text</dfn>
1251 <abbr>text</abbr>
1252 <data>text</data>
1253 <time>text</time>
1254 <code>text</code>
1255 <var>text</var>
1256 <samp>text</samp>
1257 <kbd>text</kbd>
1258 <sub>text</sub>
1259 <u>text</u>
1260 <mark>text</mark>
1261 <ruby><rb>明日</rb><rp>(</rp><rt>Ashita</rt><rp> </rp><rtc>あした</rtc><rp>)</rp></ruby>
1262 <bdi>text</bdi>
1263 <bdo>text</bdo>
1264 <span>text</span>
1265 <wbr />
1266 </p>
1267 !! end
1268
1269 # test cases taken from
1270 # https://www.w3.org/TR/html5/text-level-semantics.html#the-ruby-element
1271 !! test
1272 Ruby markup (W3C-style)
1273 !! wikitext
1274 ; Mono-ruby for individual base characters
1275 : <ruby>日<rt>に</rt>本<rt>ほん</rt>語<rt>ご</rt></ruby>
1276 ; Group ruby
1277 : <ruby>今日<rt>きょう</rt></ruby>
1278 ; Jukugo ruby
1279 : <ruby>法<rb>華</rb><rb>経</rb><rt>ほ</rt><rt>け</rt><rt>きょう</rt></ruby>
1280 ; Inline ruby
1281 : <ruby>東<rb>京</rb><rp>(</rp><rt>とう</rt><rt>きょう</rt><rp>)</rp></ruby>
1282 ; Double-sided ruby
1283 : <ruby><rb>旧</rb><rb>金</rb><rb>山</rb><rt>jiù</rt><rt>jīn</rt><rt>shān</rt><rtc>San Francisco</rtc></ruby>
1284 <ruby>
1285 <rb>♥</rb><rtc><rt>Heart</rt></rtc><rtc lang="fr"><rt>Cœur</rt></rtc>
1286 <rb>☘</rb><rtc><rt>Shamrock</rt></rtc><rtc lang="fr"><rt>Trèfle</rt></rtc>
1287 <rb>✶</rb><rtc><rt>Star</rt></rtc><rtc lang="fr"><rt>Étoile</rt></rtc>
1288 </ruby>
1289 !! html
1290 <dl><dt> Mono-ruby for individual base characters</dt>
1291 <dd> <ruby>日<rt>に</rt>本<rt>ほん</rt>語<rt>ご</rt></ruby></dd>
1292 <dt> Group ruby</dt>
1293 <dd> <ruby>今日<rt>きょう</rt></ruby></dd>
1294 <dt> Jukugo ruby</dt>
1295 <dd> <ruby>法<rb>華</rb><rb>経</rb><rt>ほ</rt><rt>け</rt><rt>きょう</rt></ruby></dd>
1296 <dt> Inline ruby</dt>
1297 <dd> <ruby>東<rb>京</rb><rp>(</rp><rt>とう</rt><rt>きょう</rt><rp>)</rp></ruby></dd>
1298 <dt> Double-sided ruby</dt>
1299 <dd> <ruby><rb>旧</rb><rb>金</rb><rb>山</rb><rt>jiù</rt><rt>jīn</rt><rt>shān</rt><rtc>San Francisco</rtc></ruby></dd></dl>
1300 <p><ruby>
1301 <rb>♥</rb><rtc><rt>Heart</rt></rtc><rtc lang="fr"><rt>Cœur</rt></rtc>
1302 <rb>☘</rb><rtc><rt>Shamrock</rt></rtc><rtc lang="fr"><rt>Trèfle</rt></rtc>
1303 <rb>✶</rb><rtc><rt>Star</rt></rtc><rtc lang="fr"><rt>Étoile</rt></rtc>
1304 </ruby>
1305 </p>
1306 !! end
1307
1308 # The next two test different paths in the sanitizer.
1309 !! test
1310 Non-word characters don't terminate tag names (T19663, T42670, T54022)
1311 !! wikitext
1312 <blockquote|>a</blockquote>
1313
1314 <b→> doesn't terminate </b→>
1315
1316 <bä> doesn't terminate </bä>
1317
1318 <boo> doesn't terminate </boo>
1319
1320 <s.foo> doesn't terminate </s.foo>
1321
1322 <sub-ID#1>
1323 !! html
1324 <p>&lt;blockquote|&gt;a&lt;/blockquote&gt;
1325 </p><p>&lt;b→&gt; doesn't terminate &lt;/b→&gt;
1326 </p><p>&lt;bä&gt; doesn't terminate &lt;/bä&gt;
1327 </p><p>&lt;boo&gt; doesn't terminate &lt;/boo&gt;
1328 </p><p>&lt;s.foo&gt; doesn't terminate &lt;/s.foo&gt;
1329 </p><p>&lt;sub-ID#1&gt;
1330 </p>
1331 !! end
1332
1333 # There is a tidy bug here: https://sourceforge.net/p/tidy/bugs/946/
1334 # If the non-word-character tag made it through the sanitizer, tidy
1335 # would munge it up.
1336 !! test
1337 Non-word characters don't terminate tag names + tidy
1338 !! wikitext
1339 <blockquote|>a</blockquote>
1340
1341 <b→> doesn't terminate </b→>
1342
1343 <bä> doesn't terminate </bä>
1344
1345 <boo> doesn't terminate </boo>
1346
1347 <s.foo> doesn't terminate </s.foo>
1348
1349 <sub-ID#1>
1350 !! html+tidy
1351 <p>&lt;blockquote|&gt;a</p>
1352 <p>&lt;b→&gt; doesn't terminate &lt;/b→&gt;</p>
1353 <p>&lt;bä&gt; doesn't terminate &lt;/bä&gt;</p>
1354 <p>&lt;boo&gt; doesn't terminate &lt;/boo&gt;</p>
1355 <p>&lt;s.foo&gt; doesn't terminate &lt;/s.foo&gt;</p>
1356 <p>&lt;sub-ID#1&gt;</p>
1357 !! end
1358
1359 ###
1360 ### See tests/parser/parserTestsParserHook.php for the <tåg> extension)
1361 ### This checks that HTML5 tags (with non-word characters in the tag
1362 ### name) make it safely through the parser -- the Sanitizer will
1363 ### munge them later, as it should.
1364 ###
1365 !! test
1366 Non-word characters are valid in extension tags (T19663)
1367 !! wikitext
1368 <tåg>tåg</tåg>
1369 !! html/php
1370 <pre>
1371 'tåg'
1372 array (
1373 )
1374 </pre>
1375
1376 !! html/parsoid
1377 <pre typeof="mw:Extension/tåg" data-mw='{"name":"tåg","attrs":{},"body":{"extsrc":"tåg"}}' data-parsoid='{}' about="#mwt2"></pre>
1378 !! end
1379
1380 !! test
1381 Isolated close tags should be treated as literal text (T54760)
1382 !! options
1383 parsoid=wt2html
1384 !! wikitext
1385 </b>
1386
1387 <s.foo>s</s>
1388 !! html/php+tidy
1389 <p>&lt;s.foo&gt;s</p>
1390 !! html/parsoid
1391 <p>&lt;s.foo&gt;s</p>
1392 !! end
1393
1394 ###
1395 ### Special characters
1396 ###
1397
1398 !! test
1399 Bare pipe character (T54363)
1400 !! wikitext
1401 |
1402 !! html
1403 <p>|
1404 </p>
1405 !! end
1406
1407 !! test
1408 Bare pipe character from a template (T54363)
1409 !! wikitext
1410 {{pipe}}
1411 !! html
1412 <p>|
1413 </p>
1414 !! end
1415
1416 ###
1417 ### <nowiki> test cases
1418 ###
1419
1420 !! test
1421 <nowiki> unordered list
1422 !! wikitext
1423 <nowiki>* This is not an unordered list item.</nowiki>
1424 !! html/php
1425 <p>* This is not an unordered list item.
1426 </p>
1427 !! html/parsoid
1428 <p><span typeof="mw:Nowiki">* This is not an unordered list item.</span></p>
1429 !! end
1430
1431 !! test
1432 <nowiki> spacing
1433 !! wikitext
1434 <nowiki>Lorem ipsum dolor
1435
1436 sed abit.
1437 sed nullum.
1438
1439 :and a colon
1440 </nowiki>
1441 !! html/php
1442 <p>Lorem ipsum dolor
1443
1444 sed abit.
1445 sed nullum.
1446
1447 :and a colon
1448
1449 </p>
1450 !! html/parsoid
1451 <p><span typeof="mw:Nowiki">Lorem ipsum dolor
1452
1453 sed abit.
1454 sed nullum.
1455
1456 :and a colon
1457 </span></p>
1458 !! end
1459
1460 !! test
1461 Don't parse <nowiki><span class="error"></nowiki> (T149622)
1462 !! wikitext
1463 <nowiki><span class="error"></nowiki>
1464 !! html/php
1465 <p>&lt;span class="error"&gt;
1466 </p>
1467 !! html/parsoid
1468 <p><span typeof="mw:Nowiki">&lt;span class="error"></span></p>
1469 !! end
1470
1471 !! test
1472 nowiki 3
1473 !! wikitext
1474 :There is not nowiki.
1475 :There is <nowiki>nowiki</nowiki>.
1476
1477 #There is not nowiki.
1478 #There is <nowiki>nowiki</nowiki>.
1479
1480 *There is not nowiki.
1481 *There is <nowiki>nowiki</nowiki>.
1482 !! html/php
1483 <dl><dd>There is not nowiki.</dd>
1484 <dd>There is nowiki.</dd></dl>
1485 <ol><li>There is not nowiki.</li>
1486 <li>There is nowiki.</li></ol>
1487 <ul><li>There is not nowiki.</li>
1488 <li>There is nowiki.</li></ul>
1489
1490 !! html/parsoid
1491 <dl><dd data-parsoid='{}'>There is not nowiki.</dd>
1492 <dd data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</dd></dl>
1493
1494 <ol><li data-parsoid='{}'>There is not nowiki.</li>
1495 <li data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</li></ol>
1496
1497 <ul><li data-parsoid='{}'>There is not nowiki.</li>
1498 <li data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</li></ul>
1499 !! end
1500
1501 !! test
1502 Entities inside <nowiki>
1503 !! wikitext
1504 <nowiki>&lt;</nowiki>
1505 !! html/php
1506 <p>&lt;
1507 </p>
1508 !! html/parsoid
1509 <p><span typeof="mw:Nowiki"><span typeof="mw:Entity" data-parsoid='{"src":"&amp;lt;","srcContent":"&lt;"}'>&lt;</span></span></p>
1510 !! end
1511
1512 !! test
1513 Entities inside template parameters
1514 !! wikitext
1515 {{echo|&ndash;}}
1516 !! html/php+tidy
1517 <p>–</p>
1518 !! html/parsoid
1519 <p><span typeof="mw:Transclusion mw:Entity" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}}]}'>&ndash;</span></p>
1520 !! end
1521
1522 !! test
1523 Properly escape nowiki when combined with other wiki markup
1524 !! options
1525 parsoid=html2wt
1526 !! html/parsoid
1527 <p>* &lt;/nowiki&gt; tag</p>
1528 !! wikitext
1529 <nowiki>*</nowiki> <nowiki>&lt;/nowiki&gt;</nowiki> tag
1530 !! end
1531
1532 !! test
1533 T93824: Put escaped HTML tags inside nowiki
1534 !! options
1535 parsoid=html2wt
1536 !! html/parsoid
1537 <p>&lt;h2&gt;foo&lt;/h2&gt;</p>
1538 !! wikitext
1539 <nowiki><h2>foo</h2></nowiki>
1540 !! end
1541
1542 !! test
1543 T71950: 1. Put nowiki as close to cause as possible, even with non-quote escapable chars
1544 !! options
1545 parsoid=html2wt
1546 !! html/parsoid
1547 <p>This text: L'<a rel="mw:WikiLink" href="./Foo">Foo</a>
1548 This text: L''<a rel="mw:WikiLink" href="./Foo">Foo</a>
1549 This text: L'''<a rel="mw:WikiLink" href="./Foo">Foo</a>''</p>
1550 !! wikitext
1551 This text: L'[[Foo]]
1552 This text: L<nowiki>''</nowiki>[[Foo]]
1553 This text: L<nowiki>'''</nowiki>[[Foo]]<nowiki>''</nowiki>
1554 !! end
1555
1556 # This test fails because wikitext whitespace is not normalized before comparing.
1557 !! test
1558 T71950: 2. Put nowiki as close to cause as possible, after ' :'
1559 !! options
1560 parsoid=html2wt
1561 !! html/parsoid
1562 <p>This text : L''<a rel="mw:WikiLink" href="./Foo">Foo</a>
1563 </p>
1564 !! wikitext
1565 This text : L<nowiki>''</nowiki>[[Foo]]
1566 !! end
1567
1568 # This test and the next one are html2wt only as they test that incorrect wikitext
1569 # passed in template arguments gets escaped or wrapped in nowikis where required.
1570 !! test
1571 T71482: Use {{!}} instead of nowiki for single pipe in template argument
1572 !! options
1573 parsoid=html2wt
1574 !! html/parsoid
1575 <p><span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo|bar&quot;}},&quot;i&quot;:0}}]}" about="#mwt1"></span>
1576 <span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo|bar |[[&quot;}},&quot;i&quot;:0}}]}" about="#mwt2"></p>
1577 !! wikitext
1578 {{echo|foo{{!}}bar}}
1579 {{echo|<nowiki>foo|bar |[[</nowiki>}}
1580 !! end
1581
1582 !! test
1583 T53961: Output correct nowikis in template arguments
1584 !! options
1585 parsoid=html2wt
1586 !! html/parsoid
1587 <p><span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a [ b&quot;}},&quot;i&quot;:0}}]}" about="#mwt1"></span>
1588 <span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a }} b&quot;}},&quot;i&quot;:0}}]}" about="#mwt2"></span>
1589 <span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a [[ b&quot;}},&quot;i&quot;:0}}]}" about="#mwt3"></span>
1590 <span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a | {{ ]]&quot;}},&quot;i&quot;:0}}]}" about="#mwt4"></span>
1591 <span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a }&quot;}},&quot;i&quot;:0}}]}" about="#mwt5"></span></p>
1592 !! wikitext
1593 {{echo|a [ b}}
1594 {{echo|<nowiki>a }} b</nowiki>}}
1595 {{echo|<nowiki>a [[ b</nowiki>}}
1596 {{echo|<nowiki>a | {{ ]]</nowiki>}}
1597 {{echo|a <nowiki>}</nowiki>}}
1598 !! end
1599
1600 !! test
1601 Cases where "!!" needs nowiki protection
1602 !! options
1603 parsoid=html2wt
1604 !! html/parsoid
1605 <table>
1606 <tr><th>this needs protection !! here</th></tr>
1607 </table>
1608
1609 <table>
1610 <tr><th>this does not need
1611 protection !! here</th></tr>
1612 </table>
1613 !! wikitext
1614 {|
1615 !<nowiki>this needs protection !! here</nowiki>
1616 |}
1617
1618 {|
1619 !this does not need
1620 protection !! here
1621 |}
1622 !! end
1623
1624 ###
1625 ### Comments
1626 ###
1627 !! test
1628 Comments and Indent-Pre
1629 !! wikitext
1630 <!-- comment 1 --> asdf
1631
1632 <!-- comment 1 --> asdf
1633 <!-- comment 2 -->
1634
1635 <!-- comment 1 --> asdf
1636 <!-- comment 2 -->xyz
1637
1638 <!-- comment 1 --> asdf
1639 <!-- comment 2 --> xyz
1640 !! html
1641 <pre>asdf
1642 </pre>
1643 <pre>asdf
1644 </pre>
1645 <pre>asdf
1646 </pre>
1647 <p>xyz
1648 </p>
1649 <pre>asdf
1650 xyz
1651 </pre>
1652 !! end
1653
1654 !! test
1655 Comment test 2a
1656 !! wikitext
1657 asdf
1658 <!-- comment 1 -->
1659 jkl
1660 !! html
1661 <p>asdf
1662 jkl
1663 </p>
1664 !! end
1665
1666 !! test
1667 Comment test 2b
1668 !! wikitext
1669 asdf
1670 <!-- comment 1 -->
1671
1672 jkl
1673 !! html
1674 <p>asdf
1675 </p><p>jkl
1676 </p>
1677 !! end
1678
1679 !! test
1680 Comment test 3
1681 !! wikitext
1682 asdf
1683 <!-- comment 1 -->
1684 <!-- comment 2 -->
1685 jkl
1686 !! html
1687 <p>asdf
1688 jkl
1689 </p>
1690 !! end
1691
1692 !! test
1693 Comment test 4
1694 !! wikitext
1695 asdf<!-- comment 1 -->jkl
1696 !! html
1697 <p>asdfjkl
1698 </p>
1699 !! end
1700
1701 !! test
1702 Comment spacing
1703 !! wikitext
1704 a
1705 <!-- foo --> b <!-- bar -->
1706 c
1707 !! html
1708 <p>a
1709 </p>
1710 <pre> b
1711 </pre>
1712 <p>c
1713 </p>
1714 !! end
1715
1716 !! test
1717 Comment whitespace
1718 !! wikitext
1719 <!-- returns a single newline, not nothing, since the newline after > is not stripped -->
1720 !! html
1721
1722 !! end
1723
1724 !! test
1725 Comment semantics and delimiters
1726 !! wikitext
1727 <!-- --><!----><!-----><!------>
1728 !! html/php
1729
1730 !! html/parsoid
1731 <!-- --><!----><!--&#x2D;--><!--&#x2D;&#x2D;-->
1732 !! end
1733
1734 !! test
1735 Comment semantics and delimiters, redux
1736 !! wikitext
1737 <!-- In SGML every "foo" here would actually show up in the text -- foo -- bar
1738 -- foo -- funky huh? ... -->
1739 !! html/php
1740
1741 !! html/parsoid
1742 <!-- In SGML every "foo" here would actually show up in the text &#x2D;&#x2D; foo &#x2D;&#x2D; bar
1743 &#x2D;&#x2D; foo &#x2D;&#x2D; funky huh? ... -->
1744 !! end
1745
1746 !! test
1747 Comment semantics and delimiters: directors cut
1748 !! wikitext
1749 <!-- ... However we like to keep things simple and somewhat XML-ish so we eat
1750 everything starting with < followed by !-- until the first -- and > we see,
1751 that wouldn't be valid XML however, since in XML -- has to terminate a comment
1752 -->-->
1753 !! html/php
1754 <p>--&gt;
1755 </p>
1756 !! html/parsoid
1757 <!-- ... However we like to keep things simple and somewhat XML&#x2D;ish so we eat
1758 everything starting with < followed by !&#x2D;&#x2D; until the first &#x2D;&#x2D; and &#x3E; we see,
1759 that wouldn't be valid XML however, since in XML &#x2D;&#x2D; has to terminate a comment
1760 --><p>--></p>
1761 !! end
1762
1763 !! test
1764 Comment semantics: nesting
1765 !! wikitext
1766 <!--<!-- no, we're not going to do anything fancy here -->-->
1767 !! html/php
1768 <p>--&gt;
1769 </p>
1770 !! html/parsoid
1771 <!--<!&#x2D;&#x2D; no, we're not going to do anything fancy here --><p>--></p>
1772 !! end
1773
1774 # Parsoid closes the unclosed comment, even if it means a slight
1775 # round-trip diff.
1776 !! test
1777 Comment semantics: unclosed comment at end
1778 !! options
1779 parsoid=wt2html,html2html
1780 !! wikitext
1781 <!--This comment will run out to the end of the document
1782 !! html/php
1783
1784 !! html/parsoid
1785 <!--This comment will run out to the end of the document-->
1786 !! end
1787
1788 !! test
1789 Comment semantics: normalize comments to play nice with XML and browsers
1790 !! wikitext
1791 <!-- Browsers --!> think this is closed -->
1792 <!--> This would normally be text -->
1793 <!---> As would this -->
1794 <!-- XML doesn't like trailing dashes -------->
1795 <!-- Nor doubled hyphens -- anywhere in the data -->
1796 But this is not a comment.
1797 !! html/php
1798 <p>But this is not a comment.
1799 </p>
1800 !! html/parsoid
1801 <!-- Browsers &#x2D;&#x2D;!&#x3E; think this is closed -->
1802 <!--&#x3E; This would normally be text -->
1803 <!--&#x2D;&#x3E; As would this -->
1804 <!-- XML doesn't like trailing dashes &#x2D;&#x2D;&#x2D;&#x2D;&#x2D;&#x2D;-->
1805 <!-- Nor doubled hyphens &#x2D;&#x2D; anywhere in the data -->
1806 <p>But this is not a comment.</p>
1807 !! end
1808
1809 !! test
1810 Comment semantics: round-trip even text which contains encoded -->
1811 !! wikitext
1812 <!-- hello & goodbye - > --&gt; --&amp;gt; --&xx -->
1813 !! html/parsoid
1814 <!-- hello &#x26; goodbye &#x2D; &#x3E; &#x2D;&#x2D;&#x3E; &#x2D;&#x2D;&#x26;gt; &#x2D;&#x2D;&#x26;xx -->
1815 !! end
1816
1817 !! test
1818 Comment in template title
1819 !! wikitext
1820 {{f<!---->oo}}
1821 !! html
1822 <p>FOO
1823 </p>
1824 !! end
1825
1826 !! test
1827 Comment on its own line post-expand
1828 !! wikitext
1829 a
1830 {{blank}}<!---->
1831 b
1832 !! html
1833 <p>a
1834 </p><p>b
1835 </p>
1836 !! end
1837
1838 !! test
1839 Comment on its own line post-expand with non-significant whitespace
1840 !! wikitext
1841 a
1842 {{blank}} <!---->
1843 b
1844 !! html
1845 <p>a
1846 </p><p>b
1847 </p>
1848 !! end
1849
1850 !! test
1851 Multiple comments should still parse as SOL-transparent
1852 !! options
1853 parsoid=wt2html,wt2wt
1854 !! wikitext
1855 <!--c1-->*a
1856 <!--c2--><!--c3--><!--c4-->*b
1857 !! html/php
1858 <ul><li>a</li>
1859 <li>b</li></ul>
1860
1861 !! html/parsoid
1862 <!--c1--><ul>
1863 <li>a
1864 </li>
1865 <!--c2--><!--c3--><!--c4-->
1866 <li>b
1867 </li>
1868 </ul>
1869 !! end
1870
1871 ## Make sure ">" gets escaped in comments to avoid XSS
1872 !! test
1873 IE conditional comments
1874 !! wikitext
1875 <!--[if lt IE 9]>
1876 <script>alert('hi');</script>
1877 <![endif]-->
1878 !! html/parsoid
1879 <!--[if lt IE 9]&#x3E;
1880 <script&#x3E;alert('hi');</script&#x3E;
1881 <![endif]-->
1882 !! end
1883
1884 ###
1885 ### paragraph wrapping tests
1886 ###
1887 !! test
1888 No block tags
1889 !! wikitext
1890 a
1891
1892 b
1893 !! html
1894 <p>a
1895 </p><p>b
1896 </p>
1897 !! end
1898
1899 !! test
1900 Block tag on one line (<div>)
1901 !! wikitext
1902 a <div>foo</div>
1903
1904 b
1905 !! html
1906 a <div>foo</div>
1907 <p>b
1908 </p>
1909 !! html+tidy
1910 <p>a</p>
1911 <div>foo</div>
1912 <p>b</p>
1913 !! end
1914
1915 !! test
1916 No p-wrappable content
1917 !! wikitext
1918 <span><div>x</div></span>
1919 <span><s><div>x</div></s></span>
1920 <small><em></em></small><span><s><div>x</div></s></span>
1921 !! html+tidy
1922 <div><span>x</span></div>
1923 <div><span><s>x</s></span></div>
1924 <div><span><s>x</s></span></div>
1925 !! html/parsoid
1926 <span><div>x</div></span>
1927 <span><s><div>x</div></s></span>
1928 <small><em></em></small><span><s><div>x</div></s></span>
1929 !! end
1930
1931 # T177612: Parsoid-only test
1932 !! test
1933 Transclusion meta tags shouldn't trip Parsoid's useless p-wrapper stripping code
1934 !! wikitext
1935 {{echo|<span><div>x</div></span>}}
1936 x
1937 !! html/parsoid
1938 <span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;span>&lt;div>x&lt;/div>&lt;/span>"}},"i":0}}]}'><div>x</div></span>
1939 <p>x</p>
1940 !! end
1941
1942 !! test
1943 Block tag on one line (<blockquote>)
1944 !! wikitext
1945 a <blockquote>foo</blockquote>
1946
1947 b
1948 !! html
1949 a <blockquote>foo</blockquote>
1950 <p>b
1951 </p>
1952 !! html+tidy
1953 <p>a</p>
1954 <blockquote>
1955 <p>foo</p>
1956 </blockquote>
1957 <p>b</p>
1958 !! end
1959
1960 !! test
1961 Block tag on both lines (<div>)
1962 !! wikitext
1963 a <div>foo</div>
1964
1965 b <div>foo</div>
1966 !! html
1967 a <div>foo</div>
1968 b <div>foo</div>
1969
1970 !! html+tidy
1971 <p>a</p>
1972 <div>foo</div>
1973 <p>b</p>
1974 <div>foo</div>
1975 !! end
1976
1977 !! test
1978 Block tag on both lines (<blockquote>)
1979 !! wikitext
1980 a <blockquote>foo</blockquote>
1981
1982 b <blockquote>foo</blockquote>
1983 !! html
1984 a <blockquote>foo</blockquote>
1985 b <blockquote>foo</blockquote>
1986
1987 !! html+tidy
1988 <p>a</p>
1989 <blockquote>
1990 <p>foo</p>
1991 </blockquote>
1992 <p>b</p>
1993 <blockquote>
1994 <p>foo</p>
1995 </blockquote>
1996 !! end
1997
1998 !! test
1999 Multiple lines without block tags
2000 !! wikitext
2001 <div>foo</div> a
2002 b
2003 c
2004 d<!--foo--> e
2005 x <div>foo</div> z
2006 !! html
2007 <div>foo</div> a
2008 <p>b
2009 c
2010 d e
2011 </p>
2012 x <div>foo</div> z
2013
2014 !! html+tidy
2015 <div>foo</div>
2016 <p>a</p>
2017 <p>b c d e</p>
2018 <p>x</p>
2019 <div>foo</div>
2020 <p>z</p>
2021 !! end
2022
2023 # Tidy strips out the empty <div> tags. Parsoid doesn't.
2024 # So, we have a separate section for Parsoid. We don't want
2025 # to mimic this stripping behavior in Parsoid. It affects
2026 # editing experience and also requires us to maintain additional
2027 # info for RT-ing.
2028 !! test
2029 Empty lines between lines with block tags
2030 !! wikitext
2031 <div></div>
2032
2033
2034 <div></div>a
2035
2036 b
2037 <div>a</div>b
2038
2039 <div>b</div>d
2040
2041
2042 <div>e</div>
2043 !! html
2044 <div></div>
2045 <p><br />
2046 </p>
2047 <div></div>a
2048 <p>b
2049 </p>
2050 <div>a</div>b
2051 <div>b</div>d
2052 <p><br />
2053 </p>
2054 <div>e</div>
2055
2056 !! html+tidy
2057 <p><br /></p>
2058 <p>a</p>
2059 <p>b</p>
2060 <div>a</div>
2061 <p>b</p>
2062 <div>b</div>
2063 <p>d</p>
2064 <p><br /></p>
2065 <div>e</div>
2066 !! html/parsoid
2067 <div data-parsoid='{"stx":"html"}'></div>
2068
2069 <p><br /></p>
2070 <div data-parsoid='{"stx":"html"}'></div><p>a</p>
2071
2072 <p>b</p>
2073 <div data-parsoid='{"stx":"html"}'>a</div><p>b</p>
2074
2075 <div data-parsoid='{"stx":"html"}'>b</div><p>d</p>
2076
2077 <p><br /></p>
2078 <div data-parsoid='{"stx":"html"}'>e</div>
2079 !! end
2080
2081 ## PHP parser emits output which is broken
2082 !! test
2083 Unclosed HTML p-tags should be handled properly
2084 !! wikitext
2085 <div><p>foo</div>
2086 a
2087
2088 b
2089 !! html/php+tidy
2090 <div>
2091 <p>foo</p>
2092 </div>
2093 <p>a</p>
2094 <p>b</p>
2095 !! html/parsoid
2096 <div data-parsoid='{"stx":"html"}'><p data-parsoid='{"stx":"html", "autoInsertedEnd":true}'>foo</p></div>
2097 <p>a</p>
2098 <p>b</p>
2099 !! end
2100
2101 ## SSS FIXME: I can come up with other scenarios where this doesn't work because
2102 ## of eager output of buffered tokens in the p-wrapper. But, I'm going to ignore
2103 ## them for now.
2104 !! test
2105 1. P-wrapping should leave sol-transparent tags outside p-tags where possible
2106 !! options
2107 parsoid=wt2html
2108 !! wikitext
2109 a [[Category:A1]] [[Category:A2]]
2110 [[Category:A3]]
2111 [[Category:A4]]
2112 !! html/parsoid
2113 <p>a</p>
2114 <link rel="mw:PageProp/Category" href="./Category:A1"/> <link rel="mw:PageProp/Category" href="./Category:A2"/> <link rel="mw:PageProp/Category" href="./Category:A3"/> <link rel="mw:PageProp/Category" href="./Category:A4"/>
2115 !! end
2116
2117 !! test
2118 2. P-wrapping should leave sol-transparent tags outside p-tags where possible
2119 !! options
2120 parsoid=wt2html
2121 !! wikitext
2122 [[Category:A1]]a
2123 !! html/parsoid
2124 <link rel="mw:PageProp/Category" href="./Category:A1"/><p>a</p>
2125 !! end
2126
2127 ###
2128 ### Preformatted text
2129 ###
2130 !! test
2131 Preformatted text
2132 !! wikitext
2133 This is some
2134 Preformatted text
2135 With ''italic''
2136 And '''bold'''
2137 And a [[Main Page|link]]
2138 !! html
2139 <pre>This is some
2140 Preformatted text
2141 With <i>italic</i>
2142 And <b>bold</b>
2143 And a <a href="/wiki/Main_Page" title="Main Page">link</a>
2144 </pre>
2145 !! end
2146
2147 !! test
2148 Tabs don't trigger preformatted text
2149 !! wikitext
2150 This is not
2151 preformatted text.
2152 This is preformatted text.
2153 So is this.
2154 !! html/php
2155 <p> This is not
2156 preformatted text.
2157 </p>
2158 <pre>This is preformatted text.
2159 So is this.
2160 </pre>
2161 !! html/parsoid
2162 <p> This is not
2163 preformatted text.</p>
2164 <pre>This is preformatted text.
2165 So is this.</pre>
2166 !! end
2167
2168 !! test
2169 Space before tab needs nowiki pre protection
2170 !! options
2171 parsoid=html2wt
2172 !! html/parsoid
2173 <p> a</p>
2174 !! wikitext
2175 <nowiki> </nowiki> a
2176 !! end
2177
2178 !! test
2179 Ident preformatting with inline content
2180 !! wikitext
2181 a
2182 ''b''
2183 !! html
2184 <pre>a
2185 <i>b</i>
2186 </pre>
2187 !! end
2188
2189 !! test
2190 <pre> with <nowiki> inside (compatibility with 1.6 and earlier)
2191 !! wikitext
2192 <pre><nowiki>
2193 <b>
2194 <cite>
2195 <em>
2196 </nowiki></pre>
2197 !! html
2198 <pre>
2199 &lt;b&gt;
2200 &lt;cite&gt;
2201 &lt;em&gt;
2202 </pre>
2203
2204 !! end
2205
2206 !! test
2207 Regression with preformatted in <center>
2208 !! wikitext
2209 <center>
2210 Blah
2211 </center>
2212 !! html
2213 <center>
2214 <pre>Blah
2215 </pre>
2216 </center>
2217
2218 !! end
2219
2220 !! test
2221 T54763: Preformatted in <blockquote>
2222 !! wikitext
2223 <blockquote>
2224 Blah
2225 {|
2226 |
2227 indented cell (no pre-wrapping!)
2228 |}
2229 </blockquote>
2230 !! html
2231 <blockquote>
2232 <p> Blah
2233 </p>
2234 <table>
2235 <tr>
2236 <td>
2237 <p> indented cell (no pre-wrapping!)
2238 </p>
2239 </td></tr></table>
2240 </blockquote>
2241
2242 !! end
2243
2244 !! test
2245 T53086: Double newlines in blockquotes should be turned into paragraphs
2246 !! wikitext
2247 <blockquote>
2248 Foo
2249
2250 Bar
2251 </blockquote>
2252 !! html
2253 <blockquote>
2254 <p>Foo
2255 </p><p>Bar
2256 </p>
2257 </blockquote>
2258
2259 !! end
2260
2261 !! test
2262 T17491: <ins>/<del> in blockquote
2263 !! wikitext
2264 <blockquote>
2265 Foo <del>bar</del> <ins>baz</ins> quux
2266 </blockquote>
2267 !! html
2268 <blockquote>
2269 <p>Foo <del>bar</del> <ins>baz</ins> quux
2270 </p>
2271 </blockquote>
2272
2273 !! end
2274
2275 # Note that the p-wrapping is newline sensitive, which could be
2276 # considered a bug: tidy will wrap only the 'Foo' in the example
2277 # below in a <p> tag. (see comment 23-25 of T8200)
2278 !! test
2279 T17491: <ins>/<del> in blockquote (2)
2280 !! wikitext
2281 <blockquote>Foo <del>bar</del> <ins>baz</ins> quux
2282 </blockquote>
2283 !! html
2284 <blockquote>Foo <del>bar</del> <ins>baz</ins> quux
2285 </blockquote>
2286
2287 !! html+tidy
2288 <blockquote>
2289 <p>Foo</p>
2290 <del>bar</del> <ins>baz</ins> quux</blockquote>
2291 !! end
2292
2293 !! test
2294 <pre> with attributes (T5202)
2295 !! wikitext
2296 <pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>
2297 !! html
2298 <pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>
2299
2300 !! end
2301
2302 !! test
2303 <pre> with width attribute (T5202)
2304 !! wikitext
2305 <pre width="8">Narrow screen goodies</pre>
2306 !! html
2307 <pre width="8">Narrow screen goodies</pre>
2308
2309 !! end
2310
2311 !! test
2312 <pre> with forbidden attribute (T5202)
2313 !! wikitext
2314 <pre width="8" onmouseover="alert(document.cookie)">Narrow screen goodies</pre>
2315 !! html
2316 <pre width="8">Narrow screen goodies</pre>
2317
2318 !! end
2319
2320 !! test
2321 Entities inside <pre>
2322 !! wikitext
2323 <pre>&lt;</pre>
2324 !! html
2325 <pre>&lt;</pre>
2326
2327 !! end
2328
2329 !! test
2330 <pre> with forbidden attribute values (T5202)
2331 !! wikitext
2332 <pre width="8" style="border-width: expression(alert(document.cookie))">Narrow screen goodies</pre>
2333 !! html
2334 <pre width="8" style="/* insecure input */">Narrow screen goodies</pre>
2335
2336 !! end
2337
2338 !! test
2339 <nowiki> inside <pre> (T15238)
2340 !! wikitext
2341 <pre>
2342 <nowiki>
2343 </pre>
2344 <pre>
2345 <nowiki></nowiki>
2346 </pre>
2347 <pre><nowiki><nowiki></nowiki>Foo<nowiki></nowiki></nowiki></pre>
2348 !! html
2349 <pre>
2350 &lt;nowiki&gt;
2351 </pre>
2352 <pre>
2353
2354 </pre>
2355 <pre>&lt;nowiki&gt;Foo&lt;/nowiki&gt;</pre>
2356
2357 !! end
2358
2359 !! test
2360 <nowiki> inside of #tag:pre
2361 !! wikitext
2362 {{#tag:pre|Foo <nowiki>&rarr;bar</nowiki>}}
2363 !! html/php
2364 <pre>Foo &#8594;bar</pre>
2365
2366 !! html/parsoid
2367 <pre about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#tag:pre","function":"tag"},"params":{"1":{"wt":"Foo &lt;nowiki>&amp;rarr;bar&lt;/nowiki>"}},"i":0}}]}'>Foo <span typeof="mw:Entity">→</span>bar</pre>
2368 !! end
2369
2370 ## Don't expect this to rt, Parsoid drops the unmatched closing pre tags that
2371 ## aren't enclosed in nowikis.
2372 !! test
2373 <nowiki> and <pre> preference (first one wins)
2374 !! options
2375 parsoid=wt2html
2376 !! wikitext
2377 <pre>
2378 <nowiki>
2379 </pre>
2380 </nowiki>
2381 </pre>
2382
2383 <nowiki>
2384 <pre>
2385 <nowiki>
2386 </pre>
2387 </nowiki>
2388 </pre>
2389
2390 !! html/php
2391 <pre>
2392 &lt;nowiki&gt;
2393 </pre>
2394 <p>&lt;/nowiki&gt;
2395 &lt;/pre&gt;
2396 </p><p>
2397 &lt;pre&gt;
2398 &lt;nowiki&gt;
2399 &lt;/pre&gt;
2400
2401 &lt;/pre&gt;
2402 </p>
2403 !! html/parsoid
2404 <pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n&lt;nowiki>\n"}}'>&lt;nowiki>
2405 </pre>
2406 <p>&lt;/nowiki></p>
2407
2408
2409 <p><span typeof="mw:Nowiki">
2410 &lt;pre>
2411 &lt;nowiki>
2412 &lt;/pre>
2413 </span></p>
2414 !! end
2415
2416 !! test
2417 </pre> inside nowiki
2418 !! wikitext
2419 <nowiki></pre></nowiki>
2420 !! html
2421 <p>&lt;/pre&gt;
2422 </p>
2423 !! end
2424
2425 # Parsoid doesn't strip empty tags, like Tidy does.
2426 !! test
2427 Empty pre; pre inside other HTML tags (T56946)
2428 !! wikitext
2429 a
2430
2431 <div><pre>
2432 foo
2433 </pre></div>
2434 <pre></pre>
2435 !! html/php
2436 <p>a
2437 </p>
2438 <div><pre>
2439 foo
2440 </pre></div>
2441 <pre></pre>
2442
2443 !! html/php+tidy
2444 <p>a</p>
2445 <div>
2446 <pre>
2447 foo
2448 </pre></div>
2449 !! html/parsoid
2450 <p>a</p>
2451
2452 <div data-parsoid='{"stx":"html"}'><pre typeof="mw:Extension/pre" about="#mwt2" data-parsoid='{"stx":"html"}' data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\nfoo\n"}}'>foo
2453 </pre></div>
2454 <pre typeof="mw:Extension/pre" about="#mwt4" data-parsoid='{"stx":"html"}' data-mw='{"name":"pre","attrs":{},"body":{"extsrc":""}}'></pre>
2455 !! end
2456
2457 !! test
2458 HTML pre followed by indent-pre
2459 !! wikitext
2460 <pre>foo</pre>
2461 bar
2462 !! html
2463 <pre>foo</pre>
2464 <pre>bar
2465 </pre>
2466 !! end
2467
2468 # Note that tidy removes the empty <p> tags from the start and end.
2469 # Parsoid does not, by design.
2470 !! test
2471 Block tag pre
2472 !! wikitext
2473 <p><pre>foo</pre></p>
2474 !! html/php+tidy
2475 <pre>
2476 foo
2477 </pre>
2478 !! html/parsoid
2479 <p class='mw-empty-elt' data-parsoid='{"stx":"html","autoInsertedEnd":true}'></p><pre typeof="mw:Extension/pre" about="#mwt2" data-parsoid='{"stx":"html"}' data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"foo"}}'>foo</pre><p class='mw-empty-elt' data-parsoid='{"autoInsertedStart":true,"stx":"html"}'></p>
2480 !! end
2481
2482 !!test
2483 Templates: Indent-Pre: 1a. Templates that break a line should suppress <pre>
2484 !! wikitext
2485 {{echo|}}
2486 !! html
2487
2488 !!end
2489
2490 !!test
2491 Templates: Indent-Pre: 1b. Templates that break a line should suppress <pre>
2492 !! wikitext
2493 {{echo|
2494 foo}}
2495 !! html
2496 <p>foo
2497 </p>
2498 !!end
2499
2500 !! test
2501 Templates: Indent-Pre: 1c: Wrapping should be based on expanded content
2502 !! wikitext
2503 {{echo|a
2504 b}}
2505 !! html
2506 <pre>a
2507 </pre>
2508 <p>b
2509 </p>
2510 !!end
2511
2512 !! test
2513 Templates: Indent-Pre: 1d: Wrapping should be based on expanded content
2514 !! wikitext
2515 {{echo|a
2516 b
2517 c
2518 d
2519 e
2520 }}
2521 !! html
2522 <pre>a
2523 </pre>
2524 <p>b
2525 c
2526 </p>
2527 <pre>d
2528 </pre>
2529 <p>e
2530 </p>
2531 !!end
2532
2533 !!test
2534 Templates: Indent-Pre: 1e. Wrapping should be based on expanded content
2535 !! wikitext
2536 {{echo| foo}}
2537
2538 {{echo| foo}}{{echo| bar}}
2539
2540 {{echo| foo}}
2541 {{echo| bar}}
2542
2543 {{echo|<!--cmt--> foo}}
2544
2545 <!--cmt-->{{echo| foo}}
2546
2547 {{echo|{{echo| }}bar}}
2548 !! html
2549 <pre>foo
2550 </pre>
2551 <pre>foo bar
2552 </pre>
2553 <pre>foo
2554 bar
2555 </pre>
2556 <pre>foo
2557 </pre>
2558 <pre>foo
2559 </pre>
2560 <pre>bar
2561 </pre>
2562 !!end
2563
2564 !! test
2565 Templates: Indent-Pre: 1f: Wrapping should be based on expanded content
2566 !! wikitext
2567 {{echo| }}a
2568
2569 {{echo|
2570 }}a
2571
2572 {{echo|
2573 b}}
2574
2575 {{echo|a
2576 }}b
2577
2578 {{echo|a
2579 }} b
2580 !! html
2581 <pre>a
2582 </pre>
2583 <p><br />
2584 </p>
2585 <pre>a
2586 </pre>
2587 <p><br />
2588 </p>
2589 <pre>b
2590 </pre>
2591 <p>a
2592 </p>
2593 <pre>b
2594 </pre>
2595 <p>a
2596 </p>
2597 <pre>b
2598 </pre>
2599 !!end
2600
2601 ## Hmm, should Parsoid rt this?
2602 !! test
2603 Pres with newline attributes
2604 !! options
2605 parsoid=wt2html,html2html
2606 !! wikitext
2607 <pre class="one
2608 two">hi</pre>
2609 !! html/php
2610 <pre class="one two">hi</pre>
2611
2612 !! html/parsoid
2613 <pre typeof="mw:Extension/pre" about="#mwt2" class="one two" data-mw='{"name":"pre","attrs":{"class":"one two"},"body":{"extsrc":"hi"}}'>hi</pre>
2614 !! end
2615
2616 !! test
2617 Things that look like <pre> tags aren't treated as such
2618 !! wikitext
2619 Barack Obama <President> of the United States
2620 <President></President>
2621 !! html
2622 <p>Barack Obama &lt;President&gt; of the United States
2623 &lt;President&gt;&lt;/President&gt;
2624 </p>
2625 !! end
2626
2627 !! test
2628 Handle broken pre-like tags (T66025)
2629 !! options
2630 parsoid=wt2html
2631 !! wikitext
2632 {{echo|<pre <pre>x</pre>}}
2633
2634 <table><pre </table>
2635 !! html/php
2636 <pre>x</pre>
2637 <table>&lt;pre </table>
2638
2639 !! html/php+tidy
2640 <pre>
2641 x
2642 </pre>
2643 <p>&lt;pre</p>
2644 !! html/parsoid
2645 <pre about="#mwt1" typeof="mw:Transclusion mw:Extension/pre" data-parsoid='{"a":{"&lt;pre":null},"sa":{"&lt;pre":""},"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>x</pre>
2646
2647
2648 <p>&lt;pre </p>
2649
2650 <table></table>
2651 !! end
2652
2653 !! test
2654 Parsoid: handle pre with space after attribute
2655 !! options
2656 parsoid=wt2html
2657 !! wikitext
2658 <pre style="width:50%;" >{{echo|foo}}</pre>
2659 !! html/php
2660 <pre style="width:50%;">{{echo|foo}}</pre>
2661
2662 !! html/parsoid
2663 <pre typeof="mw:Extension/pre" about="#mwt2" style="width:50%;" data-mw='{"name":"pre","attrs":{"style":"width:50%;"},"body":{"extsrc":"{{echo|foo}}"}}'>{{echo|foo}}</pre>
2664 !! end
2665
2666 # TODO / maybe: fix wt2wt for this
2667 !! test
2668 Parsoid: Don't paragraph-wrap fosterable content
2669 !! options
2670 parsoid=wt2html
2671 !! wikitext
2672 {|
2673 <td></td>
2674 <td></td>
2675
2676
2677
2678 |}
2679 !! html
2680 <table>
2681
2682 <tbody>
2683 <tr>
2684 <td></td>
2685
2686 <td></td></tr>
2687
2688
2689
2690 </tbody></table>
2691 !! end
2692
2693 !! test
2694 Parsoid: Don't paragraph-wrap fosterable content even if table syntax is unbalanced
2695 !! options
2696 parsoid=wt2html
2697 !! wikitext
2698 {|
2699 <td>
2700 <td>
2701 </td>
2702
2703
2704
2705 |}
2706 !! html
2707 <table>
2708
2709 <tbody>
2710 <tr>
2711 <td></td>
2712
2713 <td>
2714 </td></tr>
2715
2716
2717
2718 </tbody></table>
2719 !! end
2720
2721
2722 #--------------------------------------------------------------------
2723 # Transclusion parameter whitespace stripping tests
2724 # Behavior is different for positional and named parameters
2725 #--------------------------------------------------------------------
2726 !! test
2727 Templates: Strip leading and trailing whitespace from named-param values
2728 !! wikitext
2729 {{echo|1= a }}
2730
2731 {{echo|1= {{echo|b}} }}
2732
2733 {{echo| 1 =
2734 c }}
2735
2736 {{echo| 1 =
2737 * d
2738 }}
2739 !! html
2740 <p>a
2741 </p><p>b
2742 </p><p>c
2743 </p>
2744 <ul><li> d</li></ul>
2745
2746 !! end
2747
2748 !! test
2749 Templates: Don't strip whitespace from positional-param values
2750 !! wikitext
2751 {{echo|a }}
2752
2753 {{echo|{{echo|b}} }}
2754
2755 {{echo| c
2756 }}
2757
2758 {{echo| {{echo|d}}
2759 }}
2760
2761 {{echo|
2762 e}}
2763
2764 {{echo|
2765 * f}}
2766
2767 {{echo|
2768 }}g
2769 !! html
2770 <p>a
2771 </p><p>b
2772 </p>
2773 <pre>c
2774 </pre>
2775 <p><br />
2776 </p>
2777 <pre>d
2778 </pre>
2779 <p><br />
2780 </p>
2781 <pre>e
2782 </pre>
2783 <p><br />
2784 </p>
2785 <ul><li> f</li></ul>
2786 <p><br />
2787 </p>
2788 <pre>g
2789 </pre>
2790 !! end
2791
2792 !! test
2793 Templates: Don't recognize targets split by newlines
2794 !! options
2795 parsoid=wt2html
2796 !! wikitext
2797 {{ech
2798 o|foo}}
2799 !! html/php
2800 <p>{{ech
2801 o|foo}}
2802 </p>
2803 !! html/parsoid
2804 <p>{{ech
2805 o|foo}}</p>
2806 !! end
2807
2808 !! test
2809 Templates: Recognize targets when newlines and comments don't split the target
2810 !! options
2811 parsoid=wt2html
2812 !! wikitext
2813 {{
2814 <!--X--> ech<!--X-->o<!--X-->
2815 <!--X--> <!--X-->
2816
2817 |foo}}
2818 !! html/php
2819 <p>foo
2820 </p>
2821 !! html/parsoid
2822 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"ech&lt;!--X-->o&lt;!--X--> \n &lt;!--X--> &lt;!--X-->\n\n ","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
2823 !! end
2824
2825 !! test
2826 Templates: Handle empty comment-and-ws-only lines correctly
2827 !! wikitext
2828 {{echo|foo
2829 <!--should be ignored-->
2830 <!--should be ignored as well-->
2831 bar}}
2832 !! html/php
2833 <p>foo
2834 bar
2835 </p>
2836 !! html/parsoid
2837 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo\n&lt;!--should be ignored-->\n &lt;!--should be ignored as well-->\nbar"}},"i":0}}]}'>foo <!--should be ignored--> <!--should be ignored as well--> bar</p>
2838 !! end
2839
2840 !! test
2841 Templates: Handle comments in the target
2842 !! wikitext
2843 {{echo
2844 <!-- should be ignored -->
2845 |foo}}
2846
2847 {{echo
2848 <!-- should be ignored and spaces on next line should not trip us up (T147742) -->
2849 |foo}}
2850
2851 {{echo<!-- should be ignored -->
2852 |foo}}
2853
2854 {{echo<!-- should be ignored -->|foo}}
2855
2856 {{<!-- should be ignored -->echo|foo}}
2857 !! html/php
2858 <p>foo
2859 </p><p>foo
2860 </p><p>foo
2861 </p><p>foo
2862 </p><p>foo
2863 </p>
2864 !! html/parsoid
2865 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo\n&lt;!-- should be ignored -->\n","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
2866
2867 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo\n&lt;!-- should be ignored and spaces on next line should not trip us up (T147742) -->\n ","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
2868
2869 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo&lt;!-- should be ignored -->\n","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
2870
2871 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo&lt;!-- should be ignored -->","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
2872
2873 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
2874 !! end
2875
2876 !! test
2877 Templates: Handle comments in parameter names (T69657)
2878 !! wikitext
2879 {{echo|1
2880 <!-- should be ignored -->
2881 =foo}}
2882
2883 {{echo|
2884 <!-- should be ignored -->
2885 1 = foo}}
2886
2887 {{echo|1<!-- should be ignored -->=foo}}
2888
2889 {{echo|<!-- should be ignored -->1=foo}}
2890 !! html/php
2891 <p>foo
2892 </p><p>foo
2893 </p><p>foo
2894 </p><p>foo
2895 </p>
2896 !! html/parsoid
2897 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"1\n&lt;!-- should be ignored -->"}}},"i":0}}]}'>foo</p>
2898
2899 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"&lt;!-- should be ignored -->\n1"}}},"i":0}}]}'>foo</p>
2900
2901 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"1&lt;!-- should be ignored -->"}}},"i":0}}]}'>foo</p>
2902
2903 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"&lt;!-- should be ignored -->1"}}},"i":0}}]}'>foo</p>
2904 !! end
2905
2906 !! test
2907 Templates: Other wikitext in parameter names (T69657)
2908 !! wikitext
2909 {{echo|''1''=foo}}
2910 !! html/php
2911 <p>{{{1}}}
2912 </p>
2913 !! html/parsoid
2914 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"&#39;&#39;1&#39;&#39;":{"wt":"foo"}},"i":0}}]}'>{{{1}}}</p>
2915 !! end
2916
2917 !! test
2918 Templates: With colons
2919 !! wikitext
2920 {{With: Colon}}
2921 !! html/php
2922 <p>Template with colon
2923 </p>
2924 !! html/parsoid
2925 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"With: Colon","href":"./Template:With:_Colon"},"params":{},"i":0}}]}'>Template with colon</p>
2926 !! end
2927
2928 #--------------------------------------------------------------------
2929 # Transclusion parameter escaping tests
2930 #--------------------------------------------------------------------
2931
2932 !! test
2933 Templates: Parsoid parameter escaping test 1
2934 !! wikitext
2935 {{echo|[foo]|{{echo|[bar]}}}}
2936 !! html/php+tidy
2937 <p>[foo]</p>
2938 !! html/parsoid
2939 <p about="#mwt1" typeof="mw:Transclusion"
2940 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[foo]"},"2":{"wt":"{{echo|[bar]}}"}},"i":0}}]}'>[foo]</p>
2941 !! end
2942
2943 !! test
2944 Parsoid: Pipes in external links in template parameter
2945 !! wikitext
2946 {{echo|[{{echo|http://example.com}} link]}}
2947 !! html/php+tidy
2948 <p><a rel="nofollow" class="external text" href="http://example.com">link</a></p>
2949 !! html/parsoid
2950 <p><a rel="mw:ExtLink" href="http://example.com" about="#mwt31" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[{{echo|http://example.com}} link]"}},"i":0}}]}'>link</a></p>
2951 !! end
2952
2953 !! test
2954 Parsoid: pipe in transclusion parameter
2955 !! wikitext
2956 {{echo|http://foo.com/a&#124;b}}
2957 !! html/php+tidy
2958 <p><a rel="nofollow" class="external free" href="http://foo.com/a%7Cb">http://foo.com/a%7Cb</a></p>
2959 !! html/parsoid
2960 <p><a rel="mw:ExtLink" href="http://foo.com/a%7Cb" about="#mwt1"
2961 typeof="mw:Transclusion"
2962 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://foo.com/a&amp;#124;b"}},"i":0}}]}'>http://foo.com/a%7Cb</a></p>
2963 !! end
2964
2965 !! test
2966 Parsoid: Pipe in external link target and content in template parameter
2967 !! options
2968 parsoid=html2wt,wt2wt
2969 !! wikitext
2970 {{echo|[http://foo.com/a&#124;b a&#124;b]}}
2971 !! html/php+tidy
2972 <p><a rel="nofollow" class="external text" href="http://foo.com/a%7Cb">a|b</a></p>
2973 !! html/parsoid
2974 <p><a rel="mw:ExtLink" href="http://foo.com/a|b" about="#mwt1"
2975 typeof="mw:Transclusion"
2976 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},
2977 "params":{"1":{"wt":"[http://foo.com/a|b a|b]"}},"i":0}}]}'>a|b</a></p>
2978 !! end
2979
2980 !! test
2981 Parsoid: Pipe in template with nested template in external link target in template parameter (seriously)
2982 !! options
2983 parsoid
2984 !! wikitext
2985 {{echo|[{{fullurl:{{FULLPAGENAME}}|action=edit}} bar]}}
2986 !! html
2987 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[{{fullurl:{{FULLPAGENAME}}|action=edit}} bar]"}},"i":0}}]}'>[Main Page bar]</p>
2988 !! end
2989
2990 !! test
2991 Templates: Don't escape already nowiki-escaped text in template parameters
2992 !! options
2993 parsoid=html2wt,wt2wt
2994 !! wikitext
2995 {{echo|foo<nowiki>|</nowiki>bar}}
2996 {{echo|<nowiki>&lt;div&gt;</nowiki>}}
2997 {{echo|<nowiki></nowiki>}}
2998 !! html/php+tidy
2999 <p>foo|bar &lt;div&gt;</p>
3000 !! html/parsoid
3001 <p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo<nowiki>|</nowiki>bar"}},"i":0}}]}'}'>foo</span><span typeof="mw:Nowiki" about="#mwt1">|</span><span about="#mwt1">bar</span>
3002 <span typeof="mw:Transclusion mw:Nowiki" about="#mwt2" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<nowiki>&amp;lt;div&amp;gt;</nowiki>"}},"i":0}}]}'><span typeof="mw:Entity">&lt;</span>div<span typeof="mw:Entity">&gt;</span></span>
3003 <span typeof="mw:Transclusion mw:Nowiki" about="#mwt3" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<nowiki></nowiki>"}},"i":0}}]}'></span>
3004 </p>
3005 !! end
3006
3007 ## T54824
3008 !! test
3009 Templates: '=' char in nested transclusions should not trigger nowiki escapes or conversion to named param
3010 !! options
3011 parsoid=html2wt,wt2wt
3012 !! wikitext
3013 {{echo|{{echo|1=bar}}}}
3014 !! html/php+tidy
3015 <p>bar</p>
3016 !! html/parsoid
3017 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{echo|1=bar}}"}},"i":0}}]}'>bar</p>
3018 !! end
3019
3020 ## T58733
3021 !! test
3022 Templates parameters with special tokenizing behavior dont get modified because of arg escaping
3023 !! wikitext
3024 {{echo|a : b}}
3025 !! html/php+tidy
3026 <p>a&#160;: b</p>
3027 !! html/parsoid
3028 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a : b"}},"i":0}}]}'>a<span typeof="mw:DisplaySpace mw:Placeholder" data-parsoid='{"isDisplayHack":true}'> </span>: b</p>
3029 !! end
3030
3031 ## T73412
3032 !! test
3033 Templates: Preserve blank parameter names
3034 !! wikitext
3035 {{echo|=foo}}
3036 !! html/php+tidy
3037 <p>{{{1}}}</p>
3038 !! html/parsoid
3039 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"":{"wt":"foo"}},"i":0}}]}'>{{{1}}}</p>
3040 !! end
3041
3042 !! test
3043 Templates: Preserve blank parameter names in other positions
3044 !! wikitext
3045 {{blank_param|bar|=foo}}
3046 !! html/php+tidy
3047 <p>bar foo</p>
3048 !! html/parsoid
3049 <p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"},{"k":"","named":true}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"blank_param","href":"./Template:Blank_param"},"params":{"1":{"wt":"bar"},"":{"wt":"foo"}},"i":0}}]}'>bar
3050 foo</p>
3051 !! end
3052
3053 ###
3054 ### Parsoid-centric tests for testing RT edge cases for pre
3055 ###
3056
3057 !!test
3058 1a. Indent-Pre and Comments
3059 !! wikitext
3060 a
3061 <!--a-->
3062 c
3063 !! html
3064 <pre>a
3065 </pre>
3066 <p>c
3067 </p>
3068 !!end
3069
3070 !!test
3071 1b. Indent-Pre and Comments
3072 !! wikitext
3073 a
3074 <!--a-->
3075 c
3076 !! html
3077 <pre>a
3078 </pre>
3079 <p>c
3080 </p>
3081 !!end
3082
3083 !!test
3084 1c. Indent-Pre and Comments
3085 !! wikitext
3086 <!--a--> a
3087
3088 <!--a--> a
3089 !! html
3090 <pre> a
3091 </pre>
3092 <pre> a
3093 </pre>
3094 !!end
3095
3096 !!test
3097 1d. Indent-Pre and Comments
3098 (Pre-handler currently cannot distinguish between comment/ws order and normalizes them to [comment,ws] order)
3099 !! wikitext
3100 <!--a--> a
3101
3102 <!--b-->b
3103 !! html
3104 <pre>a
3105 </pre>
3106 <pre>b
3107 </pre>
3108 !!end
3109
3110 !!test
3111 2a. Indent-Pre and tables
3112 !! wikitext
3113 {|
3114 |-
3115 !h1!!h2
3116 |foo||bar
3117 |}
3118 !! html
3119 <table>
3120
3121 <tr>
3122 <th>h1</th>
3123 <th>h2
3124 </th>
3125 <td>foo</td>
3126 <td>bar
3127 </td></tr></table>
3128
3129 !!end
3130
3131 !!test
3132 2b. Indent-Pre and tables
3133 !! wikitext
3134 {|
3135 |-
3136 |foo
3137 |}
3138 !! html
3139 <table>
3140
3141 <tr>
3142 <td>foo
3143 </td></tr></table>
3144
3145 !!end
3146
3147 !!test
3148 2c. Indent-Pre and tables (T44252)
3149 !! wikitext
3150 {|
3151 |+ foo
3152 ! | bar
3153 |}
3154 !! html
3155 <table>
3156 <caption> foo
3157 </caption>
3158 <tr>
3159 <th> bar
3160 </th></tr></table>
3161
3162 !!end
3163
3164 !!test
3165 2d. Indent-Pre and tables
3166 !! wikitext
3167 a
3168 {|
3169 | b
3170 |}
3171 !! html/php
3172 <pre>a
3173 </pre>
3174 <table>
3175 <tr>
3176 <td> b
3177 </td></tr></table>
3178
3179 !! html/parsoid
3180 <pre>a</pre>
3181 <table>
3182 <tbody><tr><td> b</td></tr>
3183 </tbody></table>
3184 !!end
3185
3186 !!test
3187 2e. Indent-Pre and table-line syntax
3188 !! wikitext
3189 a
3190 | b
3191 | c
3192 !! html/php
3193 <pre>a
3194 | b
3195 | c
3196 </pre>
3197 !!end
3198
3199 !!test
3200 2f. Indent-pre started by table-line syntax
3201 !! wikitext
3202 a
3203 | b
3204 | c
3205 !! html/php
3206 <p>a
3207 </p>
3208 <pre>| b
3209 | c
3210 </pre>
3211 !! html/parsoid
3212 <p>a</p>
3213 <pre>
3214 | b
3215 | c</pre>
3216 !!end
3217
3218 !! test
3219 2g. Indented table markup mixed with indented pre content (proposed in T8200)
3220 !! wikitext
3221 <table>
3222 <tr>
3223 <td>
3224 Text that should be rendered preformatted
3225 </td>
3226 </tr>
3227 </table>
3228 !! html
3229 <table>
3230 <tr>
3231 <td>
3232 <pre>Text that should be rendered preformatted
3233 </pre>
3234 </td>
3235 </tr>
3236 </table>
3237
3238 !! end
3239
3240 !!test
3241 3a. Indent-Pre and block tags (single-line html)
3242 !! wikitext
3243 a <p> foo </p>
3244 b <div> foo </div>
3245 c <blockquote> foo </blockquote>
3246 <span> foo </span>
3247 !! html
3248 a <p> foo </p>
3249 b <div> foo </div>
3250 c <blockquote> foo </blockquote>
3251 <pre><span> foo </span>
3252 </pre>
3253 !! html/parsoid
3254 <p>a </p><p data-parsoid='{"stx":"html"}'> foo </p>
3255 <p>b </p><div data-parsoid='{"stx":"html"}'> foo </div>
3256 <p>c </p><blockquote data-parsoid='{"stx":"html"}'> foo </blockquote>
3257 <pre><span> foo </span>
3258 </pre>
3259 !! html+tidy
3260 <p>a</p>
3261 <p>foo</p>
3262 <p>b</p>
3263 <div>foo</div>
3264 <p>c</p>
3265 <blockquote>
3266 <p>foo</p>
3267 </blockquote>
3268 <pre>
3269 <span> foo </span>
3270 </pre>
3271 !! end
3272
3273 !!test
3274 3b. Indent-Pre and block tags (multi-line html)
3275 !! wikitext
3276 a <span>foo</span>
3277 b <div> foo </div>
3278 !! html
3279 <pre>a <span>foo</span>
3280 </pre>
3281 b <div> foo </div>
3282
3283 !! html/parsoid
3284 <pre>a <span data-parsoid='{"stx":"html"}'>foo</span></pre>
3285 b <div data-parsoid='{"stx":"html"}'> foo </div>
3286 !! html+tidy
3287 <pre>
3288 a <span>foo</span>
3289 </pre>
3290 <p>b</p>
3291 <div>foo</div>
3292 !!end
3293
3294 !!test
3295 3c. Indent-Pre and block tags (pre-content on separate line)
3296 !! wikitext
3297 <p>
3298 foo
3299 </p>
3300
3301 <div>
3302 foo
3303 </div>
3304
3305 <center>
3306 foo
3307 </center>
3308
3309 <blockquote>
3310 foo
3311 </blockquote>
3312
3313 <blockquote>
3314 <pre>
3315 foo
3316 </pre>
3317 </blockquote>
3318
3319 <table><tr><td>
3320 foo
3321 </td></tr></table>
3322
3323 <ul><li>
3324 foo
3325 </li></ul>
3326
3327 !! html
3328 <p>
3329 foo
3330 </p>
3331 <div>
3332 <pre>foo
3333 </pre>
3334 </div>
3335 <center>
3336 <pre>foo
3337 </pre>
3338 </center>
3339 <blockquote>
3340 <p> foo
3341 </p>
3342 </blockquote>
3343 <blockquote>
3344 <pre>
3345 foo
3346 </pre>
3347 </blockquote>
3348 <table><tr><td>
3349 <pre>foo
3350 </pre>
3351 </td></tr></table>
3352 <ul><li>
3353 foo
3354 </li></ul>
3355
3356 !!end
3357
3358 !! test
3359 4. Indent-Pre and extension tags
3360 !! wikitext
3361 a <tag />
3362 !! html/php
3363 a <pre>
3364 NULL
3365 array (
3366 )
3367 </pre>
3368
3369 !! html/parsoid
3370 a <pre typeof="mw:Extension/tag" about="#mwt2" data-parsoid='{}' data-mw='{"name":"tag","attrs":{},"body":null}'></pre>
3371 !! end
3372
3373 !! test
3374 5. Indent-Pre and html pre
3375 !! wikitext
3376 <pre class="123">hi</pre>
3377 !! html/php
3378 <pre class="123">hi</pre>
3379
3380 !! html/parsoid
3381 <pre typeof="mw:Extension/pre" about="#mwt2" class="123" data-mw='{"name":"pre","attrs":{"class":"123"},"body":{"extsrc":"hi"}}'>hi</pre>
3382 !! end
3383
3384 !!test
3385 Render paragraphs when indent-pre is suppressed in blocklevels
3386 !! wikitext
3387 <blockquote>
3388 foo
3389
3390 bar
3391 </blockquote>
3392 !! html
3393 <blockquote>
3394 <p> foo
3395 </p><p> bar
3396 </p>
3397 </blockquote>
3398
3399 !!end
3400
3401 !!test
3402 4. Multiple spaces at start-of-line
3403 !! wikitext
3404 <p> foo </p>
3405 foo
3406 {|
3407 |foo
3408 |}
3409 !! html
3410 <p> foo </p>
3411 <pre> foo
3412 </pre>
3413 <table>
3414 <tr>
3415 <td>foo
3416 </td></tr></table>
3417
3418 !!end
3419
3420 ## NOTE: the leading white-space chars on empty line are significant
3421 !! test
3422 5a. White-space in indent-pre
3423 !! wikitext
3424 a<br />
3425
3426 b
3427 !! html
3428 <pre>a<br />
3429
3430 b
3431 </pre>
3432 !! end
3433
3434 ## NOTE: the leading white-space chars on empty line are significant
3435 !! test
3436 5b. White-space in indent-pre
3437 !! wikitext
3438 a
3439
3440 b
3441
3442
3443 c
3444 !! html
3445 <pre>a
3446
3447 b
3448
3449
3450 c
3451 </pre>
3452 !! end
3453
3454 !! test
3455 5c. White-space in indent-pre
3456 !! wikitext
3457 ''a''
3458 ''b''
3459 ''c''
3460 !! html
3461 <pre><i>a</i>
3462 <i>b</i>
3463 <i>c</i>
3464 </pre>
3465 !! end
3466
3467 !! test
3468 6. Pre-blocks should extend across lines with leading WS even when there is no wrappable content
3469 !! wikitext
3470 a
3471
3472 <!-- continue -->
3473 b
3474
3475 c
3476
3477 d
3478 !! html
3479 <pre>a
3480
3481 b
3482 </pre>
3483 <pre>c
3484
3485 </pre>
3486 <p>d
3487 </p>
3488 !! end
3489
3490 !! test
3491 7a. Indent-pre and category links
3492 !! options
3493 parsoid=wt2html,wt2wt
3494 !! wikitext
3495 [[Category:foo]] <!-- No pre-wrapping -->
3496 {{echo| [[Category:foo]]}} <!-- No pre-wrapping -->
3497 !! html/php+tidy
3498 !! html/parsoid
3499 <link rel="mw:PageProp/Category" href="./Category:Foo"> <!-- No pre&#x2D;wrapping -->
3500 <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":" [[Category:foo]]"}},"i":0}}]}'> </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1"> <!-- No pre&#x2D;wrapping -->
3501 !! end
3502
3503 ## We used to, but no longer wt2wt this test since the default serializer
3504 ## will normalize all categories to serialize on their own line.
3505 ## This wikitext usage is going to be fairly uncommon in production and
3506 ## selser will take care of preserving formatting in those scenarios.
3507 !! test
3508 7b. Indent-pre and category links
3509 !! options
3510 parsoid=wt2html
3511 !! wikitext
3512 [[Category:foo]] a
3513 [[Category:foo]] {{echo|b}}
3514 !! html/parsoid
3515 <pre><link rel="mw:PageProp/Category" href="./Category:Foo"> a
3516 <link rel="mw:PageProp/Category" href="./Category:Foo"> <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b"}},"i":0}}]}'>b</span></pre>
3517 !! end
3518
3519 !! test
3520 Indent-Pre: Newlines in comments shouldn't affect sol state
3521 !! wikitext
3522 a <!--
3523 foo
3524 --> b
3525 !! html/php+tidy
3526 <p>a b</p>
3527 !! html/parsoid
3528 <p>a <!--
3529 foo
3530 --> b</p>
3531 !! end
3532
3533 ###
3534 ### HTML-pre (some to spec PHP parser behavior and some Parsoid-RT-centric)
3535 ###
3536
3537 !!test
3538 HTML-pre: 1. embedded newlines
3539 !! wikitext
3540 <pre>foo</pre>
3541
3542 <pre>
3543 foo
3544 </pre>
3545
3546 <pre>
3547
3548 foo
3549 </pre>
3550
3551 <pre>
3552
3553
3554 foo
3555 </pre>
3556 !! html/php+tidy
3557 <pre>
3558 foo
3559 </pre>
3560 <pre>
3561 foo
3562 </pre>
3563 <pre>
3564
3565 foo
3566 </pre>
3567 <pre>
3568
3569
3570 foo
3571 </pre>
3572 !! html/parsoid
3573 <pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"foo"}}'>foo</pre>
3574
3575 <pre typeof="mw:Extension/pre" about="#mwt4" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\nfoo\n"}}'>foo
3576 </pre>
3577
3578 <pre typeof="mw:Extension/pre" about="#mwt6" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n\nfoo\n"}}'>
3579
3580 foo
3581 </pre>
3582
3583 <pre typeof="mw:Extension/pre" about="#mwt8" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n\n\nfoo\n"}}'>
3584
3585
3586 foo
3587 </pre>
3588 !!end
3589
3590 !! test
3591 HTML-pre: big spaces
3592 !! wikitext
3593 <pre>
3594
3595
3596
3597
3598 haha
3599
3600
3601
3602
3603 haha
3604
3605
3606
3607
3608 </pre>
3609 !! html/php+tidy
3610 <pre>
3611
3612
3613
3614
3615 haha
3616
3617
3618
3619
3620 haha
3621
3622
3623
3624
3625 </pre>
3626 !! html/parsoid
3627 <pre typeof="mw:Extension/pre" about="#mwt2" data-parsoid='{"stx":"html"}' data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n\n\n\n\nhaha\n\n\n\n\nhaha\n\n\n\n\n"}}'>
3628
3629
3630
3631
3632 haha
3633
3634
3635
3636
3637 haha
3638
3639
3640
3641
3642 </pre>
3643 !! end
3644
3645 !!test
3646 HTML-pre: 2: indented text
3647 !! wikitext
3648 <pre>
3649 foo
3650 </pre>
3651 !! html
3652 <pre>
3653 foo
3654 </pre>
3655
3656 !!end
3657
3658 !!test
3659 HTML-pre: 3: other wikitext
3660 !! wikitext
3661 <pre>
3662 * foo
3663 # bar
3664 = no-h =
3665 '' no-italic ''
3666 [[ NoLink ]]
3667 </pre>
3668 !! html/php
3669 <pre>
3670 * foo
3671 # bar
3672 = no-h =
3673 '' no-italic ''
3674 [[ NoLink ]]
3675 </pre>
3676
3677 !! html/parsoid
3678 <pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n* foo\n# bar\n= no-h =\n&#39;&#39; no-italic &#39;&#39;\n[[ NoLink ]]\n"}}'>* foo
3679 # bar
3680 = no-h =
3681 '' no-italic ''
3682 [[ NoLink ]]
3683 </pre>
3684 !!end
3685
3686 ###
3687 ### Definition lists
3688 ###
3689 !! test
3690 Simple definition
3691 !! wikitext
3692 ; name : Definition
3693 !! html
3694 <dl><dt> name&#160;</dt>
3695 <dd> Definition</dd></dl>
3696
3697 !! end
3698
3699 !! test
3700 Definition list for indentation only
3701 !! wikitext
3702 : Indented text
3703 !! html
3704 <dl><dd> Indented text</dd></dl>
3705
3706 !! end
3707
3708 !! test
3709 Definition list with no space
3710 !! wikitext
3711 ;name:Definition
3712 !! html
3713 <dl><dt>name</dt>
3714 <dd>Definition</dd></dl>
3715
3716 !!end
3717
3718 !! test
3719 Definition list with URL link
3720 !! wikitext
3721 ; http://example.com/ : definition
3722 !! html
3723 <dl><dt> <a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>&#160;</dt>
3724 <dd> definition</dd></dl>
3725
3726 !! end
3727
3728 !! test
3729 Definition list with bracketed URL link
3730 !! wikitext
3731 ;[http://www.example.com/ Example]:Something about it
3732 !! html
3733 <dl><dt><a rel="nofollow" class="external text" href="http://www.example.com/">Example</a></dt>
3734 <dd>Something about it</dd></dl>
3735
3736 !! end
3737
3738 !! test
3739 Definition list with wikilink containing colon
3740 !! wikitext
3741 ; [[Help:FAQ]]: The least-read page on Wikipedia
3742 !! html
3743 <dl><dt> <a href="/index.php?title=Help:FAQ&amp;action=edit&amp;redlink=1" class="new" title="Help:FAQ (page does not exist)">Help:FAQ</a></dt>
3744 <dd> The least-read page on Wikipedia</dd></dl>
3745
3746 !! end
3747
3748 # At Brion's and JeLuF's insistence... :)
3749 !! test
3750 Definition list with news link containing colon
3751 !! wikitext
3752 ; news:alt.wikipedia.rox: This isn't even a real newsgroup!
3753 !! html/php
3754 <dl><dt> <a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a></dt>
3755 <dd> This isn't even a real newsgroup!</dd></dl>
3756
3757 !! html/parsoid
3758 <dl><dt> <a rel="mw:ExtLink" href="news:alt.wikipedia.rox" data-parsoid='{"stx":"url"}'>news:alt.wikipedia.rox</a></dt><dd data-parsoid='{"stx":"row"}'> This isn't even a real newsgroup!</dd></dl>
3759 !! end
3760
3761 !! test
3762 Malformed definition list with colon
3763 !! wikitext
3764 ; news:alt.wikipedia.rox -- don't crash or enter an infinite loop
3765 !! html
3766 <dl><dt> <a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a> -- don't crash or enter an infinite loop</dt></dl>
3767
3768 !! end
3769
3770 !! test
3771 Definition lists: colon in external link text
3772 !! wikitext
3773 ; [http://www.wikipedia2.org/ Wikipedia : The Next Generation]: OK, I made that up
3774 !! html
3775 <dl><dt> <a rel="nofollow" class="external text" href="http://www.wikipedia2.org/">Wikipedia&#160;: The Next Generation</a></dt>
3776 <dd> OK, I made that up</dd></dl>
3777
3778 !! end
3779
3780 !! test
3781 Definition lists: colon in HTML attribute
3782 !! wikitext
3783 ;<b style="display: inline">bold</b>
3784 !! html
3785 <dl><dt><b style="display: inline">bold</b></dt></dl>
3786
3787 !! end
3788
3789 !! test
3790 Definition lists: self-closed tag
3791 !! wikitext
3792 ;one<br/>two : two-line fun
3793 !! html
3794 <dl><dt>one<br />two&#160;</dt>
3795 <dd> two-line fun</dd></dl>
3796
3797 !! end
3798
3799 !! test
3800 Definition lists: ignore colons inside tags
3801 !! wikitext
3802 ;one <b>two : tag <i>fun:</i>:</b>: def
3803 !! html
3804 <dl><dt>one <b>two&#160;: tag <i>fun:</i>:</b></dt>
3805 <dd> def</dd></dl>
3806
3807 !! end
3808
3809 !! test
3810 Definition lists: excess closed tags
3811 !! wikitext
3812 ;one</b>two : bad tag fun
3813 !! html/php+tidy
3814 <dl>
3815 <dt>onetwo&#160;</dt>
3816 <dd>bad tag fun</dd>
3817 </dl>
3818 !! html/parsoid
3819 <dl>
3820 <dt>onetwo</dt>
3821 <dd>bad tag fun</dd>
3822 </dl>
3823 !! end
3824
3825 !! test
3826 T13748: Literal closing tags
3827 !! wikitext
3828 <dl>
3829 <dt>test 1</dt>
3830 <dd>test test test test test</dd>
3831 <dt>test 2</dt>
3832 <dd>test test test test test</dd>
3833 </dl>
3834 !! html
3835 <dl>
3836 <dt>test 1</dt>
3837 <dd>test test test test test</dd>
3838 <dt>test 2</dt>
3839 <dd>test test test test test</dd>
3840 </dl>
3841
3842 !! end
3843
3844 !! test
3845 Definition and unordered list using wiki syntax nested in unordered list using html tags.
3846 !! wikitext
3847 <ul><li>
3848 ; term : description
3849 * unordered
3850 </li></ul>
3851 !! html
3852 <ul><li>
3853 <dl><dt> term&#160;</dt>
3854 <dd> description</dd></dl>
3855 <ul><li> unordered</li></ul>
3856 </li></ul>
3857
3858 !! end
3859
3860 !! test
3861 Definition list with empty definition and following paragraph
3862 !! wikitext
3863 ; term:
3864 Paragraph text
3865 !! html
3866 <dl><dt> term</dt>
3867 <dd></dd></dl>
3868 <p>Paragraph text
3869 </p>
3870 !! end
3871
3872 !! test
3873 Nested definition lists using html syntax
3874 !! wikitext
3875 <dl><dt>x</dt>
3876 <dd>a</dd>
3877 <dd>b</dd></dl>
3878 !! html
3879 <dl><dt>x</dt>
3880 <dd>a</dd>
3881 <dd>b</dd></dl>
3882
3883 !! end
3884
3885 !! test
3886 Definition Lists: No nesting: Multiple dd's
3887 !! wikitext
3888 ;x
3889 :a
3890 :b
3891 !! html
3892 <dl><dt>x</dt>
3893 <dd>a</dd>
3894 <dd>b</dd></dl>
3895
3896 !! end
3897
3898 !! test
3899 Definition Lists: Indentation: Regular
3900 !! wikitext
3901 :i1
3902 ::i2
3903 :::i3
3904 !! html
3905 <dl><dd>i1
3906 <dl><dd>i2
3907 <dl><dd>i3</dd></dl></dd></dl></dd></dl>
3908
3909 !! end
3910
3911 !! test
3912 Definition Lists: Indentation: Missing 1st level
3913 !! wikitext
3914 ::i2
3915 :::i3
3916 !! html
3917 <dl><dd><dl><dd>i2
3918 <dl><dd>i3</dd></dl></dd></dl></dd></dl>
3919
3920 !! end
3921
3922 !! test
3923 Definition Lists: Indentation: Multi-level indent
3924 !! wikitext
3925 :::i3
3926 !! html
3927 <dl><dd><dl><dd><dl><dd>i3</dd></dl></dd></dl></dd></dl>
3928
3929 !! end
3930
3931 !! test
3932 Definition Lists: Hacky use to indent tables
3933 !! wikitext
3934 ::{|
3935 |foo
3936 |bar
3937 |}
3938 this text
3939 should be left alone
3940 !! html
3941 <dl><dd><dl><dd><table>
3942 <tr>
3943 <td>foo
3944 </td>
3945 <td>bar
3946 </td></tr></table></dd></dl></dd></dl>
3947 <p>this text
3948 should be left alone
3949 </p>
3950 !! end
3951
3952 !! test
3953 Definition Lists: Hacky use to indent tables, with comments (T65979)
3954 !! wikitext
3955 <!-- foo -->
3956 ::{|
3957 |foo
3958 |bar
3959 |}<!-- bar -->
3960 this text
3961 should be left alone
3962 !! html/parsoid
3963 <!-- foo -->
3964 <dl><dd><dl><dd><table><tr>
3965 <td>foo</td>
3966 <td>bar</td>
3967 </tr></table><!-- bar --></dd></dl></dd></dl>
3968 <p>this text
3969 should be left alone</p>
3970 !! end
3971
3972 !! test
3973 Definition Lists: Hacky use to indent tables, with comment before table
3974 !! wikitext
3975 ::<!-- foo -->{|
3976 |foo
3977 |}
3978 !! html/parsoid
3979 <dl><dd><dl><dd><!-- foo --><table><tr>
3980 <td>foo</td>
3981 </tr></table></dd></dl></dd></dl>
3982 !! end
3983
3984 # The trailing whitespace in this test is to catch a regression in
3985 # Parsoid after T54473.
3986 !! test
3987 Definition Lists: Hacky use to indent tables (WS-insensitive)
3988 !! wikitext
3989 : {|
3990 |a
3991 |}
3992 !! html/php
3993 <dl><dd><table>
3994 <tr>
3995 <td>a
3996 </td></tr></table></dd></dl>
3997
3998 !! html/parsoid
3999 <dl><dd> <table>
4000 <tbody><tr><td>a</td></tr>
4001 </tbody></table> </dd></dl>
4002 !! end
4003
4004 ## The PHP parser treats : items (dd) without a corresponding ; item (dt)
4005 ## as an empty dt item. It also ignores all but the last ";" when followed
4006 ## by ":" later on. So, ";" are not ignored in ";;;t3" but are ignored in
4007 ## ";;;t3 :d1". So, PHP parser behavior is a little inconsistent wrt multiple
4008 ## ";"s.
4009 ##
4010 ## Ex: ";;t2 ::d2" is transformed into:
4011 ##
4012 ## <dl>
4013 ## <dt>t2 </dt>
4014 ## <dd>
4015 ## <dl>
4016 ## <dt></dt>
4017 ## <dd>d2</dd>
4018 ## </dl>
4019 ## </dd>
4020 ## </dl>
4021 ##
4022 ## But, Parsoid treats "; :" as a tight atomic unit and excess ":" as plain text
4023 ## So, the same wikitext above (;;t2 ::d2) is transformed into:
4024 ##
4025 ## <dl>
4026 ## <dt>
4027 ## <dl>
4028 ## <dt>t2 </dt>
4029 ## <dd>:d2</dd>
4030 ## </dl>
4031 ## </dt>
4032 ## </dl>
4033 ##
4034 ## All Parsoid only definition list tests have this difference.
4035 ##
4036 ## See also: https://phabricator.wikimedia.org/T8569
4037 ## and https://lists.wikimedia.org/pipermail/wikitext-l/2011-November/000483.html
4038
4039 !! test
4040 Table / list interaction: indented table with lists in table contents
4041 !! wikitext
4042 :{|
4043 |-
4044 | a
4045 * b
4046 |-
4047 | c
4048 * d
4049 |}
4050 !! html
4051 <dl><dd><table>
4052
4053 <tr>
4054 <td> a
4055 <ul><li> b</li></ul>
4056 </td></tr>
4057 <tr>
4058 <td> c
4059 <ul><li> d</li></ul>
4060 </td></tr></table></dd></dl>
4061
4062 !! end
4063
4064 !!test
4065 Table / list interaction: lists nested in tables nested in indented lists
4066 !! wikitext
4067 :{|
4068 |
4069 :a
4070 :b
4071 |
4072 *c
4073 *d
4074 |}
4075
4076 *e
4077 *f
4078 !! html
4079 <dl><dd><table>
4080 <tr>
4081 <td>
4082 <dl><dd>a</dd>
4083 <dd>b</dd></dl>
4084 </td>
4085 <td>
4086 <ul><li>c</li>
4087 <li>d</li></ul>
4088 </td></tr></table></dd></dl>
4089 <ul><li>e</li>
4090 <li>f</li></ul>
4091
4092 !!end
4093
4094 !! test
4095 Definition Lists: Nesting: Multi-level (Parsoid only)
4096 !! options
4097 parsoid
4098 !! wikitext
4099 ;t1 :d1
4100 ;;t2 ::d2
4101 ;;;t3 :::d3
4102 !! html
4103 <dl>
4104 <dt>t1 </dt>
4105 <dd>d1</dd>
4106 <dt>
4107 <dl>
4108 <dt>t2 </dt>
4109 <dd>:d2</dd>
4110 <dt>
4111 <dl>
4112 <dt>t3 </dt>
4113 <dd>::d3</dd>
4114 </dl>
4115 </dt>
4116 </dl>
4117 </dt>
4118 </dl>
4119
4120
4121 !! end
4122
4123
4124 !! test
4125 Definition Lists: Nesting: Test 2 (Parsoid only)
4126 !! wikitext
4127 ;t1
4128 ::d2
4129 !! html/php+tidy
4130 <dl>
4131 <dt>t1</dt>
4132 <dd>
4133 <dl>
4134 <dd>d2</dd>
4135 </dl>
4136 </dd>
4137 </dl>
4138 !! html/parsoid
4139 <dl>
4140 <dt>t1</dt>
4141 <dd>
4142 <dl>
4143 <dd>d2</dd>
4144 </dl>
4145 </dd>
4146 </dl>
4147
4148 !! end
4149
4150
4151 !! test
4152 Definition Lists: Nesting: Test 3 (Parsoid only)
4153 !! wikitext
4154 :;t1
4155 ::::d2
4156 !! html/php+tidy
4157 <dl>
4158 <dd>
4159 <dl>
4160 <dt>t1</dt>
4161 <dd>
4162 <dl>
4163 <dd>
4164 <dl>
4165 <dd>d2</dd>
4166 </dl>
4167 </dd>
4168 </dl>
4169 </dd>
4170 </dl>
4171 </dd>
4172 </dl>
4173 !! html/parsoid
4174 <dl>
4175 <dd>
4176 <dl>
4177 <dt>t1</dt>
4178 <dd>
4179 <dl>
4180 <dd>
4181 <dl>
4182 <dd>d2</dd>
4183 </dl>
4184 </dd>
4185 </dl>
4186 </dd>
4187 </dl>
4188 </dd>
4189 </dl>
4190
4191 !! end
4192
4193
4194 !! test
4195 Definition Lists: Nesting: Test 4
4196 !! wikitext
4197 ::;t3
4198 :::d3
4199 !! html
4200 <dl><dd><dl><dd><dl><dt>t3</dt>
4201 <dd>d3</dd></dl></dd></dl></dd></dl>
4202
4203 !! end
4204
4205
4206 ## The Parsoid team believes the following three test exposes a
4207 ## bug in the PHP parser. (Parsoid team thinks the PHP parser is
4208 ## wrong to close the <dl> after the <dt> containing the <ul>.)
4209 ## It also exposes a "misfeature" in tidy, which doesn't like
4210 ## <dl> tags with a single <dt> child; it converts the <dt> into
4211 ## a <dd> in that case. (Parsoid leaves the <dt> alone!)
4212 !! test
4213 Definition Lists: Mixed Lists: Test 1
4214 !! wikitext
4215 :;* foo
4216 ::* bar
4217 :; baz
4218 !! html/php
4219 <dl><dd><dl><dt><ul><li> foo</li>
4220 <li> bar</li></ul></dt></dl>
4221 <dl><dt> baz</dt></dl></dd></dl>
4222
4223 !! html/php+tidy
4224 <dl>
4225 <dd>
4226 <dl>
4227 <dd>
4228 <ul>
4229 <li>foo</li>
4230 <li>bar</li>
4231 </ul>
4232 </dd>
4233 </dl>
4234 <dl>
4235 <dt>baz</dt>
4236 </dl>
4237 </dd>
4238 </dl>
4239 !! html/parsoid
4240 <dl>
4241 <dd><dl>
4242 <dt><ul>
4243 <li> foo
4244 </li>
4245 </ul></dt>
4246 <dd><ul>
4247 <li> bar
4248 </li>
4249 </ul></dd>
4250 <dt> baz</dt>
4251 </dl></dd>
4252 </dl>
4253 !! end
4254
4255 !! test
4256 Definition Lists: Mixed Lists: Test 2
4257 !! wikitext
4258 *: d1
4259 *: d2
4260 !! html
4261 <ul><li><dl><dd> d1</dd>
4262 <dd> d2</dd></dl></li></ul>
4263
4264 !! end
4265
4266
4267 !! test
4268 Definition Lists: Mixed Lists: Test 3
4269 !! wikitext
4270 *::: d1
4271 *::: d2
4272 !! html
4273 <ul><li><dl><dd><dl><dd><dl><dd> d1</dd>
4274 <dd> d2</dd></dl></dd></dl></dd></dl></li></ul>
4275
4276 !! end
4277
4278
4279 !! test
4280 Definition Lists: Mixed Lists: Test 4
4281 !! wikitext
4282 *;d1 :d2
4283 *;d3 :d4
4284 !! html
4285 <ul><li><dl><dt>d1&#160;</dt>
4286 <dd>d2</dd>
4287 <dt>d3&#160;</dt>
4288 <dd>d4</dd></dl></li></ul>
4289
4290 !! end
4291
4292
4293 !! test
4294 Definition Lists: Mixed Lists: Test 5
4295 !! wikitext
4296 *:d1
4297 *:: d2
4298 !! html
4299 <ul><li><dl><dd>d1
4300 <dl><dd> d2</dd></dl></dd></dl></li></ul>
4301
4302 !! end
4303
4304
4305 !! test
4306 Definition Lists: Mixed Lists: Test 6
4307 !! wikitext
4308 #*:d1
4309 #*::: d3
4310 !! html
4311 <ol><li><ul><li><dl><dd>d1
4312 <dl><dd><dl><dd> d3</dd></dl></dd></dl></dd></dl></li></ul></li></ol>
4313
4314 !! end
4315
4316
4317 !! test
4318 Definition Lists: Mixed Lists: Test 7
4319 !! wikitext
4320 :* d1
4321 :* d2
4322 !! html
4323 <dl><dd><ul><li> d1</li>
4324 <li> d2</li></ul></dd></dl>
4325
4326 !! end
4327
4328
4329 !! test
4330 Definition Lists: Mixed Lists: Test 8
4331 !! wikitext
4332 :* d1
4333 ::* d2
4334 !! html
4335 <dl><dd><ul><li> d1</li></ul>
4336 <dl><dd><ul><li> d2</li></ul></dd></dl></dd></dl>
4337
4338 !! end
4339
4340
4341 !! test
4342 Definition Lists: Mixed Lists: Test 9
4343 !! wikitext
4344 *;foo :bar
4345 !! html
4346 <ul><li><dl><dt>foo&#160;</dt>
4347 <dd>bar</dd></dl></li></ul>
4348
4349 !! end
4350
4351
4352 !! test
4353 Definition Lists: Mixed Lists: Test 10
4354 !! wikitext
4355 *#;foo :bar
4356 !! html
4357 <ul><li><ol><li><dl><dt>foo&#160;</dt>
4358 <dd>bar</dd></dl></li></ol></li></ul>
4359
4360 !! end
4361
4362 # This is a regression test for T175099
4363 # html/php+tidy is insufficient since Tidy covers up the bug.
4364 # But once Tidy is replaced with RemexHTML, html/php+tidy is good enough
4365 !! test
4366 Definition Lists: Mixed Lists: Test 11
4367 !! wikitext
4368 ; a
4369 :* b
4370 !! html/*
4371 <dl><dt> a</dt>
4372 <dd>
4373 <ul><li> b</li></ul></dd></dl>
4374
4375 !! end
4376
4377 # The Parsoid team disagrees with the PHP parser's seemingly-random
4378 # rules regarding dd/dt on the next two tests. Parsoid is more
4379 # consistent, and recognizes the shared nesting and keeps the
4380 # still-open tags around until the nesting is complete.
4381 # (And tidy again converts <dt> to <dd> before 'bar'.)
4382
4383 !! test
4384 Definition Lists: Mixed Lists: Test 12
4385 !! wikitext
4386 *#*#;*;;foo :bar
4387 *#*#;boo :baz
4388 !! html/php
4389 <ul><li><ol><li><ul><li><ol><li><dl><dt>foo&#160;</dt>
4390 <dd><ul><li><dl><dt><dl><dt>bar</dt></dl></dd></dl></li></ul></dd></dl>
4391 <dl><dt>boo&#160;</dt>
4392 <dd>baz</dd></dl></li></ol></li></ul></li></ol></li></ul>
4393
4394 !! html/php+tidy
4395 <ul>
4396 <li>
4397 <ol>
4398 <li>
4399 <ul>
4400 <li>
4401 <ol>
4402 <li>
4403 <dl>
4404 <dt>foo&#160;</dt>
4405 <dd>
4406 <ul>
4407 <li>
4408 <dl>
4409 <dd>
4410 <dl>
4411 <dt>bar</dt>
4412 </dl>
4413 </dd>
4414 </dl>
4415 </li>
4416 </ul>
4417 </dd>
4418 </dl>
4419 <dl>
4420 <dt>boo&#160;</dt>
4421 <dd>baz</dd>
4422 </dl>
4423 </li>
4424 </ol>
4425 </li>
4426 </ul>
4427 </li>
4428 </ol>
4429 </li>
4430 </ul>
4431 !! html/parsoid
4432 <ul>
4433 <li>
4434 <ol>
4435 <li>
4436 <ul>
4437 <li>
4438 <ol>
4439 <li>
4440 <dl>
4441 <dt>
4442 <ul>
4443 <li>
4444 <dl>
4445 <dt>
4446 <dl>
4447 <dt>foo<span typeof="mw:Placeholder" data-parsoid='{"src":" "}'>&nbsp;</span></dt>
4448 <dd data-parsoid='{"stx":"row"}'>bar</dd>
4449 </dl></dt>
4450 </dl></li>
4451 </ul></dt>
4452 <dt>boo<span typeof="mw:Placeholder" data-parsoid='{"src":" "}'>&nbsp;</span></dt>
4453 <dd data-parsoid='{"stx":"row"}'>baz</dd>
4454 </dl></li>
4455 </ol></li>
4456 </ul></li>
4457 </ol></li>
4458 </ul>
4459 !! end
4460
4461
4462 # Another case where tidy converts a <dt> to a <dd> (but Parsoid doesn't).
4463 # From whitelist:
4464 # * The test is wrong, there are two colons where there should be :;
4465 # * The PHP parser is wrong to close the <dl> after the <dt> containing the <ul>.
4466 !! test
4467 Definition Lists: Weird Ones: Test 1
4468 !! wikitext
4469 *#;*::;; foo : bar (who uses this?)
4470 !! html/php
4471 <ul><li><ol><li><dl><dt> foo&#160;</dt>
4472 <dd><ul><li><dl><dd><dl><dd><dl><dt><dl><dt> bar (who uses this?)</dt></dl></dd></dl></dd></dl></dd></dl></li></ul></dd></dl></li></ol></li></ul>
4473
4474 !! html/php+tidy
4475 <ul>
4476 <li>
4477 <ol>
4478 <li>
4479 <dl>
4480 <dt>foo&#160;</dt>
4481 <dd>
4482 <ul>
4483 <li>
4484 <dl>
4485 <dd>
4486 <dl>
4487 <dd>
4488 <dl>
4489 <dd>
4490 <dl>
4491 <dt>bar (who uses this?)</dt>
4492 </dl>
4493 </dd>
4494 </dl>
4495 </dd>
4496 </dl>
4497 </dd>
4498 </dl>
4499 </li>
4500 </ul>
4501 </dd>
4502 </dl>
4503 </li>
4504 </ol>
4505 </li>
4506 </ul>
4507 !! html/parsoid
4508 <ul>
4509 <li>
4510 <ol>
4511 <li>
4512 <dl>
4513 <dt>
4514 <ul>
4515 <li>
4516 <dl>
4517 <dd>
4518 <dl>
4519 <dd>
4520 <dl>
4521 <dt>
4522 <dl>
4523 <dt> foo<span typeof="mw:DisplaySpace mw:Placeholder" data-parsoid='{"src":" ","isDisplayHack":true}'> </span></dt>
4524 <dd data-parsoid='{"stx":"row"}'> bar (who uses this?)</dd>
4525 </dl></dt>
4526 </dl></dd>
4527 </dl></dd>
4528 </dl></li>
4529 </ul></dt>
4530 </dl></li>
4531 </ol></li>
4532 </ul>
4533 !! end
4534
4535 !! test
4536 Definition Lists: colons occurring in tags
4537 !! wikitext
4538 ;a:b
4539 ;'''a:b'''
4540 ;<i>a:b</i>
4541 ;<span>a:b</span>
4542 ;<div>a:b</div>
4543 ;<div>a
4544 :b</div>
4545 ;{{echo|a:b}}
4546 ;{{echo|''a:b''}}
4547 ;;;''a:b''
4548 !! html+tidy
4549 <dl>
4550 <dt>a</dt>
4551 <dd>b</dd>
4552 <dt><b>a:b</b></dt>
4553 <dt><i>a:b</i></dt>
4554 <dt><span>a:b</span></dt>
4555 <dd>
4556 <div>a:b</div>
4557 </dd>
4558 <dd>
4559 <div>a
4560 <dl>
4561 <dd>b</dd>
4562 </dl>
4563 </div>
4564 </dd>
4565 <dt>a</dt>
4566 <dd>b</dd>
4567 <dt><i>a:b</i></dt>
4568 </dl>
4569 <dl>
4570 <dd>
4571 <dl>
4572 <dd>
4573 <dl>
4574 <dt><i>a:b</i></dt>
4575 </dl>
4576 </dd>
4577 </dl>
4578 </dd>
4579 </dl>
4580 !! html/parsoid
4581 <dl><dt>a</dt><dd data-parsoid='{"stx":"row"}'>b</dd>
4582 <dt><b>a:b</b></dt>
4583 <dt><i data-parsoid='{"stx":"html"}'>a:b</i></dt>
4584 <dt><span data-parsoid='{"stx":"html"}'>a:b</span></dt>
4585 <dt><div data-parsoid='{"stx":"html"}'>a:b</div></dt>
4586 <dt><div data-parsoid='{"stx":"html","autoInsertedEnd":true}'>a</div></dt>
4587 <dd>b</dd>
4588 <dt><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a:b"}},"i":0}}]}'>a:b</span></dt>
4589 <dt><i about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;a:b&#39;&#39;"}},"i":0}}]}'>a:b</i>
4590 <dl><dt><dl><dt><i>a:b</i></dt></dl></dt></dl></dt></dl>
4591 !! end
4592
4593 !! test
4594 Definition Lists: colons and tables 1
4595 !! wikitext
4596 :{|
4597 | x
4598 |}
4599 :{|
4600 | y
4601 |}
4602 !! html
4603 <dl><dd><table>
4604 <tr>
4605 <td> x
4606 </td></tr></table></dd></dl>
4607 <dl><dd><table>
4608 <tr>
4609 <td> y
4610 </td></tr></table></dd></dl>
4611
4612 !! end
4613
4614 # Parsoid's output (as documented below) differs from php's in this case.
4615 # This is probably a bug. If we fixup parsoid to match php's output, the
4616 # above test should pass and the below test case can be removed. It is
4617 # unclear which output is more desirable.
4618
4619 !! test
4620 Definition Lists: colons and tables 2
4621 !! wikitext
4622 :{|
4623 | x
4624 |}
4625 :{|
4626 | y
4627 |}
4628 !! html/parsoid
4629 <dl><dd><table>
4630 <tr>
4631 <td> x
4632 </td></tr></table></dd>
4633 <dd><table>
4634 <tr>
4635 <td> y
4636 </td></tr></table></dd></dl>
4637 !! end
4638
4639 !! test
4640 Definition Lists: template interaction
4641 !! wikitext
4642 ::{{definition_list}}
4643
4644 :one
4645 ::{{definition_list}}
4646 :::two
4647 :::three
4648 ::four
4649 !! html/parsoid
4650 <dl><dd><dl data-parsoid='{}'><dd about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[":",{"template":{"target":{"wt":"definition_list","href":"./Template:Definition_list"},"params":{},"i":0}}]}'>one</dd><span about="#mwt1">
4651 </span><dd about="#mwt1">two</dd></dl></dd></dl>
4652
4653 <dl><dd data-parsoid='{}'>one
4654 <dl><dd about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":["::",{"template":{"target":{"wt":"definition_list","href":"./Template:Definition_list"},"params":{},"i":0}},"\n:::two\n:::three"]}'>one</dd><span about="#mwt2">
4655 </span><dd about="#mwt2">two
4656 <dl><dd>two</dd>
4657 <dd>three</dd></dl></dd>
4658 <dd data-parsoid='{}'>four</dd></dl></dd></dl>
4659 !! end
4660
4661
4662 ###
4663 ### External links
4664 ###
4665 !! test
4666 External links: non-bracketed
4667 !! wikitext
4668 Non-bracketed: http://example.com
4669 !! html
4670 <p>Non-bracketed: <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
4671 </p>
4672 !! end
4673
4674 # parsoid doesn't explicitly mark autonumbered links, see T55505
4675 !! test
4676 External links: numbered
4677 !! wikitext
4678 Numbered: [http://example.com]
4679 Numbered: [http://example.net]
4680 Numbered: [http://example.com]
4681 !! html/php
4682 <p>Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com">[1]</a>
4683 Numbered: <a rel="nofollow" class="external autonumber" href="http://example.net">[2]</a>
4684 Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com">[3]</a>
4685 </p>
4686 !! html/parsoid
4687 <p>Numbered: <a rel="mw:ExtLink" href="http://example.com"></a>
4688 Numbered: <a rel="mw:ExtLink" href="http://example.net"></a>
4689 Numbered: <a rel="mw:ExtLink" href="http://example.com"></a></p>
4690 !!end
4691
4692 !! test
4693 External links: specified text
4694 !! wikitext
4695 Specified text: [http://example.com link]
4696 !! html
4697 <p>Specified text: <a rel="nofollow" class="external text" href="http://example.com">link</a>
4698 </p>
4699 !!end
4700
4701 !! test
4702 External links: trail
4703 !! wikitext
4704 Linktrails should not work for external links: [http://example.com link]s
4705 !! html
4706 <p>Linktrails should not work for external links: <a rel="nofollow" class="external text" href="http://example.com">link</a>s
4707 </p>
4708 !! end
4709
4710 !! test
4711 External links: dollar sign in URL
4712 !! wikitext
4713 http://example.com/1$2345
4714 !! html
4715 <p><a rel="nofollow" class="external free" href="http://example.com/1$2345">http://example.com/1$2345</a>
4716 </p>
4717 !! end
4718
4719 # parsoid doesn't explicitly mark autonumbered links, see T55505
4720 !! test
4721 External links: dollar sign in URL (autonumber)
4722 !! wikitext
4723 [http://example.com/1$2345]
4724 !! html/php
4725 <p><a rel="nofollow" class="external autonumber" href="http://example.com/1$2345">[1]</a>
4726 </p>
4727 !! html/parsoid
4728 <p><a rel="mw:ExtLink" href="http://example.com/1$2345"></a></p>
4729 !!end
4730
4731 !! test
4732 External links: open square bracket forbidden in URL (T6377)
4733 !! options
4734 parsoid=wt2html,wt2wt,html2html
4735 !! wikitext
4736 http://example.com/1[2345
4737 !! html/php
4738 <p><a rel="nofollow" class="external free" href="http://example.com/1">http://example.com/1</a>[2345
4739 </p>
4740 !! html/parsoid
4741 <p><a rel="mw:ExtLink" href="http://example.com/1">http://example.com/1</a>[2345</p>
4742 !! end
4743
4744 !! test
4745 External links: open square bracket forbidden in URL (named) (T6377)
4746 !! options
4747 parsoid=wt2html,html2html
4748 !! wikitext
4749 [http://example.com/1[2345]
4750 !! html/php
4751 <p><a rel="nofollow" class="external text" href="http://example.com/1">[2345</a>
4752 </p>
4753 !! html/parsoid
4754 <p><a rel="mw:ExtLink" href="http://example.com/1">[2345</a></p>
4755 !!end
4756
4757 # parsoid adds a space before the link name
4758 !! test
4759 External links: open square bracket forbidden in URL (named) (T6377)
4760 Parsoid variant.
4761 !! wikitext
4762 [http://example.com/1 [2345]
4763 !! html
4764 <p><a rel="nofollow" class="external text" href="http://example.com/1">[2345</a>
4765 </p>
4766 !!end
4767
4768 !! test
4769 External links: nowiki in URL link text (T8230)
4770 !! wikitext
4771 [http://example.com/ <nowiki>''example site''</nowiki>]
4772 !! html
4773 <p><a rel="nofollow" class="external text" href="http://example.com/">''example site''</a>
4774 </p>
4775 !! end
4776
4777 !! test
4778 External links: newline forbidden in text (T8230 regression check)
4779 !! wikitext
4780 [http://example.com/ first
4781 second]
4782 !! html
4783 <p>[<a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a> first
4784 second]
4785 </p>
4786 !!end
4787
4788 !! test
4789 External links: Pipe char between url and text
4790 !! wikitext
4791 [http://example.com | link]
4792 !! html
4793 <p><a rel="nofollow" class="external text" href="http://example.com">| link</a>
4794 </p>
4795 !!end
4796
4797 !! test
4798 External links: protocol-relative URL in brackets
4799 !! wikitext
4800 [//example.com/ Test]
4801 !! html
4802 <p><a rel="nofollow" class="external text" href="//example.com/">Test</a>
4803 </p>
4804 !! end
4805
4806 # parsoid doesn't explicitly mark autonumbered links, see T55505
4807 !! test
4808 External links: protocol-relative URL in brackets without text
4809 !! wikitext
4810 [//example.com]
4811 !! html/php
4812 <p><a rel="nofollow" class="external autonumber" href="//example.com">[1]</a>
4813 </p>
4814 !! html/parsoid
4815 <p><a rel="mw:ExtLink" href="//example.com"></a></p>
4816 !! end
4817
4818 !! test
4819 External links: protocol-relative URL in free text is left alone
4820 !! wikitext
4821 //example.com/Foo
4822 !! html
4823 <p>//example.com/Foo
4824 </p>
4825 !!end
4826
4827 !! test
4828 External links: protocol-relative URL in the middle of a word is left alone (T32269)
4829 !! wikitext
4830 foo//example.com/Foo
4831 !! html
4832 <p>foo//example.com/Foo
4833 </p>
4834 !! end
4835
4836 ## html2wt and html2html will fail because we will prefer the :en: interwiki prefix over wikipedia:
4837 !! test
4838 External links: with no contents
4839 !! options
4840 parsoid=wt2html,wt2wt
4841 !! wikitext
4842 [http://en.wikipedia.org/wiki/Foo]
4843
4844 [[wikipedia:Foo|Bar]]
4845
4846 [[wikipedia:Foo|<span>Bar</span>]]
4847 !! html/php
4848 <p><a rel="nofollow" class="external autonumber" href="http://en.wikipedia.org/wiki/Foo">[1]</a>
4849 </p><p><a href="http://en.wikipedia.org/wiki/Foo" class="extiw" title="wikipedia:Foo">Bar</a>
4850 </p><p><a href="http://en.wikipedia.org/wiki/Foo" class="extiw" title="wikipedia:Foo"><span>Bar</span></a>
4851 </p>
4852 !! html/parsoid
4853 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo"></a></p>
4854 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" title="wikipedia:Foo">Bar</a></p>
4855 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" title="wikipedia:Foo"><span>Bar</span></a></p>
4856 !! end
4857
4858 !! test
4859 External links: Free with trailing punctuation
4860 !! wikitext
4861 http://example.com,
4862 http://example.com;
4863 http://example.com\
4864 http://example.com.
4865 http://example.com:
4866 http://example.com!
4867 http://example.com?
4868 http://example.com)
4869 http://example.com/url_with_(brackets)
4870 (http://example.com/url_without_brackets)
4871 http://example.com/url_with_entity&amp;
4872 http://example.com/url_with_entity&#x26;
4873 http://example.com/url_with_entity&#038;
4874 http://example.com/url_with_entity&nbsp;
4875 http://example.com/url_with_entity&#xA0;
4876 http://example.com/url_with_entity&#160;
4877 http://example.com/url_with_entity&lt;
4878 http://example.com/url_with_entity&#x3C;
4879 http://example.com/url_with_entity&#60;
4880 !! html/php
4881 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>,
4882 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>;
4883 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>\
4884 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>.
4885 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>:
4886 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>!
4887 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>?
4888 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
4889 <a rel="nofollow" class="external free" href="http://example.com/url_with_(brackets)">http://example.com/url_with_(brackets)</a>
4890 (<a rel="nofollow" class="external free" href="http://example.com/url_without_brackets">http://example.com/url_without_brackets</a>)
4891 <a rel="nofollow" class="external free" href="http://example.com/url_with_entity&amp;">http://example.com/url_with_entity&amp;</a>
4892 <a rel="nofollow" class="external free" href="http://example.com/url_with_entity&amp;">http://example.com/url_with_entity&amp;</a>
4893 <a rel="nofollow" class="external free" href="http://example.com/url_with_entity&amp;">http://example.com/url_with_entity&amp;</a>
4894 <a rel="nofollow" class="external free" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a>&#160;
4895 <a rel="nofollow" class="external free" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a>&#xa0;
4896 <a rel="nofollow" class="external free" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a>&#160;
4897 <a rel="nofollow" class="external free" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a>&lt;
4898 <a rel="nofollow" class="external free" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a>&#x3c;
4899 <a rel="nofollow" class="external free" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a>&#60;
4900 </p>
4901 !! html/parsoid
4902 <p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a>,
4903 <a rel="mw:ExtLink" href="http://example.com">http://example.com</a>;
4904 <a rel="mw:ExtLink" href="http://example.com">http://example.com</a>\
4905 <a rel="mw:ExtLink" href="http://example.com">http://example.com</a>.
4906 <a rel="mw:ExtLink" href="http://example.com">http://example.com</a>:
4907 <a rel="mw:ExtLink" href="http://example.com">http://example.com</a>!
4908 <a rel="mw:ExtLink" href="http://example.com">http://example.com</a>?
4909 <a rel="mw:ExtLink" href="http://example.com">http://example.com</a>)
4910 <a rel="mw:ExtLink" href="http://example.com/url_with_(brackets)">http://example.com/url_with_(brackets)</a>
4911 (<a rel="mw:ExtLink" href="http://example.com/url_without_brackets">http://example.com/url_without_brackets</a>)
4912 <a rel="mw:ExtLink" href="http://example.com/url_with_entity&amp;">http://example.com/url_with_entity&amp;</a>
4913 <a rel="mw:ExtLink" href="http://example.com/url_with_entity&amp;">http://example.com/url_with_entity&amp;</a>
4914 <a rel="mw:ExtLink" href="http://example.com/url_with_entity&amp;">http://example.com/url_with_entity&amp;</a>
4915 <a rel="mw:ExtLink" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span>
4916 <a rel="mw:ExtLink" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span>
4917 <a rel="mw:ExtLink" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span>
4918 <a rel="mw:ExtLink" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;lt;","srcContent":"&lt;"}'>&lt;</span>
4919 <a rel="mw:ExtLink" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#x3C;","srcContent":"&lt;"}'>&lt;</span>
4920 <a rel="mw:ExtLink" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#60;","srcContent":"&lt;"}'>&lt;</span></p>
4921 !! end
4922
4923 !! test
4924 External links: tricky Parsoid html2html case
4925 !! options
4926 parsoid=wt2html,wt2wt,html2html
4927 !! wikitext
4928 http://example.com/url_with_entity&amp;amp;
4929 !! html/php
4930 <p><a rel="nofollow" class="external free" href="http://example.com/url_with_entity&amp;amp">http://example.com/url_with_entity&amp;amp</a>;
4931 </p>
4932 !! html/parsoid
4933 <p><a rel="mw:ExtLink" href="http://example.com/url_with_entity&amp;amp">http://example.com/url_with_entity&amp;amp</a>;</p>
4934 !! end
4935
4936 !! test
4937 External links: Free with trailing quotes (T113666)
4938 !! wikitext
4939 '''News:''' Stuff here
4940
4941 news:'a'b''c''d e
4942 !! html/php
4943 <p><b>News:</b> Stuff here
4944 </p><p><a rel="nofollow" class="external free" href="news:&#39;a&#39;b">news:'a'b</a><i>c</i>d e
4945 </p>
4946 !! html/parsoid
4947 <p><b>News:</b> Stuff here</p>
4948 <p><a rel="mw:ExtLink" href="news:'a'b">news:'a'b</a><i>c</i>d e</p>
4949 !! end
4950
4951 !! test
4952 External links: with entity
4953 !! wikitext
4954 [http://&#x20;www.librarieswithoutborders.org Libraries without borders]
4955 !! html/php
4956 <p><a rel="nofollow" class="external text" href="http://+www.librarieswithoutborders.org">Libraries without borders</a>
4957 </p>
4958 !! html/parsoid
4959 <p><a rel="mw:ExtLink" href="http://+www.librarieswithoutborders.org" data-parsoid='{"a":{"href":"http://+www.librarieswithoutborders.org"},"sa":{"href":"http://&amp;#x20;www.librarieswithoutborders.org"}}'>Libraries without borders</a></p>
4960 !! end
4961
4962 !! test
4963 External links: Lone protocols are never linked (T105697)
4964 !! wikitext
4965 http://
4966 http://;
4967 (http://)
4968 bitcoin:
4969 bitcoin:;
4970 (bitcoin:)
4971 !! html
4972 <p>http://
4973 http://;
4974 (http://)
4975 bitcoin:
4976 bitcoin:;
4977 (bitcoin:)
4978 </p>
4979 !! end
4980
4981 !! test
4982 External links: No preceding word characters allowed (T67278)
4983 !! wikitext
4984 NOPEhttp://example.com
4985 N0http://example.com
4986 ok:http://example.com
4987 ok-http://example.com
4988 !! html
4989 <p>NOPEhttp://example.com
4990 N0http://example.com
4991 ok:<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
4992 ok-<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
4993 </p>
4994 !! end
4995
4996 !! test
4997 External links: nofollow domain exception
4998 !! wikitext
4999 A [https://no-nofollow.org/foobar link], and another [https://example.org link].
5000 !! html
5001 <p>A <a class="external text" href="https://no-nofollow.org/foobar">link</a>, and another <a rel="nofollow" class="external text" href="https://example.org">link</a>.
5002 </p>
5003 !!end
5004
5005 !! test
5006 External image
5007 !! wikitext
5008 External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
5009 !! html
5010 <p>External image: <img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png"/>
5011 </p>
5012 !! end
5013
5014 !! test
5015 External image from https
5016 !! wikitext
5017 External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
5018 !! html
5019 <p>External image from https: <img src="https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png"/>
5020 </p>
5021 !! end
5022
5023 !! test
5024 External image (when not allowed)
5025 !! options
5026 wgAllowExternalImages=0
5027 !! wikitext
5028 External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
5029 !! html
5030 <p>External image: <a rel="nofollow" class="external free" href="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png">http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png</a>
5031 </p>
5032 !! end
5033
5034 !! test
5035 Link to non-http image, no img tag
5036 !! wikitext
5037 Link to non-http image, no img tag: ftp://example.com/test.jpg
5038 !! html
5039 <p>Link to non-http image, no img tag: <a rel="nofollow" class="external free" href="ftp://example.com/test.jpg">ftp://example.com/test.jpg</a>
5040 </p>
5041 !! end
5042
5043 !! test
5044 External links: terminating separator
5045 !! wikitext
5046 Terminating separator: http://example.com/thing,
5047 !! html
5048 <p>Terminating separator: <a rel="nofollow" class="external free" href="http://example.com/thing">http://example.com/thing</a>,
5049 </p>
5050 !! end
5051
5052 !! test
5053 External links: intervening separator
5054 !! wikitext
5055 Intervening separator: http://example.com/1,2,3
5056 !! html
5057 <p>Intervening separator: <a rel="nofollow" class="external free" href="http://example.com/1,2,3">http://example.com/1,2,3</a>
5058 </p>
5059 !! end
5060
5061 !! test
5062 External links: old bug with URL in query
5063 !! wikitext
5064 Old bug with URL in query: [http://example.com/thing?url=http://example.com link]
5065 !! html
5066 <p>Old bug with URL in query: <a rel="nofollow" class="external text" href="http://example.com/thing?url=http://example.com">link</a>
5067 </p>
5068 !! end
5069
5070 !! test
5071 External links: old URL-in-URL bug, mixed protocols
5072 !! wikitext
5073 And again with mixed protocols: [ftp://example.com?url=http://example.com link]
5074 !! html
5075 <p>And again with mixed protocols: <a rel="nofollow" class="external text" href="ftp://example.com?url=http://example.com">link</a>
5076 </p>
5077 !!end
5078
5079 # Since Parsoid is starting to emit canonical wikitext for links,
5080 # [http://example.com http://example.com] will not RT back to that
5081 # form anymore.
5082 !! test
5083 External links: URL in text
5084 !! options
5085 parsoid=wt2html
5086 !! wikitext
5087 URL in text: [http://example.com http://example.com]
5088 !! html/php
5089 <p>URL in text: <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
5090 </p>
5091 !! html/parsoid
5092 <p>URL in text: <a rel="mw:ExtLink" href="http://example.com">http://example.com</a></p>
5093 !! end
5094
5095 !! test
5096 External links: Clickable images
5097 !! wikitext
5098 ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png]
5099 !! html/php
5100 <p>ja-style clickable images: <a rel="nofollow" class="external text" href="http://example.com"><img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png"/></a>
5101 </p>
5102 !! html/parsoid
5103 <p>ja-style clickable images: <a rel="mw:ExtLink" href="http://example.com"><img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" data-parsoid='{"type":"extlink"}'/></a></p>
5104 !! end
5105
5106 !! test
5107 External links: raw ampersand
5108 !! wikitext
5109 Old &amp; use: http://x&y
5110 !! html
5111 <p>Old &amp; use: <a rel="nofollow" class="external free" href="http://x&amp;y">http://x&amp;y</a>
5112 </p>
5113 !! end
5114
5115 !! test
5116 External links: encoded ampersand
5117 !! wikitext
5118 Old &amp; use: http://x&amp;y
5119 !! html/php
5120 <p>Old &amp; use: <a rel="nofollow" class="external free" href="http://x&amp;y">http://x&amp;y</a>
5121 </p>
5122 !! html/parsoid
5123 <p>Old <span typeof="mw:Entity">&amp;</span> use: <a rel="mw:ExtLink" href="http://x&amp;y">http://x&amp;y</a></p>
5124 !! end
5125
5126 !! test
5127 External links: encoded equals (T8102)
5128 !! wikitext
5129 http://example.com/?foo&#61;bar
5130 !! html/php
5131 <p><a rel="nofollow" class="external free" href="http://example.com/?foo=bar">http://example.com/?foo=bar</a>
5132 </p>
5133 !! html/parsoid
5134 <p><a rel="mw:ExtLink" href="http://example.com/?foo=bar">http://example.com/?foo=bar</a></p>
5135 !! end
5136
5137 ##
5138 ## Note that parsoid doesn't explicit mark autonumbered links, nor
5139 ## does it number them. As discussed in T55505, we can identify
5140 ## autonumbered links via CSS.
5141 ##
5142
5143 !! test
5144 External links: [raw ampersand]
5145 !! wikitext
5146 Old &amp; use: [http://x&y]
5147 !! html/php
5148 <p>Old &amp; use: <a rel="nofollow" class="external autonumber" href="http://x&amp;y">[1]</a>
5149 </p>
5150 !! html/parsoid
5151 <p>Old <span typeof="mw:Entity">&amp;</span> use: <a rel="mw:ExtLink" href="http://x&amp;y"></a></p>
5152 !! end
5153
5154 # note that parsoid html is identical to [raw ampersand] case; so html2wt
5155 # mode will return the [raw ampersand] wikitext
5156 !! test
5157 External links: [encoded ampersand]
5158 !! options
5159 parsoid=wt2html,wt2wt,html2html
5160 !! wikitext
5161 Old &amp; use: [http://x&amp;y]
5162 !! html/php
5163 <p>Old &amp; use: <a rel="nofollow" class="external autonumber" href="http://x&amp;y">[1]</a>
5164 </p>
5165 !! html/parsoid
5166 <p>Old <span typeof="mw:Entity">&amp;</span> use: <a rel="mw:ExtLink" href="http://x&amp;y"></a></p>
5167 !! end
5168
5169 !! test
5170 External links: [raw equals]
5171 !! wikitext
5172 [http://example.com/?foo=bar]
5173 !! html/php
5174 <p><a rel="nofollow" class="external autonumber" href="http://example.com/?foo=bar">[1]</a>
5175 </p>
5176 !! html/parsoid
5177 <p><a rel="mw:ExtLink" href="http://example.com/?foo=bar"></a></p>
5178 !! end
5179
5180 # note that parsoid html is identical to [raw equals] case; so html2wt
5181 # mode will return the [raw equals] wikitext
5182 !! test
5183 External links: [encoded equals] (T8102)
5184 !! options
5185 parsoid=wt2html,wt2wt,html2html
5186 !! wikitext
5187 [http://example.com/?foo&#61;bar]
5188 !! html/php
5189 <p><a rel="nofollow" class="external autonumber" href="http://example.com/?foo=bar">[1]</a>
5190 </p>
5191 !! html/parsoid
5192 <p><a rel="mw:ExtLink" href="http://example.com/?foo=bar"></a></p>
5193 !! end
5194
5195 # xxx parsoid strips the IDN character, so the round-trip tests will
5196 # obviously fail and are disabled. --cscott
5197 !! test
5198 External links: [IDN ignored character reference in hostname; strip it right off]
5199 !! options
5200 parsoid=wt2html,wt2wt,html2html
5201 !! wikitext
5202 [http://e&zwnj;xample.com/]
5203 !! html/php
5204 <p><a rel="nofollow" class="external autonumber" href="http://example.com/">[1]</a>
5205 </p>
5206 !! html/parsoid
5207 <p><a rel="mw:ExtLink" href="http://example.com/"></a></p>
5208 !! end
5209
5210 # FIXME: This test (the IDN characters in the text of a link) is an inconsistency.
5211 # Where an external link could easily circumvent the sanitization of the text of
5212 # a link like this (where an IDN-ignore character is in the URL somewhere), this
5213 # test demands a higher standard. That's a bit strange.
5214 #
5215 # Example:
5216 #
5217 # http://e‌xample.com -> [http://example.com|http://example.com]
5218 # [http://example.com|http://e‌xample.com] -> [http://example.com|http://e‌xample.com]
5219 #
5220 # The first example is sanitized, but the second is not. Any security benefits
5221 # from this production are trivial to circumvent. Either remove this test and
5222 # let the parser(s) do their thing unaccosted, or fix the inconsistency and change
5223 # the test accordingly.
5224 #
5225 # All our love,
5226 # The Parsoid team.
5227 # xxx parsoid strips the IDN character, so the round-trip tests will
5228 # obviously fail and are disabled. --cscott
5229 !! test
5230 External links: IDN ignored character reference in hostname; strip it right off
5231 !! options
5232 parsoid=wt2html,html2html
5233 !! wikitext
5234 http://e&zwnj;xample.com/
5235 !! html/php
5236 <p><a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>
5237 </p>
5238 !! html/parsoid
5239 <p><a rel="mw:ExtLink" href="http://example.com/">http://example.com/</a></p>
5240 !! end
5241
5242 !! test
5243 External links: www.jpeg.org (T2554)
5244 !! wikitext
5245 http://www.jpeg.org
5246 !! html
5247 <p><a rel="nofollow" class="external free" href="http://www.jpeg.org">http://www.jpeg.org</a>
5248 </p>
5249 !! end
5250
5251 # parsoid doesn't explicitly mark autonumbered links, see T55505
5252 !! test
5253 External links: URL within URL (T2002)
5254 !! wikitext
5255 [http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp]
5256 !! html/php
5257 <p><a rel="nofollow" class="external autonumber" href="http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp">[1]</a>
5258 </p>
5259 !! html/parsoid
5260 <p><a rel="mw:ExtLink" href="http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp"></a></p>
5261 !! end
5262
5263 !! test
5264 T2361: URL inside bracketed URL
5265 !! wikitext
5266 [http://www.example.com/foo http://www.example.com/bar]
5267 !! html
5268 <p><a rel="nofollow" class="external text" href="http://www.example.com/foo">http://www.example.com/bar</a>
5269 </p>
5270 !! end
5271
5272 !! test
5273 T2361: URL within URL, not bracketed
5274 !! wikitext
5275 http://www.example.com/foo?=http://www.example.com/bar
5276 !! html
5277 <p><a rel="nofollow" class="external free" href="http://www.example.com/foo?=http://www.example.com/bar">http://www.example.com/foo?=http://www.example.com/bar</a>
5278 </p>
5279 !! end
5280
5281 !! test
5282 T2289: ">"-token in URL-tail
5283 !! wikitext
5284 http://www.example.com/<hello>
5285 !! html
5286 <p><a rel="nofollow" class="external free" href="http://www.example.com/">http://www.example.com/</a>&lt;hello&gt;
5287 </p>
5288 !!end
5289
5290 !! test
5291 T2289: literal ">"-token in URL-tail
5292 !! wikitext
5293 http://www.example.com/<b>html</b>
5294 !! html/php
5295 <p><a rel="nofollow" class="external free" href="http://www.example.com/">http://www.example.com/</a><b>html</b>
5296 </p>
5297 !! html/parsoid
5298 <p><a rel="mw:ExtLink" href="http://www.example.com/" data-parsoid='{"stx":"url"}'>http://www.example.com/</a><b data-parsoid='{"stx":"html"}'>html</b></p>
5299 !! end
5300
5301 !! test
5302 T2289: ">"-token in bracketed URL
5303 !! wikitext
5304 [http://www.example.com/<hello> stuff]
5305 !! html
5306 <p><a rel="nofollow" class="external text" href="http://www.example.com/">&lt;hello&gt; stuff</a>
5307 </p>
5308 !!end
5309
5310 !! test
5311 T2289: literal ">"-token in bracketed URL
5312 !! wikitext
5313 [http://www.example.com/<b>html</b> stuff]
5314 !! html
5315 <p><a rel="nofollow" class="external text" href="http://www.example.com/"><b>html</b> stuff</a>
5316 </p>
5317 !!end
5318
5319 !! test
5320 T2289: literal double quote at end of URL
5321 !! wikitext
5322 http://www.example.com/"hello"
5323 !! html
5324 <p><a rel="nofollow" class="external free" href="http://www.example.com/">http://www.example.com/</a>"hello"
5325 </p>
5326 !!end
5327
5328 !! test
5329 T2289: literal double quote in bracketed URL
5330 !! wikitext
5331 [http://www.example.com/"hello" stuff]
5332 !! html
5333 <p><a rel="nofollow" class="external text" href="http://www.example.com/">"hello" stuff</a>
5334 </p>
5335 !!end
5336
5337 !! test
5338 External links: multiple legal whitespace is fine, Magnus. Don't break it please. (T7081)
5339 !! wikitext
5340 [http://www.example.com test]
5341 !! html
5342 <p><a rel="nofollow" class="external text" href="http://www.example.com">test</a>
5343 </p>
5344 !! end
5345
5346 !! test
5347 External links: link text with spaces
5348 !! wikitext
5349 [http://www.example.com a b c]
5350 [http://www.example.com ''a'' ''b'']
5351 !! html
5352 <p><a rel="nofollow" class="external text" href="http://www.example.com">a b c</a>
5353 <a rel="nofollow" class="external text" href="http://www.example.com"><i>a</i> <i>b</i></a>
5354 </p>
5355 !! end
5356
5357 !! test
5358 External links: wiki links within external link (T5695)
5359 !! options
5360 parsoid=wt2html,html2html
5361 !! wikitext
5362 [http://example.com [[wikilink]] embedded in ext link]
5363 !! html/php
5364 <p><a rel="nofollow" class="external text" href="http://example.com"></a><a href="/index.php?title=Wikilink&amp;action=edit&amp;redlink=1" class="new" title="Wikilink (page does not exist)">wikilink</a><a rel="nofollow" class="external text" href="http://example.com"> embedded in ext link</a>
5365 </p>
5366 !! html/parsoid
5367 <p><a rel="mw:ExtLink" href="http://example.com"></a><a rel="mw:WikiLink" href="./Wikilink" title="Wikilink">wikilink</a><span> embedded in ext link</span></p>
5368 !! end
5369
5370 !! test
5371 T2787: Links with one slash after the url protocol are invalid
5372 !! wikitext
5373 http:/example.com
5374
5375 [http:/example.com title]
5376 !! html
5377 <p>http:/example.com
5378 </p><p>[http:/example.com title]
5379 </p>
5380 !! end
5381
5382 !! test
5383 Bracketed external links with template-generated invalid target
5384 !! wikitext
5385 [{{echo|http:/example.com}} title]
5386 !! html
5387 <p>[http:/example.com title]
5388 </p>
5389 !! end
5390
5391 # wt2html only because Parsoid would want to add <nowiki>s coming from html
5392 !! test
5393 Broken wikilinks (but not external links) prevent templates from closing
5394 !! options
5395 parsoid=wt2html
5396 !! wikitext
5397 [http://example.com x
5398
5399 {{echo|[http://example.com x}}
5400
5401 [[Foo
5402
5403 {{echo|[[Foo}}
5404 !! html/php
5405 <p>[<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> x
5406 </p><p>[<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> x
5407 </p><p>[[Foo
5408 </p><p>{{echo|[[Foo}}
5409 </p>
5410 !! html/parsoid
5411 <p>[<a rel="mw:ExtLink" href="http://example.com">http://example.com</a> x</p>
5412 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[http://example.com x"}},"i":0}}]}'>[<a rel="mw:ExtLink" href="http://example.com">http://example.com</a> x</p>
5413 <p>[[Foo</p>
5414 <p>{{echo|[[Foo}}</p>
5415 !! end
5416
5417 !! test
5418 Wikilinks with embedded newlines are not broken
5419 !! wikitext
5420 {{echo|[[ Foo
5421 B
5422 C]]}}
5423 !! html/php
5424 <p>[[ Foo
5425 B
5426 C]]
5427 </p>
5428 !! html/parsoid
5429 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[ Foo\nB\nC]]"}},"i":0}}]}'>[[ Foo B C]]</p>
5430 !! end
5431
5432 !! test
5433 Broken templates
5434 !! options
5435 parsoid=wt2html
5436 !! wikitext
5437 {{echo|[[Foo|}}]]
5438
5439 [[Foo|{{echo|]]}}
5440 !! html/php
5441 <p>{{echo|<a href="/wiki/Foo" title="Foo">}}</a>
5442 </p><p>[[Foo|]]
5443 </p>
5444 !! html/parsoid
5445 <p>{{echo|<a rel="mw:WikiLink" href="./Foo" title="Foo">}}</a></p>
5446 <p>[[Foo|<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"]]"}},"i":0}}]}'>]]</span></p>
5447 !! end
5448
5449 !! test
5450 T4702: Mismatched <i>, <b> and <a> tags are invalid
5451 !! wikitext
5452 ''[http://example.com text'']
5453 [http://example.com '''text]'''
5454 ''Something [http://example.com in italic'']
5455 ''Something [http://example.com mixed''''', even bold]'''
5456 '''''Now [http://example.com both''''']
5457 !! html
5458 <p><a rel="nofollow" class="external text" href="http://example.com"><i>text</i></a>
5459 <a rel="nofollow" class="external text" href="http://example.com"><b>text</b></a>
5460 <i>Something </i><a rel="nofollow" class="external text" href="http://example.com"><i>in italic</i></a>
5461 <i>Something </i><a rel="nofollow" class="external text" href="http://example.com"><i>mixed</i><b>, even bold</b></a>
5462 <i><b>Now </b></i><a rel="nofollow" class="external text" href="http://example.com"><i><b>both</b></i></a>
5463 </p>
5464 !! end
5465
5466
5467 !! test
5468 T6781: %26 in URL
5469 !! wikitext
5470 http://www.example.com/?title=AT%26T
5471 !! html/php
5472 <p><a rel="nofollow" class="external free" href="http://www.example.com/?title=AT%26T">http://www.example.com/?title=AT%26T</a>
5473 </p>
5474 !! html/parsoid
5475 <p><a rel="mw:ExtLink" href="http://www.example.com/?title=AT%26T">http://www.example.com/?title=AT%26T</a></p>
5476 !! end
5477
5478 # According to https://www.w3.org/TR/2011/WD-html5-20110525/Overview.html#parsing-urls a plain
5479 # % is actually legal in HTML5. Any change in output would need testing though.
5480 !! test
5481 T6781, T7267: %25 in URL
5482 !! wikitext
5483 http://www.example.com/?title=100%25_Bran
5484 !! html/php
5485 <p><a rel="nofollow" class="external free" href="http://www.example.com/?title=100%25_Bran">http://www.example.com/?title=100%25_Bran</a>
5486 </p>
5487 !! html/parsoid
5488 <p><a rel="mw:ExtLink" href="http://www.example.com/?title=100%25_Bran">http://www.example.com/?title=100%25_Bran</a></p>
5489 !! end
5490
5491 !! test
5492 T6781, T7267: %28, %29 in URL
5493 !! wikitext
5494 http://www.example.com/?title=Ben-Hur_%281959_film%29
5495 !! html/php
5496 <p><a rel="nofollow" class="external free" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">http://www.example.com/?title=Ben-Hur_%281959_film%29</a>
5497 </p>
5498 !! html/parsoid
5499 <p><a rel="mw:ExtLink" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">http://www.example.com/?title=Ben-Hur_%281959_film%29</a></p>
5500 !! end
5501
5502
5503 !! test
5504 T6781: %26 in autonumber URL
5505 !! wikitext
5506 [http://www.example.com/?title=AT%26T]
5507 !! html/php
5508 <p><a rel="nofollow" class="external autonumber" href="http://www.example.com/?title=AT%26T">[1]</a>
5509 </p>
5510 !! html/parsoid
5511 <p><a rel="mw:ExtLink" href="http://www.example.com/?title=AT%26T"></a></p>
5512 !! end
5513
5514 !! test
5515 T6781, T7267: %26 in autonumber URL
5516 !! wikitext
5517 [http://www.example.com/?title=100%25_Bran]
5518 !! html/php
5519 <p><a rel="nofollow" class="external autonumber" href="http://www.example.com/?title=100%25_Bran">[1]</a>
5520 </p>
5521 !! html/parsoid
5522 <p><a rel="mw:ExtLink" href="http://www.example.com/?title=100%25_Bran"></a></p>
5523 !! end
5524
5525 !! test
5526 T6781, T7267: %28, %29 in autonumber URL
5527 !! wikitext
5528 [http://www.example.com/?title=Ben-Hur_%281959_film%29]
5529 !! html/php
5530 <p><a rel="nofollow" class="external autonumber" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">[1]</a>
5531 </p>
5532 !! html/parsoid
5533 <p><a rel="mw:ExtLink" href="http://www.example.com/?title=Ben-Hur_%281959_film%29"></a></p>
5534 !! end
5535
5536
5537 !! test
5538 T6781: %26 in bracketed URL
5539 !! wikitext
5540 [http://www.example.com/?title=AT%26T link]
5541 !! html/php
5542 <p><a rel="nofollow" class="external text" href="http://www.example.com/?title=AT%26T">link</a>
5543 </p>
5544 !! html/parsoid
5545 <p><a rel="mw:ExtLink" href="http://www.example.com/?title=AT%26T">link</a></p>
5546 !! end
5547
5548 !! test
5549 T6781, T7267: %25 in bracketed URL
5550 !! wikitext
5551 [http://www.example.com/?title=100%25_Bran link]
5552 !! html
5553 <p><a rel="nofollow" class="external text" href="http://www.example.com/?title=100%25_Bran">link</a>
5554 </p>
5555 !! end
5556
5557 !! test
5558 T6781, T7267: %28, %29 in bracketed URL
5559 !! wikitext
5560 [http://www.example.com/?title=Ben-Hur_%281959_film%29 link]
5561 !! html/php
5562 <p><a rel="nofollow" class="external text" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">link</a>
5563 </p>
5564 !! html/parsoid
5565 <p><a rel="mw:ExtLink" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">link</a></p>
5566 !! end
5567
5568 !! test
5569 External link containing a period in the anchor. (T65947)
5570 !! wikitext
5571 [//foo.org/bar#baz. bang]
5572
5573 [//foo.org/bar. bang]
5574 !! html/php
5575 <p><a rel="nofollow" class="external text" href="//foo.org/bar#baz.">bang</a>
5576 </p><p><a rel="nofollow" class="external text" href="//foo.org/bar.">bang</a>
5577 </p>
5578 !! html/parsoid
5579 <p><a rel="mw:ExtLink" href="//foo.org/bar#baz.">bang</a></p>
5580 <p><a rel="mw:ExtLink" href="//foo.org/bar.">bang</a></p>
5581 !! end
5582
5583 !! test
5584 External link containing a single quote. (T65947)
5585 !! wikitext
5586 [//foo.org/bar'baz]
5587
5588 [//foo.org/bar'baz bang]
5589 !! html/php
5590 <p><a rel="nofollow" class="external autonumber" href="//foo.org/bar&#39;baz">[1]</a>
5591 </p><p><a rel="nofollow" class="external text" href="//foo.org/bar&#39;baz">bang</a>
5592 </p>
5593 !! html/parsoid
5594 <p><a rel="mw:ExtLink" href="//foo.org/bar'baz"></a></p>
5595 <p><a rel="mw:ExtLink" href="//foo.org/bar'baz">bang</a></p>
5596 !! end
5597
5598 !! test
5599 External link containing double-single-quotes in text '' (T6598 sanity check)
5600 !! wikitext
5601 Some [http://example.com/ pretty ''italics'' and stuff]!
5602 !! html
5603 <p>Some <a rel="nofollow" class="external text" href="http://example.com/">pretty <i>italics</i> and stuff</a>!
5604 </p>
5605 !! end
5606
5607 !! test
5608 External link containing double-single-quotes in text embedded in italics (T6598 sanity check)
5609 !! wikitext
5610 ''Some [http://example.com/ pretty ''italics'' and stuff]!''
5611 !! html
5612 <p><i>Some </i><a rel="nofollow" class="external text" href="http://example.com/"><i>pretty </i>italics<i> and stuff</i></a><i>!</i>
5613 </p>
5614 !! end
5615
5616 !! test
5617 External link containing double-single-quotes with no space separating the url from text in italics
5618 !! wikitext
5619 [http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo Picasso]].]
5620 !! html/php
5621 <p><a rel="nofollow" class="external text" href="http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm"><i>La muerte de Casagemas</i> (1901) en el sitio de <a href="/index.php?title=Museo_Picasso_(Par%C3%ADs)&amp;action=edit&amp;redlink=1" class="new" title="Museo Picasso (París) (page does not exist)">Museo Picasso</a>.</a>
5622 </p>
5623 !! html/php+tidy
5624 <p><a rel="nofollow" class="external text" href="http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm"><i>La muerte de Casagemas</i> (1901) en el sitio de</a> <a href="/index.php?title=Museo_Picasso_(Par%C3%ADs)&amp;action=edit&amp;redlink=1" class="new" title="Museo Picasso (París) (page does not exist)">Museo Picasso</a>.</p>
5625 !! html/parsoid
5626 <p><a rel="mw:ExtLink" href="http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm"><i>La muerte de Casagemas</i> (1901) en el sitio de </a><a rel="mw:WikiLink" href="./Museo_Picasso_(París)" title="Museo Picasso (París)">Museo Picasso</a><span>.</span></p>
5627 !! end
5628
5629 !! test
5630 External link with comments in link text
5631 !! wikitext
5632 [http://www.google.com Google <!-- comment -->]
5633 !! html/php
5634 <p><a rel="nofollow" class="external text" href="http://www.google.com">Google </a>
5635 </p>
5636 !! html/parsoid
5637 <p><a rel="mw:ExtLink" href="http://www.google.com">Google <!-- comment --></a></p>
5638 !! end
5639
5640 !! test
5641 External link to bare IPv4 address
5642 !! wikitext
5643 [http://192.168.0.1 Link]
5644 !! html/php
5645 <p><a rel="nofollow" class="external text" href="http://192.168.0.1">Link</a>
5646 </p>
5647 !! html/parsoid
5648 <p><a rel="mw:ExtLink" href="http://192.168.0.1">Link</a></p>
5649 !! end
5650
5651 !! test
5652 URL-encoding in URL functions (single parameter)
5653 !! wikitext
5654 {{localurl:Some page|amp=&}}
5655 !! html
5656 <p>/index.php?title=Some_page&amp;amp=&amp;
5657 </p>
5658 !! end
5659
5660 !! test
5661 URL-encoding in URL functions (multiple parameters)
5662 !! wikitext
5663 {{localurl:Some page|q=?&amp=&}}
5664 !! html
5665 <p>/index.php?title=Some_page&amp;q=?&amp;amp=&amp;
5666 </p>
5667 !! end
5668
5669 !! test
5670 Brackets in urls
5671 !! wikitext
5672 http://example.com/index.php?foozoid%5B%5D=bar
5673
5674 http://example.com/index.php?foozoid&#x5B;&#x5D;=bar
5675 !! html/php
5676 <p><a rel="nofollow" class="external free" href="http://example.com/index.php?foozoid%5B%5D=bar">http://example.com/index.php?foozoid%5B%5D=bar</a>
5677 </p><p><a rel="nofollow" class="external free" href="http://example.com/index.php?foozoid%5B%5D=bar">http://example.com/index.php?foozoid%5B%5D=bar</a>
5678 </p>
5679 !! html/parsoid
5680 <p><a rel="mw:ExtLink" href="http://example.com/index.php?foozoid%5B%5D=bar">http://example.com/index.php?foozoid%5B%5D=bar</a></p>
5681
5682 <p><a rel="mw:ExtLink" href="http://example.com/index.php?foozoid%5B%5D=bar" data-parsoid='{"stx":"url","a":{"href":"http://example.com/index.php?foozoid%5B%5D=bar"},"sa":{"href":"http://example.com/index.php?foozoid&amp;#x5B;&amp;#x5D;=bar"}}'>http://example.com/index.php?foozoid%5B%5D=bar</a></p>
5683 !! end
5684
5685 !! test
5686 IPv6 urls, autolink format (T23261)
5687 !! wikitext
5688 http://[2404:130:0:1000::187:2]/index.php
5689
5690 Examples from RFC 2373, section 2.2:
5691 * http://[1080::8:800:200C:417A]/unicast
5692 * http://[FF01::101]/multicast
5693 * http://[::1]/loopback
5694 * http://[::]/unspecified
5695 * http://[::13.1.68.3]/ipv4compat
5696 * http://[::FFFF:129.144.52.38]/ipv4compat
5697
5698 Examples from RFC 2732, section 2:
5699 * http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html
5700 * http://[1080:0:0:0:8:800:200C:417A]/index.html
5701 * http://[3ffe:2a00:100:7031::1]
5702 * http://[1080::8:800:200C:417A]/foo
5703 * http://[::192.9.5.5]/ipng
5704 * http://[::FFFF:129.144.52.38]:80/index.html
5705 * http://[2010:836B:4179::836B:4179]
5706
5707 !! html/php
5708 <p><a rel="nofollow" class="external free" href="http://[2404:130:0:1000::187:2]/index.php">http://[2404:130:0:1000::187:2]/index.php</a>
5709 </p><p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc2373">RFC 2373</a>, section 2.2:
5710 </p>
5711 <ul><li> <a rel="nofollow" class="external free" href="http://[1080::8:800:200C:417A]/unicast">http://[1080::8:800:200C:417A]/unicast</a></li>
5712 <li> <a rel="nofollow" class="external free" href="http://[FF01::101]/multicast">http://[FF01::101]/multicast</a></li>
5713 <li> <a rel="nofollow" class="external free" href="http://[::1]/loopback">http://[::1]/loopback</a></li>
5714 <li> <a rel="nofollow" class="external free" href="http://[::]/unspecified">http://[::]/unspecified</a></li>
5715 <li> <a rel="nofollow" class="external free" href="http://[::13.1.68.3]/ipv4compat">http://[::13.1.68.3]/ipv4compat</a></li>
5716 <li> <a rel="nofollow" class="external free" href="http://[::FFFF:129.144.52.38]/ipv4compat">http://[::FFFF:129.144.52.38]/ipv4compat</a></li></ul>
5717 <p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc2732">RFC 2732</a>, section 2:
5718 </p>
5719 <ul><li> <a rel="nofollow" class="external free" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html</a></li>
5720 <li> <a rel="nofollow" class="external free" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">http://[1080:0:0:0:8:800:200C:417A]/index.html</a></li>
5721 <li> <a rel="nofollow" class="external free" href="http://[3ffe:2a00:100:7031::1]">http://[3ffe:2a00:100:7031::1]</a></li>
5722 <li> <a rel="nofollow" class="external free" href="http://[1080::8:800:200C:417A]/foo">http://[1080::8:800:200C:417A]/foo</a></li>
5723 <li> <a rel="nofollow" class="external free" href="http://[::192.9.5.5]/ipng">http://[::192.9.5.5]/ipng</a></li>
5724 <li> <a rel="nofollow" class="external free" href="http://[::FFFF:129.144.52.38]:80/index.html">http://[::FFFF:129.144.52.38]:80/index.html</a></li>
5725 <li> <a rel="nofollow" class="external free" href="http://[2010:836B:4179::836B:4179]">http://[2010:836B:4179::836B:4179]</a></li></ul>
5726
5727 !! html/parsoid
5728 <p><a rel="mw:ExtLink" href="http://[2404:130:0:1000::187:2]/index.php">http://[2404:130:0:1000::187:2]/index.php</a></p>
5729
5730 <p>Examples from <a href="https://tools.ietf.org/html/rfc2373" rel="mw:ExtLink">RFC 2373</a>, section 2.2:</p>
5731 <ul><li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]/unicast">http://[1080::8:800:200C:417A]/unicast</a></li>
5732 <li> <a rel="mw:ExtLink" href="http://[FF01::101]/multicast">http://[FF01::101]/multicast</a></li>
5733 <li> <a rel="mw:ExtLink" href="http://[::1]/loopback">http://[::1]/loopback</a></li>
5734 <li> <a rel="mw:ExtLink" href="http://[::]/unspecified">http://[::]/unspecified</a></li>
5735 <li> <a rel="mw:ExtLink" href="http://[::13.1.68.3]/ipv4compat">http://[::13.1.68.3]/ipv4compat</a></li>
5736 <li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]/ipv4compat">http://[::FFFF:129.144.52.38]/ipv4compat</a></li></ul>
5737
5738 <p>Examples from <a href="https://tools.ietf.org/html/rfc2732" rel="mw:ExtLink">RFC 2732</a>, section 2:</p>
5739 <ul><li> <a rel="mw:ExtLink" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html</a></li>
5740 <li> <a rel="mw:ExtLink" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">http://[1080:0:0:0:8:800:200C:417A]/index.html</a></li>
5741 <li> <a rel="mw:ExtLink" href="http://[3ffe:2a00:100:7031::1]">http://[3ffe:2a00:100:7031::1]</a></li>
5742 <li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]/foo">http://[1080::8:800:200C:417A]/foo</a></li>
5743 <li> <a rel="mw:ExtLink" href="http://[::192.9.5.5]/ipng">http://[::192.9.5.5]/ipng</a></li>
5744 <li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]:80/index.html">http://[::FFFF:129.144.52.38]:80/index.html</a></li>
5745 <li> <a rel="mw:ExtLink" href="http://[2010:836B:4179::836B:4179]">http://[2010:836B:4179::836B:4179]</a></li></ul>
5746 !! end
5747
5748 !! test
5749 IPv6 urls, bracketed format (T23261)
5750 !! wikitext
5751 [http://[2404:130:0:1000::187:2]/index.php test]
5752
5753 Examples from RFC 2373, section 2.2:
5754 * [http://[1080::8:800:200C:417A] unicast]
5755 * [http://[FF01::101] multicast]
5756 * [http://[::1]/ loopback]
5757 * [http://[::] unspecified]
5758 * [http://[::13.1.68.3] ipv4compat]
5759 * [http://[::FFFF:129.144.52.38] ipv4compat]
5760
5761 Examples from RFC 2732, section 2:
5762 * [http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html 1]
5763 * [http://[1080:0:0:0:8:800:200C:417A]/index.html 2]
5764 * [http://[3ffe:2a00:100:7031::1] 3]
5765 * [http://[1080::8:800:200C:417A]/foo 4]
5766 * [http://[::192.9.5.5]/ipng 5]
5767 * [http://[::FFFF:129.144.52.38]:80/index.html 6]
5768 * [http://[2010:836B:4179::836B:4179] 7]
5769
5770 !! html/php
5771 <p><a rel="nofollow" class="external text" href="http://[2404:130:0:1000::187:2]/index.php">test</a>
5772 </p><p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc2373">RFC 2373</a>, section 2.2:
5773 </p>
5774 <ul><li> <a rel="nofollow" class="external text" href="http://[1080::8:800:200C:417A]">unicast</a></li>
5775 <li> <a rel="nofollow" class="external text" href="http://[FF01::101]">multicast</a></li>
5776 <li> <a rel="nofollow" class="external text" href="http://[::1]/">loopback</a></li>
5777 <li> <a rel="nofollow" class="external text" href="http://[::]">unspecified</a></li>
5778 <li> <a rel="nofollow" class="external text" href="http://[::13.1.68.3]">ipv4compat</a></li>
5779 <li> <a rel="nofollow" class="external text" href="http://[::FFFF:129.144.52.38]">ipv4compat</a></li></ul>
5780 <p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc2732">RFC 2732</a>, section 2:
5781 </p>
5782 <ul><li> <a rel="nofollow" class="external text" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">1</a></li>
5783 <li> <a rel="nofollow" class="external text" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">2</a></li>
5784 <li> <a rel="nofollow" class="external text" href="http://[3ffe:2a00:100:7031::1]">3</a></li>
5785 <li> <a rel="nofollow" class="external text" href="http://[1080::8:800:200C:417A]/foo">4</a></li>
5786 <li> <a rel="nofollow" class="external text" href="http://[::192.9.5.5]/ipng">5</a></li>
5787 <li> <a rel="nofollow" class="external text" href="http://[::FFFF:129.144.52.38]:80/index.html">6</a></li>
5788 <li> <a rel="nofollow" class="external text" href="http://[2010:836B:4179::836B:4179]">7</a></li></ul>
5789
5790 !! html/parsoid
5791 <p><a rel="mw:ExtLink" href="http://[2404:130:0:1000::187:2]/index.php">test</a></p>
5792
5793 <p>Examples from <a href="https://tools.ietf.org/html/rfc2373" rel="mw:ExtLink">RFC 2373</a>, section 2.2:</p>
5794 <ul><li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]">unicast</a></li>
5795 <li> <a rel="mw:ExtLink" href="http://[FF01::101]">multicast</a></li>
5796 <li> <a rel="mw:ExtLink" href="http://[::1]/">loopback</a></li>
5797 <li> <a rel="mw:ExtLink" href="http://[::]">unspecified</a></li>
5798 <li> <a rel="mw:ExtLink" href="http://[::13.1.68.3]">ipv4compat</a></li>
5799 <li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]">ipv4compat</a></li></ul>
5800
5801 <p>Examples from <a href="https://tools.ietf.org/html/rfc2732" rel="mw:ExtLink">RFC 2732</a>, section 2:</p>
5802 <ul><li> <a rel="mw:ExtLink" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">1</a></li>
5803 <li> <a rel="mw:ExtLink" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">2</a></li>
5804 <li> <a rel="mw:ExtLink" href="http://[3ffe:2a00:100:7031::1]">3</a></li>
5805 <li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]/foo">4</a></li>
5806 <li> <a rel="mw:ExtLink" href="http://[::192.9.5.5]/ipng">5</a></li>
5807 <li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]:80/index.html">6</a></li>
5808 <li> <a rel="mw:ExtLink" href="http://[2010:836B:4179::836B:4179]">7</a></li></ul>
5809 !! end
5810
5811 !! test
5812 Non-extlinks in brackets
5813 !! wikitext
5814 [foo]
5815 [foo bar]
5816 [foo ''bar'']
5817 [fool's] errand
5818 [fool's errand]
5819 [{{echo|foo}}]
5820 [{{echo|foo}} bar]
5821 [{{echo|foo}} ''bar'']
5822 [{{echo|foo}}l's] errand
5823 [{{echo|foo}}l's errand]
5824 [url={{echo|foo}}]
5825 [url=http://example.com]
5826 [http:// bare protocols don't count]
5827 !! html/php
5828 <p>[foo]
5829 [foo bar]
5830 [foo <i>bar</i>]
5831 [fool's] errand
5832 [fool's errand]
5833 [foo]
5834 [foo bar]
5835 [foo <i>bar</i>]
5836 [fool's] errand
5837 [fool's errand]
5838 [url=foo]
5839 [url=<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>]
5840 [http:// bare protocols don't count]
5841 </p>
5842 !! html/parsoid
5843 <p>[foo]
5844 [foo bar]
5845 [foo <i>bar</i>]
5846 [fool's] errand
5847 [fool's errand]
5848 [<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}"}'>foo</span>]
5849 [<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}"}'>foo</span> bar]
5850 [<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}"}'>foo</span> <i>bar</i>]
5851 [<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}l&#39;s"}'>fool's</span>] errand
5852 [<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}l&#39;s"}'>fool's</span> errand]
5853 [<span typeof="mw:Placeholder" data-parsoid='{"src":"url={{echo|foo}}"}'>url=foo</span>]
5854 [url=<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>]
5855 [http:// bare protocols don't count]</p>
5856 !! end
5857
5858 !! test
5859 Percent encoding in external links
5860 !! wikitext
5861 [https://github.com/search?l=&q=ResourceLoader+%40wikimedia Search]
5862 !! html/php
5863 <p><a rel="nofollow" class="external text" href="https://github.com/search?l=&amp;q=ResourceLoader+%40wikimedia">Search</a>
5864 </p>
5865 !! html/parsoid
5866 <p><a rel="mw:ExtLink"
5867 href="https://github.com/search?l=&amp;q=ResourceLoader+%40wikimedia">Search</a></p>
5868 !! end
5869
5870 !! test
5871 Use url link syntax for links where the content is equal the link target
5872 !! wikitext
5873 http://example.com
5874 !! html/php
5875 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
5876 </p>
5877 !! html/parsoid
5878 <p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></p>
5879 !! end
5880
5881 !! test
5882 Parenthesis in external links, especially URL links
5883 !! wikitext
5884 http://example.com)
5885
5886 http://example.com/test)
5887
5888 http://example.com/(test)
5889
5890 http://example.com/((test)
5891
5892 (http://example.com/(test))
5893
5894 (http://example.com/(test)))))
5895
5896 http://example.com/a)b
5897
5898 [http://example.com) foo]
5899 !! html/php
5900 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
5901 </p><p><a rel="nofollow" class="external free" href="http://example.com/test">http://example.com/test</a>)
5902 </p><p><a rel="nofollow" class="external free" href="http://example.com/(test)">http://example.com/(test)</a>
5903 </p><p><a rel="nofollow" class="external free" href="http://example.com/((test)">http://example.com/((test)</a>
5904 </p><p>(<a rel="nofollow" class="external free" href="http://example.com/(test))">http://example.com/(test))</a>
5905 </p><p>(<a rel="nofollow" class="external free" href="http://example.com/(test)))))">http://example.com/(test)))))</a>
5906 </p><p><a rel="nofollow" class="external free" href="http://example.com/a)b">http://example.com/a)b</a>
5907 </p><p><a rel="nofollow" class="external text" href="http://example.com)">foo</a>
5908 </p>
5909 !! html/parsoid
5910 <p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a>)</p>
5911 <p><a rel="mw:ExtLink" href="http://example.com/test">http://example.com/test</a>)</p>
5912 <p><a rel="mw:ExtLink" href="http://example.com/(test)">http://example.com/(test)</a></p>
5913 <p><a rel="mw:ExtLink" href="http://example.com/((test)">http://example.com/((test)</a></p>
5914 <p>(<a rel="mw:ExtLink" href="http://example.com/(test))">http://example.com/(test))</a></p>
5915 <p>(<a rel="mw:ExtLink" href="http://example.com/(test)))))">http://example.com/(test)))))</a></p>
5916 <p><a rel="mw:ExtLink" href="http://example.com/a)b">http://example.com/a)b</a></p>
5917 <p><a rel="mw:ExtLink" href="http://example.com)">foo</a></p>
5918 !! end
5919
5920 !! test
5921 Parenthesis in external links, w/ transclusion or comment
5922 !! wikitext
5923 (http://example.com/{{echo|hi}})
5924
5925 (http://example.com<!-- hi -->)
5926 !! html/php
5927 <p>(<a rel="nofollow" class="external free" href="http://example.com/hi">http://example.com/hi</a>)
5928 </p><p>(<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
5929 </p>
5930 !! html/parsoid
5931 <p>(<a typeof="mw:ExpandedAttrs" about="#mwt2" rel="mw:ExtLink" href="http://example.com/hi" data-parsoid='{"stx":"url","a":{"href":"http://example.com/hi"},"sa":{"href":"http://example.com/{{echo|hi}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[20,31,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"hi\"}},\"i\":0}}]}&#39;>hi&lt;/span>"}]]}'>http://example.com/hi</a>)</p>
5932
5933 <p>(<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url","a":{"href":"http://example.com"},"sa":{"href":"http://example.com&lt;!-- hi -->"}}'>http://example.com</a>)</p>
5934 !! end
5935
5936 !! test
5937 Serialize <a> tags with invalid link targets as plain text
5938 !! options
5939 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
5940 !! html/parsoid
5941 <a rel="mw:WikiLink" href="[[foo]]">text</a>
5942 <a rel="mw:WikiLink" href="[[foo]]">*text</a>
5943 <a rel="mw:WikiLink" href="[[foo]]">[[foo]]</a>
5944 <a rel="mw:WikiLink" href="[[foo]]">*a [[foo]]</a>
5945 !! wikitext
5946 text
5947 <nowiki>*</nowiki>text
5948 <nowiki>[[foo]]</nowiki>
5949 <nowiki>*</nowiki>a <nowiki>[[foo]]</nowiki>
5950 !! end
5951
5952 !! test
5953 mw:ExtLink -vs- mw:WikiLink (T94723)
5954 !! options
5955 parsoid=html2wt
5956 !! html/parsoid
5957 <a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"piped","a":{"href":"./Foo"},"sa":{"href":"Foo"}}'>Bar</a>
5958 <a rel="mw:WikiLink" href="./Foo" title="Foo">Bar</a>
5959 <a rel="mw:WikiLink" href="http://en.wikipedia.org/wiki/Foo" title="Foo">Bar</a>
5960 <a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" title="Foo">Bar</a>
5961 <p>
5962 <a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/European_Robin">European Robin</a>
5963 <a rel="mw:WikiLink" href="http://en.wikipedia.org/wiki/European_Robin">European Robin</a>
5964 </p>
5965 !! wikitext
5966 [[Foo|Bar]]
5967 [[Foo|Bar]]
5968 [[:en:Foo|Bar]]
5969 [[:en:Foo|Bar]]
5970
5971 [[:en:European_Robin|European Robin]]
5972 [[:en:European_Robin|European Robin]]
5973 !! end
5974
5975 !! test
5976 mw:ExtLink linking to a interwiki URL can be round-tripped losslessly (T94723)
5977 !! options
5978 parsoid=wt2wt
5979 !! wikitext
5980 [http://en.wikipedia.org/wiki/European_Robin European Robin]
5981 !! html/parsoid
5982 THIS SECTION IS NOT USED (but Parsoid won't run the test without it)
5983 !! end
5984
5985
5986 ###
5987 ### Quotes
5988 ###
5989
5990 !! test
5991 Quotes
5992 !! wikitext
5993 Normal text. '''Bold text.''' Normal text. ''Italic text.''
5994
5995 Normal text. '''''Bold italic text.''''' Normal text.
5996 !! html
5997 <p>Normal text. <b>Bold text.</b> Normal text. <i>Italic text.</i>
5998 </p><p>Normal text. <i><b>Bold italic text.</b></i> Normal text.
5999 </p>
6000 !! end
6001
6002
6003 # Parsoid inserts an empty bold tag pair at the end of the line, that the PHP
6004 # parser strips. The wikitext contains just the first half of the bold
6005 # quote pair.
6006 !! test
6007 Unclosed and unmatched quotes
6008 !! wikitext
6009 '''''Bold italic text '''with bold deactivated''' in between.'''''
6010
6011 '''''Bold italic text ''with italic deactivated'' in between.'''''
6012
6013 '''Bold text..
6014
6015 ..spanning two paragraphs (should not work).'''
6016
6017 '''Bold tag left open
6018
6019 ''Italic tag left open
6020
6021 Normal text.
6022
6023 <!-- Unmatching number of opening, closing tags: -->
6024 '''This year''''s election ''should'' beat '''last year''''s.
6025
6026 ''Tom'''s car is bigger than ''Susan'''s.
6027
6028 Plain ''italic'''s plain
6029 !! html/php
6030 <p><i><b>Bold italic text </b>with bold deactivated<b> in between.</b></i>
6031 </p><p><b><i>Bold italic text </i>with italic deactivated<i> in between.</i></b>
6032 </p><p><b>Bold text..</b>
6033 </p><p>..spanning two paragraphs (should not work).
6034 </p><p><b>Bold tag left open</b>
6035 </p><p><i>Italic tag left open</i>
6036 </p><p>Normal text.
6037 </p><p><b>This year'</b>s election <i>should</i> beat <b>last year'</b>s.
6038 </p><p><i>Tom<b>s car is bigger than </b></i><b>Susan</b>s.
6039 </p><p>Plain <i>italic'</i>s plain
6040 </p>
6041 !! html/parsoid
6042 <p><i><b>Bold italic text </b>with bold deactivated<b> in between.</b></i>
6043 </p><p><b><i>Bold italic text </i>with italic deactivated<i> in between.</i></b>
6044 </p><p><b>Bold text..</b>
6045 </p><p>..spanning two paragraphs (should not work).<b></b>
6046 </p><p><b>Bold tag left open</b>
6047 </p><p><i>Italic tag left open</i>
6048 </p><p>Normal text.
6049 </p>
6050 <!-- Unmatching number of opening, closing tags: -->
6051 <p><b>This year'</b>s election <i>should</i> beat <b>last year'</b>s.
6052 </p><p><i>Tom<b>s car is bigger than </b></i><b>Susan</b>s.
6053 </p><p>Plain <i>italic'</i>s plain
6054 </p>
6055 !! end
6056
6057 ###
6058 ### Tables
6059 ###
6060 ### some content taken from http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide:_Using_tables
6061 ###
6062
6063 # This should not produce <table></table> as <table><tr><td></td></tr></table>
6064 # is the bare minimum required by the spec, see:
6065 # https://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_module_Basic_Tables
6066 # Parsoid team replies: empty table tags are legal in HTML5
6067 !! test
6068 A table with no data.
6069 !! options
6070 parsoid=wt2html
6071 !! wikitext
6072 {||}
6073 !! html/php
6074
6075 !! html/parsoid
6076 <table></table>
6077
6078 !! end
6079
6080 !! test
6081 A table with stray table end tags on start tag line (wt2html)
6082 !! options
6083 parsoid=wt2html
6084 !! wikitext
6085 {|style="color: red;"|}
6086
6087 {|style="color: red;" |}
6088 |foo
6089 |}
6090
6091 {|style="color: red;"|} id="foo"
6092 |foo
6093 |}
6094
6095 {|style="color: red;" |} id="foo"
6096 |foo
6097 |}
6098 !! html
6099 <table style="color: red;"></table>
6100
6101 <table style="color: red;">
6102 <tbody><tr>
6103 <td>foo</td>
6104 </tr></tbody>
6105 </table>
6106
6107 <table style="color: red;" id="foo">
6108 <tbody><tr>
6109 <td>foo</td>
6110 </tr></tbody>
6111 </table>
6112
6113 <table style="color: red;" id="foo">
6114 <tbody><tr>
6115 <td>foo</td>
6116 </tr></tbody>
6117 </table>
6118
6119 !! end
6120
6121 !! test
6122 A table with no data (take 2)
6123 !! wikitext
6124 {|
6125 |}
6126 !! html/parsoid
6127 <table></table>
6128 !! end
6129
6130 # A table with nothing but a caption is invalid XHTML, we might want to render
6131 # this as <p>caption</p>
6132 # Parsoid team replies: table with only a caption is legal in HTML5
6133 !! test
6134 A table with nothing but a caption
6135 !! wikitext
6136 {|
6137 |+ caption
6138 |}
6139 !! html/php
6140 <table>
6141 <caption> caption
6142 </caption><tr><td></td></tr></table>
6143
6144 !! html/parsoid
6145 <table><caption> caption</caption></table>
6146 !! end
6147
6148 !! test
6149 A table with caption with default-spaced attributes and a table row
6150 !! wikitext
6151 {|
6152 |+ style="color: red;" | caption1
6153 |-
6154 | foo
6155 |}
6156 !! html
6157 <table>
6158 <caption style="color: red;"> caption1
6159 </caption>
6160 <tr>
6161 <td> foo
6162 </td></tr></table>
6163
6164 !! end
6165
6166 !! test
6167 A table with captions with non-default spaced attributes and a table row
6168 !! wikitext
6169 {|
6170 |+style="color: red;"|caption2
6171 |+ style="color: red;"| caption3
6172 |-
6173 | foo
6174 |}
6175 !! html
6176 <table>
6177 <caption style="color: red;">caption2
6178 </caption>
6179 <caption style="color: red;"> caption3
6180 </caption>
6181 <tr>
6182 <td> foo
6183 </td></tr></table>
6184
6185 !! end
6186
6187 !! test
6188 Table td-cell syntax variations
6189 !! wikitext
6190 {|
6191 | foo bar foo | baz
6192 | foo bar foo || baz
6193 | style='color:red;' | baz
6194 | style='color:red;' || baz
6195 |}
6196 !! html
6197 <table>
6198 <tr>
6199 <td> baz
6200 </td>
6201 <td> foo bar foo </td>
6202 <td> baz
6203 </td>
6204 <td style="color:red;"> baz
6205 </td>
6206 <td> style='color:red;' </td>
6207 <td> baz
6208 </td></tr></table>
6209
6210 !! end
6211
6212 !! test
6213 Simple table
6214 !! wikitext
6215 {|
6216 | 1 || 2
6217 |-
6218 | 3 || 4
6219 |}
6220 !! html
6221 <table>
6222 <tr>
6223 <td> 1 </td>
6224 <td> 2
6225 </td></tr>
6226 <tr>
6227 <td> 3 </td>
6228 <td> 4
6229 </td></tr></table>
6230
6231 !! end
6232
6233 !! test
6234 Simple table but with multiple dashes for row wikitext
6235 !! wikitext
6236 {|
6237 | foo
6238 |-----
6239 | bar
6240 |}
6241 !! html
6242 <table>
6243 <tr>
6244 <td> foo
6245 </td></tr>
6246 <tr>
6247 <td> bar
6248 </td></tr></table>
6249
6250 !! end
6251
6252 !! test
6253 Multiplication table
6254 !! wikitext
6255 {| border="1" cellpadding="2"
6256 |+Multiplication table
6257 |-
6258 ! &times; !! 1 !! 2 !! 3
6259 |-
6260 ! 1
6261 | 1 || 2 || 3
6262 |-
6263 ! 2
6264 | 2 || 4 || 6
6265 |-
6266 ! 3
6267 | 3 || 6 || 9
6268 |-
6269 ! 4
6270 | 4 || 8 || 12
6271 |-
6272 ! 5
6273 | 5 || 10 || 15
6274 |}
6275 !! html
6276 <table border="1" cellpadding="2">
6277 <caption>Multiplication table
6278 </caption>
6279 <tr>
6280 <th> &#215; </th>
6281 <th> 1 </th>
6282 <th> 2 </th>
6283 <th> 3
6284 </th></tr>
6285 <tr>
6286 <th> 1
6287 </th>
6288 <td> 1 </td>
6289 <td> 2 </td>
6290 <td> 3
6291 </td></tr>
6292 <tr>
6293 <th> 2
6294 </th>
6295 <td> 2 </td>
6296 <td> 4 </td>
6297 <td> 6
6298 </td></tr>
6299 <tr>
6300 <th> 3
6301 </th>
6302 <td> 3 </td>
6303 <td> 6 </td>
6304 <td> 9
6305 </td></tr>
6306 <tr>
6307 <th> 4
6308 </th>
6309 <td> 4 </td>
6310 <td> 8 </td>
6311 <td> 12
6312 </td></tr>
6313 <tr>
6314 <th> 5
6315 </th>
6316 <td> 5 </td>
6317 <td> 10 </td>
6318 <td> 15
6319 </td></tr></table>
6320
6321 !! end
6322
6323 !! test
6324 Accept "||" in table headings
6325 !! wikitext
6326 {|
6327 !h1 || h2
6328 |}
6329 !! html
6330 <table>
6331 <tr>
6332 <th>h1 </th>
6333 <th> h2
6334 </th></tr></table>
6335
6336 !! end
6337
6338 !! test
6339 Accept "!!" in table data
6340 !! wikitext
6341 {|
6342 | Foo!! ||
6343 |}
6344 !! html
6345 <table>
6346 <tr>
6347 <td> Foo!! </td>
6348 <td>
6349 </td></tr></table>
6350
6351 !! html/parsoid
6352 <table>
6353 <tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'> Foo!! </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'></td></tr>
6354 </tbody></table>
6355 !! end
6356
6357 !! test
6358 Accept "||" in indented table headings
6359 !! wikitext
6360 :{|
6361 !h1 || h2
6362 |}
6363 !! html
6364 <dl><dd><table>
6365 <tr>
6366 <th>h1 </th>
6367 <th> h2
6368 </th></tr></table></dd></dl>
6369
6370 !! end
6371
6372 !! test
6373 Accept "!!" in templates
6374 !! wikitext
6375 {|
6376 !a {{echo|b!!c}}
6377 |}
6378 !! html/php
6379 <table>
6380 <tr>
6381 <th>a b</th>
6382 <th>c
6383 </th></tr></table>
6384
6385 !! html/parsoid
6386 <table>
6387 <tbody><tr><th typeof="mw:Transclusion" about="#mwt1" data-parsoid='{"autoInsertedEnd":true,"pi":[[{"k":"1"}]]}' data-mw='{"parts":["!a ",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b!!c"}},"i":0}}]}'>a b</th><th about="#mwt1">c</th></tr>
6388 !! end
6389
6390 !! test
6391 Accept "!!" in table headings after newline
6392 !! wikitext
6393 {|
6394 !a
6395 b!!c
6396 |}
6397 !! html/php
6398 <table>
6399 <tr>
6400 <th>a
6401 <p>b!!c
6402 </p>
6403 </th></tr></table>
6404
6405 !! html/parsoid
6406 <table>
6407 <tbody><tr><th>a
6408 <p>b!!c</p></th></tr>
6409 </tbody></table>
6410 !! end
6411
6412 !! test
6413 Accept "!!" in table data of mixed wikitext / html syntax
6414 !! wikitext
6415 {|
6416 !a
6417 <tr><td>b!!c</td></tr>
6418 |}
6419 !! html+tidy
6420 <table>
6421 <tr>
6422 <th>a</th>
6423 </tr>
6424 <tr>
6425 <td>b!!c</td>
6426 </tr>
6427 </table>
6428 !! html/parsoid
6429 <table>
6430 <tbody><tr><th>a</th></tr>
6431 <tr data-parsoid='{"stx":"html"}'><td data-parsoid='{"stx":"html"}'>b!!c</td></tr>
6432 </tbody></table>
6433 !! end
6434
6435 !! test
6436 Accept empty attributes in td/th cells (td/th cells starting with leading ||)
6437 !! wikitext
6438 {|
6439 !| h1
6440 || a
6441 |}
6442 !! html
6443 <table>
6444 <tr>
6445 <th> h1
6446 </th>
6447 <td> a
6448 </td></tr></table>
6449
6450 !! end
6451
6452 !!test
6453 Accept "| !" at start of line in tables (ignore !-attribute)
6454 !! wikitext
6455 {|
6456 |-
6457 | !style="color:red" | bar
6458 |}
6459 !! html
6460 <table>
6461
6462 <tr>
6463 <td> bar
6464 </td></tr></table>
6465
6466 !!end
6467
6468 !!test
6469 Allow +/- in 2nd and later cells in a row, in 1st cell when td-attrs are present, or in 1st cell when there is a space between "|" and +/-
6470 !! wikitext
6471 {|
6472 |-
6473 |style='color:red;'|+1
6474 |style='color:blue;'|-1
6475 |-
6476 | 1 || 2 || 3
6477 | 1 ||+2 ||-3
6478 |-
6479 | +1
6480 | -1
6481 |}
6482 !! html
6483 <table>
6484
6485 <tr>
6486 <td style="color:red;">+1
6487 </td>
6488 <td style="color:blue;">-1
6489 </td></tr>
6490 <tr>
6491 <td> 1 </td>
6492 <td> 2 </td>
6493 <td> 3
6494 </td>
6495 <td> 1 </td>
6496 <td>+2 </td>
6497 <td>-3
6498 </td></tr>
6499 <tr>
6500 <td> +1
6501 </td>
6502 <td> -1
6503 </td></tr></table>
6504
6505 !!end
6506
6507 !! test
6508 Table rowspan
6509 !! wikitext
6510 {| border=1
6511 | Cell 1, row 1
6512 |rowspan=2| Cell 2, row 1 (and 2)
6513 | Cell 3, row 1
6514 |-
6515 | Cell 1, row 2
6516 | Cell 3, row 2
6517 |}
6518 !! html
6519 <table border="1">
6520 <tr>
6521 <td> Cell 1, row 1
6522 </td>
6523 <td rowspan="2"> Cell 2, row 1 (and 2)
6524 </td>
6525 <td> Cell 3, row 1
6526 </td></tr>
6527 <tr>
6528 <td> Cell 1, row 2
6529 </td>
6530 <td> Cell 3, row 2
6531 </td></tr></table>
6532
6533 !! end
6534
6535 !! test
6536 Nested table
6537 !! wikitext
6538 {| border=1
6539 | &alpha;
6540 |
6541 {| bgcolor=#ABCDEF border=2
6542 |nested
6543 |-
6544 |table
6545 |}
6546 |the original table again
6547 |}
6548 !! html
6549 <table border="1">
6550 <tr>
6551 <td> &#945;
6552 </td>
6553 <td>
6554 <table bgcolor="#ABCDEF" border="2">
6555 <tr>
6556 <td>nested
6557 </td></tr>
6558 <tr>
6559 <td>table
6560 </td></tr></table>
6561 </td>
6562 <td>the original table again
6563 </td></tr></table>
6564
6565 !! end
6566
6567 !! test
6568 Invalid attributes in table cell (T3830)
6569 !! wikitext
6570 {|
6571 |Cell:|broken
6572 |}
6573 !! html
6574 <table>
6575 <tr>
6576 <td>broken
6577 </td></tr></table>
6578
6579 !! end
6580
6581 !! test
6582 Table cell attributes: Pipes protected by nowikis should be treated as a plain character
6583 !! wikitext
6584 {|
6585 | title="foo" |bar
6586 | title="foo<nowiki>|</nowiki>" |bar
6587 | title="foo<nowiki>|</nowiki>" bar
6588 |}
6589 !! html/php
6590 <table>
6591 <tr>
6592 <td title="foo">bar
6593 </td>
6594 <td title="foo&#124;">bar
6595 </td>
6596 <td> title="foo|" bar
6597 </td></tr></table>
6598
6599 !! html/parsoid
6600 <table>
6601 <tbody><tr><td title="foo">bar</td>
6602 <td title="foo|" data-parsoid='{"a":{"title":"foo|"},"sa":{"title":"foo&lt;nowiki>|&lt;/nowiki>"},"autoInsertedEnd":true}'>bar</td>
6603 <td> title="foo<span typeof="mw:Nowiki">|</span>" bar</td></tr>
6604 </tbody></table>
6605 !! end
6606
6607 # See: http://lists.wikimedia.org/mailman/htdig/wikitech-l/2006-April/022293.html
6608 # N.B. The "|}" to close the table is missing from the input, so parsoid's
6609 # *2wt modes will fail.
6610 !! test
6611 Table security: embedded pipes
6612 !! options
6613 parsoid=wt2html,html2html
6614 !! wikitext
6615 {|
6616 | |[ftp://|x||]" onmouseover="alert(document.cookie)">test
6617 !! html/php
6618 <table>
6619 <tr>
6620 <td>[<a rel="nofollow" class="external free" href="ftp://%7Cx">ftp://%7Cx</a></td>
6621 <td>]" onmouseover="alert(document.cookie)"&gt;test
6622 </td>
6623 </tr>
6624 </table>
6625
6626 !! html/parsoid
6627 <table><tbody>
6628 <tr>
6629 <td data-parsoid='{"startTagSrc":"| ","attrSepSrc":"|","autoInsertedEnd":true}'>[<a rel="mw:ExtLink" href="ftp://%7Cx" data-parsoid='{"stx":"url","a":{"href":"ftp://%7Cx"},"sa":{"href":"ftp://|x"}}'>ftp://%7Cx</a></td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'>]" onmouseover="alert(document.cookie)">test</td></tr></tbody></table>
6630 !! end
6631
6632 !! test
6633 Element attributes with double ! should not be broken up by <th>
6634 !! wikitext
6635 {|
6636 ! hi <div class="!!">ha</div> ho
6637 |}
6638 !! html/php
6639 <table>
6640 <tr>
6641 <th> hi <div class="!!">ha</div> ho
6642 </th></tr></table>
6643
6644 !! html/parsoid
6645 <table>
6646 <tbody><tr><th> hi <div class="!!" data-parsoid='{"stx":"html"}'>ha</div> ho</th></tr>
6647 </tbody></table>
6648 !! end
6649
6650 !! test
6651 ! and || in element attributes should not be parsed as <th>/<td>
6652 !! wikitext
6653 {|
6654 | <div style="color: red !important;" data-contrived="put this here ||">hi</div>
6655 |}
6656 !! html/php
6657 <table>
6658 <tr>
6659 <td> <div style="color: red !important;" data-contrived="put this here &#124;&#124;">hi</div>
6660 </td></tr></table>
6661
6662 !! html/parsoid
6663 <table>
6664 <tbody><tr><td> <div style="color: red !important;" data-contrived="put this here ||" data-parsoid='{"stx":"html"}'>hi</div></td></tr>
6665 </tbody></table>
6666 !! end
6667
6668 # FIXME: The output seems broken. Filed as T110268.
6669 !! test
6670 ! and || in td attributes should not be parsed as <th>/<td>
6671 !! options
6672 parsoid=wt2html
6673 !! wikitext
6674 {|
6675 | style="color: red !important;" data-contrived="put this here ||" | foo
6676 |}
6677 !! html/php
6678 <table>
6679 <tr>
6680 <td> style="color: red !important;" data-contrived="put this here </td>
6681 <td> foo
6682 </td></tr></table>
6683
6684 !! html/parsoid
6685 <table>
6686 <tbody><tr><td> style="color: red !important;" data-contrived="put this here </td><td data-parsoid='{"stx_v":"row","a":{"\"":null},"sa":{"\"":""},"autoInsertedEnd":true}'> foo</td></tr>
6687 </tbody></table>
6688 !! end
6689
6690 !! test
6691 Break on | in element attribute in template
6692 !! options
6693 parsoid=wt2html,html2html
6694 !! wikitext
6695 {{echo|1=<div class="hi|ho">ha</div>}}
6696 !! html/php
6697 <p>ho"&gt;ha&lt;/div&gt;
6698 </p>
6699 !! html/parsoid
6700 <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"ho\">ha&lt;/div>"}},"i":0}}]}'>ho">ha</span>
6701 !! end
6702
6703 !! test
6704 Break on | in element attribute name in template
6705 !! wikitext
6706 {{echo|<div cla|ss="hiho">ha</div>}}
6707 !! html/parsoid
6708 <p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"},{"k":"ss","named":true}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;div cla"},"ss":{"wt":"\"hiho\">ha&lt;/div>"}},"i":0}}]}'>&lt;div cla</p>
6709 !! end
6710
6711 !! test
6712 Don't break on | in extension attribute in template
6713 !! wikitext
6714 {{echo|<ref name="hi|ho">ha</ref>}}
6715
6716 <references />
6717 !! html/parsoid
6718 <p><span about="#mwt2" class="mw-ref" id="cite_ref-hi.7Cho_1-0" rel="dc:references" typeof="mw:Transclusion mw:Extension/ref" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;ref name=\"hi|ho\">ha&lt;/ref>"}},"i":0}}]}'><a href="./Main_Page#cite_note-hi.7Cho-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span></p>
6719
6720 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-hi.7Cho-1" id="cite_note-hi.7Cho-1"><a href="./Main_Page#cite_ref-hi.7Cho_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-hi.7Cho-1" class="mw-reference-text">ha</span></li></ol>
6721 !! end
6722
6723 ## We don't support roundtripping of these attributes in Parsoid.
6724 ## Selective serialization takes care of preventing dirty diffs.
6725 ## But, on edits, we dirty-diff the invalid attribute text.
6726 !! test
6727 Invalid text in table attributes should be discarded
6728 !! options
6729 parsoid=wt2html
6730 !! wikitext
6731 {| <span>boo</span> style='border:1px solid black'
6732 | <span>boo</span> style='color:blue' | 1
6733 |<span>boo</span> style='color:blue'| 2
6734 |}
6735 !! html/php
6736 <table style="border:1px solid black">
6737 <tr>
6738 <td style="color:blue"> 1
6739 </td>
6740 <td style="color:blue"> 2
6741 </td></tr></table>
6742
6743 !! html/parsoid
6744 <table style="border:1px solid black">
6745 <tr>
6746 <td style="color:blue"> 1</td>
6747 <td style="color:blue"> 2</td>
6748 </tr>
6749 </table>
6750 !! end
6751
6752 !! test
6753 Invalid text in table attributes should be preserved by selective serializer
6754 !! options
6755 parsoid={
6756 "modes": ["selser"],
6757 "changes": [
6758 ["td:first-child", "text", "abc"],
6759 ["td + td", "text", "xyz"]
6760 ]
6761 }
6762 !! wikitext
6763 {| <span>boo</span> style='border:1px solid black'
6764 | <span>boo</span> style='color:blue' | 1
6765 |<span>boo</span> style='color:blue'| 2
6766 |}
6767 !! wikitext/edited
6768 {| <span>boo</span> style='border:1px solid black'
6769 | <span>boo</span> style='color:blue' |abc
6770 |<span>boo</span> style='color:blue'|xyz
6771 |}
6772 !! end
6773
6774 !! test
6775 1. Template-generated table cell attributes and cell content
6776 !! wikitext
6777 {|
6778 |{{table_attribs}}
6779 | {{table_attribs}}
6780 || {{table_attribs_5}}
6781 | <!--foo--> <!--bar--> <!--baz--> {{table_attribs}}
6782 |align=center {{table_attribs}}
6783 | <!--foo--> align=center <!--bar--> {{table_attribs}}
6784 |}
6785 !! html
6786 <table>
6787 <tr>
6788 <td style="color:red;">Foo
6789 </td>
6790 <td style="color:red;">Foo
6791 </td>
6792 <td> style="color:red;"</td>
6793 <td>Bar
6794 </td>
6795 <td style="color:red;">Foo
6796 </td>
6797 <td align="center" style="color:red;">Foo
6798 </td>
6799 <td align="center" style="color:red;">Foo
6800 </td></tr></table>
6801
6802 !! end
6803
6804 !! test
6805 2. Template-generated table cell attributes and cell content
6806 !! wikitext
6807 {|
6808 |{{table_attribs_2}}
6809 |}
6810 !! html/php
6811 <table>
6812 <tr>
6813 <td style="color:red;">Foo
6814 </td>
6815 <td>Bar</td>
6816 <td>Baz
6817 </td></tr></table>
6818
6819 !! html/parsoid
6820 <table>
6821 <tbody><tr><td about="#mwt1" typeof="mw:Transclusion" style="color:red;" data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_2","href":"./Template:Table_attribs_2"},"params":{},"i":0}}]}'>Foo</td>
6822 <td about="#mwt1">Bar</td><td about="#mwt1">Baz</td></tr>
6823 </tbody></table>
6824 !! end
6825
6826 !! test
6827 3. Template-generated table cell attributes and cell content
6828 !! wikitext
6829 {|
6830 !align=center {{table_header_cells}}
6831 |-
6832 |align=center {{table_cells}}
6833 |}
6834 !! html/php
6835 <table>
6836 <tr>
6837 <th align="center" style="color:red;">Foo</th>
6838 <th style="color:red;"><i>Bar</i></th>
6839 <th style="color:brown;"><i>Foo</i> and Baz
6840 </th></tr>
6841 <tr>
6842 <td align="center" style="color:red;">Foo</td>
6843 <td style="color:red;"><i>Bar</i></td>
6844 <td style="color:brown;"><i>Foo</i> and Baz
6845 </td></tr></table>
6846
6847 !! html/parsoid
6848 <table>
6849 <tbody><tr><th align="center" style="color:red;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["!align=center ",{"template":{"target":{"wt":"table_header_cells","href":"./Template:Table_header_cells"},"params":{},"i":0}}]}'>Foo</th><th about="#mwt1" style="color:red;"><i about="#mwt1">Bar</i></th><th about="#mwt1" style="color:brown;"><i about="#mwt1">Foo</i> and Baz</th></tr><tr>
6850 <td align="center" style="color:red;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["|align=center ",{"template":{"target":{"wt":"table_cells","href":"./Template:Table_cells"},"params":{},"i":0}}]}'>Foo</td><td about="#mwt1" style="color:red;"><i about="#mwt1">Bar</i></td><td about="#mwt1" style="color:brown;"><i about="#mwt1">Foo</i> and Baz</td></tr>
6851 </tbody></table>
6852 !! end
6853
6854 !! test
6855 4. Template-generated table cell attributes and cell content inside a templated table
6856 !! wikitext
6857 {{tbl-start}}
6858 !align=center {{table_header_cells}}
6859 |-
6860 |align=center {{table_cells}}
6861 {{tbl-end}}
6862 !! html/php
6863 <table>
6864 <tr>
6865 <th align="center" style="color:red;">Foo</th>
6866 <th style="color:red;"><i>Bar</i></th>
6867 <th style="color:brown;"><i>Foo</i> and Baz
6868 </th></tr>
6869 <tr>
6870 <td align="center" style="color:red;">Foo</td>
6871 <td style="color:red;"><i>Bar</i></td>
6872 <td style="color:brown;"><i>Foo</i> and Baz
6873 </td></tr></table>
6874
6875 !! html/parsoid
6876 <table about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[],[],[],[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"tbl-start","href":"./Template:Tbl-start"},"params":{},"i":0}},"\n!align=center ",{"template":{"target":{"wt":"table_header_cells","href":"./Template:Table_header_cells"},"params":{},"i":1}},"\n|-\n|align=center ",{"template":{"target":{"wt":"table_cells","href":"./Template:Table_cells"},"params":{},"i":2}},"\n",{"template":{"target":{"wt":"tbl-end","href":"./Template:Tbl-end"},"params":{},"i":3}}]}'>
6877 <tbody><tr><th align="center" style="color:red;">Foo</th><th style="color:red;"><i>Bar</i></th><th style="color:brown;"><i>Foo</i> and Baz</th></tr>
6878 <tr>
6879 <td align="center" style="color:red;">Foo</td><td style="color:red;"><i>Bar</i></td><td style="color:brown;"><i>Foo</i> and Baz</td></tr>
6880 </tbody></table>
6881 !! end
6882
6883 ## Edge case fix to prevent future regressions
6884 !! test
6885 T107652: <ref>s in templates that also generate table cell attributes should be rendered properly
6886 !! wikitext
6887 {|
6888 |{{table_attribs_7}}
6889 |}
6890 <references />
6891 !! html/parsoid
6892 <table>
6893 <tbody><tr><td style="background:#f9f9f9;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_7","href":"./Template:Table_attribs_7"},"params":{},"i":0}}]}'>Foo<span class="mw-ref" id="cite_ref-1" rel="dc:references" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span></td></tr>
6894 </tbody></table>
6895 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
6896 !! end
6897
6898 !! test
6899 Table with row followed by newlines and table heading
6900 !! options
6901 parsoid=wt2html,html2html
6902 !! wikitext
6903 {|
6904 |-
6905
6906 ! foo
6907 |}
6908 !! html/*
6909 <table>
6910
6911
6912 <tr>
6913 <th> foo
6914 </th></tr></table>
6915
6916 !! end
6917
6918 !! test
6919 Table with empty line following the start tag
6920 !! options
6921 parsoid=wt2html,html2html
6922 !! wikitext
6923 {|
6924
6925 |-
6926 | foo
6927 |}
6928 !! html/*
6929 <table>
6930
6931
6932 <tr>
6933 <td> foo
6934 </td></tr></table>
6935
6936 !! end
6937
6938 !! test
6939 Table attributes with empty value
6940 !! options
6941 parsoid=wt2html,html2html
6942 !! wikitext
6943 {|
6944 | style=| hello
6945 |}
6946 !! html/php
6947 <table>
6948 <tr>
6949 <td style=""> hello
6950 </td></tr></table>
6951
6952 !! html/parsoid
6953 <table>
6954 <tbody><tr><td style=""> hello</td></tr>
6955 </tbody></table>
6956 !! end
6957
6958 !! test
6959 Wikitext table with a lot of comments
6960 !! wikitext
6961 {|
6962 <!-- c0 -->
6963 | foo
6964 <!-- c1 -->
6965 |-<!-- c2 -->
6966 <!-- c3 -->
6967 |<!-- c4 -->
6968 <!-- c5 -->
6969 |}
6970 !! html
6971 <table>
6972 <tr>
6973 <td> foo
6974 </td></tr>
6975 <tr>
6976 <td>
6977 </td></tr></table>
6978
6979 !! end
6980
6981 !! test
6982 Wikitext table comments represented in parsoid dom
6983 !! wikitext
6984 {|<!--c1--><!--c2-->
6985 |-<!--c3-->
6986 | x
6987 |}
6988 !! html/php+tidy
6989 <table>
6990 <tr>
6991 <td>x</td>
6992 </tr>
6993 </table>
6994 !! html/parsoid
6995 <table><!--c1--><!--c2-->
6996 <tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'><!--c3-->
6997 <td data-parsoid='{"autoInsertedEnd":true}'> x</td></tr>
6998 </tbody></table>
6999 !! end
7000
7001 !! test
7002 Wikitext table with double-line table cell
7003 !! wikitext
7004 {|
7005 |a
7006 b
7007 |}
7008 !! html
7009 <table>
7010 <tr>
7011 <td>a
7012 <p>b
7013 </p>
7014 </td></tr></table>
7015
7016 !! end
7017
7018 !! test
7019 Table cell with a single comment
7020 !! wikitext
7021 {|
7022 | <!-- c1 -->
7023 | a
7024 |}
7025 !! html
7026 <table>
7027 <tr>
7028 <td>
7029 </td>
7030 <td> a
7031 </td></tr></table>
7032
7033 !! end
7034
7035 !! test
7036 Table-cell after a comment-only-empty-line
7037 !! wikitext
7038 {|
7039 |a
7040 <!--c1-->
7041 <!--c2-->| b
7042 |}
7043 !! html
7044 <table>
7045 <tr>
7046 <td>a
7047 </td>
7048 <td> b
7049 </td></tr></table>
7050
7051 !! html/parsoid
7052 <table>
7053 <tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'>a</td>
7054 <!--c1-->
7055 <!--c2--><td data-parsoid='{"autoInsertedEnd":true}'> b</td></tr>
7056 </tbody></table>
7057
7058 !! end
7059
7060 !! test
7061 Build table with {{!}}
7062 !! wikitext
7063 {{{!}} class="wikitable"
7064 ! header
7065 ! second header
7066 {{!}}- style="color:red;"
7067 {{!}} data {{!}}{{!}} style="color:red;" {{!}} second data
7068 {{!}}}
7069 !! html
7070 <table class="wikitable">
7071 <tr>
7072 <th> header
7073 </th>
7074 <th> second header
7075 </th></tr>
7076 <tr style="color:red;">
7077 <td> data </td>
7078 <td style="color:red;"> second data
7079 </td></tr></table>
7080
7081 !! end
7082
7083 !! test
7084 Build table with pipe as data
7085 !! wikitext
7086 {| class="wikitable"
7087 ! header
7088 ! second header
7089 |- style="color:red;"
7090 | data || style="color:red;" | second data
7091 |-
7092 | style="color:red;" | data with | || style="color:red;" | second data with |
7093 |-
7094 || data with | ||| second data with |
7095 |}
7096 !! html
7097 <table class="wikitable">
7098 <tr>
7099 <th> header
7100 </th>
7101 <th> second header
7102 </th></tr>
7103 <tr style="color:red;">
7104 <td> data </td>
7105 <td style="color:red;"> second data
7106 </td></tr>
7107 <tr>
7108 <td style="color:red;"> data with | </td>
7109 <td style="color:red;"> second data with |
7110 </td></tr>
7111 <tr>
7112 <td> data with | </td>
7113 <td> second data with |
7114 </td></tr></table>
7115
7116 !! end
7117
7118 !! test
7119 Build table with wikilink
7120 !! wikitext
7121 {| class="wikitable"
7122 ! header || second header
7123 |- style="color:red;"
7124 | data [[Main Page|linktext]] || second data [[Main Page|linktext]]
7125 |-
7126 | data || second data [[Main Page|link|text with pipe]]
7127 |}
7128 !! html
7129 <table class="wikitable">
7130 <tr>
7131 <th> header </th>
7132 <th> second header
7133 </th></tr>
7134 <tr style="color:red;">
7135 <td> data <a href="/wiki/Main_Page" title="Main Page">linktext</a> </td>
7136 <td> second data <a href="/wiki/Main_Page" title="Main Page">linktext</a>
7137 </td></tr>
7138 <tr>
7139 <td> data </td>
7140 <td> second data <a href="/wiki/Main_Page" title="Main Page">link|text with pipe</a>
7141 </td></tr></table>
7142
7143 !! end
7144
7145 # The expected HTML structure in this test is debatable. The PHP parser does
7146 # not parse this kind of table at all. The main focus for Parsoid is on
7147 # round-tripping, so this output is ok for now. TODO: revisit!
7148 !! test
7149 Wikitext table with html-syntax row
7150 !! wikitext
7151 {|
7152 |-
7153 <td>foo</td>
7154 |}
7155 !! html/parsoid
7156 <table>
7157 <tbody>
7158 <tr>
7159 <td>foo</td></tr></tbody></table>
7160 !! end
7161
7162 !! test
7163 Implicit <td> after a |-
7164 !! options
7165 parsoid=wt2html,html2html
7166 !! wikitext
7167 {|
7168 |-
7169 a
7170 |}
7171 !! html/php
7172 <table>
7173
7174 a
7175 </table>
7176
7177 !! html/php+tidy
7178 <p>a</p>
7179 !! html/parsoid
7180 <p data-parsoid='{"fostered":true,"autoInsertedEnd":true}'>a</p><table>
7181 <tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
7182
7183 </tr></tbody></table>
7184 !! end
7185
7186 !! test
7187 Lists should be recognized in an implicit <td> context
7188 !! options
7189 parsoid=wt2html,html2html
7190 !! wikitext
7191 {|
7192 |-
7193 *a
7194 |}
7195 !! html/php
7196 <table>
7197
7198 <ul><li>a</li></ul>
7199 </table>
7200
7201 !! html/php+tidy
7202 <ul>
7203 <li>a</li>
7204 </ul>
7205 !! html/parsoid
7206 <ul data-parsoid='{"fostered":true,"autoInsertedEnd":true}'><li>a</li></ul><table>
7207 <tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
7208
7209 </tr></tbody></table>
7210 !! end
7211
7212 !! test
7213 Table cells not properly parsed in an implicit-td context
7214 !! wikitext
7215 {|
7216 |-
7217 {{table_attribs_4}} || a || b
7218 |}
7219 !! html/php+tidy
7220 <table>
7221 <tr>
7222 <td style="background-color:#DC241f;" width="10px"></td>
7223 <td>a</td>
7224 <td>b</td>
7225 </tr>
7226 </table>
7227 !! html/parsoid
7228 <table>
7229 <tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
7230 <td style="background-color:#DC241f;" width="10px" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"autoInsertedEnd":true,"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"table_attribs_4","href":"./Template:Table_attribs_4"},"params":{},"i":0}}," || a || b"]}'> </td><td about="#mwt1"> a </td><td about="#mwt1"> b</td></tr>
7231 !! end
7232
7233 !! test
7234 Parsoid: Round-trip tables directly followed by content (T53219)
7235 !! options
7236 parsoid=wt2html,wt2wt
7237 !! wikitext
7238 {|
7239 |foo
7240 |} bar
7241
7242 {|
7243 |baz
7244 |}<b>quux</b>
7245 !! html+tidy
7246 <table>
7247 <tr>
7248 <td>foo</td>
7249 </tr>
7250 </table>
7251 <p>bar</p>
7252 <table>
7253 <tr>
7254 <td>baz</td>
7255 </tr>
7256 </table>
7257 <p><b>quux</b></p>
7258 !! end
7259
7260 !! test
7261 Parsoid: Default to a newline after tables in new content (T53219)
7262 !! options
7263 parsoid=html2wt
7264 !! html/parsoid
7265 <table><tbody>
7266 <tr><td>foo</td></tr></tbody></table> bar
7267 <table><tbody>
7268 <tr><td>baz</td></tr></tbody></table><b>quux</b>
7269 !! wikitext
7270 {|
7271 |foo
7272 |}
7273 <nowiki> </nowiki>bar
7274 {|
7275 |baz
7276 |}
7277 '''quux'''
7278 !! end
7279
7280 !! test
7281 Parsoid: newline inducing block nodes don't suppress <nowiki>
7282 !! options
7283 parsoid=html2wt
7284 !! html/parsoid
7285 a<h1>foo</h1>
7286 !! wikitext
7287 <nowiki> </nowiki>a
7288
7289 = foo =
7290 !! end
7291
7292 !! test
7293 Parsoid: Row-syntax table headings followed by comment & table cells
7294 !! options
7295 parsoid=wt2html,wt2wt
7296 !! wikitext
7297 {|
7298 ! foo || bar
7299 <!-- foo --> || baz || quux
7300 |}
7301 !! html/php
7302 <table>
7303 <tr>
7304 <th> foo </th>
7305 <th> bar
7306 </th>
7307 <td> baz </td>
7308 <td> quux
7309 </td></tr></table>
7310
7311 !! html/parsoid
7312 <table>
7313 <tbody><tr><th> foo </th><th> bar
7314 <!-- foo --> </th><td> baz </td><td> quux</td></tr>
7315 </tbody></table>
7316 !! end
7317
7318 !!test
7319 Parsoid: Recover better from broken table attributes
7320 !!options
7321 parsoid=wt2html
7322 !!wikitext
7323 {| class="foo
7324 | class="bar" |
7325 foo
7326 |}
7327 !!html/php+tidy
7328 <table class="foo">
7329 <tr>
7330 <td class="bar">
7331 <p>foo</p>
7332 </td>
7333 </tr>
7334 </table>
7335 !!html/parsoid
7336 <table class="foo">
7337 <tr>
7338 <td class="bar">
7339 <p>foo</p></td></tr>
7340 </tbody></table>
7341 !!end
7342
7343 !! test
7344 Tables: Digest broken attributes on table and tr tag
7345 !! options
7346 parsoid=wt2html
7347 !! wikitext
7348 {| || |} ++
7349 |- || || ++ --
7350 |- > [
7351 |}
7352 !! html
7353 <table>
7354 <tbody>
7355 <tr class='mw-empty-elt'></tr>
7356 <tr class='mw-empty-elt'></tr>
7357 </tbody></table>
7358 !! end
7359
7360 # T137406: Whitespace in the HTML
7361 !! test
7362 1. Generate correct wikitext for tables with thead/tbody/tfoot
7363 !! options
7364 parsoid=html2wt
7365 !! html/parsoid
7366 <table>
7367 <caption>Test</caption>
7368 <thead>
7369 <tr>
7370 <th>Month</th>
7371 <th>Savings</th>
7372 </tr>
7373 </thead>
7374 <tbody>
7375 <tr>
7376 <td>January</td>
7377 <td>$100</td>
7378 </tr>
7379 <tr>
7380 <td>February</td>
7381 <td>$80</td>
7382 </tr>
7383 </tbody>
7384 <tfoot>
7385 <tr>
7386 <td>Sum</td>
7387 <td>$180</td>
7388 </tr>
7389 </tfoot>
7390 </table>
7391 !! wikitext
7392 {|
7393 |+Test
7394 !Month
7395 !Savings
7396 |-
7397 |January
7398 |$100
7399 |-
7400 |February
7401 |$80
7402 |-
7403 |Sum
7404 |$180
7405 |}
7406 !! html/php+tidy
7407 <table>
7408 <caption>Test</caption>
7409 <tr>
7410 <th>Month</th>
7411 <th>Savings</th>
7412 </tr>
7413 <tr>
7414 <td>January</td>
7415 <td>$100</td>
7416 </tr>
7417 <tr>
7418 <td>February</td>
7419 <td>$80</td>
7420 </tr>
7421 <tr>
7422 <td>Sum</td>
7423 <td>$180</td>
7424 </tr>
7425 </table>
7426 !! end
7427
7428 # T137406: No whitespace in the HTML
7429 !! test
7430 2. Generate correct wikitext for tables with thead/tbody/tfoot
7431 !! options
7432 parsoid=html2wt
7433 !! html/parsoid
7434 <table><thead><tr><th>heading</th></tr></thead><tbody><tr><td>foo</td></tr></tbody></table>
7435 !! wikitext
7436 {|
7437 !heading
7438 |-
7439 |foo
7440 |}
7441 !! end
7442
7443 !! test
7444 Testing serialization after deletion in references
7445 !! options
7446 parsoid={
7447 "modes": ["wt2wt"],
7448 "changes": [
7449 ["#x", "remove"]
7450 ]
7451 }
7452 !! wikitext
7453 hi <ref><div id="x">ho</div></ref>
7454
7455 <references />
7456 !! wikitext/edited
7457 hi <ref></ref>
7458
7459 <references />
7460 !! end
7461
7462 !!test
7463 Testing serialization after deletion of table cells
7464 !!options
7465 parsoid={
7466 "modes": ["wt2wt", "selser"],
7467 "changes": [
7468 ["#x", "remove"]
7469 ]
7470 }
7471 !!wikitext
7472 {|
7473 !h1 !!h2 !!h3
7474 | id="x" |c1 {{!}}{{!}}{{!}}c2 |||c3
7475 |}
7476 !! wikitext/edited
7477 {|
7478 !h1 !!h2 !!h3
7479 |c2 |||c3
7480 |}
7481 !!end
7482
7483 !! test
7484 Testing selser after addition of new row before first row (T125419)
7485 !! options
7486 parsoid={
7487 "modes": ["wt2wt", "selser"],
7488 "changes": [
7489 [ "tr", "before", "<tr><td>X</td></tr>" ]
7490 ]
7491 }
7492 !! wikitext
7493 {|
7494 |a
7495 |}
7496 !! wikitext/edited
7497 {|
7498 |X
7499 |-
7500 |a
7501 |}
7502 !! end
7503
7504 !! test
7505 Serialize new table rows in a HTML table using HTML tags
7506 !! options
7507 parsoid={
7508 "modes": ["wt2wt", "selser"],
7509 "changes": [
7510 [ "tr", "before", "<tr><td>X</td></tr>" ]
7511 ]
7512 }
7513 !! wikitext
7514 <table><tr><td>a</td></tr></table>
7515 !! wikitext/edited
7516 <table><tr><td>X</td></tr><tr><td>a</td></tr></table>
7517 !! end
7518
7519 !! test
7520 Serialize new table cells in a HTML row using HTML tags
7521 !! options
7522 parsoid={
7523 "modes": ["wt2wt", "selser"],
7524 "changes": [
7525 [ "td", "before", "<td>X</td>" ]
7526 ]
7527 }
7528 !! wikitext
7529 <table><tr><td>a</td></tr></table>
7530 !! wikitext/edited
7531 <table><tr><td>X</td><td>a</td></tr></table>
7532 !! end
7533
7534 !! test
7535 Wikitext tables can be nested inside HTML tables
7536 !! options
7537 parsoid=html2wt
7538 !! html
7539 <table data-parsoid='{"stx":"html"}'>
7540 <tr><td>
7541 <table>
7542 <tr><td>foo</td></tr>
7543 </table>
7544 </td></tr>
7545 </table>
7546 !! wikitext
7547 <table>
7548 <tr><td>
7549 {|
7550 |foo
7551 |}
7552 </td></tr>
7553 </table>
7554 !! end
7555
7556 !! test
7557 Serialize wikitext list items as HTML list items when embedded in a HTML list
7558 !! options
7559 parsoid=html2wt
7560 !! html
7561 <ul data-parsoid='{"stx": "html"}'>
7562 <li data-parsoid='{}'>a</li>
7563 <li>b</li>
7564 </ul>
7565 !! wikitext
7566 <ul>
7567 <li>a</li>
7568 <li>b</li>
7569 </ul>
7570 !! end
7571
7572 # SSS FIXME: Is this actually a good thing given the
7573 # odd nested list output that is generated by MW?
7574 # <ul><li>foo<ul>..</ul></li></ul> instead of
7575 # <ul><li>foo</li><ul>..</ul></ul>
7576 !! test
7577 Wikitext lists can be nested inside HTML lists
7578 !! options
7579 parsoid=html2wt
7580 !! html
7581 <ul data-parsoid='{"stx": "html"}'>
7582 <li data-parsoid='{"stx": "html"}'>a
7583 <ul><li>b</li></ul>
7584 </li>
7585 </ul>
7586
7587 <ul data-parsoid='{"stx": "html"}'>
7588 <li>x
7589 <ul><li>y</li></ul>
7590 </li>
7591 </ul>
7592 !! wikitext
7593 <ul>
7594 <li>a
7595 * b
7596 </li>
7597 </ul>
7598
7599 <ul>
7600 <li>x
7601 * y
7602 </li>
7603 </ul>
7604 !! end
7605
7606 ###
7607 ### Internal links
7608 ###
7609 !! test
7610 Plain link, capitalized
7611 !! wikitext
7612 [[Main Page]]
7613 !! html
7614 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
7615 </p>
7616 !! end
7617
7618 !! test
7619 Plain link, uncapitalized
7620 !! wikitext
7621 [[main Page]]
7622 !! html
7623 <p><a href="/wiki/Main_Page" title="Main Page">main Page</a>
7624 </p>
7625 !! end
7626
7627 !! test
7628 Piped link
7629 !! wikitext
7630 [[Main Page|The Main Page]]
7631 !! html
7632 <p><a href="/wiki/Main_Page" title="Main Page">The Main Page</a>
7633 </p>
7634 !! end
7635
7636 !! test
7637 Piped link with comment in link text
7638 !! wikitext
7639 [[Main Page|The Main<!--front--> Page]]
7640 !! html
7641 <p><a href="/wiki/Main_Page" title="Main Page">The Main Page</a>
7642 </p>
7643 !! end
7644
7645 !! test
7646 Piped link with multiple pipe characters in link text
7647 !! wikitext
7648 [[Main Page||The|Main|Page|]]
7649 !! html/php
7650 <p><a href="/wiki/Main_Page" title="Main Page">|The|Main|Page|</a>
7651 </p>
7652 !! html/parsoid
7653 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">|The|Main|Page|</a></p>
7654 !! end
7655
7656 !! test
7657 Piped link with no link text
7658 !! wikitext
7659 [[Thomas Bek (bishop of St David's)|]]
7660 !! html/php
7661 <p>[[Thomas Bek (bishop of St David's)|]]
7662 </p>
7663 !! html/parsoid
7664 <p>[[Thomas Bek (bishop of St David's)|]]</p>
7665 !! end
7666
7667 !! test
7668 Piped link with empty link text
7669 !! wikitext
7670 [[Main Page|<nowiki/>]] - empty nowiki
7671 [[Main Page| ]] - empty space
7672 [[Main Page|&nbsp;]] - empty non breaking space
7673 !! html/php
7674 <p><a href="/wiki/Main_Page" title="Main Page"></a> - empty nowiki
7675 <a href="/wiki/Main_Page" title="Main Page"> </a> - empty space
7676 <a href="/wiki/Main_Page" title="Main Page">&#160;</a> - empty non breaking space
7677 </p>
7678 !! html/parsoid
7679 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page"><span typeof="mw:Nowiki"></span></a> - empty nowiki
7680 <a rel="mw:WikiLink" href="./Main_Page" title="Main Page"> </a> - empty space
7681 <a rel="mw:WikiLink" href="./Main_Page" title="Main Page"><span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span></a> - empty non breaking space</p>
7682 !! end
7683
7684 !! test
7685 Broken link
7686 !! wikitext
7687 [[Zigzagzogzagzig]]
7688 !! html
7689 <p><a href="/index.php?title=Zigzagzogzagzig&amp;action=edit&amp;redlink=1" class="new" title="Zigzagzogzagzig (page does not exist)">Zigzagzogzagzig</a>
7690 </p>
7691 !! end
7692
7693 !! test
7694 Broken link with fragment
7695 !! wikitext
7696 [[Zigzagzogzagzig#zug]]
7697 !! html
7698 <p><a href="/index.php?title=Zigzagzogzagzig&amp;action=edit&amp;redlink=1" class="new" title="Zigzagzogzagzig (page does not exist)">Zigzagzogzagzig#zug</a>
7699 </p>
7700 !! end
7701
7702 !! test
7703 Special page link with fragment
7704 !! wikitext
7705 [[Special:Version#anchor]]
7706 !! html
7707 <p><a href="/wiki/Special:Version#anchor" title="Special:Version">Special:Version#anchor</a>
7708 </p>
7709 !! end
7710
7711 !! test
7712 Nonexistent special page link with fragment
7713 !! wikitext
7714 [[Special:ThisNameWillHopefullyNeverBeUsed#anchor]]
7715 !! html
7716 <p><a href="/wiki/Special:ThisNameWillHopefullyNeverBeUsed" class="new" title="Special:ThisNameWillHopefullyNeverBeUsed (page does not exist)">Special:ThisNameWillHopefullyNeverBeUsed#anchor</a>
7717 </p>
7718 !! end
7719
7720 !! test
7721 Link with prefix
7722 !! wikitext
7723 xxx[[main Page]], xxx[[Main Page]], Xxx[[main Page]] XXX[[main Page]], XXX[[Main Page]]
7724 !! html
7725 <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>
7726 </p>
7727 !! end
7728
7729 !! test
7730 Link with suffix
7731 !! wikitext
7732 [[Main Page]]xxx, [[Main Page]]XXX, [[Main Page]]!!!
7733 !! html
7734 <p><a href="/wiki/Main_Page" title="Main Page">Main Pagexxx</a>, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>XXX, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>!!!
7735 </p>
7736 !! end
7737
7738 !! article
7739 prefixed article
7740 !! text
7741 Some text
7742 !! endarticle
7743
7744 !! test
7745 T45661: Piped links with identical prefixes
7746 !! wikitext
7747 [[prefixed article|prefixed articles with spaces]]
7748
7749 [[prefixed article|prefixed articlesaoeu]]
7750
7751 [[Main Page|Main Page test]]
7752 !! html
7753 <p><a href="/wiki/Prefixed_article" title="Prefixed article">prefixed articles with spaces</a>
7754 </p><p><a href="/wiki/Prefixed_article" title="Prefixed article">prefixed articlesaoeu</a>
7755 </p><p><a href="/wiki/Main_Page" title="Main Page">Main Page test</a>
7756 </p>
7757 !! end
7758
7759
7760 !! test
7761 Link with HTML entity in suffix / tail
7762 !! wikitext
7763 [[Main Page]]&quot;, [[Main Page]]&#97;
7764 !! html/php
7765 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>&quot;, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>&#97;
7766 </p>
7767 !! html/parsoid
7768 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;quot;","srcContent":"\""}'>"</span>, <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#97;","srcContent":"a"}'>a</span></p>
7769 !! end
7770
7771 !! test
7772 Link with 3 brackets
7773 !! wikitext
7774 [[[Main Page]]]
7775 Foo [[[Main Page]]]
7776 !! html
7777 <p>[[[Main Page]]]
7778 Foo [[[Main Page]]]
7779 </p>
7780 !! end
7781
7782 !! test
7783 Link with 4 brackets
7784 !! wikitext
7785 [[[[Main Page]]]]
7786 !! html
7787 <p>[[<a href="/wiki/Main_Page" title="Main Page">Main Page</a>]]
7788 </p>
7789 !! end
7790
7791 !! test
7792 Piped link with 3 brackets
7793 !! wikitext
7794 [[[main page|the main page]]]
7795 !! html
7796 <p>[[[main page|the main page]]]
7797 </p>
7798 !! end
7799
7800 !! test
7801 Piped link with extlink-like text
7802 !! wikitext
7803 [[Main Page|[bar]]]
7804 [[Main Page|This is a [bar]]]
7805 [[Main Page|[bar]]
7806 !! html/php
7807 <p><a href="/wiki/Main_Page" title="Main Page">[bar]</a>
7808 <a href="/wiki/Main_Page" title="Main Page">This is a [bar]</a>
7809 <a href="/wiki/Main_Page" title="Main Page">[bar</a>
7810 </p>
7811 !! html/parsoid
7812 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page" data-parsoid='{"stx":"piped"}'>[bar]</a>
7813 <a rel="mw:WikiLink" href="./Main_Page" title="Main Page" data-parsoid='{"stx":"piped"}'>This is a [bar]</a>
7814 <a rel="mw:WikiLink" href="./Main_Page" title="Main Page" data-parsoid='{"stx":"piped"}'>[bar</a></p>
7815 !! end
7816
7817 !! test
7818 Link with multiple pipes
7819 !! wikitext
7820 [[Main Page|The|Main|Page]]
7821 !! html
7822 <p><a href="/wiki/Main_Page" title="Main Page">The|Main|Page</a>
7823 </p>
7824 !! end
7825
7826 !! test
7827 Anchor containing a #. (T65430)
7828 !! wikitext
7829 [[Main Page#And#Link]]
7830 !! html/php
7831 <p><a href="/wiki/Main_Page#And.23Link" title="Main Page">Main Page#And#Link</a>
7832 </p>
7833 !! html/parsoid
7834 <p><a rel="mw:WikiLink" href="./Main_Page#And.23Link" title="Main Page" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#And.23Link"},"sa":{"href":"Main Page#And#Link"}}'>Main Page#And#Link</a></p>
7835 !! end
7836
7837 !! test
7838 Link to namespaces
7839 !! wikitext
7840 [[Talk:Parser testing]], [[Meta:Disclaimers]]
7841 !! html
7842 <p><a href="/index.php?title=Talk:Parser_testing&amp;action=edit&amp;redlink=1" class="new" title="Talk:Parser testing (page does not exist)">Talk:Parser testing</a>, <a href="/index.php?title=Meta:Disclaimers&amp;action=edit&amp;redlink=1" class="new" title="Meta:Disclaimers (page does not exist)">Meta:Disclaimers</a>
7843 </p>
7844 !! end
7845
7846 !! test
7847 Link with space in namespace
7848 !! wikitext
7849 [[User talk:Foo bar]]
7850 !! html
7851 <p><a href="/index.php?title=User_talk:Foo_bar&amp;action=edit&amp;redlink=1" class="new" title="User talk:Foo bar (page does not exist)">User talk:Foo bar</a>
7852 </p>
7853 !! end
7854
7855 !! article
7856 MemoryAlpha:AlphaTest
7857 !! text
7858 This is an article in the MemoryAlpha namespace
7859 (which shadows the memoryalpha interwiki link).
7860 !! endarticle
7861
7862 !! test
7863 Namespace takes precedence over interwiki link (T53680)
7864 !! wikitext
7865 [[MemoryAlpha:AlphaTest]]
7866 !! html
7867 <p><a href="/wiki/MemoryAlpha:AlphaTest" title="MemoryAlpha:AlphaTest">MemoryAlpha:AlphaTest</a>
7868 </p>
7869 !! end
7870
7871 # The previous test doesn't work correctly in html2*, due to not recognizing the
7872 # link as an internal one. This one checks for the correct behavior.
7873 !! test
7874 Link to namespace preferred over interwiki with correct rel attribute
7875 !! options
7876 parsoid=html2wt,html2html
7877 !! html/parsoid
7878 <p><a rel="mw:WikiLink" href="./MemoryAlpha:AlphaTest" title="MemoryAlpha:AlphaTest">MemoryAlpha:AlphaTest</a></p>
7879 !! wikitext
7880 [[MemoryAlpha:AlphaTest]]
7881 !! end
7882
7883 !! test
7884 Piped link to namespace
7885 !! wikitext
7886 [[Meta:Disclaimers|The disclaimers]]
7887 !! html
7888 <p><a href="/index.php?title=Meta:Disclaimers&amp;action=edit&amp;redlink=1" class="new" title="Meta:Disclaimers (page does not exist)">The disclaimers</a>
7889 </p>
7890 !! end
7891
7892 !! test
7893 Link containing }
7894 !! wikitext
7895 [[Usually caused by a typo (oops}]]
7896 !! html
7897 <p>[[Usually caused by a typo (oops}]]
7898 </p>
7899 !! end
7900
7901 !! article
7902 7% Solution
7903 !! text
7904 Just a test of an article title containing a percent.
7905 !! endarticle
7906
7907 !! test
7908 Link containing % (not as a hex sequence)
7909 !! wikitext
7910 [[7% Solution]]
7911 [[7% Solution|7%25 Solution]]
7912 !! html/php
7913 <p><a href="/wiki/7%25_Solution" title="7% Solution">7% Solution</a>
7914 <a href="/wiki/7%25_Solution" title="7% Solution">7%25 Solution</a>
7915 </p>
7916 !! html/parsoid
7917 <p><a rel="mw:WikiLink" href="./7%25_Solution" title="7% Solution">7% Solution</a>
7918 <a rel="mw:WikiLink" href="./7%25_Solution" title="7% Solution">7%25 Solution</a></p>
7919 !! end
7920
7921 # note that the parsoid HTML is identical to the previous test output,
7922 # so the previous test ensures that the html2wt mode will generate the
7923 # "not as a hex sequence" wikitext.
7924 !! test
7925 Link containing % as a single hex sequence interpreted to char
7926 !! options
7927 parsoid=wt2wt,wt2html,html2html
7928 !! wikitext
7929 [[7%25 Solution]]
7930 [[7%25 Solution|7%25 Solution]]
7931 !! html/php
7932 <p><a href="/wiki/7%25_Solution" title="7% Solution">7% Solution</a>
7933 <a href="/wiki/7%25_Solution" title="7% Solution">7%25 Solution</a>
7934 </p>
7935 !! html/parsoid
7936 <p><a rel="mw:WikiLink" href="./7%25_Solution" title="7% Solution">7% Solution</a>
7937 <a rel="mw:WikiLink" href="./7%25_Solution" title="7% Solution">7%25 Solution</a></p>
7938 !!end
7939
7940 !! test
7941 Link containing % as a double hex sequence interpreted to hex sequence
7942 !! wikitext
7943 [[7%2525 Solution]]
7944 !! html
7945 <p>[[7%2525 Solution]]
7946 </p>
7947 !!end
7948
7949 ## Example for such a section: == < ==
7950 !! test
7951 Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors
7952 !! wikitext
7953 [[%23%3c]][[%23%3e]]
7954 !! html/php
7955 <p><a href="#.3C">#&lt;</a><a href="#.3E">#&gt;</a>
7956 </p>
7957 !! html/parsoid
7958 <p><a rel="mw:WikiLink" href="./Main_Page#.3C" title="Main Page" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#.3C"},"sa":{"href":"%23%3c"}}'>#&lt;</a><a rel="mw:WikiLink" href="./Main_Page#.3E" title="Main Page" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#.3E"},"sa":{"href":"%23%3e"}}'>#></a></p>
7959 !! end
7960
7961 !! test
7962 Link containing "<#" and ">#" as a hex sequences
7963 !! wikitext
7964 [[%3c%23]][[%3e%23]]
7965 !! html
7966 <p>[[%3c%23]][[%3e%23]]
7967 </p>
7968 !! end
7969
7970 !! test
7971 Link containing an equals sign
7972 !! wikitext
7973 [[Special:BookSources/isbn=4-00-026157-6]]
7974 !! html/php
7975 <p><a href="/wiki/Special:BookSources/isbn%3D4-00-026157-6" title="Special:BookSources/isbn=4-00-026157-6">Special:BookSources/isbn=4-00-026157-6</a>
7976 </p>
7977 !! html/parsoid
7978 <p><a rel="mw:WikiLink" href="./Special:BookSources/isbn=4-00-026157-6" title="Special:BookSources/isbn=4-00-026157-6">Special:BookSources/isbn=4-00-026157-6</a></p>
7979 !! end
7980
7981 !! article
7982 Foo~bar
7983 !! text
7984 Just a test of an article title containing a tilde.
7985 !! endarticle
7986
7987 # note that links containing signatures, like [[Foo~~~~]], are
7988 # massaged by the pre-save transform (PST) and so the tildes are never
7989 # seen by the parser.
7990 !! test
7991 Link containing a tilde
7992 !! wikitext
7993 [[Foo~bar]]
7994 !! html/php
7995 <p><a href="/wiki/Foo~bar" title="Foo~bar">Foo~bar</a>
7996 </p>
7997 !! html/parsoid
7998 <p><a rel="mw:WikiLink" href="./Foo~bar" title="Foo~bar">Foo~bar</a></p>
7999 !! end
8000
8001 !! test
8002 Link containing double-single-quotes '' (T6598)
8003 !! wikitext
8004 [[Lista d''e paise d''o munno]]
8005 !! html/php
8006 <p><a href="/index.php?title=Lista_d%27%27e_paise_d%27%27o_munno&amp;action=edit&amp;redlink=1" class="new" title="Lista d&#39;&#39;e paise d&#39;&#39;o munno (page does not exist)">Lista d''e paise d''o munno</a>
8007 </p>
8008 !! html/parsoid
8009 <p><a rel="mw:WikiLink" href="./Lista_d''e_paise_d''o_munno" title="Lista d''e paise d''o munno">Lista d''e paise d''o munno</a></p>
8010 !! end
8011
8012 !! test
8013 Link containing double quotes and spaces
8014 !! wikitext
8015 [[Cool "Gator"]]
8016 !! html/php
8017 <p><a href="/index.php?title=Cool_%22Gator%22&amp;action=edit&amp;redlink=1" class="new" title="Cool &quot;Gator&quot; (page does not exist)">Cool "Gator"</a>
8018 </p>
8019 !! html/parsoid
8020 <p><a rel="mw:WikiLink" href="./Cool_%22Gator%22" title='Cool "Gator"'>Cool "Gator"</a></p>
8021 !! end
8022
8023 !! test
8024 File containing double quotes and spaces
8025 !! wikitext
8026 [[File:Cool "Gator".png]]
8027 !! html/parsoid
8028 <p><span class="mw-default-size" typeof="mw:Error mw:Image" data-parsoid='{"optList":[]}' data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}'><a href="./File:Cool_%22Gator%22.png" data-parsoid='{"a":{"href":"./File:Cool_%22Gator%22.png"},"sa":{"href":"File:Cool \"Gator\".png"}}'><img resource='./File:Cool_"Gator".png' src="./Special:FilePath/Cool_%22Gator%22.png" height="220" width="220" data-parsoid='{"a":{"resource":"./File:Cool_\"Gator\".png","height":"220","width":"220","src":"./Special:FilePath/Cool_%22Gator%22.png"},"sa":{"resource":"File:Cool \"Gator\".png","src":"./Special:FilePath/Cool_\"Gator\".png"}}'/></a></span></p>
8029 !! end
8030
8031 !! test
8032 Redirect containing double quotes and spaces
8033 !! wikitext
8034 #REDIRECT [[Cool "Gator"]]
8035 !! html/parsoid
8036 <link rel="mw:PageProp/redirect" href="./Cool_%22Gator%22" data-parsoid='{"src":"#REDIRECT ","a":{"href":"./Cool_%22Gator%22"},"sa":{"href":"Cool \"Gator\""}}'/>
8037 !! end
8038
8039 !! test
8040 Link containing double-single-quotes '' in text (T6598 sanity check)
8041 !! wikitext
8042 Some [[Link|pretty ''italics'' and stuff]]!
8043 !! html/php
8044 <p>Some <a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">pretty <i>italics</i> and stuff</a>!
8045 </p>
8046 !! html/parsoid
8047 <p>Some <a rel="mw:WikiLink" href="./Link" title="Link">pretty <i>italics</i> and stuff</a>!</p>
8048 !! end
8049
8050 !! test
8051 Link containing double-single-quotes '' in text embedded in italics (T6598 sanity check)
8052 !! wikitext
8053 ''Some [[Link|pretty ''italics'' and stuff]]!''
8054 !! html
8055 <p><i>Some <a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">pretty <i>italics</i> and stuff</a>!</i>
8056 </p>
8057 !! end
8058
8059 !! test
8060 Link with double quotes in title part (literal) and alternate part (interpreted)
8061 !! wikitext
8062 [[File:Denys_Savchenko_''Pentecoste''.jpg]]
8063
8064 [[''Pentecoste'']]
8065
8066 [[''Pentecoste''|Pentecoste]]
8067
8068 [[''Pentecoste''|''Pentecoste'']]
8069 !! html/php
8070 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Denys_Savchenko_%27%27Pentecoste%27%27.jpg" class="new" title="File:Denys Savchenko &#39;&#39;Pentecoste&#39;&#39;.jpg">File:Denys Savchenko <i>Pentecoste</i>.jpg</a>
8071 </p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="&#39;&#39;Pentecoste&#39;&#39; (page does not exist)">''Pentecoste''</a>
8072 </p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="&#39;&#39;Pentecoste&#39;&#39; (page does not exist)">Pentecoste</a>
8073 </p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="&#39;&#39;Pentecoste&#39;&#39; (page does not exist)"><i>Pentecoste</i></a>
8074 </p>
8075 !! html/parsoid
8076 <p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}'><a href="./File:Denys_Savchenko_''Pentecoste''.jpg"><img resource="./File:Denys_Savchenko_''Pentecoste''.jpg" src="./Special:FilePath/Denys_Savchenko_''Pentecoste''.jpg" height="220" width="220"/></a></span></p>
8077 <p><a rel="mw:WikiLink" href="./''Pentecoste''" title="''Pentecoste''">''Pentecoste''</a></p>
8078 <p><a rel="mw:WikiLink" href="./''Pentecoste''" title="''Pentecoste''">Pentecoste</a></p>
8079 <p><a rel="mw:WikiLink" href="./''Pentecoste''" title="''Pentecoste''"><i>Pentecoste</i></a></p>
8080 !! end
8081
8082 !! test
8083 Broken image links with HTML captions (T41700)
8084 !! wikitext
8085 [[File:Nonexistent|<script></script>]]
8086 [[File:Nonexistent|100x100px|<script></script>]]
8087 [[File:Nonexistent|&lt;]]
8088 [[File:Nonexistent|a<i>b</i>c]]
8089 !! html/php
8090 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
8091 <a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
8092 <a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;</a>
8093 <a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">abc</a>
8094 </p>
8095 !! html/parsoid
8096 <p><span class="mw-default-size" typeof="mw:Error mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"&lt;script>&lt;/script>"}]}' data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}],"caption":"&amp;lt;script>&amp;lt;/script>"}'><a href="./File:Nonexistent" data-parsoid='{"a":{"href":"./File:Nonexistent"},"sa":{}}'><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="220" width="220" data-parsoid='{"a":{"resource":"./File:Nonexistent","height":"220","width":"220"},"sa":{"resource":"File:Nonexistent"}}'/></a></span>
8097 <span typeof="mw:Error mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"100x100px"},{"ck":"caption","ak":"&lt;script>&lt;/script>"}]}' data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}],"caption":"&amp;lt;script>&amp;lt;/script>"}'><a href="./File:Nonexistent" data-parsoid='{"a":{"href":"./File:Nonexistent"},"sa":{}}'><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="100" width="100" data-parsoid='{"a":{"resource":"./File:Nonexistent","height":"100","width":"100"},"sa":{"resource":"File:Nonexistent"}}'/></a></span>
8098 <span class="mw-default-size" typeof="mw:Error mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"&amp;lt;"}]}' data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}],"caption":"&lt;span typeof=\"mw:Entity\" data-parsoid=&#39;{\"src\":\"&amp;amp;lt;\",\"srcContent\":\"&amp;lt;\",\"dsr\":[107,111,null,null]}&#39;>&amp;lt;&lt;/span>"}'><a href="./File:Nonexistent" data-parsoid='{"a":{"href":"./File:Nonexistent"},"sa":{}}'><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="220" width="220" data-parsoid='{"a":{"resource":"./File:Nonexistent","height":"220","width":"220"},"sa":{"resource":"File:Nonexistent"}}'/></a></span>
8099 <span class="mw-default-size" typeof="mw:Error mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"a&lt;i>b&lt;/i>c"}]}' data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}],"caption":"a&lt;i data-parsoid=&#39;{\"stx\":\"html\",\"dsr\":[134,142,3,4]}&#39;>b&lt;/i>c"}'><a href="./File:Nonexistent" data-parsoid='{"a":{"href":"./File:Nonexistent"},"sa":{}}'><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="220" width="220" data-parsoid='{"a":{"resource":"./File:Nonexistent","height":"220","width":"220"},"sa":{"resource":"File:Nonexistent"}}'/></a></span></p>
8100 !! end
8101
8102 !! test
8103 Plain link to URL
8104 !! wikitext
8105 [[http://www.example.com]]
8106 !! html/php
8107 <p>[<a rel="nofollow" class="external autonumber" href="http://www.example.com">[1]</a>]
8108 </p>
8109 !! html/parsoid
8110 <p>[<a rel="mw:ExtLink" href="http://www.example.com"></a>]</p>
8111 !! end
8112
8113 !! test
8114 Plain link to URL with link text
8115 !! wikitext
8116 [[http://www.example.com Link text]]
8117 !! html
8118 <p>[<a rel="nofollow" class="external text" href="http://www.example.com">Link text</a>]
8119 </p>
8120 !! end
8121
8122 !! test
8123 Plain link to protocol-relative URL
8124 !! wikitext
8125 [[//www.example.com]]
8126 !! html/php
8127 <p>[<a rel="nofollow" class="external autonumber" href="//www.example.com">[1]</a>]
8128 </p>
8129 !! html/parsoid
8130 <p>[<a rel="mw:ExtLink" href="//www.example.com"></a>]</p>
8131 !! end
8132
8133 !! test
8134 Plain link to protocol-relative URL with link text
8135 !! wikitext
8136 [[//www.example.com Link text]]
8137 !! html
8138 <p>[<a rel="nofollow" class="external text" href="//www.example.com">Link text</a>]
8139 </p>
8140 !! end
8141
8142 !! test
8143 Plain link to page with question mark in title
8144 !! wikitext
8145 [[A?b]]
8146
8147 [[A?b|Baz]]
8148 !! html
8149 <p><a href="/wiki/A%3Fb" title="A?b">A?b</a>
8150 </p><p><a href="/wiki/A%3Fb" title="A?b">Baz</a>
8151 </p>
8152 !! end
8153
8154 # I'm fairly sure the expected result here is wrong.
8155 # We want these to be URL links, not pseudo-pages with URLs for titles....
8156 # However the current output is also pretty screwy.
8157 #
8158 # ----
8159 # I'm changing it to match the current output--it arguably makes more
8160 # sense in the light of the test above. Old expected result was:
8161 #<p>Piped link to URL: <a href="/index.php?title=Http://www.example.com&amp;action=edit" class="new">an example URL</a>
8162 #</p>
8163 # But I think this test is bordering on "garbage in, garbage out" anyway.
8164 # -- wtm
8165 !! test
8166 Piped link to URL
8167 !! wikitext
8168 Piped link to URL: [[http://www.example.com|an example URL]]
8169 !! html/php
8170 <p>Piped link to URL: [<a rel="nofollow" class="external text" href="http://www.example.com%7Can">example URL</a>]
8171 </p>
8172 !! html/parsoid
8173 <p>Piped link to URL: [<a rel="mw:ExtLink" href="http://www.example.com%7Can" data-parsoid='{"a":{"href":"http://www.example.com%7Can"},"sa":{"href":"http://www.example.com|an"}}'>example URL</a>]</p>
8174 !! end
8175
8176 !! test
8177 Plain link in template argument
8178 !! options
8179 parsoid=wt2html
8180 !! wikitext
8181 {{echo|[http://www.example.com |123]}}
8182
8183 {{echo|[[http://www.example.com |123]]}}
8184
8185 {{echo|[[http://www.example.com |123]}}
8186
8187 {{echo|[http://www.example.com |123]]}}
8188 !! html/php
8189 <p>[<a rel="nofollow" class="external free" href="http://www.example.com">http://www.example.com</a>
8190 </p><p>[<a rel="nofollow" class="external text" href="http://www.example.com">|123</a>]
8191 </p><p>{{echo|[<a rel="nofollow" class="external text" href="http://www.example.com">|123</a>}}
8192 </p><p>[<a rel="nofollow" class="external free" href="http://www.example.com">http://www.example.com</a>
8193 </p>
8194 !! html/parsoid
8195 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[http://www.example.com "},"2":{"wt":"123]"}},"i":0}}]}'>[<a rel="mw:ExtLink" href="http://www.example.com">http://www.example.com</a> </p>
8196
8197 <p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[http://www.example.com |123]]"}},"i":0}}]}'>[<a rel="mw:ExtLink" href="http://www.example.com">|123</a>]</p>
8198
8199 <p>{{echo|[<a rel="mw:ExtLink" href="http://www.example.com" data-parsoid='{"targetOff":114,"contentOffsets":[114,118],"dsr":[90,119,24,1]}'>|123</a>}}</p>
8200
8201 <p about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[http://www.example.com "},"2":{"wt":"123]]"}},"i":0}}]}'>[<a rel="mw:ExtLink" href="http://www.example.com">http://www.example.com</a> </p>
8202 !! end
8203
8204 !! test
8205 T2002: [[page|http://url/]] should link to page, not http://url/
8206 !! wikitext
8207 [[Main Page|http://url/]]
8208 !! html/php
8209 <p><a href="/wiki/Main_Page" title="Main Page">http://url/</a>
8210 </p>
8211 !! html/parsoid
8212 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">http://url/</a></p>
8213 !! end
8214
8215 # Parsoid does not mark self-links, by design.
8216 !! test
8217 T2337: Escaped self-links should be bold
8218 !! options
8219 title=[[Bug462]]
8220 !! wikitext
8221 [[Bu&#103;462]] [[Bug462]]
8222 !! html/php
8223 <p><a class="mw-selflink selflink">Bu&#103;462</a> <a class="mw-selflink selflink">Bug462</a>
8224 </p>
8225 !! html/php+tidy
8226 <p><a class="mw-selflink selflink">Bug462</a> <a class="mw-selflink selflink">Bug462</a></p>
8227 !! html/parsoid
8228 <p><a rel="mw:WikiLink" href="./Bug462" title="Bug462">Bug462</a> <a rel="mw:WikiLink" href="./Bug462" title="Bug462">Bug462</a></p>
8229 !! end
8230
8231 !! test
8232 Self-link to section should not be bold
8233 !! options
8234 title=[[Main Page]]
8235 !! wikitext
8236 [[Main Page#section]]
8237 !! html
8238 <p><a href="/wiki/Main_Page#section" title="Main Page">Main Page#section</a>
8239 </p>
8240 !! end
8241
8242 !! article
8243 00
8244 !! text
8245 This is 00.
8246 !! endarticle
8247
8248 !!test
8249 Self-link to numeric title
8250 !!options
8251 title=[[0]]
8252 !! wikitext
8253 [[0]]
8254 !! html
8255 <p><a class="mw-selflink selflink">0</a>
8256 </p>
8257 !!end
8258
8259 !!test
8260 Link to numeric-equivalent title
8261 !!options
8262 title=[[0]]
8263 !! wikitext
8264 [[00]]
8265 !! html
8266 <p><a href="/wiki/00" title="00">00</a>
8267 </p>
8268 !!end
8269
8270 !! test
8271 <nowiki> inside a link
8272 !! wikitext
8273 [[Main<nowiki> Page</nowiki>]] [[Main Page|the main page <nowiki>[it's not very good]</nowiki>]]
8274 !! html
8275 <p>[[Main Page]] <a href="/wiki/Main_Page" title="Main Page">the main page [it's not very good]</a>
8276 </p>
8277 !! end
8278
8279 !! test
8280 Non-breaking spaces in title
8281 !! wikitext
8282 [[&nbsp; Main &nbsp; Page &nbsp;]]
8283 !! html
8284 <p><a href="/wiki/Main_Page" title="Main Page">&#160; Main &#160; Page &#160;</a>
8285 </p>
8286 !!end
8287
8288 # Add new article for the test below so that it doesn't red-link
8289 !! article
8290 Foo bar baz
8291 !! text
8292 boo
8293 !! endarticle
8294
8295 !! test
8296 Multiple spaces in titles should normalize to a single underscore
8297 !! options
8298 parsoid=wt2html,wt2wt
8299 !! wikitext
8300 [[Foo bar baz|x]]
8301 [[Foo bar baz|x]]
8302 [[Foo bar baz|x]]
8303 !! html/php
8304 <p><a href="/wiki/Foo_bar_baz" title="Foo bar baz">x</a>
8305 <a href="/wiki/Foo_bar_baz" title="Foo bar baz">x</a>
8306 <a href="/wiki/Foo_bar_baz" title="Foo bar baz">x</a>
8307 </p>
8308 !! html/parsoid
8309 <p><a rel="mw:WikiLink" href="./Foo_bar_baz" title="Foo bar baz">x</a>
8310 <a rel="mw:WikiLink" href="./Foo_bar_baz" title="Foo bar baz">x</a>
8311 <a rel="mw:WikiLink" href="./Foo_bar_baz" title="Foo bar baz">x</a>
8312 </p>
8313 !! end
8314
8315 !! test
8316 Internal link with ca linktrail, surrounded by bold apostrophes (T29473 primary issue)
8317 !! options
8318 language=ca
8319 !! wikitext
8320 '''[[Main Page]]'''
8321 !! html
8322 <p><b><a href="/wiki/Main_Page" title="Main Page">Main Page</a></b>
8323 </p>
8324 !! end
8325
8326 !! test
8327 Internal link with ca linktrail, surrounded by italic apostrophes (T29473 primary issue)
8328 !! options
8329 language=ca
8330 !! wikitext
8331 ''[[Main Page]]''
8332 !! html
8333 <p><i><a href="/wiki/Main_Page" title="Main Page">Main Page</a></i>
8334 </p>
8335 !! end
8336
8337 !! test
8338 Internal link with en linktrail: no apostrophes (T29473)
8339 !! options
8340 language=en
8341 !! wikitext
8342 [[Something]]'nice
8343 !! html
8344 <p><a href="/index.php?title=Something&amp;action=edit&amp;redlink=1" class="new" title="Something (page does not exist)">Something</a>'nice
8345 </p>
8346 !! end
8347
8348 !! test
8349 Internal link with ca linktrail with apostrophes (T29473)
8350 !! options
8351 language=ca
8352 !! wikitext
8353 [[Something]]'nice
8354 !! html
8355 <p><a href="/index.php?title=Something&amp;action=edit&amp;redlink=1" class="new" title="Something (encara no existeix)">Something'nice</a>
8356 </p>
8357 !! end
8358
8359 !! test
8360 Internal link with kaa linktrail with apostrophes (T29473)
8361 !! options
8362 language=kaa
8363 !! wikitext
8364 [[Something]]'nice
8365 !! html
8366 <p><a href="/index.php?title=Something&amp;action=edit&amp;redlink=1" class="new" title="Something (bet ele jaratılmag&#39;an)">Something'nice</a>
8367 </p>
8368 !! end
8369
8370 !! test
8371 Link with multiple ":" in a subpage-supporting namespace (T65636)
8372 !! wikitext
8373 [[User:Foo/Test/63636:Bar|Test]]
8374 !! html/php
8375 <p><a href="/index.php?title=User:Foo/Test/63636:Bar&amp;action=edit&amp;redlink=1" class="new" title="User:Foo/Test/63636:Bar (page does not exist)">Test</a>
8376 </p>
8377 !! html/parsoid
8378 <p><a rel="mw:WikiLink" href="./User:Foo/Test/63636:Bar" title="User:Foo/Test/63636:Bar">Test</a></p>
8379 !! end
8380
8381 ## Mainly a sanity check for Parsoid
8382 !! test
8383 Handle title parsing for subpages
8384 !! options
8385 title=[[/123123]]
8386 subpage
8387 !! wikitext
8388 123
8389 !! html/php
8390 <p>123
8391 </p>
8392 !! html/parsoid
8393 <p>123</p>
8394 !! end
8395
8396 !! article
8397 User:Test/123
8398 !! text
8399 test 123
8400 !! endarticle
8401
8402 !! test
8403 Link to a subpage from a namespace other than main
8404 !! options
8405 title=[[User:Test]]
8406 subpage
8407 !! wikitext
8408 [[/123]]
8409 !! html/php
8410 <p><a href="/wiki/User:Test/123" title="User:Test/123">/123</a>
8411 </p>
8412 !! html/parsoid
8413 <p><a rel="mw:WikiLink" href="./User:Test/123" title="User:Test/123" data-parsoid='{"stx":"simple","a":{"href":"./User:Test/123"},"sa":{"href":"/123"}}'>/123</a></p>
8414 !! end
8415
8416 !! test
8417 Ensure that transclusion titles are not url-decoded
8418 !! options
8419 subpage title=[[Test]]
8420 parsoid=wt2html
8421 !! wikitext
8422 {{Bar%C3%A9}} {{/Bar%C3%A9}}
8423 !! html/php
8424 <p>{{Bar%C3%A9}} {{/Bar%C3%A9}}
8425 </p>
8426 !! html/parsoid
8427 <p>{{Bar%C3%A9}} {{/Bar%C3%A9}}</p>
8428 !! end
8429
8430 !! test
8431 Purely hash wikilink
8432 !! options
8433 title=[[User:Test/123]]
8434 subpage
8435 !! wikitext
8436 [[#a|b]]
8437 !! html/php
8438 <p><a href="#a">b</a>
8439 </p>
8440 !! html/parsoid
8441 <p><a rel="mw:WikiLink" href="./User:Test/123#a" data-parsoid='{"stx":"piped","a":{"href":"./User:Test/123#a"},"sa":{"href":"#a"}}'>b</a></p>
8442 !! end
8443
8444 !! test
8445 Serialization of purely hash wikilink
8446 !! options
8447 title=[[User:Test/123]]
8448 subpage
8449 parsoid=html2wt
8450 !! html/parsoid
8451 <p><a href="#a">[[</a></p>
8452 !! wikitext
8453 [[#a|<nowiki>[[</nowiki>]]
8454 !! html/php
8455 <p><a href="#a">[[</a>
8456 </p>
8457 !! end
8458
8459 !! test
8460 1. Interaction of linktrail and template encapsulation
8461 !! wikitext
8462 {{echo|[[Foo]]}}l
8463 !! html/parsoid
8464 <p><a rel="mw:WikiLink" href="./Foo" title="Foo" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Foo]]"}},"i":0}},"l"]}'>Fool</a></p>
8465 !! end
8466
8467 !! test
8468 2. Interaction of linktrail and template encapsulation
8469 !! options
8470 parsoid
8471 !! wikitext
8472 {{echo|Some [[Fool]]}}s
8473 !! html
8474 <p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]"}},"i":0}},"s"]}' data-parsoid='{"pi":[[{"k":"1"}]]}'>Some </span><a rel="mw:WikiLink" href="./Fool" title="Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
8475 !! end
8476
8477 !! test
8478 3. Interaction of linktrail and template encapsulation
8479 !! options
8480 parsoid
8481 !! wikitext
8482 {{echo|Some [[Fool]]s are '''bold and foolish'''}}
8483 !! html
8484 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]s are &#39;&#39;&#39;bold and foolish&#39;&#39;&#39;"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1"}]]}'>Some <a rel="mw:WikiLink" href="./Fool" title="Fool" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a> are <b>bold and foolish</b></p>
8485 !! end
8486
8487 !! article
8488 Söfnuður
8489 !! text
8490 Test.
8491 !! endarticle
8492
8493 !! test
8494 Internal link with is link prefix
8495 !! options
8496 language=is
8497 !! wikitext
8498 Aðrir mótmælenda[[söfnuður|söfnuðir]] og
8499 !! html
8500 <p>Aðrir <a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuðir</a> og
8501 </p>
8502 !! end
8503
8504 !! article
8505 Mótmælendatrú
8506 !! text
8507 Test.
8508 !! endarticle
8509
8510 !! test
8511 Internal link with is link trail and link prefix
8512 !! options
8513 language=is
8514 !! wikitext
8515 [[mótmælendatrú|xxx]]ar
8516 [[mótmælendatrú]]ar
8517 mótmælenda[[söfnuður]]
8518 mótmælenda[[söfnuður|söfnuðir]]
8519 mótmælenda[[söfnuður|söfnuðir]]xxx
8520 !! html
8521 <p><a href="/wiki/M%C3%B3tm%C3%A6lendatr%C3%BA" title="Mótmælendatrú">xxxar</a>
8522 <a href="/wiki/M%C3%B3tm%C3%A6lendatr%C3%BA" title="Mótmælendatrú">mótmælendatrúar</a>
8523 <a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuður</a>
8524 <a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuðir</a>
8525 <a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">mótmælendasöfnuðirxxx</a>
8526 </p>
8527 !! end
8528
8529 !! test
8530 Parsoid link trail escaping
8531 !! options
8532 parsoid=html2wt,html2html
8533 !! html/parsoid
8534 <p><a rel="mw:WikiLink" href="./Apple" title="Apple">apple</a>s</p>
8535 !! wikitext
8536 [[apple]]<nowiki/>s
8537 !! end
8538
8539 !! test
8540 Parsoid link prefix escaping
8541 !! options
8542 language=is
8543 parsoid=html2wt,html2html
8544 !! html/parsoid
8545 <p>Aðrir mótmælenda<a rel="mw:WikiLink" href="./Söfnuður" title="Söfnuður">söfnuður</a></p>
8546 !! wikitext
8547 Aðrir mótmælenda<nowiki/>[[söfnuður]]
8548 !! end
8549
8550 !! test
8551 Parsoid link bracket escaping
8552 !! options
8553 parsoid=html2wt,html2html
8554 !! html/parsoid
8555 <p><a rel="mw:WikiLink" href="./Test" title="Test">Test</a></p>
8556 <p>[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]</p>
8557 <p>[[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]]</p>
8558 <p>[[[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]]]</p>
8559 <p>[[[[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]]]]</p>
8560 <p>[[[[[<a rel="mw:WikiLink" href="./Test" title="Test">Test</a>]]]]]</p>
8561 !! wikitext
8562 [[Test]]
8563
8564 [<nowiki/>[[Test]]]
8565
8566 [[[[Test]]]]
8567
8568 [[[<nowiki/>[[Test]]]]]
8569
8570 [[[[[[Test]]]]]]
8571
8572 [[[[[<nowiki/>[[Test]]]]]]]
8573 !! end
8574
8575 !! test
8576 Parsoid-centric test: Whitespace in ext- and wiki-links should be preserved
8577 !! wikitext
8578 [[Foo| bar]]
8579
8580 [[Foo| ''bar'']]
8581
8582 [http://wp.org foo]
8583
8584 [http://wp.org ''foo'']
8585 !! html
8586 <p><a href="/wiki/Foo" title="Foo"> bar</a>
8587 </p><p><a href="/wiki/Foo" title="Foo"> <i>bar</i></a>
8588 </p><p><a rel="nofollow" class="external text" href="http://wp.org">foo</a>
8589 </p><p><a rel="nofollow" class="external text" href="http://wp.org"><i>foo</i></a>
8590 </p>
8591 !! end
8592
8593 !! test
8594 Parsoid: Scoped parsing should handle mixed transclusions and plain text
8595 !! wikitext
8596 [[Foo|{{echo|a}} b {{echo|c}}]]
8597 !! html/parsoid
8598 <p><a rel="mw:WikiLink" href="./Foo" title="Foo"><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span> b <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"c"}},"i":0}}]}'>c</span></a></p>
8599 !! end
8600
8601 !! test
8602 Link with angle bracket after anchor
8603 !! wikitext
8604 [[Foo#<bar>]]
8605 !! html/php
8606 <p><a href="/wiki/Foo#.3Cbar.3E" title="Foo">Foo#&lt;bar&gt;</a>
8607 </p>
8608 !! html/parsoid
8609 <p><a rel="mw:WikiLink" href="./Foo#.3Cbar.3E" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo#.3Cbar.3E"},"sa":{"href":"Foo#&lt;bar>"}}'>Foo#&lt;bar></a></p>
8610 !! end
8611
8612 ###
8613 ### Interwiki links (see maintenance/interwiki.sql)
8614 ###
8615
8616 !! test
8617 Inline interwiki link
8618 !! options
8619 parsoid=wt2html,wt2wt,html2html
8620 !! wikitext
8621 [[MeatBall:SoftSecurity]]
8622 !! html/php
8623 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity</a>
8624 </p>
8625 !! html/parsoid
8626 <p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity" title="meatball:SoftSecurity">MeatBall:SoftSecurity</a></p>
8627 !! end
8628
8629 !! test
8630 Inline interwiki link with empty title (T4372)
8631 !! options
8632 parsoid=wt2html,wt2wt,html2html
8633 !! wikitext
8634 [[MeatBall:]]
8635 !! html/php
8636 <p><a href="http://www.usemod.com/cgi-bin/mb.pl" class="extiw" title="meatball:">MeatBall:</a>
8637 </p>
8638 !! html/parsoid
8639 <p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?" title="meatball:">MeatBall:</a></p>
8640 !! end
8641
8642 ## html2wt and html2html will fail because we will prefer the :en: interwiki prefix over wikipedia:
8643 !! test
8644 Interwiki link encoding conversion (T3636)
8645 !! options
8646 parsoid=wt2html,wt2wt
8647 !! wikitext
8648 *[[Wikipedia:ro:Olteni&#0355;a]]
8649 *[[Wikipedia:ro:Olteni&#355;a]]
8650 !! html
8651 <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></li>
8652 <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></li></ul>
8653
8654 !! html+tidy
8655 <ul>
8656 <li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteniţa</a></li>
8657 <li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteniţa</a></li>
8658 </ul>
8659 !! html/parsoid
8660 <ul>
8661 <li><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/ro:Olteniţa" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteniţa</a></li>
8662 <li><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/ro:Olteniţa" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteniţa</a></li>
8663 </ul>
8664 !! end
8665
8666 !! test
8667 Interwiki link with fragment (T4130)
8668 !! wikitext
8669 [[MeatBall:SoftSecurity#foo]]
8670 !! html
8671 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity#foo" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity#foo</a>
8672 </p>
8673 !! end
8674
8675 !! test
8676 Link scenarios with escaped fragments
8677 !! wikitext
8678 [[#Is this great?]]
8679 [[Foo#Is this great?]]
8680 [[meatball:Foo#Is this great?]]
8681 !! html/php
8682 <p><a href="#Is_this_great.3F">#Is this great?</a>
8683 <a href="/wiki/Foo#Is_this_great.3F" title="Foo">Foo#Is this great?</a>
8684 <a href="http://www.usemod.com/cgi-bin/mb.pl?Foo#Is_this_great.3F" class="extiw" title="meatball:Foo">meatball:Foo#Is this great?</a>
8685 </p>
8686 !! html/parsoid
8687 <p><a rel="mw:WikiLink" href="./Main_Page#Is_this_great.3F" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#Is_this_great.3F"},"sa":{"href":"#Is this great?"}}'>#Is this great?</a>
8688 <a rel="mw:WikiLink" href="./Foo#Is_this_great.3F" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo#Is_this_great.3F"},"sa":{"href":"Foo#Is this great?"}}'>Foo#Is this great?</a>
8689 <a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?Foo#Is_this_great.3F" title="meatball:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://www.usemod.com/cgi-bin/mb.pl?Foo#Is_this_great.3F"},"sa":{"href":"meatball:Foo#Is this great?"},"isIW":true}'>meatball:Foo#Is this great?</a></p>
8690 !! end
8691
8692 # Ideally the wikipedia: prefix here should be proto-relative too
8693 # [CSA]: this is kind of a bogus test, as the PHP parser test doesn't
8694 # define the 'en' prefix, and originally the test used 'wikipedia',
8695 # which isn't a localinterwiki prefix hence the links to the 'en:Foo'
8696 # article.
8697 !! test
8698 Different interwiki prefixes mapping to the same URL
8699 !! wikitext
8700 [[:en:Foo]]
8701
8702 [[:en:Foo|Foo]]
8703
8704 [[wikipedia:Foo]]
8705
8706 [[:wikipedia:Foo|Foo]]
8707
8708 [[wikipedia:en:Foo]]
8709
8710 [[:wikipedia:en:Foo]]
8711
8712 [[ wikiPEdia :Foo]]
8713 !! html/parsoid
8714 <p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}' title="en:Foo">en:Foo</a></p>
8715
8716 <p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}' title="en:Foo">Foo</a></p>
8717
8718 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true}' title="wikipedia:Foo">wikipedia:Foo</a></p>
8719
8720 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":":wikipedia:Foo"},"isIW":true}' title="wikipedia:Foo">Foo</a></p>
8721
8722 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":"wikipedia:en:Foo"},"isIW":true}' title="wikipedia:en:Foo">wikipedia:en:Foo</a></p>
8723
8724 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":":wikipedia:en:Foo"},"isIW":true}' title="wikipedia:en:Foo">wikipedia:en:Foo</a></p>
8725
8726 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":" wikiPEdia :Foo"},"isIW":true}' title="wikipedia:Foo"> wikiPEdia :Foo</a></p>
8727 !! end
8728
8729 !! test
8730 Interwiki links that cannot be represented in wiki syntax
8731 !! wikitext
8732 [[meatball:ok]]
8733 [[meatball:ok#foo|ok with fragment]]
8734 [[meatball:ok_as_well?|ok ending with ? mark]]
8735 [http://de.wikipedia.org/wiki/Foo?action=history has query]
8736 [http://de.wikipedia.org/wiki/#foo is just fragment]
8737
8738 !! html/php
8739 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?ok" class="extiw" title="meatball:ok">meatball:ok</a>
8740 <a href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo" class="extiw" title="meatball:ok">ok with fragment</a>
8741 <a href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well%3F" class="extiw" title="meatball:ok as well?">ok ending with ? mark</a>
8742 <a rel="nofollow" class="external text" href="http://de.wikipedia.org/wiki/Foo?action=history">has query</a>
8743 <a rel="nofollow" class="external text" href="http://de.wikipedia.org/wiki/#foo">is just fragment</a>
8744 </p>
8745 !! html/parsoid
8746 <p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok" title="meatball:ok">meatball:ok</a>
8747 <a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo" title="meatball:ok">ok with fragment</a>
8748 <a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well?" title="meatball:ok as well?">ok ending with ? mark</a>
8749 <a rel="mw:ExtLink" href="http://de.wikipedia.org/wiki/Foo?action=history">has query</a>
8750 <a rel="mw:ExtLink" href="http://de.wikipedia.org/wiki/#foo">is just fragment</a></p>
8751 !! end
8752
8753 !! test
8754 Interwiki links: trail
8755 !! wikitext
8756 [[wikipedia:Foo|Ba]]r
8757 !! html/php
8758 <p><a href="http://en.wikipedia.org/wiki/Foo" class="extiw" title="wikipedia:Foo">Bar</a>
8759 </p>
8760 !! html/parsoid
8761 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true,"tail":"r"}' title="wikipedia:Foo">Bar</a></p>
8762 !! end
8763
8764 !! test
8765 Local interwiki link
8766 !! options
8767 parsoid=wt2html,wt2wt,html2html
8768 !! wikitext
8769 [[local:Template:Foo]]
8770 !! html/php
8771 <p><a href="/wiki/Template:Foo" title="Template:Foo">local:Template:Foo</a>
8772 </p>
8773 !! html/parsoid
8774 <p><a rel="mw:WikiLink" href="./Template:Foo" title="Template:Foo">local:Template:Foo</a></p>
8775 !! end
8776
8777 # Parsoid does not mark self-links, by design.
8778 !! test
8779 Local interwiki link: self-link to current page
8780 !! options
8781 title=[[Main Page]]
8782 parsoid=wt2html,wt2wt,html2html
8783 !! wikitext
8784 [[local:Main Page]]
8785 !! html/php
8786 <p><a class="mw-selflink selflink">local:Main Page</a>
8787 </p>
8788 !! html/parsoid
8789 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">local:Main Page</a></p>
8790 !! end
8791
8792 !! test
8793 Local interwiki link: prefix only (T66167)
8794 !! options
8795 parsoid=wt2html,wt2wt,html2html
8796 !! wikitext
8797 [[local:]]
8798 !! html/php
8799 <p><a href="/wiki/Main_Page" title="Main Page">local:</a>
8800 </p>
8801 !! html/parsoid
8802 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">local:</a></p>
8803 !! end
8804
8805 !! test
8806 Local interwiki link: with additional interwiki prefix (T63357)
8807 !! options
8808 parsoid=wt2html,wt2wt,html2html
8809 !! wikitext
8810 [[local:meatball:Hello]]
8811 !! html/php
8812 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?Hello" class="extiw" title="meatball:Hello">local:meatball:Hello</a>
8813 </p>
8814 !! html/parsoid
8815 <p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?Hello" title="meatball:Hello">local:meatball:Hello</a></p>
8816 !! end
8817
8818 !! test
8819 Multiple local interwiki link prefixes
8820 !! wikitext
8821 [[local:local:local:local:mi:local:Foo]]
8822 !! options
8823 parsoid=wt2html,wt2wt,html2html
8824 !! html/php
8825 <p><a href="/wiki/Foo" title="Foo">local:local:local:local:mi:local:Foo</a>
8826 </p>
8827 !! html/parsoid
8828 <p><a rel="mw:WikiLink" href="./Foo" title="Foo">local:local:local:local:mi:local:Foo</a></p>
8829 !! end
8830
8831 ###
8832 ### Interlanguage links
8833 ### Language links (so that searching for '### language' matches..)
8834 ###
8835
8836 !! test
8837 Interlanguage link
8838 !! wikitext
8839 Blah blah blah
8840 [[zh:Chinese]]
8841 !! html/php
8842 <p>Blah blah blah
8843 </p>
8844 !! html/parsoid
8845 <p>Blah blah blah</p>
8846 <link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
8847 !! end
8848
8849 ## parsoid html2wt will lose the space variations
8850 !! test
8851 Interlanguage link with spacing
8852 !! options
8853 parsoid=wt2html,wt2wt,html2html
8854 !! wikitext
8855 Blah blah blah
8856 [[ zh : Chinese ]]
8857 !! html/php
8858 <p>Blah blah blah
8859 </p>
8860 !! html/parsoid
8861 <p>Blah blah blah</p>
8862 <link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
8863 !! end
8864
8865 !! test
8866 Double interlanguage link
8867 !! wikitext
8868 Blah blah blah
8869 [[es:Spanish]]
8870 [[zh:Chinese]]
8871 !! html/php
8872 <p>Blah blah blah
8873 </p>
8874 !! html/parsoid
8875 <p>Blah blah blah</p>
8876 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish"/>
8877 <link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
8878 !! end
8879
8880 ## parsoid html2wt will lose the space variations
8881 !! test
8882 Interlanguage link variations
8883 !! options
8884 parsoid=wt2html,wt2wt,html2html
8885 !! wikitext
8886 Blah blah blah
8887 [[ es :Spanish]]
8888 [[ ZH :Chinese]]
8889 [[es:Foo_bar]]
8890 !! html/php
8891 <p>Blah blah blah
8892 </p>
8893 !! html/parsoid
8894 <p>Blah blah blah</p>
8895 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish" />
8896 <link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese" />
8897 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo_bar" />
8898 !! end
8899
8900 !! test
8901 Escaping of interlanguage links (T129218, T156308)
8902 !! wikitext
8903 Blah blah blah
8904 [[:es:Spanish]]
8905 [[ : zh : Chinese ]]
8906 !! html/php
8907 <p>Blah blah blah
8908 <a href="http://es.wikipedia.org/wiki/Spanish" class="extiw" title="es:Spanish">es:Spanish</a>
8909 <a href="http://zh.wikipedia.org/wiki/Chinese" class="extiw" title="zh:Chinese"> zh : Chinese </a>
8910 </p>
8911 !! html/parsoid
8912 <p>Blah blah blah
8913 <a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/Spanish" title="es:Spanish">es:Spanish</a>
8914 <a rel="mw:ExtLink" href="http://zh.wikipedia.org/wiki/Chinese" title="zh:Chinese"> zh : Chinese </a></p>
8915 !! end
8916
8917 !! test
8918 Multiple colons escaping interlanguage links
8919 !! options
8920 parsoid=wt2html
8921 !! wikitext
8922 [[:es:Spanish]]
8923 [[::es:Spanish]]
8924 [[:::es:Spanish]]
8925 !! html/php
8926 <p><a href="http://es.wikipedia.org/wiki/Spanish" class="extiw" title="es:Spanish">es:Spanish</a>
8927 [[::es:Spanish]]
8928 [[:::es:Spanish]]
8929 </p>
8930 !! html/parsoid
8931 <p><a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/Spanish" title="es:Spanish">es:Spanish</a>
8932 [[::es:Spanish]]
8933 [[:::es:Spanish]]</p>
8934 !! end
8935
8936 ## parsoid html2wt will normalize the space to _
8937 !! test
8938 Space and question mark encoding in interlanguage links (T95473)
8939 !! options
8940 parsoid=wt2html,wt2wt,html2html
8941 !! wikitext
8942 Blah blah blah
8943 [[es:Foo bar?]]
8944 !! html/php
8945 <p>Blah blah blah
8946 </p>
8947 !! html/parsoid
8948 <p>Blah blah blah</p>
8949 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo_bar%3F" />
8950 !! end
8951
8952 !! test
8953 Interlanguage link, with prefix links
8954 !! options
8955 language=ln
8956 !! wikitext
8957 Blah blah blah
8958 [[zh:Chinese]]
8959 !! html/php
8960 <p>Blah blah blah
8961 </p>
8962 !! html/parsoid
8963 <p>Blah blah blah</p>
8964 <link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
8965 !! end
8966
8967 !! test
8968 Double interlanguage link, with prefix links (T10897)
8969 !! options
8970 language=ln
8971 !! wikitext
8972 Blah blah blah
8973 [[es:Spanish]]
8974 [[zh:Chinese]]
8975 !! html/php
8976 <p>Blah blah blah
8977 </p>
8978 !! html/parsoid
8979 <p>Blah blah blah</p>
8980 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish"/>
8981 <link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
8982 !! end
8983
8984 !! test
8985 "Extra" interlanguage links (T34189 / gerrit 111390)
8986 !! wikitext
8987 Blah blah blah
8988 [[mul:Article]]
8989 !! html/php
8990 <p>Blah blah blah
8991 </p>
8992 !! html/parsoid
8993 <p>Blah blah blah</p>
8994 <link rel="mw:PageProp/Language" title="Multilingual" href="http://wikisource.org/wiki/Article"/>
8995 !! end
8996
8997 ## PHP parser tests script needs an update
8998 ## Parsoid html2wt will normalize output to [[:zh:Chinese]]
8999 !! test
9000 Language links render as inline links if $wgInterwikiMagic=false
9001 !! options
9002 wgInterwikiMagic=false
9003 parsoid=wt2html,wt2wt,html2html
9004 !! wikitext
9005 Blah blah blah
9006 [[zh:Chinese]]
9007 !! html/parsoid
9008 <p>Blah blah blah <a rel="mw:ExtLink" href="http://zh.wikipedia.org/wiki/Chinese" title="zh:Chinese">zh:Chinese</a></p>
9009 !! end
9010
9011 ## PHP parser tests script needs an update
9012 ## Parsoid html2wt will normalize output to [[:zh:Chinese]]
9013 !! test
9014 Language links render as inline links in the Talk namespace
9015 !! options
9016 title=Talk:Foo
9017 parsoid=wt2html,wt2wt,html2html
9018 !! wikitext
9019 Blah blah blah
9020 [[zh:Chinese]]
9021 !! html/parsoid
9022 <p>Blah blah blah <a rel="mw:ExtLink" href="http://zh.wikipedia.org/wiki/Chinese" title="zh:Chinese">zh:Chinese</a></p>
9023 !! end
9024
9025 !! test
9026 Parsoid-specific test: Wikilinks with &nbsp; should RT properly
9027 !! options
9028 language=ln
9029 !! wikitext
9030 [[WW&nbsp;II]]
9031 !! html
9032 <p><a href="/index.php?title=WW_II&amp;action=edit&amp;redlink=1" class="new" title="WW II (lonkásá ezalí tɛ̂)">WW&#160;II</a>
9033 </p>
9034 !! end
9035
9036 !! test
9037 Parsoid T55221: Wikilinks should be properly entity-escaped
9038 !! options
9039 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
9040 !! html/parsoid
9041 <p>He&amp;nbsp;llo <a href="./Foo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
9042 <p>He&amp;nbsp;llo <a href="./He&amp;nbsp;llo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
9043 !! wikitext
9044 He&amp;nbsp;llo [[Foo|He&amp;nbsp;llo]]
9045
9046 He&amp;nbsp;llo He&amp;nbsp;llo
9047 !! html/php
9048 <p>He&amp;nbsp;llo <a href="/wiki/Foo" title="Foo">He&amp;nbsp;llo</a>
9049 </p><p>He&amp;nbsp;llo He&amp;nbsp;llo
9050 </p>
9051 !! end
9052
9053 # html2wt will fail because of title normalization without data-parsoid
9054 !! test
9055 Parsoid: handle constructor well
9056 !! options
9057 parsoid=wt2html,wt2wt
9058 !! wikitext
9059 [[constructor]]
9060
9061 [[constructor:foo]]
9062 !! html/php
9063 <p><a href="/index.php?title=Constructor&amp;action=edit&amp;redlink=1" class="new" title="Constructor (page does not exist)">constructor</a>
9064 </p><p><a href="/index.php?title=Constructor:foo&amp;action=edit&amp;redlink=1" class="new" title="Constructor:foo (page does not exist)">constructor:foo</a>
9065 </p>
9066 !! html/parsoid
9067 <p><a rel="mw:WikiLink" href="./Constructor" title="Constructor" data-parsoid='{"stx":"simple","a":{"href":"./Constructor"},"sa":{"href":"constructor"}}'>constructor</a></p>
9068
9069 <p><a rel="mw:WikiLink" href="./Constructor:foo" title="Constructor:foo" data-parsoid='{"stx":"simple","a":{"href":"./Constructor:foo"},"sa":{"href":"constructor:foo"}}'>constructor:foo</a></p>
9070 !! end
9071
9072 !! article
9073 ko:
9074 !! text
9075 Test.
9076 !! endarticle
9077
9078 # Note that `ko` isn't a known interlanguage prefix
9079 !! test
9080 Parsoid: recognize interlanguage links without a target page
9081 !! options
9082 ill
9083 !! wikitext
9084 [[es:]]
9085
9086 [[ko:]]
9087 !! html/php
9088 es:
9089 !! html/parsoid
9090 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/"/>
9091
9092 <p><a rel="mw:WikiLink" href="./Ko:" title="Ko:">ko:</a></p>
9093 !! end
9094
9095 # Note that `ko` isn't a known interwiki prefix
9096 !! test
9097 Parsoid: recognize interwiki links without a target page
9098 !! options
9099 parsoid=wt2html,wt2wt,html2html
9100 !! wikitext
9101 [[:es:]]
9102
9103 [[:ko:]]
9104 !! html/php
9105 <p><a href="http://es.wikipedia.org/wiki/" class="extiw" title="es:">es:</a>
9106 </p><p><a href="/wiki/Ko:" title="Ko:">ko:</a>
9107 </p>
9108 !! html/parsoid
9109 <p><a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/" title="es:">es:</a></p>
9110 <p><a rel="mw:WikiLink" href="./Ko:" title="Ko:">ko:</a></p>
9111 !! end
9112
9113 !! test
9114 Handle interwiki links pointing to the current wiki as plain wiki links (T47209)
9115 !! wikitext
9116 [[mi:Foo]]
9117 !! html/php
9118 <p><a href="/wiki/Foo" title="Foo">mi:Foo</a>
9119 </p>
9120 !! html/parsoid
9121 <p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"mi:Foo"}}'>mi:Foo</a></p>
9122 !! end
9123
9124 !! test
9125 Interlanguage link with preceding local interwiki link (T70085)
9126 !! options
9127 parsoid=wt2html,wt2wt,html2html
9128 !! wikitext
9129 Blah blah blah
9130 [[local:es:Spanish]]
9131 !! html/php
9132 <p>Blah blah blah
9133 <a href="http://es.wikipedia.org/wiki/Spanish" class="extiw" title="es:Spanish">local:es:Spanish</a>
9134 </p>
9135 !! html/parsoid
9136 <p>Blah blah blah
9137 <a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/Spanish" title="es:Spanish">local:es:Spanish</a></p>
9138 !! end
9139
9140 !! test
9141 Looks like an interlanguage link, but is actually a local interwiki
9142 !! options
9143 parsoid=wt2html,wt2wt,html2html
9144 !! wikitext
9145 Blah blah blah
9146 [[mi:Template:Foo]]
9147 !! html/php
9148 <p>Blah blah blah
9149 <a href="/wiki/Template:Foo" title="Template:Foo">mi:Template:Foo</a>
9150 </p>
9151 !! html/parsoid
9152 <p>Blah blah blah
9153 <a rel="mw:WikiLink" href="./Template:Foo" title="Template:Foo">mi:Template:Foo</a></p>
9154 !! end
9155
9156 ###
9157 ### Redirects, Parsoid-only
9158 ###
9159
9160 !! test
9161 1. Simple redirect to page
9162 !! wikitext
9163 #REDIRECT [[Main Page]]
9164 !! html/parsoid
9165 <link rel="mw:PageProp/redirect" href="./Main_Page"/>
9166 !! end
9167
9168 !! test
9169 2. Other redirect variants
9170 !! wikitext
9171 #REDIRECT [[Main_Page]]
9172 !! html/parsoid
9173 <link rel="mw:PageProp/redirect" href="./Main_Page" data-parsoid='{"src":"#REDIRECT ","a":{"href":"./Main_Page"},"sa":{"href":"Main_Page"}}'/>
9174 !! end
9175
9176 # Not a valid redirect in PHP (although perhaps it was, once upon a time)
9177 # This tests the Parsoid bail-out code.
9178 !! test
9179 3. Other redirect variants
9180 !! wikitext
9181 #REDIRECT [[<nowiki>[[Bar]]</nowiki>]]
9182 !! html/parsoid
9183 <ol><li data-parsoid>REDIRECT [[[[Bar]]]]</li></ol>
9184 !! end
9185
9186 !! test
9187 4. Redirect to a templated destination
9188 !! wikitext
9189 #REDIRECT [[{{echo|Foo}}bar]]
9190 !! html/parsoid
9191 <link about="#mwt2" typeof="mw:ExpandedAttrs" rel="mw:PageProp/redirect" href="./Foobar" data-parsoid='{"a":{"href":"./Foobar"},"sa":{"href":"{{echo|Foo}}bar"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[12,24,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"Foo\"}},\"i\":0}}]}&#39;>Foo&lt;/span>bar"}]]}'/>
9192 !! end
9193
9194 !! test
9195 Empty redirect
9196 !! options
9197 parsoid=wt2html,wt2wt
9198 !! wikitext
9199 #REDIRECT [[]]
9200 !! html/parsoid
9201 <ol>
9202 <li>REDIRECT [[]]</li></ol>
9203 !! end
9204
9205 !! test
9206 Optional colon in #REDIRECT
9207 !! options
9208 # the colon is archaic syntax. we support it for wt2html, but we
9209 # don't care that it roundtrips back to the modern syntax.
9210 parsoid=wt2html,html2html
9211 !! wikitext
9212 #REDIRECT:[[Main Page]]
9213 !! html/parsoid
9214 <link rel="mw:PageProp/redirect" href="./Main_Page"/>
9215 !! end
9216
9217 !! test
9218 Whitespace in #REDIRECT with optional colon
9219 !! options
9220 # the colon and gratuitous whitespace is archaic syntax. we support
9221 # it for wt2html, but we don't care that it roundtrips back to the
9222 # modern syntax (without extra whitespace)
9223 parsoid=wt2html,html2html
9224 !! wikitext
9225
9226 #REDIRECT
9227 :
9228 [[Main Page]]
9229 !! html/parsoid
9230 <link rel="mw:PageProp/redirect" href="./Main_Page"/>
9231 !! end
9232
9233 !! test
9234 Piped link in #REDIRECT
9235 !! options
9236 # content after piped link is ignored. we support this syntax,
9237 # but don't care that the piped link is lost when we roundtrip this.
9238 parsoid=wt2html
9239 !! wikitext
9240 #REDIRECT [[Main Page|bar]]
9241 !! html/parsoid
9242 <link rel="mw:PageProp/redirect" href="./Main_Page"/>
9243 !! end
9244
9245 !! test
9246 Redirect to category (T104502)
9247 !! options
9248 parsoid=wt2html,wt2wt
9249 !! wikitext
9250 #REDIRECT [[Category:Foo]]
9251 !! html/parsoid
9252 <link rel="mw:PageProp/redirect" href="./Category:Foo"/>
9253 !! end
9254
9255 !! test
9256 Redirect to category with URL encoding (T104502)
9257 !! options
9258 parsoid=wt2html
9259 !! wikitext
9260 #REDIRECT [[Category%3AFoo]]
9261 !! html/parsoid
9262 <link rel="mw:PageProp/redirect" href="./Category:Foo"/>
9263 !! end
9264
9265 !! test
9266 Redirect to category page
9267 !! wikitext
9268 #REDIRECT [[:Category:Foo]]
9269 !! html/parsoid
9270 <link rel="mw:PageProp/redirect" href="./Category:Foo"/>
9271 !! end
9272
9273 !! test
9274 Redirect to image page (1)
9275 !! wikitext
9276 #REDIRECT [[File:Wiki.png]]
9277 !! html/parsoid
9278 <link rel="mw:PageProp/redirect" href="./File:Wiki.png"/>
9279 !! end
9280
9281 !! test
9282 Redirect to image page (2)
9283 !! wikitext
9284 #REDIRECT [[Image:Wiki.png]]
9285 !! html/parsoid
9286 <link rel="mw:PageProp/redirect" href="./File:Wiki.png" data-parsoid='{"src":"#REDIRECT ","a":{"href":"./File:Wiki.png"},"sa":{"href":"Image:Wiki.png"}}'/>
9287 !! end
9288
9289 # html2wt disabled because wts serializes as "#REDIRECT [[:en:File:Wiki.png]]"
9290 # Next test confirms this.
9291 !! test
9292 Redirect to language (1) (T104918)
9293 !! options
9294 parsoid=wt2html,wt2wt,html2html
9295 !! wikitext
9296 #REDIRECT [[en:File:Wiki.png]]
9297 !! html/parsoid
9298 <link rel="mw:PageProp/redirect" href="//en.wikipedia.org/wiki/File:Wiki.png"/>
9299 !! end
9300
9301 !! test
9302 Redirect to language (2) (T104918)
9303 !! wikitext
9304 #REDIRECT [[:en:File:Wiki.png]]
9305 !! html/parsoid
9306 <link rel="mw:PageProp/redirect" href="//en.wikipedia.org/wiki/File:Wiki.png"/>
9307 !! end
9308
9309 !! test
9310 Redirect to interwiki (T104918)
9311 !! wikitext
9312 #REDIRECT [[meatball:File:Wiki.png]]
9313 !! html/parsoid
9314 <link rel="mw:PageProp/redirect" href="http://www.usemod.com/cgi-bin/mb.pl?File:Wiki.png"/>
9315 !! end
9316
9317 !! test
9318 Non-English #REDIRECT
9319 !! options
9320 language=is
9321 !! wikitext
9322 #TILVÍSUN [[Main Page]]
9323 !! html/parsoid
9324 <link rel="mw:PageProp/redirect" href="./Main_Page" data-parsoid='{"src":"#TILVÍSUN ","a":{"href":"./Main_Page"},"sa":{"href":"Main Page"}}'/>
9325 !! end
9326
9327 !! test
9328 Redirect syntax under text isn't considered a redirect
9329 !! wikitext
9330 some text
9331 #redirect [[Main Page]]
9332 !! html/parsoid
9333 <p>some text</p>
9334 <ol data-parsoid='{}'><li data-parsoid='{}'>redirect <a rel="mw:WikiLink" href="./Main_Page" title="Main Page" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page"},"sa":{"href":"Main Page"}}'>Main Page</a></li></ol>
9335 !! end
9336
9337 !! test
9338 New redirect
9339 !! options
9340 parsoid=html2wt
9341 !! html/parsoid
9342 <p>Foo<link rel="mw:PageProp/redirect" href="./Foo"/></p>
9343 !! wikitext
9344 #REDIRECT [[Foo]]
9345 Foo
9346 !! end
9347
9348 !! test
9349 Redirect followed by block on the same line
9350 !! options
9351 parsoid=wt2html
9352 !! wikitext
9353 #REDIRECT [[Main Page]]<!-- haha -->== hi ==
9354 !! html/parsoid
9355 <link rel="mw:PageProp/redirect" href="./Main_Page"/><!-- haha --><h2 id="hi"> hi </h2>
9356 !! end
9357
9358 !! test
9359 Redirect followed by a newline
9360 !! wikitext
9361 #REDIRECT [[Main Page]]
9362 A newline
9363 !! html/parsoid
9364 <link rel="mw:PageProp/redirect" href="./Main_Page"/>
9365 <p>A newline</p>
9366 !! end
9367
9368 !! test
9369 Redirect followed by multiple newlines
9370 !! wikitext
9371 #REDIRECT [[Main Page]]
9372
9373
9374 A newline
9375 !! html/parsoid
9376 <link rel="mw:PageProp/redirect" href="./Main_Page"/>
9377
9378 <p><br/>
9379 A newline</p>
9380 !! end
9381
9382 !! test
9383 Drop duplicate redirects
9384 !! options
9385 parsoid=html2wt
9386 !! html/parsoid
9387 <link rel="mw:PageProp/redirect" href="./Foo"/>
9388 <link rel="mw:PageProp/redirect" href="./Bar"/>
9389 <link rel="mw:PageProp/redirect" href="./Baz"/>
9390 !! wikitext
9391 #REDIRECT [[Foo]]
9392 !! end
9393
9394 ##
9395 ## XHTML tidiness
9396 ###
9397
9398 !! test
9399 <br> to <br />
9400 !! wikitext
9401 1<br>2<br />3
9402 !! html
9403 <p>1<br />2<br />3
9404 </p>
9405 !! end
9406
9407 !! test
9408 Broken br tag sanitization
9409 !! wikitext
9410 </br>
9411 !! html/php
9412 <p>&lt;/br&gt;
9413 </p>
9414 !! end
9415
9416 # TODO: Fix html2html mode (T53055)!
9417 !! test
9418 Parsoid: Broken br tag recognition
9419 !! options
9420 parsoid=wt2html
9421 !! wikitext
9422 </br>
9423
9424 <br/ >
9425 !! html+tidy
9426 <p><br /></p>
9427 <p><br /></p>
9428 !! end
9429
9430 !! test
9431 Incorrecly removing closing slashes from correctly formed XHTML
9432 !! wikitext
9433 <br style="clear:both;" />
9434 !! html
9435 <p><br style="clear:both;" />
9436 </p>
9437 !! end
9438
9439 !! test
9440 Failing to transform badly formed HTML into correct XHTML
9441 !! wikitext
9442 <br style="clear: left;">
9443 <br style="clear: right;">
9444 <br style="clear: both;">
9445 !! html
9446 <p><br style="clear: left;" />
9447 <br style="clear: right;" />
9448 <br style="clear: both;" />
9449 </p>
9450 !!end
9451
9452 ## FIXME: Is Parsoid's acceptance of self-closing html-tags
9453 ## a feature or a bug? See https://phabricator.wikimedia.org/T76962
9454 !! test
9455 Handling html with a div self-closing tag
9456 !! wikitext
9457 <div title />
9458 <div title/>
9459 <div title/ >
9460 <div title=bar />
9461 <div title=bar/>
9462 <div title=bar/ >
9463 !! html/php
9464 <p>&lt;div title /&gt;
9465 &lt;div title/&gt;
9466 </p>
9467 <div>
9468 <p>&lt;div title=bar /&gt;
9469 &lt;div title=bar/&gt;
9470 </p>
9471 <div title="bar/"></div>
9472 </div>
9473
9474 !! html/parsoid
9475 <div title="" data-parsoid='{"stx":"html","selfClose":true}'></div>
9476 <div title="" data-parsoid='{"stx":"html","selfClose":true}'></div>
9477 <div title="" data-parsoid='{"stx":"html","selfClose":true}'></div>
9478 <div title="bar" data-parsoid='{"stx":"html","selfClose":true}'></div>
9479 <div title="bar" data-parsoid='{"stx":"html","selfClose":true}'></div>
9480 <div title="bar/" data-parsoid='{"stx":"html","autoInsertedEnd":true}'></div>
9481 !! end
9482
9483 !! test
9484 Handling html with a br self-closing tag
9485 !! wikitext
9486 <br title />
9487 <br title/>
9488 <br title/ >
9489 <br title=bar />
9490 <br title=bar/>
9491 <br title=bar/ >
9492 !! html/php
9493 <p><br title="" />
9494 <br title="" />
9495 <br />
9496 <br title="bar" />
9497 <br title="bar" />
9498 <br title="bar/" />
9499 </p>
9500 !! html/parsoid
9501 <p><br title="" />
9502 <br title="" />
9503 <br title="" />
9504 <br title="bar" />
9505 <br title="bar" />
9506 <br title="bar/" />
9507 </p>
9508 !! end
9509
9510 !! test
9511 Horizontal ruler (should it add that extra space?)
9512 !! wikitext
9513 <hr>
9514 <hr >
9515 foo <hr
9516 > bar
9517 !! html+tidy
9518 <hr />
9519 <hr />
9520 <p>foo</p>
9521 <hr />
9522 <p>bar</p>
9523 !! end
9524
9525 !! test
9526 Horizontal ruler -- 4+ dashes render hr
9527 !! wikitext
9528 ----
9529 !! html
9530 <hr />
9531
9532 !! end
9533
9534 !! test
9535 Horizontal ruler -- eats additional dashes on the same line
9536 !! wikitext
9537 ---------
9538 !! html
9539 <hr />
9540
9541 !! end
9542
9543 !! test
9544 Horizontal ruler -- does not collapse dashes on consecutive lines
9545 !! wikitext
9546 ----
9547 ----
9548 !! html
9549 <hr />
9550 <hr />
9551
9552 !! end
9553
9554 !! test
9555 Horizontal ruler -- <4 dashes render as plain text
9556 !! wikitext
9557 ---
9558 !! html
9559 <p>---
9560 </p>
9561 !! end
9562
9563 !! test
9564 Horizontal ruler -- Supports content following dashes on same line
9565 !! wikitext
9566 ---- Foo
9567 !! html
9568 <hr /> Foo
9569
9570 !! html+tidy
9571 <hr />
9572 <p>Foo</p>
9573 !! end
9574
9575 ###
9576 ### Block-level elements
9577 ###
9578 !! test
9579 Common list
9580 !! wikitext
9581 *Common list
9582 * item 2
9583 *item 3
9584 !! html
9585 <ul><li>Common list</li>
9586 <li> item 2</li>
9587 <li>item 3</li></ul>
9588
9589 !! end
9590
9591 !! test
9592 Numbered list
9593 !! wikitext
9594 #Numbered list
9595 #item 2
9596 # item 3
9597 !! html
9598 <ol><li>Numbered list</li>
9599 <li>item 2</li>
9600 <li> item 3</li></ol>
9601
9602 !! end
9603
9604 !! test
9605 Mixed list
9606 !! wikitext
9607 *Mixed list
9608 *# with numbers
9609 ** and bullets
9610 *# and numbers
9611 *bullets again
9612 **bullet level 2
9613 ***bullet level 3
9614 ***#Number on level 4
9615 **bullet level 2
9616 **#Number on level 3
9617 **#Number on level 3
9618 *#number level 2
9619 *Level 1
9620 *** Level 3
9621 #** Level 3, but ordered
9622 !! html
9623 <ul><li>Mixed list
9624 <ol><li> with numbers</li></ol>
9625 <ul><li> and bullets</li></ul>
9626 <ol><li> and numbers</li></ol></li>
9627 <li>bullets again
9628 <ul><li>bullet level 2
9629 <ul><li>bullet level 3
9630 <ol><li>Number on level 4</li></ol></li></ul></li>
9631 <li>bullet level 2
9632 <ol><li>Number on level 3</li>
9633 <li>Number on level 3</li></ol></li></ul>
9634 <ol><li>number level 2</li></ol></li>
9635 <li>Level 1
9636 <ul><li><ul><li> Level 3</li></ul></li></ul></li></ul>
9637 <ol><li><ul><li><ul><li> Level 3, but ordered</li></ul></li></ul></li></ol>
9638
9639 !! end
9640
9641 !! test
9642 1. Nested mixed wikitext and html list
9643 !! wikitext
9644 * hi
9645 * <ul><li>ho</li></ul>
9646 * hi
9647 ** ho
9648 !! html/php
9649 <ul><li> hi</li>
9650 <li> <ul><li>ho</li></ul></li>
9651 <li> hi
9652 <ul><li> ho</li></ul></li></ul>
9653
9654 !! html/parsoid
9655 <ul><li> hi</li>
9656 <li> <ul data-parsoid='{"stx":"html"}'><li data-parsoid='{"stx":"html"}'>ho</li></ul></li>
9657 <li> hi
9658 <ul><li> ho</li></ul></li></ul>
9659 !! end
9660
9661 !! test
9662 2. Nested mixed wikitext and html list (incompatible)
9663 !! wikitext
9664 ; hi
9665 : {{echo|<li>ho</li>}}
9666 !! html/php
9667 <dl><dt> hi</dt>
9668 <dd> <li>ho</li></dd></dl>
9669
9670 !! html/parsoid
9671 <dl><dt> hi</dt>
9672 <dd> <li about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;li>ho&lt;/li>"}},"i":0}}]}'>ho</li></dd></dl>
9673 !! end
9674
9675 !! test
9676 Nested lists 1
9677 !! wikitext
9678 *foo
9679 **bar
9680 !! html
9681 <ul><li>foo
9682 <ul><li>bar</li></ul></li></ul>
9683
9684 !! end
9685
9686 !! test
9687 Nested lists 2
9688 !! wikitext
9689 **foo
9690 *bar
9691 !! html
9692 <ul><li><ul><li>foo</li></ul></li>
9693 <li>bar</li></ul>
9694
9695 !! end
9696
9697 !! test
9698 Nested lists 3 (first element empty)
9699 !! wikitext
9700 *
9701 **bar
9702 !! html
9703 <ul><li>
9704 <ul><li>bar</li></ul></li></ul>
9705
9706 !! end
9707
9708 !! test
9709 Nested lists 4 (first element empty)
9710 !! wikitext
9711 **
9712 *bar
9713 !! html
9714 <ul><li><ul><li></li></ul></li>
9715 <li>bar</li></ul>
9716
9717 !! end
9718
9719 !! test
9720 Nested lists 5 (both elements empty)
9721 !! wikitext
9722 **
9723 *
9724 !! html
9725 <ul><li><ul><li></li></ul></li>
9726 <li></li></ul>
9727
9728 !! end
9729
9730 !! test
9731 Nested lists 6 (both elements empty)
9732 !! wikitext
9733 *
9734 **
9735 !! html
9736 <ul><li>
9737 <ul><li></li></ul></li></ul>
9738
9739 !! end
9740
9741 !! test
9742 Nested lists 7 (skip initial nesting levels)
9743 !! wikitext
9744 *** foo
9745 !! html
9746 <ul><li><ul><li><ul><li> foo</li></ul></li></ul></li></ul>
9747
9748 !! end
9749
9750 !! test
9751 Nested lists 8 (multiple nesting transitions)
9752 !! wikitext
9753 * foo
9754 *** bar
9755 ** baz
9756 * boo
9757 !! html
9758 <ul><li> foo
9759 <ul><li><ul><li> bar</li></ul></li>
9760 <li> baz</li></ul></li>
9761 <li> boo</li></ul>
9762
9763 !! end
9764
9765 !! test
9766 Nested lists 9 (extension interaction)
9767 !! options
9768 parsoid
9769 !! wikitext
9770 *<references />
9771 !! html/parsoid
9772 <ul><li data-parsoid='{}'><ol class="mw-references references" typeof="mw:Extension/references" about="#mwt2" data-parsoid='{}' data-mw='{"name":"references","attrs":{}}'></ol></li></ul>
9773 !! end
9774
9775 !! test
9776 1. Lists with start-of-line-transparent tokens before bullets: Comments
9777 !! wikitext
9778 *foo
9779 *<!--cmt-->bar
9780 <!--cmt-->*baz
9781 !! html
9782 <ul><li>foo</li>
9783 <li>bar</li>
9784 <li>baz</li></ul>
9785
9786 !! end
9787
9788 !! test
9789 2. Lists with start-of-line-transparent tokens before bullets: Template close
9790 !! wikitext
9791 *foo {{echo|bar
9792 }}*baz
9793 !! html
9794 <ul><li>foo bar</li>
9795 <li>baz</li></ul>
9796
9797 !! end
9798
9799 !! test
9800 List items are not parsed correctly following a <pre> block (T2785)
9801 !! wikitext
9802 * <pre>foo</pre>
9803 * <pre>bar</pre>
9804 * zar
9805 !! html/php
9806 <ul><li> <pre>foo</pre></li>
9807 <li> <pre>bar</pre></li>
9808 <li> zar</li></ul>
9809
9810 !! html/parsoid
9811 <ul><li> <pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"foo"}}'>foo</pre></li>
9812 <li> <pre typeof="mw:Extension/pre" about="#mwt4" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"bar"}}'>bar</pre></li>
9813 <li> zar</li></ul>
9814 !! end
9815
9816 !! test
9817 List items from template
9818 !! wikitext
9819
9820 {{inner list}}
9821 * item 2
9822
9823 * item 0
9824 {{inner list}}
9825 * item 2
9826
9827 * item 0
9828 * notSOL{{inner list}}
9829 * item 2
9830 !! html
9831 <ul><li> item 1</li>
9832 <li> item 2</li></ul>
9833 <ul><li> item 0</li>
9834 <li> item 1</li>
9835 <li> item 2</li></ul>
9836 <ul><li> item 0</li>
9837 <li> notSOL</li>
9838 <li> item 1</li>
9839 <li> item 2</li></ul>
9840
9841 !! end
9842
9843 !! test
9844 List interrupted by empty line or heading
9845 !! wikitext
9846 * foo
9847
9848 ** bar
9849 == A heading ==
9850 * Another list item
9851 !! html
9852 <ul><li> foo</li></ul>
9853 <ul><li><ul><li> bar</li></ul></li></ul>
9854 <h2><span class="mw-headline" id="A_heading">A heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: A heading">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
9855 <ul><li> Another list item</li></ul>
9856
9857 !!end
9858
9859 !!test
9860 Multiple list tags generated by templates
9861 !! wikitext
9862 {{echo|<li>}}a
9863 {{echo|<li>}}b
9864 {{echo|<li>}}c
9865 !! html
9866 <li>a
9867 <li>b
9868 <li>c</li>
9869 </li>
9870 </li>
9871
9872 !! html+tidy
9873 <ul>
9874 <li>a</li>
9875 <li>b</li>
9876 <li>c</li>
9877 </ul>
9878 !!end
9879
9880 !!test
9881 Single-comment whitespace lines dont break lists, and neither do multi-comment whitespace lines
9882 !! wikitext
9883 *a
9884 <!--This line will NOT split the list-->
9885 *b
9886 <!--This line will NOT split the list either-->
9887 *c
9888 <!--foo--> <!----> <!--This line NOT split the list either-->
9889 *d
9890 !! html
9891 <ul><li>a</li>
9892 <li>b</li>
9893 <li>c</li>
9894 <li>d</li></ul>
9895
9896 !!end
9897
9898 !!test
9899 Replacing whitespace with tabs still doesn't break the list (gerrit 78327)
9900 !! wikitext
9901 *a
9902 <!--This line will NOT split the list-->
9903 *b
9904 <!--This line will NOT split the list either-->
9905 *c
9906 <!--foo--> <!----> <!--This line NOT split the list
9907 either-->
9908 *d
9909 !! html
9910 <ul><li>a</li>
9911 <li>b</li>
9912 <li>c</li>
9913 <li>d</li></ul>
9914
9915 !!end
9916
9917 !!test
9918 Test the li-hack
9919 (The PHP parser relies on Tidy for the hack)
9920 !!options
9921 parsoid=wt2html,wt2wt
9922 !! wikitext
9923 * foo
9924 * <li>li-hack
9925 * {{echo|<li>templated li-hack}}
9926 * <!--foo--> <li> unsupported li-hack with preceding comments
9927
9928 <ul>
9929 <li><li>not a li-hack
9930 </li>
9931 </ul>
9932 !! html+tidy
9933 <ul>
9934 <li>foo</li>
9935 <li>li-hack</li>
9936 <li>templated li-hack</li>
9937 <li>unsupported li-hack with preceding comments</li>
9938 </ul>
9939 <ul>
9940 <li>not a li-hack</li>
9941 </ul>
9942 !! html/parsoid
9943 <ul><li> foo</li>
9944 <li data-parsoid='{"stx":"html","autoInsertedEnd":true,"liHackSrc":"* "}'>li-hack</li>
9945 <li about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","autoInsertedEnd":true,,"pi":[[{"k":"1"}]]}' data-mw='{"parts":["* ",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;li>templated li-hack"}},"i":0}}]}'>templated li-hack</li>
9946 <li data-parsoid='{"autoInsertedEnd":true}'> <!--foo--> </li><li data-parsoid='{"stx":"html","autoInsertedEnd":true}'> unsupported li-hack with preceding comments</li></ul>
9947
9948 <ul data-parsoid='{"stx":"html"}'>
9949 <li class="mw-empty-elt" data-parsoid='{"stx":"html","autoInsertedEnd":true}'></li><li data-parsoid='{"stx":"html"}'>not a li-hack
9950 </li>
9951 </ul>
9952
9953 !!end
9954
9955 !! test
9956 Parsoid: Make sure nested lists are serialized on their own line even if HTML contains no newlines
9957 !! options
9958 parsoid
9959 !! wikitext
9960 # foo
9961 ## bar
9962 * foo
9963 ** bar
9964 : foo
9965 :: bar
9966 !! html
9967 <ol>
9968 <li> foo<ol>
9969 <li> bar</li>
9970 </ol></li>
9971 </ol><ul>
9972 <li> foo<ul>
9973 <li> bar</li>
9974 </ul></li>
9975 </ul><dl>
9976 <dd> foo<dl>
9977 <dd> bar</dd>
9978 </dl></dd>
9979 </dl>
9980 !! end
9981
9982 !! test
9983 Parsoid: Test of whitespace serialization with Templated bullets
9984 !! options
9985 parsoid
9986 !! wikitext
9987 * {{bullet}}
9988 !! html/parsoid
9989 <ul>
9990 <li class="mw-empty-elt"> </li><li about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"bullet","href":"./Template:Bullet"},"params":{},"i":0}}]}'> Bar</li>
9991 </ul>
9992 !! end
9993
9994 # ------------------------------------------------------------------------
9995 # The next set of tests are about Parsoid's ability to handle badly nested
9996 # tags (parse, minimize scope of fixup, and roundtrip back)
9997 # ------------------------------------------------------------------------
9998
9999 !! test
10000 Unbalanced closing block tags break a list
10001 (php parser relies on Tidy to fix up)
10002 !! wikitext
10003 <div>
10004 *a</div><div>
10005 *b</div>
10006 !! html+tidy
10007 <div>
10008 <ul>
10009 <li>a</li>
10010 </ul>
10011 </div>
10012 <div>
10013 <ul>
10014 <li>b</li>
10015 </ul>
10016 </div>
10017 !! end
10018
10019 # Parsoid fails this test, but it might be tricky to support properly.
10020 # See T70395.
10021 !! test
10022 Unbalanced closing non-block tags don't break a list
10023 (php parser relies on Tidy to fix up)
10024 !! wikitext
10025 <span>
10026 *a</span><span>
10027 *b</span>
10028 !! html/php+tidy
10029 <ul>
10030 <li><span>a</span></li>
10031 <li><span>b</span></li>
10032 </ul>
10033 !! html/parsoid
10034 <span>
10035 <ul>
10036 <li>a<span></span>
10037 </li>
10038 <li>b
10039 </li>
10040 </ul>
10041 </span>
10042 !! end
10043
10044 !! test
10045 Unclosed formatting tags that straddle lists are closed and reopened
10046 (php parser relies on Tidy to fix up)
10047 !! options
10048 parsoid=wt2html,wt2wt,html2html
10049 !! wikitext
10050 # <s> a
10051 # b </s>
10052 !! html/php+tidy
10053 <ol>
10054 <li><s>a</s></li>
10055 <li><s>b</s></li>
10056 </ol>
10057 !! html/parsoid
10058 <ol><li> <s> a</s></li>
10059 <li><s> b </s></li></ol>
10060 !! end
10061
10062 # See T70395.
10063 !!test
10064 1. List embedded in a formatting tag
10065 !! wikitext
10066 <small>
10067 * foo
10068 </small>
10069 !! html/php+tidy
10070 <ul>
10071 <li><small>foo</small></li>
10072 </ul>
10073 !! html/parsoid
10074 <small>
10075 <ul>
10076 <li> foo</li>
10077 </ul>
10078 </small>
10079 !!end
10080
10081 ## Ugly Parsoid output here
10082 ## Not sure what the right output is.
10083 !!test
10084 2. List embedded in a formatting tag
10085 !! wikitext
10086 <small>
10087 *a
10088 *b</small>
10089 !! html/php+tidy
10090 <ul>
10091 <li><small>a</small></li>
10092 <li><small>b</small></li>
10093 </ul>
10094 !! html/parsoid
10095 <small></small>
10096 <ul><small>
10097 <li>a</li>
10098 </small>
10099 <li><small>b</small></li>
10100 </ul>
10101 !!end
10102
10103 # Ugly Parsoid and PHP parser output here
10104 # Not sure if we want to make this a test!
10105 #
10106 ## !!test
10107 ## 3. Unclosed formatting tags in list elements
10108 ## !! wikitext
10109 ## *<small>a
10110 ## *<small>b
10111 ## !! html/php+tidy
10112 ## <ul>
10113 ## <li><small>a</small></li>
10114 ## <li><small><small>b</small></small></li>
10115 ## </ul>
10116 ## !! html/parsoid
10117 ## <ul>
10118 ## <li><small>a</small></li>
10119 ## <small>
10120 ## <li><small>b</small></li>
10121 ## </small></ul>
10122 ## !!end
10123
10124 # This is a bug in the PHP parser + tidy combination.
10125 # (The </tr> tag gets parsed as text and html-escaped by PHP,
10126 # and then fostered out of the table by tidy.)
10127 # We believe the Parsoid output to be correct.
10128 !! test
10129 Table with missing opening <tr> tag
10130 !! options
10131 parsoid=wt2html,wt2wt
10132 !! wikitext
10133 <table>
10134 <td>foo</td>
10135 </tr>
10136 </table>
10137 !! html+tidy
10138 <table>
10139 <tr>
10140 <td>foo</td>
10141 </tr>
10142 </table>
10143 !! end
10144
10145 ###
10146 ### Magic Words
10147 ###
10148
10149 # Note that the current date is hard-coded as
10150 # 1970-01-01T00:02:03Z (a Thursday)
10151 # when running parser tests. The timezone is also fixed to GMT, so
10152 # local date will be identical to current date.
10153
10154 !! test
10155 Magic Word: {{CURRENTDAY}}
10156 !! wikitext
10157 {{CURRENTDAY}}
10158 !! html
10159 <p>1
10160 </p>
10161 !! end
10162
10163 !! test
10164 Magic Word: {{CURRENTDAY2}}
10165 !! wikitext
10166 {{CURRENTDAY2}}
10167 !! html
10168 <p>01
10169 </p>
10170 !! end
10171
10172 !! test
10173 Magic Word: {{CURRENTDAYNAME}}
10174 !! wikitext
10175 {{CURRENTDAYNAME}}
10176 !! html
10177 <p>Thursday
10178 </p>
10179 !! end
10180
10181 !! test
10182 Magic Word: {{CURRENTDOW}}
10183 !! wikitext
10184 {{CURRENTDOW}}
10185 !! html
10186 <p>4
10187 </p>
10188 !! end
10189
10190 !! test
10191 Magic Word: {{CURRENTMONTH}}
10192 !! wikitext
10193 {{CURRENTMONTH}}
10194 !! html
10195 <p>01
10196 </p>
10197 !! end
10198
10199 !! test
10200 Magic Word: {{CURRENTMONTH1}}
10201 !! wikitext
10202 {{CURRENTMONTH1}}
10203 !! html
10204 <p>1
10205 </p>
10206 !! end
10207
10208 !! test
10209 Magic Word: {{CURRENTMONTHABBREV}}
10210 !! wikitext
10211 {{CURRENTMONTHABBREV}}
10212 !! html
10213 <p>Jan
10214 </p>
10215 !! end
10216
10217 !! test
10218 Magic Word: {{CURRENTMONTHNAME}}
10219 !! wikitext
10220 {{CURRENTMONTHNAME}}
10221 !! html
10222 <p>January
10223 </p>
10224 !! end
10225
10226 !! test
10227 Magic Word: {{CURRENTMONTHNAMEGEN}}
10228 !! wikitext
10229 {{CURRENTMONTHNAMEGEN}}
10230 !! html
10231 <p>January
10232 </p>
10233 !! end
10234
10235 !! test
10236 Magic Word: {{CURRENTTIME}}
10237 !! wikitext
10238 {{CURRENTTIME}}
10239 !! html
10240 <p>00:02
10241 </p>
10242 !! end
10243
10244 !! test
10245 Magic Word: {{CURRENTHOUR}}
10246 !! wikitext
10247 {{CURRENTHOUR}}
10248 !! html
10249 <p>00
10250 </p>
10251 !! end
10252
10253 !! test
10254 Magic Word: {{CURRENTWEEK}} (T6594)
10255 !! wikitext
10256 {{CURRENTWEEK}}
10257 !! html
10258 <p>1
10259 </p>
10260 !! end
10261
10262 !! test
10263 Magic Word: {{CURRENTYEAR}}
10264 !! wikitext
10265 {{CURRENTYEAR}}
10266 !! html
10267 <p>1970
10268 </p>
10269 !! end
10270
10271 !! test
10272 Magic Word: {{CURRENTTIMESTAMP}}
10273 !! wikitext
10274 {{CURRENTTIMESTAMP}}
10275 !! html
10276 <p>19700101000203
10277 </p>
10278 !! end
10279
10280 !! test
10281 Magic Words LOCAL (UTC)
10282 !! wikitext
10283 * {{LOCALMONTH}}
10284 * {{LOCALMONTH1}}
10285 * {{LOCALMONTHNAME}}
10286 * {{LOCALMONTHNAMEGEN}}
10287 * {{LOCALMONTHABBREV}}
10288 * {{LOCALDAY}}
10289 * {{LOCALDAY2}}
10290 * {{LOCALDAYNAME}}
10291 * {{LOCALYEAR}}
10292 * {{LOCALTIME}}
10293 * {{LOCALHOUR}}
10294 * {{LOCALWEEK}}
10295 * {{LOCALDOW}}
10296 * {{LOCALTIMESTAMP}}
10297 !! html
10298 <ul><li> 01</li>
10299 <li> 1</li>
10300 <li> January</li>
10301 <li> January</li>
10302 <li> Jan</li>
10303 <li> 1</li>
10304 <li> 01</li>
10305 <li> Thursday</li>
10306 <li> 1970</li>
10307 <li> 00:02</li>
10308 <li> 00</li>
10309 <li> 1</li>
10310 <li> 4</li>
10311 <li> 19700101000203</li></ul>
10312
10313 !! end
10314
10315 !! test
10316 Magic Word: {{FULLPAGENAME}}
10317 !! options
10318 title=[[User:Ævar Arnfjörð Bjarmason]]
10319 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10320 !! wikitext
10321 {{FULLPAGENAME}}
10322 !! html/*
10323 <p>User:Ævar Arnfjörð Bjarmason
10324 </p>
10325 !! end
10326
10327 !! test
10328 Magic Word: {{FULLPAGENAMEE}}
10329 !! options
10330 title=[[User:Ævar Arnfjörð Bjarmason]]
10331 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10332 !! wikitext
10333 {{FULLPAGENAMEE}}
10334 !! html/*
10335 <p>User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
10336 </p>
10337 !! end
10338
10339 !! test
10340 Magic Word: {{TALKSPACE}}
10341 !! options
10342 title=[[User:Ævar Arnfjörð Bjarmason]]
10343 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10344 !! wikitext
10345 {{TALKSPACE}}
10346 !! html/*
10347 <p>User talk
10348 </p>
10349 !! end
10350
10351 !! test
10352 Magic Word: {{TALKSPACE}}, same namespace
10353 !! options
10354 title=[[User talk:Ævar Arnfjörð Bjarmason]]
10355 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10356 !! wikitext
10357 {{TALKSPACE}}
10358 !! html/*
10359 <p>User talk
10360 </p>
10361 !! end
10362
10363 !! test
10364 Magic Word: {{TALKSPACE}}, main namespace
10365 !! options
10366 title=[[Parser Test]]
10367 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10368 !! wikitext
10369 {{TALKSPACE}}
10370 !! html/*
10371 <p>Talk
10372 </p>
10373 !! end
10374
10375 !! test
10376 Magic Word: {{TALKSPACEE}}
10377 !! options
10378 title=[[User:Ævar Arnfjörð Bjarmason]]
10379 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10380 !! wikitext
10381 {{TALKSPACEE}}
10382 !! html/*
10383 <p>User_talk
10384 </p>
10385 !! end
10386
10387 !! test
10388 Magic Word: {{SUBJECTSPACE}}
10389 !! options
10390 title=[[User talk:Ævar Arnfjörð Bjarmason]]
10391 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10392 !! wikitext
10393 {{SUBJECTSPACE}}
10394 !! html/*
10395 <p>User
10396 </p>
10397 !! end
10398
10399 !! test
10400 Magic Word: {{SUBJECTSPACE}}, same namespace
10401 !! options
10402 title=[[User:Ævar Arnfjörð Bjarmason]]
10403 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10404 !! wikitext
10405 {{SUBJECTSPACE}}
10406 !! html/*
10407 <p>User
10408 </p>
10409 !! end
10410
10411 !! test
10412 Magic Word: {{SUBJECTSPACE}}, main namespace
10413 !! options
10414 title=[[Parser Test]]
10415 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10416 !! wikitext
10417 {{SUBJECTSPACE}}
10418 !! html/*
10419
10420 !! end
10421
10422 !! test
10423 Magic Word: {{SUBJECTSPACEE}}
10424 !! options
10425 title=[[User talk:Ævar Arnfjörð Bjarmason]]
10426 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10427 !! wikitext
10428 {{SUBJECTSPACEE}}
10429 !! html/*
10430 <p>User
10431 </p>
10432 !! end
10433
10434 !! test
10435 Magic Word: {{NAMESPACE}}
10436 !! options
10437 title=[[User:Ævar Arnfjörð Bjarmason]]
10438 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10439 !! wikitext
10440 {{NAMESPACE}}
10441 !! html/*
10442 <p>User
10443 </p>
10444 !! end
10445
10446 !! test
10447 Magic Word: {{NAMESPACEE}}
10448 !! options
10449 title=[[User:Ævar Arnfjörð Bjarmason]]
10450 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10451 !! wikitext
10452 {{NAMESPACEE}}
10453 !! html/*
10454 <p>User
10455 </p>
10456 !! end
10457
10458 !! test
10459 Magic Word: {{NAMESPACENUMBER}}
10460 !! options
10461 title=[[User:Ævar Arnfjörð Bjarmason]]
10462 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10463 !! wikitext
10464 {{NAMESPACENUMBER}}
10465 !! html/*
10466 <p>2
10467 </p>
10468 !! end
10469
10470 !! test
10471 Magic Word: {{SUBPAGENAME}}
10472 !! options
10473 title=[[Ævar Arnfjörð Bjarmason/sub ö]] subpage
10474 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10475 !! wikitext
10476 {{SUBPAGENAME}}
10477 !! html/*
10478 <p>sub ö
10479 </p>
10480 !! end
10481
10482 !! test
10483 Magic Word: {{SUBPAGENAMEE}}
10484 !! options
10485 title=[[Ævar Arnfjörð Bjarmason/sub ö]] subpage
10486 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10487 !! wikitext
10488 {{SUBPAGENAMEE}}
10489 !! html/*
10490 <p>sub_%C3%B6
10491 </p>
10492 !! end
10493
10494 !! test
10495 Magic Word: {{ROOTPAGENAME}}
10496 !! options
10497 title=[[Ævar Arnfjörð Bjarmason/sub/sub2]] subpage
10498 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10499 !! wikitext
10500 {{ROOTPAGENAME}}
10501 !! html/*
10502 <p>Ævar Arnfjörð Bjarmason
10503 </p>
10504 !! end
10505
10506 !! test
10507 Magic Word: {{ROOTPAGENAMEE}}
10508 !! options
10509 title=[[Ævar Arnfjörð Bjarmason/sub/sub2]] subpage
10510 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10511 !! wikitext
10512 {{ROOTPAGENAMEE}}
10513 !! html/*
10514 <p>%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
10515 </p>
10516 !! end
10517
10518 !! test
10519 Magic Word: {{BASEPAGENAME}}
10520 !! options
10521 title=[[Ævar Arnfjörð Bjarmason/sub]] subpage
10522 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10523 !! wikitext
10524 {{BASEPAGENAME}}
10525 !! html/*
10526 <p>Ævar Arnfjörð Bjarmason
10527 </p>
10528 !! end
10529
10530 !! test
10531 Magic Word: {{BASEPAGENAMEE}}
10532 !! options
10533 title=[[Ævar Arnfjörð Bjarmason/sub]] subpage
10534 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10535 !! wikitext
10536 {{BASEPAGENAMEE}}
10537 !! html/*
10538 <p>%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
10539 </p>
10540 !! end
10541
10542 !! test
10543 Magic Word: {{TALKPAGENAME}}
10544 !! options
10545 title=[[User:Ævar Arnfjörð Bjarmason]]
10546 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10547 !! wikitext
10548 {{TALKPAGENAME}}
10549 !! html/*
10550 <p>User talk:Ævar Arnfjörð Bjarmason
10551 </p>
10552 !! end
10553
10554 !! test
10555 Magic Word: {{TALKPAGENAMEE}}
10556 !! options
10557 title=[[User:Ævar Arnfjörð Bjarmason]]
10558 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10559 !! wikitext
10560 {{TALKPAGENAMEE}}
10561 !! html/*
10562 <p>User_talk:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
10563 </p>
10564 !! end
10565
10566 !! test
10567 Magic Word: {{SUBJECTPAGENAME}}
10568 !! options
10569 title=[[User talk:Ævar Arnfjörð Bjarmason]]
10570 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10571 !! wikitext
10572 {{SUBJECTPAGENAME}}
10573 !! html/*
10574 <p>User:Ævar Arnfjörð Bjarmason
10575 </p>
10576 !! end
10577
10578 !! test
10579 Magic Word: {{SUBJECTPAGENAMEE}}
10580 !! options
10581 title=[[User talk:Ævar Arnfjörð Bjarmason]]
10582 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10583 !! wikitext
10584 {{SUBJECTPAGENAMEE}}
10585 !! html/*
10586 <p>User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
10587 </p>
10588 !! end
10589
10590 !! test
10591 Magic Word: {{NUMBEROFFILES}}
10592 !! options
10593 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10594 !! wikitext
10595 {{NUMBEROFFILES}}
10596 !! html/*
10597 <p>7
10598 </p>
10599 !! end
10600
10601 !! test
10602 Magic Word: {{PAGENAME}}
10603 !! options
10604 title=[[User:Ævar Arnfjörð Bjarmason]]
10605 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10606 !! wikitext
10607 {{PAGENAME}}
10608 !! html/*
10609 <p>Ævar Arnfjörð Bjarmason
10610 </p>
10611 !! end
10612
10613 !! test
10614 Magic Word: {{PAGENAME}} with metacharacters
10615 !! options
10616 title=[['foo & bar = baz']]
10617 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10618 !! wikitext
10619 ''{{PAGENAME}}''
10620 !! html/php
10621 <p><i>&#39;foo &#38; bar &#61; baz&#39;</i>
10622 </p>
10623 !! html+tidy
10624 <p><i>'foo &amp; bar = baz'</i></p>
10625 !! end
10626
10627 !! test
10628 Magic Word: {{PAGENAME}} with metacharacters (T28781)
10629 !! options
10630 title=[[*RFC 1234 http://example.com/]]
10631 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10632 !! wikitext
10633 {{PAGENAME}}
10634 !! html/php
10635 <p>&#42;RFC&#32;1234 http&#58;//example.com/
10636 </p>
10637 !! html+tidy
10638 <p>*RFC 1234 http://example.com/</p>
10639 !! end
10640
10641 !! test
10642 Magic Word: {{PAGENAMEE}}
10643 !! options
10644 title=[[User:Ævar Arnfjörð Bjarmason]]
10645 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10646 !! wikitext
10647 {{PAGENAMEE}}
10648 !! html/*
10649 <p>%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
10650 </p>
10651 !! end
10652
10653 !! test
10654 Magic Word: {{PAGENAMEE}} with metacharacters (T28781)
10655 !! options
10656 title=[[*RFC 1234 http://example.com/]]
10657 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10658 !! wikitext
10659 {{PAGENAMEE}}
10660 !! html/php
10661 <p>&#42;RFC_1234_http&#58;//example.com/
10662 </p>
10663 !! html+tidy
10664 <p>*RFC_1234_http://example.com/</p>
10665 !! end
10666
10667 !! test
10668 Magic Word: {{REVISIONID}}
10669 !! options
10670 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10671 showflags
10672 !! wikitext
10673 {{REVISIONID}}
10674 !! html/*
10675 <p>1337
10676 </p>
10677 flags=vary-revision-id
10678 !! end
10679
10680 !! test
10681 Magic Word: {{SCRIPTPATH}}
10682 !! options
10683 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10684 !! wikitext
10685 {{SCRIPTPATH}}
10686 !! html/*
10687
10688 !! end
10689
10690 !! test
10691 Magic Word: {{STYLEPATH}}
10692 !! options
10693 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10694 !! wikitext
10695 {{STYLEPATH}}
10696 !! html/*
10697 <p>/skins
10698 </p>
10699 !! end
10700
10701 !! test
10702 Magic Word: {{SERVER}}
10703 !! options
10704 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10705 !! wikitext
10706 {{SERVER}}
10707 !! html/*
10708 <p><a rel="nofollow" class="external free" href="http://example.org">http://example.org</a>
10709 </p>
10710 !! end
10711
10712 !! test
10713 Magic Word: {{SERVERNAME}}
10714 !! options
10715 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10716 !! wikitext
10717 {{SERVERNAME}}
10718 !! html/*
10719 <p>example.org
10720 </p>
10721 !! end
10722
10723 !! test
10724 Magic Word: {{SITENAME}}
10725 !! options
10726 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10727 !! wikitext
10728 {{SITENAME}}
10729 !! html/*
10730 <p>MediaWiki
10731 </p>
10732 !! end
10733
10734 !! test
10735 Magic Word: {{PAGELANGUAGE}}
10736 !! options
10737 language=fr
10738 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10739 !! wikitext
10740 {{PAGELANGUAGE}}
10741 !! html/*
10742 <p>fr
10743 </p>
10744 !! end
10745
10746 !! test
10747 Magic Word: {{PAGELANGUAGE}} on a page with no explicitly set language
10748 !! options
10749 parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
10750 !! wikitext
10751 {{PAGELANGUAGE}}
10752 !! html/*
10753 <p>en
10754 </p>
10755 !! end
10756
10757 !! test
10758 Case-sensitive magic words, when cased differently, should just be template transclusions
10759 !! wikitext
10760 {{CurrentMonth}}
10761 {{currentday}}
10762 {{cURreNTweEK}}
10763 {{currentHour}}
10764 !! html
10765 <p><a href="/index.php?title=Template:CurrentMonth&amp;action=edit&amp;redlink=1" class="new" title="Template:CurrentMonth (page does not exist)">Template:CurrentMonth</a>
10766 <a href="/index.php?title=Template:Currentday&amp;action=edit&amp;redlink=1" class="new" title="Template:Currentday (page does not exist)">Template:Currentday</a>
10767 <a href="/index.php?title=Template:CURreNTweEK&amp;action=edit&amp;redlink=1" class="new" title="Template:CURreNTweEK (page does not exist)">Template:CURreNTweEK</a>
10768 <a href="/index.php?title=Template:CurrentHour&amp;action=edit&amp;redlink=1" class="new" title="Template:CurrentHour (page does not exist)">Template:CurrentHour</a>
10769 </p>
10770 !! end
10771
10772 !! test
10773 Case-insensitive magic words should still work with weird casing.
10774 !! wikitext
10775 {{sErVeRNaMe}}
10776 {{LCFirst:AOEU}}
10777 {{ucFIRST:aoeu}}
10778 {{SERver}}
10779 !! html
10780 <p>example.org
10781 aOEU
10782 Aoeu
10783 <a rel="nofollow" class="external free" href="http://example.org">http://example.org</a>
10784 </p>
10785 !! end
10786
10787 # From plwiki:PLOS_ONE
10788 !! test
10789 Parsoid: Page property magic word with magic word contents
10790 !! wikitext
10791 {{DISPLAYTITLE:''{{PAGENAME}}''}}
10792 !! html/parsoid
10793 <meta property="mw:PageProp/displaytitle" content="Main Page" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"src":"{{DISPLAYTITLE:&#39;&#39;{{PAGENAME}}&#39;&#39;}}"}' data-mw='{"attribs":[[{"txt":"content"},{"html":"DISPLAYTITLE:&lt;i data-parsoid=&#39;{\"dsr\":[15,31,2,2]}&#39;>&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[]],\"dsr\":[17,29,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"PAGENAME\",\"function\":\"pagename\"},\"params\":{},\"i\":0}}]}&#39;>Main Page&lt;/span>&lt;/i>"}]]}'/>
10794 !! end
10795
10796 # NOTE: mw:ExpandedAttrs is not the best typeof here. mw:Transclusion is better.
10797 # But, this is a limitation of our representation and is documented in
10798 # TemplateHandler.js in processSpecialMagicWord
10799 !! test
10800 Parsoid: Template-generated DISPLAYTITLE
10801 !! wikitext
10802 {{{{echo|DISPLAYTITLE}}:Foo}}
10803 !! options
10804 showtitle
10805 !! config
10806 wgAllowDisplayTitle=true
10807 wgRestrictDisplayTitle=false
10808 !! html/php
10809 Foo
10810
10811 !! html/parsoid
10812 <meta property="mw:PageProp/displaytitle" content="Foo" about="#mwt1" typeof="mw:ExpandedAttrs" data-parsoid='{"pi":[[]]}' data-mw='{"attribs":[[{"txt":"content"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[2,23,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"DISPLAYTITLE\"}},\"i\":0}}]}&#39;>DISPLAYTITLE&lt;/span>:Foo"}]]}'/>
10813 !! end
10814
10815 !! test
10816 Namespace 1 {{ns:1}}
10817 !! wikitext
10818 {{ns:1}}
10819 !! html
10820 <p>Talk
10821 </p>
10822 !! end
10823
10824 !! test
10825 Namespace 1 {{ns:01}}
10826 !! wikitext
10827 {{ns:01}}
10828 !! html
10829 <p>Talk
10830 </p>
10831 !! end
10832
10833 !! test
10834 Namespace 0 {{ns:0}} (T6783)
10835 !! wikitext
10836 {{ns:0}}
10837 !! html
10838
10839 !! end
10840
10841 !! test
10842 Namespace 0 {{ns:00}} (T6783)
10843 !! wikitext
10844 {{ns:00}}
10845 !! html
10846
10847 !! end
10848
10849 !! test
10850 Namespace -1 {{ns:-1}}
10851 !! wikitext
10852 {{ns:-1}}
10853 !! html
10854 <p>Special
10855 </p>
10856 !! end
10857
10858 !! test
10859 Namespace User {{ns:User}}
10860 !! wikitext
10861 {{ns:User}}
10862 !! html
10863 <p>User
10864 </p>
10865 !! end
10866
10867 !! test
10868 Namespace User talk {{ns:User_talk}}
10869 !! wikitext
10870 {{ns:User_talk}}
10871 !! html
10872 <p>User talk
10873 </p>
10874 !! end
10875
10876 !! test
10877 Namespace User talk {{ns:uSeR tAlK}}
10878 !! wikitext
10879 {{ns:uSeR tAlK}}
10880 !! html
10881 <p>User talk
10882 </p>
10883 !! end
10884
10885 !! test
10886 Namespace File {{ns:File}}
10887 !! wikitext
10888 {{ns:File}}
10889 !! html
10890 <p>File
10891 </p>
10892 !! end
10893
10894 !! test
10895 Namespace File {{ns:Image}}
10896 !! wikitext
10897 {{ns:Image}}
10898 !! html
10899 <p>File
10900 </p>
10901 !! end
10902
10903 !! test
10904 Namespace (lang=de) Benutzer {{ns:User}}
10905 !! options
10906 language=de
10907 !! wikitext
10908 {{ns:User}}
10909 !! html
10910 <p>Benutzer
10911 </p>
10912 !! end
10913
10914 !! test
10915 Namespace (lang=de) Benutzer Diskussion {{ns:3}}
10916 !! options
10917 language=de
10918 !! wikitext
10919 {{ns:3}}
10920 !! html
10921 <p>Benutzer Diskussion
10922 </p>
10923 !! end
10924
10925 !! test
10926 Urlencode
10927 !! wikitext
10928 {{urlencode:hi world?!}}
10929 {{urlencode:hi world?!|WIKI}}
10930 {{urlencode:hi world?!|PATH}}
10931 {{urlencode:hi world?!|QUERY}}
10932 !! html/php
10933 <p>hi+world%3F%21
10934 hi_world%3F!
10935 hi%20world%3F%21
10936 hi+world%3F%21
10937 </p>
10938 !! end
10939
10940 !! test
10941 Magic Word: prioritize type info over data-parsoid
10942 !! options
10943 parsoid=html2wt
10944 !! html/parsoid
10945 <meta property="mw:PageProp/forcetoc" data-parsoid='{"magicSrc":"__NOTOC__"}'/>
10946 !! wikitext
10947 __FORCETOC__
10948 !! end
10949
10950 !! test
10951 Magic Word: serialize on separate line (parsoid)
10952 !! options
10953 parsoid=wt2wt,html2wt
10954 !! wikitext
10955 foo
10956 __NOTOC__
10957 bar
10958 !! html/parsoid
10959 foo<meta property="mw:PageProp/notoc"/>bar
10960 !! end
10961
10962 !! test
10963 Magic Word: rt non-english wikis
10964 !! options
10965 parsoid=wt2wt
10966 language=de
10967 !! wikitext
10968 __NOEDITSECTION__
10969 !! html/parsoid
10970 <meta property="mw:PageProp/noeditsection" data-parsoid='{"magicSrc":"__NOEDITSECTION__"}'/>
10971 !! end
10972
10973 !!test
10974 __proto__ is treated as normal wikitext (T105997)
10975 !!wikitext
10976 __proto__
10977 !!html
10978 <p>__proto__
10979 </p>
10980 !!end
10981
10982 ###
10983 ### Magic links
10984 ###
10985 !! test
10986 Magic links: internal link to RFC (T2479)
10987 !! wikitext
10988 [[RFC 123]]
10989 !! html/php
10990 <p><a href="/index.php?title=RFC_123&amp;action=edit&amp;redlink=1" class="new" title="RFC 123 (page does not exist)">RFC 123</a>
10991 </p>
10992 !! html/parsoid
10993 <p><a rel="mw:WikiLink" href="./RFC_123" title="RFC 123">RFC 123</a></p>
10994 !! end
10995
10996 !! test
10997 Magic links: RFC (T2479)
10998 !! wikitext
10999 RFC 822
11000 !! html/php
11001 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc822">RFC 822</a>
11002 </p>
11003 !! html/parsoid
11004 <p><a href="https://tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC 822</a></p>
11005 !! end
11006
11007 !! test
11008 Magic links: RFC (T67278)
11009 !! wikitext
11010 This is RFC 822 but thisRFC 822 is not RFC 822linked.
11011 !! html/php
11012 <p>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc822">RFC 822</a> but thisRFC 822 is not RFC 822linked.
11013 </p>
11014 !! html/parsoid
11015 <p>This is <a href="https://tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC 822</a> but thisRFC 822 is not RFC 822linked.</p>
11016 !! end
11017
11018 !! test
11019 Magic links: RFC (w/ non-newline whitespace, T30950/T31025)
11020 !! wikitext
11021 RFC &nbsp;&#160;&#0160;&#xA0;&#Xa0; 822
11022 RFC
11023 822
11024 !! html/php
11025 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc822">RFC 822</a>
11026 RFC
11027 822
11028 </p>
11029 !! html/parsoid
11030 <p><a href="https://tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 822</a>
11031 RFC
11032 822</p>
11033 !! end
11034
11035 !! test
11036 Magic links: ISBN (T3937)
11037 !! wikitext
11038 ISBN 0-306-40615-2
11039 !! html/php
11040 <p><a href="/wiki/Special:BookSources/0306406152" class="internal mw-magiclink-isbn">ISBN 0-306-40615-2</a>
11041 </p>
11042 !! html/parsoid
11043 <p><a href="./Special:BookSources/0306406152" rel="mw:WikiLink">ISBN 0-306-40615-2</a></p>
11044 !! end
11045
11046 !! test
11047 Magic links: ISBN (T67278)
11048 !! wikitext
11049 This is ISBN 978-0-316-09811-3 but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.
11050 !! html/php
11051 <p>This is <a href="/wiki/Special:BookSources/9780316098113" class="internal mw-magiclink-isbn">ISBN 978-0-316-09811-3</a> but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.
11052 </p>
11053 !! html/parsoid
11054 <p>This is <a href="./Special:BookSources/9780316098113" rel="mw:WikiLink">ISBN 978-0-316-09811-3</a> but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.</p>
11055 !! end
11056
11057 !! test
11058 Magic links: ISBN (w/ non-newline whitespace, T30950/T31025)
11059 !! wikitext
11060 ISBN &nbsp;&#160;&#0160;&#xA0;&#Xa0; 978&nbsp;0&#160;316&#0160;09811&#xA0;3
11061 ISBN
11062 9780316098113
11063 ISBN 978
11064 0316098113
11065 !! html/php
11066 <p><a href="/wiki/Special:BookSources/9780316098113" class="internal mw-magiclink-isbn">ISBN 978 0 316 09811 3</a>
11067 ISBN
11068 9780316098113
11069 ISBN 978
11070 0316098113
11071 </p>
11072 !! html/parsoid
11073 <p><a href="./Special:BookSources/9780316098113" rel="mw:WikiLink">ISBN <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 978<span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span>0<span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span>316<span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span>09811<span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span>3</a>
11074 ISBN
11075 9780316098113
11076 ISBN 978
11077 0316098113</p>
11078 !! end
11079
11080 !! test
11081 Magic links: PMID incorrectly converts space to underscore
11082 !! wikitext
11083 PMID 1234
11084 !! html/php
11085 <p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
11086 </p>
11087 !! html/parsoid
11088 <p><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID 1234</a></p>
11089 !! end
11090
11091 !! test
11092 Magic links: PMID (T67278)
11093 !! wikitext
11094 This is PMID 1234 but thisPMID 1234 is not PMID 1234linked.
11095 !! html/php
11096 <p>This is <a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a> but thisPMID 1234 is not PMID 1234linked.
11097 </p>
11098 !! html/parsoid
11099 <p>This is <a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID 1234</a> but thisPMID 1234 is not PMID 1234linked.</p>
11100 !! end
11101
11102 !! test
11103 Magic links: PMID (w/ non-newline whitespace, T30950/T31025)
11104 !! wikitext
11105 PMID &nbsp;&#160;&#0160;&#xA0;&#Xa0; 1234
11106 PMID
11107 1234
11108 !! html/php
11109 <p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
11110 PMID
11111 1234
11112 </p>
11113 !! html/parsoid
11114 <p><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 1234</a>
11115 PMID
11116 1234</p>
11117 !! end
11118
11119 # <nowiki> nodes shouldn't be inserted during html2wt by Parsoid,
11120 # since these are ExtLinkText, not MagicLinkText
11121 !! test
11122 Magic links: use appropriate serialization for "almost" magic links.
11123 !! wikitext
11124 X[[Special:BookSources/0978739256|foo]]
11125
11126 X[https://tools.ietf.org/html/rfc1234 foo]
11127 !! html/php
11128 <p>X<a href="/wiki/Special:BookSources/0978739256" title="Special:BookSources/0978739256">foo</a>
11129 </p><p>X<a rel="nofollow" class="external text" href="https://tools.ietf.org/html/rfc1234">foo</a>
11130 </p>
11131 !! html/parsoid
11132 <p>X<a rel="mw:WikiLink" href="./Special:BookSources/0978739256" title="Special:BookSources/0978739256">foo</a></p>
11133 <p>X<a rel="mw:ExtLink" href="https://tools.ietf.org/html/rfc1234">foo</a></p>
11134 !! end
11135
11136 !! test
11137 Magic links: All disabled (T47942)
11138 !! options
11139 wgEnableMagicLinks={"ISBN":false, "PMID":false, "RFC":false}
11140 !! wikitext
11141 ISBN 0-306-40615-2
11142 PMID 1234
11143 RFC 4321
11144 !! html/php
11145 <p>ISBN 0-306-40615-2
11146 PMID 1234
11147 RFC 4321
11148 </p>
11149 !! end
11150
11151 ###
11152 ### Templates
11153 ####
11154
11155 !! test
11156 Nonexistent template
11157 !! wikitext
11158 {{thistemplatedoesnotexist}}
11159 !! html
11160 <p><a href="/index.php?title=Template:Thistemplatedoesnotexist&amp;action=edit&amp;redlink=1" class="new" title="Template:Thistemplatedoesnotexist (page does not exist)">Template:Thistemplatedoesnotexist</a>
11161 </p>
11162 !! end
11163
11164 !! test
11165 Template with invalid target containing tags
11166 !! wikitext
11167 {{a<b>b</b>|{{echo|foo}}|{{echo|a}}={{echo|b}}|a = b}}
11168 !! html
11169 <p>{{a<b>b</b>|foo|a=b|a = b}}
11170 </p>
11171 !! end
11172
11173 !! test
11174 Template with invalid target containing unclosed tag
11175 !! wikitext
11176 {{a<b>|{{echo|foo}}|{{echo|a}}={{echo|b}}|a = b}}
11177 !! html
11178 <p>{{a<b>|foo|a=b|a = b}}</b>
11179 </p>
11180 !! end
11181
11182 !! test
11183 Template with invalid target containing wikilink
11184 !! wikitext
11185 {{[[Main Page]]}}
11186 !! html/php
11187 <p>{{<a href="/wiki/Main_Page" title="Main Page">Main Page</a>}}
11188 </p>
11189 !! html/parsoid
11190 <p><span typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"[[Main Page]]"},"params":{},"i":0}}]}'>{{</span><a rel="mw:WikiLink" href="./Main_Page" about="#mwt1">Main Page</a><span about="#mwt1">}}</span></p>
11191 !! end
11192
11193 !! test
11194 Template with just whitespace in it, T70421
11195 !! wikitext
11196 {{echo|{{ }}}}
11197 !! html/parsoid
11198 <p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{ }}"}},"i":0}}]}'>{{ }}</p>
11199 !! end
11200
11201 !! article
11202 Template:test
11203 !! text
11204 This is a test template
11205 !! endarticle
11206
11207 !! test
11208 Simple template
11209 !! wikitext
11210 {{test}}
11211 !! html
11212 <p>This is a test template
11213 </p>
11214 !! end
11215
11216 !! test
11217 Template with explicit namespace
11218 !! wikitext
11219 {{Template:test}}
11220 !! html
11221 <p>This is a test template
11222 </p>
11223 !! end
11224
11225
11226 !! article
11227 Template:paramtest
11228 !! text
11229 This is a test template with parameter {{{param}}}
11230 !! endarticle
11231
11232 !! test
11233 Template parameter
11234 !! wikitext
11235 {{paramtest|param=foo}}
11236 !! html
11237 <p>This is a test template with parameter foo
11238 </p>
11239 !! end
11240
11241 !! article
11242 Template:paramtestnum
11243 !! text
11244 [[{{{1}}}|{{{2}}}]]
11245 !! endarticle
11246
11247 !! test
11248 Template unnamed parameter
11249 !! wikitext
11250 {{paramtestnum|Main Page|the main page}}
11251 !! html
11252 <p><a href="/wiki/Main_Page" title="Main Page">the main page</a>
11253 </p>
11254 !! end
11255
11256 !! article
11257 Template:templatesimple
11258 !! text
11259 (test)
11260 !! endarticle
11261
11262 !! article
11263 Template:templateredirect
11264 !! text
11265 #redirect [[Template:templatesimple]]
11266 !! endarticle
11267
11268 !! article
11269 Template:templateasargtestnum
11270 !! text
11271 {{{{{1}}}}}
11272 !! endarticle
11273
11274 !! article
11275 Template:templateasargtest
11276 !! text
11277 {{template{{{templ}}}}}
11278 !! endarticle
11279
11280 !! article
11281 Template:templateasargtest2
11282 !! text
11283 {{{{{templ}}}}}
11284 !! endarticle
11285
11286 !! test
11287 Template with template name as unnamed argument
11288 !! wikitext
11289 {{templateasargtestnum|templatesimple}}
11290 !! html
11291 <p>(test)
11292 </p>
11293 !! end
11294
11295 !! test
11296 Template with template name as argument
11297 !! wikitext
11298 {{templateasargtest|templ=simple}}
11299 !! html
11300 <p>(test)
11301 </p>
11302 !! end
11303
11304 !! test
11305 Template with template name as argument (2)
11306 !! wikitext
11307 {{templateasargtest2|templ=templatesimple}}
11308 !! html
11309 <p>(test)
11310 </p>
11311 !! end
11312
11313 !! article
11314 Template:templateasargtestdefault
11315 !! text
11316 {{{{{templ|templatesimple}}}}}
11317 !! endarticle
11318
11319 !! article
11320 Template:templa
11321 !! text
11322 '''templ'''
11323 !! endarticle
11324
11325 !! test
11326 Template with default value
11327 !! wikitext
11328 {{templateasargtestdefault}}
11329 !! html
11330 <p>(test)
11331 </p>
11332 !! end
11333
11334 !! test
11335 Template with default value (value set)
11336 !! wikitext
11337 {{templateasargtestdefault|templ=templa}}
11338 !! html
11339 <p><b>templ</b>
11340 </p>
11341 !! end
11342
11343 !! test
11344 Template redirect
11345 !! wikitext
11346 {{templateredirect}}
11347 !! html/php
11348 <p>(test)
11349 </p>
11350 !! html/parsoid
11351 <link rel="mw:PageProp/redirect" href="./Template:Templatesimple" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"templateredirect","href":"./Template:Templateredirect"},"params":{},"i":0}}]}'/>
11352 !! end
11353
11354 !! test
11355 Template with argument in separate line
11356 !! wikitext
11357 {{ templateasargtest |
11358 templ = simple }}
11359 !! html
11360 <p>(test)
11361 </p>
11362 !! end
11363
11364 !! test
11365 Template with complex template as argument
11366 !! wikitext
11367 {{paramtest|
11368 param ={{ templateasargtest |
11369 templ = simple }}}}
11370 !! html
11371 <p>This is a test template with parameter (test)
11372 </p>
11373 !! end
11374
11375 !! test
11376 Templates with templated name
11377 !! wikitext
11378 {{{{echo|echo}}|foo}}
11379 {{{{echo|inner list}} }}
11380 !! html
11381 <p>foo
11382 </p>
11383 <ul><li> item 1</li></ul>
11384
11385 !! html/parsoid
11386 <p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"{{echo|echo}}","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
11387 <ul about="#mwt4" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"{{echo|inner list}} ","href":"./Template:Inner_list"},"params":{},"i":0}}]}'><li> item 1</li></ul>
11388 !! end
11389
11390 ## Regression test; the output here isn't really that interesting.
11391 !! test
11392 Templates with templated name and top level template args
11393 !! wikitext
11394 {{1{{2{{{3}}}|4=5}}}}
11395 !! html/parsoid
11396 <p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"1{{2{{{3}}}|4=5}}"},"params":{},"i":0}}]}'>{{1{{2{{{3}}}|4=5}}}}</p>
11397 !! end
11398
11399 # Parsoid markup is deliberate "broken". This is an edge case.
11400 # See long comment in TemplateHandler.js:convertAttribsToString.
11401 !! test
11402 Templates with invalid templated targets
11403 !! wikitext
11404 {{echo
11405 {{echo|foo}}
11406 }}
11407 !! html/php
11408 <p>{{echo
11409 foo
11410 }}
11411 </p>
11412 !! html/parsoid
11413 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo\n{{echo|foo}}\n"},"params":{},"i":0}}]}'>{{echo
11414 foo }}</p>
11415 !! end
11416
11417 !! test
11418 Template with thumb image (with link in description)
11419 !! wikitext
11420 {{paramtest|param=[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]}}
11421 !! html/php
11422 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="File:Noimage.png">File:Noimage.png</a> <div class="thumbcaption"><a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (page does not exist)">link</a> <a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (page does not exist)">caption</a></div></div></div>
11423
11424 !! html+tidy
11425 <p>This is a test template with parameter</p>
11426 <div class="thumb tright">
11427 <div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Noimage.png" class="new" title="File:Noimage.png">File:Noimage.png</a>
11428 <div class="thumbcaption"><a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (page does not exist)">link</a> <a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (page does not exist)">caption</a></div>
11429 </div>
11430 </div>
11431 !! html/parsoid
11432 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"paramtest","href":"./Template:Paramtest"},"params":{"param":{"wt":"[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]"}},"i":0}}]}'>This is a test template with parameter </p><figure class="mw-default-size" typeof="mw:Error mw:Image/Thumb" about="#mwt1" data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}'><a href="./File:Noimage.png" ><img resource="./File:Noimage.png" src="./Special:FilePath/Noimage.png" height="220" width="220"/></a><figcaption><a rel="mw:WikiLink" href="./No_link" title="No link">link</a> <a rel="mw:WikiLink" href="./No_link" title="No link">caption</a></figcaption></figure>
11433 !! end
11434
11435 !! article
11436 Template:complextemplate
11437 !! text
11438 {{{1}}} {{paramtest|
11439 param ={{{param}}}}}
11440 !! endarticle
11441
11442 !! test
11443 Template with complex arguments
11444 !! wikitext
11445 {{complextemplate|
11446 param ={{ templateasargtest |
11447 templ = simple }}|[[Template:complextemplate|link]]}}
11448 !! html
11449 <p><a href="/wiki/Template:Complextemplate" title="Template:Complextemplate">link</a> This is a test template with parameter (test)
11450 </p>
11451 !! end
11452
11453 !! test
11454 T2553: link with two variables in a piped link
11455 !! wikitext
11456 {|
11457 |[[{{{1}}}|{{{2}}}]]
11458 |}
11459 !! html/php
11460 <table>
11461 <tr>
11462 <td>[[{{{1}}}|{{{2}}}]]
11463 </td></tr></table>
11464
11465 !! html/parsoid
11466 <table>
11467 <tbody><tr><td>[[<span about="#mwt5" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"1"},"params":{},"i":0}}]}'>{{{1}}}</span>|<span about="#mwt2" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"2"},"params":{},"i":0}}]}'>{{{2}}}</span>]]</td></tr>
11468 </tbody></table>
11469 !! end
11470
11471 # See: T2553
11472 !! test
11473 Abort table cell attribute parsing on wikilink
11474 !! wikitext
11475 {|
11476 | testing [[one|two]] | three || four
11477 | testing one two | three || four
11478 | testing="[[one|two]]" | three || four
11479 |}
11480 !! html/php
11481 <table>
11482 <tr>
11483 <td> testing <a href="/index.php?title=One&amp;action=edit&amp;redlink=1" class="new" title="One (page does not exist)">two</a> | three </td>
11484 <td> four
11485 </td>
11486 <td> three </td>
11487 <td> four
11488 </td>
11489 <td> testing="<a href="/index.php?title=One&amp;action=edit&amp;redlink=1" class="new" title="One (page does not exist)">two</a>" | three </td>
11490 <td> four
11491 </td></tr></table>
11492
11493 !! html/parsoid
11494 <table>
11495 <tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'> testing <a rel="mw:WikiLink" href="./One" title="One" data-parsoid='{"stx":"piped","a":{"href":"./One"},"sa":{"href":"one"}}'>two</a> | three </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'> four</td>
11496 <td data-parsoid='{"a":{"testing":null,"one":null,"two":null},"sa":{"testing":"","one":"","two":""},"autoInsertedEnd":true}'> three </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'> four</td>
11497 <td> testing="<a rel="mw:WikiLink" href="./One" title="One" data-parsoid='{"stx":"piped","a":{"href":"./One"},"sa":{"href":"one"}}'>two</a>" | three </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'> four</td></tr>
11498 </tbody></table>
11499 !! end
11500
11501 !! test
11502 Don't abort table cell attribute parsing if wikilink is found in template arg
11503 !! wikitext
11504 {|
11505 | Test {{#tag:ref|One two "[[three]]" four}}
11506 |}
11507 !! html/parsoid
11508 <table>
11509 <tbody><tr><td> Test <ref about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#tag:ref","function":"tag"},"params":{"1":{"wt":"One two \"[[three]]\" four"}},"i":0}}]}'>One two "<a rel="mw:WikiLink" href="./Three" title="Three">three</a>" four</ref></td></tr>
11510 </tbody></table>
11511 !! end
11512
11513 !! test
11514 Magic variable as template parameter
11515 !! wikitext
11516 {{paramtest|param={{SITENAME}}}}
11517 !! html
11518 <p>This is a test template with parameter MediaWiki
11519 </p>
11520 !! end
11521
11522 !! article
11523 Template:linktest
11524 !! text
11525 [[{{{param}}}|link]]
11526 !! endarticle
11527
11528 !! test
11529 Template parameter as link source
11530 !! wikitext
11531 {{linktest|param=Main Page}}
11532 !! html
11533 <p><a href="/wiki/Main_Page" title="Main Page">link</a>
11534 </p>
11535 !! end
11536
11537 !!article
11538 Template:paramtest2
11539 !! text
11540 including another template, {{paramtest|param={{{arg}}}}}
11541 !! endarticle
11542
11543 !! test
11544 Template passing argument to another template
11545 !! wikitext
11546 {{paramtest2|arg='hmm'}}
11547 !! html
11548 <p>including another template, This is a test template with parameter 'hmm'
11549 </p>
11550 !! end
11551
11552 !! article
11553 Template:Linktest2
11554 !! text
11555 Main Page
11556 !! endarticle
11557
11558 !! test
11559 Template as link source
11560 !! wikitext
11561 [[{{linktest2}}]]
11562
11563 [[{{linktest2}}|Main Page]]
11564
11565 [[{{linktest2}}]]Page
11566 !! html
11567 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
11568 </p><p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
11569 </p><p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>Page
11570 </p>
11571 !! end
11572
11573
11574 !! article
11575 Template:loop1
11576 !! text
11577 {{loop2}}
11578 !! endarticle
11579
11580 !! article
11581 Template:loop2
11582 !! text
11583 {{loop1}}
11584 !! endarticle
11585
11586 !! test
11587 Template infinite loop
11588 !! wikitext
11589 {{loop1}}
11590 !! html
11591 <p><span class="error">Template loop detected: <a href="/wiki/Template:Loop1" title="Template:Loop1">Template:Loop1</a></span>
11592 </p>
11593 !! end
11594
11595 !! test
11596 Template from main namespace
11597 !! wikitext
11598 {{:Main Page}}
11599 !! html
11600 <p>blah blah
11601 </p>
11602 !! end
11603
11604 !! article
11605 Template:table
11606 !! text
11607 {|
11608 | 1 || 2
11609 |-
11610 | 3 || 4
11611 |}
11612 !! endarticle
11613
11614 !! test
11615 T2529: Template with table, not included at beginning of line
11616 !! wikitext
11617 foo {{table}}
11618 !! html
11619 <p>foo
11620 </p>
11621 <table>
11622 <tr>
11623 <td> 1 </td>
11624 <td> 2
11625 </td></tr>
11626 <tr>
11627 <td> 3 </td>
11628 <td> 4
11629 </td></tr></table>
11630
11631 !! end
11632
11633 !! test
11634 T2523: Template shouldn't eat newline (or add an extra one before table)
11635 !! wikitext
11636 foo
11637 {{table}}
11638 !! html
11639 <p>foo
11640 </p>
11641 <table>
11642 <tr>
11643 <td> 1 </td>
11644 <td> 2
11645 </td></tr>
11646 <tr>
11647 <td> 3 </td>
11648 <td> 4
11649 </td></tr></table>
11650
11651 !! end
11652
11653 !! test
11654 T2041: Template parameters shown as broken links
11655 !! wikitext
11656 {{{parameter}}}
11657 !! html
11658 <p>{{{parameter}}}
11659 </p>
11660 !! end
11661
11662 !! test
11663 Template with targets containing wikilinks
11664 !! options
11665 parsoid=wt2html
11666 !! wikitext
11667 {{[[foo]]}}
11668
11669 {{[[{{echo|foo}}]]}}
11670
11671 {{{{echo|[[foo}}]]}}
11672 !! html/php
11673 <p>{{<a href="/wiki/Foo" title="Foo">foo</a>}}
11674 </p><p>{{<a href="/wiki/Foo" title="Foo">foo</a>}}
11675 </p><p>{{[[foo}}]]
11676 </p>
11677 !! html/parsoid
11678 <p>{{<a rel="mw:WikiLink" href="./Foo" title="Foo">foo</a>}}</p>
11679 <p>{{<a typeof="mw:ExpandedAttrs" rel="mw:WikiLink" href="./Foo" title="Foo" data-mw='{"attribs":[[{"txt":"href"},{"html":"&lt;span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[17,29,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo\"}},\"i\":0}}]}&#39;>foo&lt;/span>"}]]}'>foo</a>}}</p>
11680 <p>{{<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[foo}}]]"}},"i":0}}]}'>[[foo}}]]</span></p>
11681 !! end
11682
11683 !! article
11684 Template:''
11685 !! text
11686 bar
11687 !! endarticle
11688
11689 !! test
11690 Templates: Double quotes as template target
11691 !! wikitext
11692 foo {{''}} baz
11693 !! html/php
11694 <p>foo bar baz
11695 </p>
11696 !! html/parsoid
11697 <p>foo <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"&#39;&#39;","href":"./Template:&#39;&#39;"},"params":{},"i":0}}]}'>bar</span> baz
11698 </p>
11699 !! end
11700
11701 ## This test is about making sure Parsoid's data-mw is well formed in the
11702 ## face of multiple templates with intersecting and overlapping ranges. The
11703 ## wikitext itself is wretched.
11704 !! test
11705 Templates with intersecting and overlapping ranges
11706 !! wikitext
11707 {|{{echo|
11708 <p>ha</p>}}
11709 {|{{echo|
11710 <p>ho</p>}}
11711 {{echo|{{!}}hi}}
11712 |}
11713 !! html/php+tidy
11714 <p>ha</p>
11715 <p>ho</p>
11716 <table>
11717 <tr>
11718 <td></td>
11719 </tr>
11720 <tr>
11721 <td>hi</td>
11722 </tr>
11723 </table>
11724 <table>
11725 <tr>
11726 <td></td>
11727 </tr>
11728 </table>
11729 !! html/parsoid
11730 <p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}],[{"k":"1"}],[{"k":"1"}]],"firstWikitextNode":"table"}' data-mw='{"parts":["{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"\n&lt;p>ha&lt;/p>"}},"i":0}},"\n","{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"\n&lt;p>ho&lt;/p>"}},"i":1}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{!}}hi"}},"i":2}},"\n|}"]}'>ha</p><table about="#mwt1" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"","html":""},{"html":""}]]}'>
11731
11732 </table><p about="#mwt1">ho</p><table about="#mwt1" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"","html":""},{"html":""}]]}'>
11733
11734 <tbody><tr><td>hi</td></tr>
11735 </tbody></table>
11736 !! end
11737
11738 !! article
11739 Template:MSGNW test
11740 !! text
11741 ''None'' of '''this''' should be
11742 * interpreted
11743 but rather passed unmodified
11744 {{test}}
11745 <gallery>
11746 File:Foobar.jpg
11747 </gallery>
11748 <!-- comment -->
11749 !! endarticle
11750
11751 # hmm, fix this or just deprecate msgnw and document its behavior?
11752 !! test
11753 msgnw keyword
11754 !! wikitext
11755 {{msgnw:MSGNW test}}
11756 !! html/php
11757 <p>&#39;&#39;None&#39;&#39; of &#39;&#39;&#39;this&#39;&#39;&#39; should be
11758 &#42; interpreted
11759 &#32;but rather passed unmodified
11760 &#123;&#123;test&#125;&#125;
11761 &#60;gallery&#62;
11762 File:Foobar.jpg
11763 &#60;/gallery&#62;
11764 &#60;!-- comment --&#62;
11765 </p>
11766 !! end
11767
11768 !! test
11769 int keyword
11770 !! wikitext
11771 {{int:youhavenewmessages|lots of money|not!}}
11772 !! html
11773 <p>You have lots of money (not!).
11774 </p>
11775 !! end
11776
11777 !! test
11778 int keyword - non-existing message
11779 !! wikitext
11780 {{int:var}}
11781 !! html
11782 <p>⧼var⧽
11783 </p>
11784 !! end
11785
11786 !! article
11787 Template:Includes
11788 !! text
11789 Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
11790 !! endarticle
11791
11792 !! test
11793 <includeonly> and <noinclude> being included
11794 !! wikitext
11795 {{Includes}}
11796 !! html
11797 <p>Foobar
11798 </p>
11799 !! end
11800
11801 !! article
11802 Template:Includes2
11803 !! text
11804 <onlyinclude>Foo</onlyinclude>bar
11805 !! endarticle
11806
11807 !! test
11808 <onlyinclude> being included
11809 !! wikitext
11810 {{Includes2}}
11811 !! html
11812 <p>Foo
11813 </p>
11814 !! end
11815
11816
11817 !! article
11818 Template:Includes3
11819 !! text
11820 <onlyinclude>Foo</onlyinclude>bar<includeonly>zar</includeonly>
11821 !! endarticle
11822
11823 !! test
11824 <onlyinclude> and <includeonly> being included
11825 !! wikitext
11826 {{Includes3}}
11827 !! html
11828 <p>Foo
11829 </p>
11830 !! end
11831
11832 !! test
11833 <includeonly> and <noinclude> on a page
11834 !! wikitext
11835 Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
11836 !! html
11837 <p>Foozar
11838 </p>
11839 !! end
11840
11841 !! test
11842 Un-closed <noinclude>
11843 !! wikitext
11844 <noinclude>
11845 !! html
11846 !! end
11847
11848 !! test
11849 <onlyinclude> on a page
11850 !! wikitext
11851 <onlyinclude>Foo</onlyinclude>bar
11852 !! html
11853 <p>Foobar
11854 </p>
11855 !! end
11856
11857 !! test
11858 Un-closed <onlyinclude>
11859 !! wikitext
11860 <onlyinclude>
11861 !! html
11862 !! end
11863
11864 !!test
11865 Self-closed noinclude, includeonly, onlyinclude tags
11866 !! wikitext
11867 <noinclude />
11868 <includeonly />
11869 <onlyinclude />
11870 !! html
11871 <p><br />
11872 </p>
11873 !!end
11874
11875 !!test
11876 Unbalanced includeonly and noinclude tags
11877 !! wikitext
11878 {|
11879 |a</noinclude>
11880 |b</noinclude></noinclude>
11881 |c</noinclude></includeonly>
11882 |d</includeonly></includeonly>
11883 |}
11884 !! html
11885 <table>
11886 <tr>
11887 <td>a
11888 </td>
11889 <td>b
11890 </td>
11891 <td>c&lt;/includeonly&gt;
11892 </td>
11893 <td>d&lt;/includeonly&gt;&lt;/includeonly&gt;
11894 </td></tr></table>
11895
11896 !!end
11897
11898 !! article
11899 Template:Includeonly section
11900 !! text
11901 <includeonly>
11902 ==Includeonly section==
11903 </includeonly>
11904 ==Section T-1==
11905 !!endarticle
11906
11907 !! test
11908 T8563: Edit link generation for section shown by <includeonly>
11909 !! wikitext
11910 {{includeonly section}}
11911 !! html
11912 <h2><span class="mw-headline" id="Includeonly_section">Includeonly section</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Template:Includeonly_section&amp;action=edit&amp;section=T-1" title="Template:Includeonly section">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
11913 <h2><span class="mw-headline" id="Section_T-1">Section T-1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Template:Includeonly_section&amp;action=edit&amp;section=T-2" title="Template:Includeonly section">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
11914
11915 !! end
11916
11917 # Uses same input as the contents of [[Template:Includeonly section]]
11918 !! test
11919 T8563: Section extraction for section shown by <includeonly>
11920 !! options
11921 section=T-2
11922 !! wikitext
11923 <includeonly>
11924 ==Includeonly section==
11925 </includeonly>
11926 ==Section T-2==
11927 !! html
11928 ==Section T-2==
11929 !! end
11930
11931 !! test
11932 T8563: Edit link generation for section suppressed by <includeonly>
11933 !! wikitext
11934 <includeonly>
11935 ==Includeonly section==
11936 </includeonly>
11937 ==Section 1==
11938 !! html
11939 <h2><span class="mw-headline" id="Section_1">Section 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
11940
11941 !! end
11942
11943 !! test
11944 T8563: Section extraction for section suppressed by <includeonly>
11945 !! options
11946 section=1
11947 !! wikitext
11948 <includeonly>
11949 ==Includeonly section==
11950 </includeonly>
11951 ==Section 1==
11952 !! html
11953 ==Section 1==
11954 !! end
11955
11956 !! test
11957 Un-closed <includeonly>
11958 !! wikitext
11959 <includeonly>
11960 !! html/php
11961 !! html/parsoid
11962 <meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>"}'/>
11963 !! end
11964
11965 ## We used to, but no longer wt2wt this test since the default serializer
11966 ## will normalize the include directives to serialize on their own line.
11967 ## Selser will take care of preserving formatting in scenarios where they
11968 ## intermingled with other wikitext.
11969 !! test
11970 Includes and comments at SOL
11971 !! options
11972 parsoid=wt2html,html2html
11973 !! wikitext
11974 <!-- comment --><noinclude><!-- comment --></noinclude><!-- comment -->== hu ==
11975
11976 <noinclude>
11977 some
11978 </noinclude>* stuff
11979 * here
11980
11981 <includeonly>can have stuff</includeonly>=== here ===
11982
11983 !! html/php
11984 <h2><span class="mw-headline" id="hu">hu</span></h2>
11985 <p>some
11986 </p>
11987 <ul><li> stuff</li>
11988 <li> here</li></ul>
11989 <h3><span class="mw-headline" id="here">here</span></h3>
11990
11991 !! html/parsoid
11992 <!-- comment --><meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/><!-- comment --><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/><!-- comment --><h2> hu </h2>
11993
11994 <meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/>
11995 <p>some</p>
11996 <meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/><ul><li> stuff</li>
11997 <li> here</li></ul>
11998
11999 <meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>can have stuff&lt;/includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><h3> here </h3>
12000
12001 !! end
12002
12003 # TODO: test with DOM fragment reuse!
12004 !! test
12005 Parsoid: DOM fragment reuse
12006 !! options
12007 parsoid=wt2wt,wt2html
12008 !! wikitext
12009 a{{echo|b<table></table>c}}d
12010
12011 a{{echo|b
12012 <table></table>
12013 c}}d
12014
12015 {{echo|a
12016
12017 <table></table>
12018
12019 b}}
12020 !! html
12021 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b&lt;table>&lt;/table>c"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1"}]]}'>ab</p><table about="#mwt1" data-parsoid='{"stx":"html"}'></table><p about="#mwt1">cd</p>
12022
12023 <p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b\n&lt;table>&lt;/table>\nc"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1"}]]}'>ab</p><span about="#mwt2">
12024 </span><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><span about="#mwt2">
12025 </span><p about="#mwt2">cd</p>
12026
12027 <p about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n\n&lt;table>&lt;/table>\n\nb"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1"}]]}'>a</p><span about="#mwt3">
12028
12029 </span><table about="#mwt3" data-parsoid='{"stx":"html"}'></table><span about="#mwt3">
12030
12031 </span><p about="#mwt3">b</p>
12032 !! end
12033
12034 !! test
12035 Parsoid: Merge double tds (T52603)
12036 !! options
12037 parsoid
12038 !! wikitext
12039 {|
12040 |{{echo|{{!}} foo}}
12041 |}
12042 !! html
12043 <table><tbody>
12044 <tr><td about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{!}} foo"}},"i":0}}]}'> foo</td></tr>
12045 </tbody></table>
12046 !! end
12047
12048 !! test
12049 Parsoid: Merge double tds in nested transclusion content (T52603)
12050 !! options
12051 parsoid
12052 !! wikitext
12053 {{echo|<div>}}
12054 {|
12055 |{{echo|{{!}} foo}}
12056 |}
12057 {{echo|</div>}}
12058 !! html
12059 <div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<div>"}},"i":0}},"\n{|\n|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{!}} foo"}},"i":1}},"\n|}\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"</div>"}},"i":2}}]}'>
12060 <table><tbody>
12061 <tr><td data-mw='{"parts":["|"]}'> foo</td></tr>
12062 </tbody></table>
12063 </div>
12064 !! end
12065
12066 ###
12067 ### <includeonly> and <noinclude> in attributes
12068 ###
12069 !!test
12070 0. includeonly around the entire attribute
12071 !! wikitext
12072 <span <includeonly>id="v1"</includeonly><noinclude>id="v2"</noinclude>>bar</span>
12073 !! html
12074 <p><span id="v2">bar</span>
12075 </p>
12076 !!end
12077
12078 !!test
12079 1. includeonly in html attr key
12080 !! wikitext
12081 <span <noinclude>id</noinclude><includeonly>about</includeonly>="foo">bar</span>
12082 !! html
12083 <p><span id="foo">bar</span>
12084 </p>
12085 !!end
12086
12087 !!test
12088 2. includeonly in html attr value
12089 !! wikitext
12090 <span id="<noinclude>v1</noinclude><includeonly>v2</includeonly>">bar</span>
12091 <span id=<noinclude>"v1"</noinclude><includeonly>"v2"</includeonly>>bar</span>
12092 !! html
12093 <p><span id="v1">bar</span>
12094 <span id="v1">bar</span>
12095 </p>
12096 !!end
12097
12098 !!test
12099 3. includeonly in part of an attr value
12100 !! wikitext
12101 <span style="color:<noinclude>red</noinclude><includeonly>blue</includeonly>;">bar</span>
12102 !! html
12103 <p><span style="color:red;">bar</span>
12104 </p>
12105 !!end
12106
12107 !!test
12108 4. includeonly in table attributes
12109 !! wikitext
12110 {|
12111 |- <noinclude>
12112 |-
12113 |a
12114 </noinclude>
12115 |- <includeonly>
12116 |-
12117 |b
12118 </includeonly>
12119 |}
12120 !! html
12121 <table>
12122
12123
12124 <tr>
12125 <td>a
12126 </td></tr>
12127 </table>
12128
12129 !!end
12130
12131 ###
12132 ### Preprocessor precedence tests
12133 ### See: https://www.mediawiki.org/wiki/Preprocessor_ABNF
12134 ###
12135 ##{{[[-{{{{{{[[Foo|bar}}]]}-}}}}}]]
12136 !! test
12137 Preprocessor precedence 1: link is rightmost opening
12138 !! options
12139 parsoid=wt2html
12140 !! wikitext
12141 {{[[Foo|bar}}]]
12142
12143 But close-brace is not a valid character in a link title:
12144 {{[[Foo}}|bar]]
12145
12146 However, we can still tell this was handled as a link in the preprocessor:
12147 {{echo|[[Foo}}|bar]]|bat}}
12148 !! html/php
12149 <p>{{<a href="/wiki/Foo" title="Foo">bar}}</a>
12150 </p><p>But close-brace is not a valid character in a link title:
12151 {{[[Foo}}|bar]]
12152 </p><p>However, we can still tell this was handled as a link in the preprocessor:
12153 [[Foo}}|bar]]
12154 </p>
12155 !! html/parsoid
12156 <p>{{<a rel="mw:WikiLink" href="./Foo" title="Foo">bar}}</a></p>
12157 <p>But close-brace is not a valid character in a link title: {{[[Foo}}|bar]]</p>
12158 <p>However, we can still tell this was handled as a link in the preprocessor: <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Foo}}|bar]]"},"2":{"wt":"bat"}},"i":0}}]}'>[[Foo}}|bar]]</span></p>
12159 !! end
12160
12161 !! test
12162 Preprocessor precedence 2: template is rightmost opening
12163 !! options
12164 language=zh
12165 !! wikitext
12166 -{{echo|foo}-}}-
12167 !! html/php
12168 <p>-foo}--
12169 </p>
12170 !! html/parsoid
12171 <p>-<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo}-"}},"i":0}}]}'>foo}-</span>-</p>
12172 !! end
12173
12174 !! test
12175 Preprocessor precedence 3: language converter is rightmost opening
12176 !! options
12177 language=zh
12178 parsoid=wt2html
12179 !! wikitext
12180 {{echo|hi}}
12181
12182 {{-{R|echo|hi}}}-
12183
12184 [[-{R|raw]]}-
12185 !! html/php
12186 <p>hi
12187 </p><p>{{echo|hi}}
12188 </p><p>[[raw]]
12189 </p>
12190 !! html/parsoid
12191 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi"}},"i":0}}]}'>hi</p>
12192 <p>{{<span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"echo|hi}}"}}'></span></p>
12193 <p>[[<span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"raw]]"}}'></span></p>
12194 !! end
12195
12196 !! test
12197 Preprocessor precedence 4: left-most angle bracket
12198 !! options
12199 language=zh
12200 !! wikitext
12201 <!--{raw}-->
12202 !! html/php
12203 !! html/parsoid
12204 <!--{raw}-->
12205 !! end
12206
12207 !! article
12208 Template:Precedence5
12209 !! text
12210 {{{{{1}}}}}
12211 !! endarticle
12212
12213 !! test
12214 Preprocessor precedence 5: tplarg takes precedence over template
12215 !! wikitext
12216 {{Precedence5|Bullet}}
12217 !! html/php
12218 <ul><li> Bar</li></ul>
12219
12220 !! html/parsoid
12221 <ul typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Precedence5","href":"./Template:Precedence5"},"params":{"1":{"wt":"Bullet"}},"i":0}}]}'><li> Bar</li></ul>
12222 !! end
12223
12224 !! test
12225 Preprocessor precedence 6: broken link is rightmost opening
12226 !! options
12227 parsoid=wt2html
12228 !! wikitext
12229 {{echo|[[Foo}}
12230
12231 {{echo|[[Foo|bar|bat=baz}}
12232 !! html/php
12233 <p>{{echo|[[Foo}}
12234 </p><p>{{echo|[[Foo|bar|bat=baz}}
12235 </p>
12236 !! html/parsoid
12237 <p>{{echo|[[Foo}}</p>
12238 <p>{{echo|[[Foo|bar|bat=baz}}</p>
12239 !! end
12240
12241 # This next test exposes a difference between PHP and Parsoid:
12242 # Given [[Foo|{{echo|Bar]]x}}y]]z:
12243 # 1) Both PHP and Parsoid ignore the `]]` inside the `echo` in the
12244 # "preprocessor" stage. The `{{echo` extends until the `x}}`, and the
12245 # outer `[[Foo` extends until the `y]]`
12246 # 2a) But then the PHP preprocessor emits `[[Foo|Bar]]xy]]z` as an
12247 # intermediate result (after template expansion), and link processing
12248 # happens on this intermediate result, which moves the wikilink
12249 # boundary leftward to `[[Foo|Bar]]`
12250 # 2b) Parsoid works in a single step, so it's going to keep the
12251 # wikilink as extending to the `y]]`
12252 # 3a) Then PHP does linktrail processing which slurps up the trailing
12253 # `xy` inside the link.
12254 # 3b) Parsoid will do linktrail processing to slurp up the trailing
12255 # `z` inside the link.
12256 # This is "correct" behavior. Parsoid's basic worldview is that the
12257 # `]]` inside the template shouldn't be allowed to leak out to affect
12258 # the surrounding wikilink. PHP may match Parsoid (in the future)
12259 # if you use {{#balance}} (T114445).
12260
12261 !! test
12262 Preprocessor precedence 7: broken template is rightmost opening
12263 !! options
12264 parsoid=wt2html
12265 !! wikitext
12266 [[Foo|{{echo|Bar]]
12267
12268 [[Foo|{{echo|Bar]]-x}}-y]]-z
12269
12270 Careful: linktrails can move the end of the wikilink:
12271 [[Foo|{{echo|y']]a}}l]]l
12272 !! html/php
12273 <p><a href="/wiki/Foo" title="Foo">{{echo|Bar</a>
12274 </p><p><a href="/wiki/Foo" title="Foo">Bar</a>-x-y]]-z
12275 </p><p>Careful: linktrails can move the end of the wikilink:
12276 <a href="/wiki/Foo" title="Foo">y'al</a>]]l
12277 </p>
12278 !! html/parsoid
12279 <p>[[Foo|{{echo|Bar]]</p>
12280 <p><a rel="mw:WikiLink" href="./Foo" title="Foo"><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Bar]]-x"}},"i":0}}]}'>Bar]]-x</span>-y</a>-z</p>
12281 <p>Careful: linktrails can move the end of the wikilink:
12282 <a rel="mw:WikiLink" href="./Foo" title="Foo"><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"y&#39;]]a"}},"i":0}}]}'>y']]a</span>ll</a></p>
12283 !! end
12284
12285 !! test
12286 Preprocessor precedence 8: broken language converter is rightmost opening
12287 !! options
12288 language=zh
12289 !! wikitext
12290 [[Foo-{R|raw]]
12291 !! html
12292 <p>[[Foo-{R|raw]]
12293 </p>
12294 !! end
12295
12296 !! article
12297 Template:Preprocessor_precedence_9
12298 !! text
12299 ;4: {{{{1}}}}
12300 ;5: {{{{{2}}}}}
12301 ;6: {{{{{{3}}}}}}
12302 ;7: {{{{{{{4}}}}}}}
12303 !! endarticle
12304
12305 !! test
12306 Preprocessor precedence 9: groups of braces
12307 !! wikitext
12308 {{Preprocessor precedence 9|Four|Bullet|1|2}}
12309 !! html/php
12310 <dl><dt>4</dt>
12311 <dd> {Four}</dd>
12312 <dt>5</dt>
12313 <dd> </dd></dl>
12314 <ul><li> Bar</li></ul>
12315 <dl><dt>6</dt>
12316 <dd> Four</dd>
12317 <dt>7</dt>
12318 <dd> {Bullet}</dd></dl>
12319
12320 !! html/parsoid
12321 <dl about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Preprocessor precedence 9","href":"./Template:Preprocessor_precedence_9"},"params":{"1":{"wt":"Four"},"2":{"wt":"Bullet"},"3":{"wt":"1"},"4":{"wt":"2"}},"i":0}}]}'>
12322 <dt>4</dt>
12323 <dd>{Four}</dd>
12324 <dt>5</dt>
12325 <dd></dd>
12326 </dl><ul about="#mwt1">
12327 <li>Bar</li>
12328 </ul><span about="#mwt1"> </span><dl about="#mwt1">
12329 <dt>6</dt>
12330 <dd>Four</dd>
12331 <dt>7</dt>
12332 <dd>{Bullet}</dd>
12333 </dl>
12334 !! end
12335
12336 !! article
12337 Template:Preprocessor_precedence_10
12338 !! text
12339 ;1: -{R|raw}-
12340 ;2: -{{Bullet}}-
12341 ;3: -{{{1}}}-
12342 ;4: -{{{{2}}}}-
12343 ;5: -{{{{{3}}}}}-
12344 ;6: -{{{{{{4}}}}}}-
12345 ;7: -{{{{{{{5}}}}}}}-
12346 !! endarticle
12347
12348 !! test
12349 Preprocessor precedence 10: groups of braces with leading dash
12350 !! options
12351 language=zh
12352 !! wikitext
12353 {{Preprocessor precedence 10|Three|raw2|Bullet|1|2}}
12354 !! html/php
12355 <dl><dt>1</dt>
12356 <dd> raw</dd>
12357 <dt>2</dt>
12358 <dd> -</dd></dl>
12359 <ul><li> Bar-</li></ul>
12360 <dl><dt>3</dt>
12361 <dd> -Three-</dd>
12362 <dt>4</dt>
12363 <dd> raw2</dd>
12364 <dt>5</dt>
12365 <dd> -</dd></dl>
12366 <ul><li> Bar-</li></ul>
12367 <dl><dt>6</dt>
12368 <dd> -Three-</dd>
12369 <dt>7</dt>
12370 <dd> raw2</dd></dl>
12371
12372 !! html/parsoid
12373 <dl about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Preprocessor precedence 10","href":"./Template:Preprocessor_precedence_10"},"params":{"1":{"wt":"Three"},"2":{"wt":"raw2"},"3":{"wt":"Bullet"},"4":{"wt":"1"},"5":{"wt":"2"}},"i":0}}]}'>
12374 <dt>1</dt>
12375 <dd><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"raw"}}'></span></dd>
12376 <dt>2</dt>
12377 <dd>-</dd>
12378 </dl><ul about="#mwt1">
12379 <li>Bar-</li>
12380 </ul><span about="#mwt1"> </span><dl about="#mwt1">
12381 <dt>3</dt>
12382 <dd>-Three-</dd>
12383 <dt>4</dt>
12384 <dd><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"raw2"}}'></span></dd>
12385 <dt>5</dt>
12386 <dd>-</dd>
12387 </dl><ul about="#mwt1">
12388 <li>Bar-</li>
12389 </ul><span about="#mwt1"> </span><dl about="#mwt1">
12390 <dt>6</dt>
12391 <dd>-Three-</dd>
12392 <dt>7</dt>
12393 <dd><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"raw2"}}'></span></dd>
12394 </dl>
12395 !! end
12396
12397 !! test
12398 Preprocessor precedence 11: found during visual diff testing
12399 !! wikitext
12400 {{#tag:span|-{{#tag:span|-{{echo|x}}}}}}
12401
12402 {{echo|-{{echo|-{{echo|x}}}}}}
12403
12404 {{echo|-{{echo|x}}}}
12405 !! html/php
12406 <p><span>-<span>-x</span></span>
12407 </p><p>--x
12408 </p><p>-x
12409 </p>
12410 !! html/parsoid
12411 <p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"#tag:span","function":"tag"},"params":{"1":{"wt":"-{{#tag:span|-{{echo|x}}}}"}},"i":0}}]}'>-<span>-x</span></span></p>
12412
12413 <p about="#mwt4" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"-{{echo|-{{echo|x}}}}"}},"i":0}}]}'>--x</p>
12414
12415 <p about="#mwt7" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"-{{echo|x}}"}},"i":0}}]}'>-x</p>
12416 !! end
12417
12418 !! test
12419 Preprocessor precedence 12: broken language converter closed by brace.
12420 !! options
12421 parsoid=wt2html
12422 !! wikitext
12423 This form breaks the template, which is unfortunate:
12424 * {{echo|foo-{bar}bat}}
12425
12426 But if the broken language converter markup is inside an extension
12427 tag, nothing bad happens:
12428 * <nowiki>foo-{bar}bat</nowiki>
12429 * {{echo|<nowiki>foo-{bar}bat</nowiki>}}
12430 * <pre>foo-{bar}bat</pre>
12431 * {{echo|<pre>foo-{bar}bat</pre>}}
12432
12433 <tag>foo-{bar}bat</tag>
12434 {{echo|<tag>foo-{bar}bat</tag>}}
12435
12436 !! html/php+tidy
12437 <p>This form breaks the template, which is unfortunate:</p>
12438 <ul>
12439 <li>{{echo|foo-{bar}bat}}</li>
12440 </ul>
12441 <p>But if the broken language converter markup is inside an extension tag, nothing bad happens:</p>
12442 <ul>
12443 <li>foo-{bar}bat</li>
12444 <li>foo-{bar}bat</li>
12445 <li>
12446 <pre>
12447 foo-{bar}bat
12448 </pre></li>
12449 <li>
12450 <pre>
12451 foo-{bar}bat
12452 </pre></li>
12453 </ul>
12454 <pre>
12455 'foo-{bar}bat'
12456 array (
12457 )
12458 </pre>
12459 <pre>
12460 'foo-{bar}bat'
12461 array (
12462 )
12463 </pre>
12464 !! html/parsoid
12465 <p>This form breaks the template, which is unfortunate:</p>
12466 <ul>
12467 <li>{{echo|foo-{bar}bat}}</li>
12468 </ul>
12469 <p>But if the broken language converter markup is inside an extension tag, nothing bad happens:</p>
12470 <ul>
12471 <li><span typeof="mw:Nowiki">foo-{bar}bat</span></li>
12472 <li><span typeof="mw:Transclusion mw:Nowiki" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;nowiki>foo-{bar}bat&lt;/nowiki>"}},"i":0}}]}'>foo-{bar}bat</span></li>
12473 <li><pre typeof="mw:Extension/pre" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"foo-{bar}bat"}}'>foo-{bar}bat</pre></li>
12474 <li><pre typeof="mw:Transclusion mw:Extension/pre" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre>foo-{bar}bat&lt;/pre>"}},"i":0}}]}'>foo-{bar}bat</pre></li>
12475 </ul>
12476 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{},"body":{"extsrc":"foo-{bar}bat"}}'></pre> <pre typeof="mw:Extension/tag mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;tag>foo-{bar}bat&lt;/tag>"}},"i":0}}]}'></pre>
12477 !! end
12478
12479 !! test
12480 Preprocessor precedence 13: broken language converter in external link
12481 !! options
12482 parsoid=wt2html
12483 !! wikitext
12484 * [http://example.com/-{foo Example in URL]
12485 * [http://example.com Example in -{link} description]
12486 * {{echo|[http://example.com/-{foo Breaks template, however]}}
12487 !! html/php+tidy
12488 <ul>
12489 <li><a rel="nofollow" class="external text" href="http://example.com/-{foo">Example in URL</a></li>
12490 <li><a rel="nofollow" class="external text" href="http://example.com">Example in -{link} description</a></li>
12491 <li>{{echo|<a rel="nofollow" class="external text" href="http://example.com/-{foo">Breaks template, however</a>}}</li>
12492 </ul>
12493 !! html/parsoid
12494 <ul>
12495 <li><a rel="mw:ExtLink" href="http://example.com/-{foo">Example in URL</a></li>
12496 <li><a rel="mw:ExtLink" href="http://example.com">Example in -{link} description</a></li>
12497 <li>{{echo|<a rel="mw:ExtLink" href="http://example.com/-{foo">Breaks template, however</a>}}</li>
12498 </ul>
12499 !! end
12500
12501 !! test
12502 Preprocessor precedence 14: broken language converter in comment
12503 !! wikitext
12504 * <!--{{foo}}--> ...should be ok
12505 * <!---{{foo}}--> ...extra dashes
12506 * {{echo|foo<!-- -{bar} -->bat}} ...should be ok
12507 !! html/php+tidy
12508 <ul>
12509 <li>...should be ok</li>
12510 <li>...extra dashes</li>
12511 <li>foobat ...should be ok</li>
12512 </ul>
12513 !! html/parsoid
12514 <ul>
12515 <li><!--{{foo}}--> ...should be ok</li>
12516 <li><!--&#x2D;{{foo}}--> ...extra dashes</li>
12517 <li><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo&lt;!-- -{bar} -->bat"}},"i":0}}]}'>foo</span><span about="#mwt1"><!-- &#x2D;{bar} --></span><span about="#mwt1">bat</span> ...should be ok</li>
12518 </ul>
12519 !! end
12520
12521 !! test
12522 Preprocessor precedence 15: broken brace markup in headings
12523 !! options
12524 parsoid=wt2html
12525 !! wikitext
12526 __NOTOC__ __NOEDITSECTION__
12527 ===1 foo[bar 1===
12528 1
12529 ===2 foo[[bar 2===
12530 2
12531 ===3 foo{bar 3===
12532 3
12533 ===4 foo{{bar 4===
12534 4
12535 ===5 foo{{{bar 5===
12536 5
12537 ===6 foo-{bar 6===
12538 6
12539 !! html/php+tidy
12540 <h3><span class="mw-headline" id="1_foo.5Bbar_1">1 foo[bar 1</span></h3>
12541 <p>1</p>
12542 <h3><span class="mw-headline" id="2_foo.5B.5Bbar_2">2 foo[[bar 2</span></h3>
12543 <p>2</p>
12544 <h3><span class="mw-headline" id="3_foo.7Bbar_3">3 foo{bar 3</span></h3>
12545 <p>3</p>
12546 <h3><span class="mw-headline" id="4_foo.7B.7Bbar_4">4 foo{{bar 4</span></h3>
12547 <p>4</p>
12548 <h3><span class="mw-headline" id="5_foo.7B.7B.7Bbar_5">5 foo{{{bar 5</span></h3>
12549 <p>5</p>
12550 <h3><span class="mw-headline" id="6_foo-.7Bbar_6">6 foo-{bar 6</span></h3>
12551 <p>6</p>
12552 !! html/parsoid
12553 <meta property="mw:PageProp/notoc"/> <meta property="mw:PageProp/noeditsection"/
12554 >
12555 <h3>1 foo[bar 1</h3>
12556 <p>1</p>
12557 <h3>2 foo[[bar 2</h3>
12558 <p>2</p>
12559 <h3>3 foo{bar 3</h3>
12560 <p>3</p>
12561 <h3>4 foo{{bar 4</h3>
12562 <p>4</p>
12563 <h3>5 foo{{{bar 5</h3>
12564 <p>5</p>
12565 <h3>6 foo-{bar 6</h3>
12566 <p>6</p>
12567 !! end
12568
12569 !! test
12570 Preprocessor precedence 16: matching closing braces to opening braces
12571 !! options
12572 language=zh
12573 parsoid=wt2html
12574 !! wikitext
12575 -{{{echo|foo}}bar}-
12576 !! html/php
12577 <p>foobar
12578 </p>
12579 !! html/parsoid
12580 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[2,14,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo\"}},\"i\":0}}]}&#39;>foo&lt;/span>bar"}}'></span></p>
12581 !! end
12582
12583 ###
12584 ### Token Stream Patcher tests
12585 ###
12586 ### These tests won't always pass wt2wt and other modes because
12587 ### on serialization, the table will be output on a new line.
12588 ### For now, we are blacklisting them, and using this to test selser.
12589 ###
12590
12591 !!test
12592 1. Table tag in SOL posn. should get reparsed correctly with valid TSR
12593 !!options
12594 parsoid=wt2html,wt2wt
12595 !!wikitext
12596 {{echo|}}{| width = '100%'
12597 |foo
12598 |}
12599 !!html/parsoid
12600 <span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":""}},"i":0}}]}'></span><table width="100%">
12601 <tbody><tr><td>foo</td></tr>
12602 </tbody></table>
12603 !!end
12604
12605 ## We used to, but no longer wt2wt this test since the default serializer
12606 ## will normalize the include directives to serialize on their own line.
12607 ## Selser will take care of preserving formatting in scenarios where they
12608 ## intermingled with other wikitext.
12609 !!test
12610 2. Table tag in SOL posn. should get reparsed correctly with valid TSR
12611 !!options
12612 parsoid=wt2html
12613 !!wikitext
12614 <includeonly>a</includeonly>{| {{{b}}}
12615 |c
12616 |}
12617 !!html/parsoid
12618 <meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>a&lt;/includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><table about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"a":{"{{{b}}}":null},"sa":{"{{{b}}}":""}}' data-mw='{"attribs":[[{"txt":"{{{b}}}","html":"&lt;span about=\"#mwt1\" typeof=\"mw:Param\" data-parsoid=&#39;{\"pi\":[[]],\"dsr\":[31,38,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"templatearg\":{\"target\":{\"wt\":\"b\"},\"params\":{},\"i\":0}}]}&#39;>{{{b}}}&lt;/span>"},{"html":""}]]}'>
12619 <tbody><tr><td>c</td></tr>
12620 </tbody></table>
12621 !!end
12622
12623 !! test
12624 Table wikitext syntax outside wiki-tables
12625 !! wikitext
12626 a
12627 |+ not a caption
12628 ! not a table heading
12629 |- not a table row
12630 | not a table cell
12631 | class="foo bar" | baz
12632 b
12633 |}
12634 |-
12635 c
12636 !! html
12637 <p>a
12638 |+ not a caption
12639 ! not a table heading
12640 |- not a table row
12641 | not a table cell
12642 | class="foo bar" | baz
12643 b
12644 |}
12645 |-
12646 c
12647 </p>
12648 !! end
12649
12650 ###
12651 ### Testing parsing of templates where a template arg
12652 ### has the same name as the template itself.
12653 ###
12654
12655 !! article
12656 Template:quote
12657 !! text
12658 {{{quote|{{{1}}}}}}
12659 !! endarticle
12660
12661 !!test
12662 Templates: Template Name/Arg clash: 1. Use of positional param
12663 !! wikitext
12664 {{quote|foo}}
12665 !! html
12666 <p>foo
12667 </p>
12668 !!end
12669
12670 !!test
12671 Templates: Template Name/Arg clash: 2. Use of named param
12672 !! wikitext
12673 {{quote|quote=foo}}
12674 !! html
12675 <p>foo
12676 </p>
12677 !!end
12678
12679 !!test
12680 Templates: Template Name/Arg clash: 3. Use of named param with empty input
12681 !! wikitext
12682 {{quote|quote}}
12683 !! html
12684 <p>quote
12685 </p>
12686 !!end
12687
12688 ###
12689 ### Parsoid-centric tests to stress Parsoid's ability to RT them unchanged
12690 ###
12691
12692 !!test
12693 Templates: 1. Simple use
12694 !! wikitext
12695 {{echo|Foo}}
12696 !! html
12697 <p>Foo
12698 </p>
12699 !!end
12700
12701 !!test
12702 Templates: 2. Inside a block tag
12703 !! wikitext
12704 <div>{{echo|Foo}}</div>
12705 <blockquote>{{echo|Foo}}</blockquote>
12706 !! html
12707 <div>Foo</div>
12708 <blockquote>Foo</blockquote>
12709
12710 !! html+tidy
12711 <div>Foo</div>
12712 <blockquote>
12713 <p>Foo</p>
12714 </blockquote>
12715 !!end
12716
12717 !!test
12718 Templates: P-wrapping: 1a. Templates on consecutive lines
12719 !! wikitext
12720 {{echo|Foo}}
12721 {{echo|bar}}
12722 !! html
12723 <p>Foo
12724 bar
12725 </p>
12726 !!end
12727
12728 !!test
12729 Templates: P-wrapping: 1b. Templates on consecutive lines
12730 !! wikitext
12731 Foo
12732
12733 {{echo|bar}}
12734 {{echo|baz}}
12735 !! html
12736 <p>Foo
12737 </p><p>bar
12738 baz
12739 </p>
12740 !!end
12741
12742 !!test
12743 Templates: P-wrapping: 1c. Templates on consecutive lines
12744 !! wikitext
12745 {{echo|Foo}}
12746 {{echo|bar}} <div>baz</div>
12747 !! html
12748 <p>Foo
12749 </p>
12750 bar <div>baz</div>
12751
12752 !! html+tidy
12753 <p>Foo</p>
12754 <p>bar</p>
12755 <div>baz</div>
12756 !! end
12757
12758 !!test
12759 Templates: P-wrapping: 1d. Template preceded by comment-only line
12760 !!options
12761 parsoid
12762 !! wikitext
12763 <!-- foo -->
12764 {{echo|Bar}}
12765 !! html
12766 <!-- foo -->
12767
12768 <p about="#mwt223" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Bar"}},"i":0}}]}'>Bar</p>
12769 !!end
12770
12771 !!test
12772 Templates: Inline Text: 1. Multiple template uses
12773 !! wikitext
12774 {{echo|Foo}}bar{{echo|baz}}
12775 !! html
12776 <p>Foobarbaz
12777 </p>
12778 !!end
12779
12780 !!test
12781 Templates: Inline Text: 2. Back-to-back template uses
12782 !! wikitext
12783 {{echo|Foo}}{{echo|bar}}
12784 !! html
12785 <p>Foobar
12786 </p>
12787 !!end
12788
12789 !!test
12790 Templates: Block Tags: 1. Multiple template uses
12791 !! wikitext
12792 {{echo|<div>Foo</div>}}<div>bar</div>{{echo|<div>baz</div>}}
12793 !! html
12794 <div>Foo</div><div>bar</div><div>baz</div>
12795
12796 !!end
12797
12798 !!test
12799 Templates: Block Tags: 2. Back-to-back template uses
12800 !! wikitext
12801 {{echo|<div>Foo</div>}}{{echo|<div>bar</div>}}
12802 !! html
12803 <div>Foo</div><div>bar</div>
12804
12805 !!end
12806
12807 # This is an edge case relating to paragraph wrapping.
12808 !!test
12809 Templates: Correctly encapsulate templates producing </p> tag without a corresponding <p> tag
12810 !! wikitext
12811 {{echo|a
12812 b</p>}}
12813 !! html/parsoid
12814 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\nb&lt;/p>"}},"i":0}}]}'>a
12815 b</p>
12816 !!end
12817
12818 !!test
12819 Templates: Links: 1. Simple example
12820 !! wikitext
12821 {{echo|[[Foo|bar]]}}
12822 !! html
12823 <p><a href="/wiki/Foo" title="Foo">bar</a>
12824 </p>
12825 !!end
12826
12827 !!test
12828 Templates: Links: 2. Generation of link href
12829 !! wikitext
12830 [[{{echo|Foo}}|bar]]
12831 !! html
12832 <p><a href="/wiki/Foo" title="Foo">bar</a>
12833 </p>
12834 !!end
12835
12836 !!test
12837 Templates: Links: 3. Generation of part of a link href
12838 !! wikitext
12839 [[Fo{{echo|o}}|bar]]
12840
12841 [[Foo{{echo|bar}}]]
12842
12843 [[Foo{{echo|bar}}baz]]
12844
12845 [[Foo{{echo|bar}}|bar]]
12846
12847 [[:Foo{{echo|bar}}]]
12848
12849 [[:Foo{{echo|bar}}|bar]]
12850 !! html
12851 <p><a href="/wiki/Foo" title="Foo">bar</a>
12852 </p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">Foobar</a>
12853 </p><p><a href="/index.php?title=Foobarbaz&amp;action=edit&amp;redlink=1" class="new" title="Foobarbaz (page does not exist)">Foobarbaz</a>
12854 </p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">bar</a>
12855 </p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">Foobar</a>
12856 </p><p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">bar</a>
12857 </p>
12858 !!end
12859
12860 !!test
12861 Templates: Links: 4. Multiple templates generating link href
12862 !! wikitext
12863 [[{{echo|F}}{{echo|o}}ob{{echo|ar}}]]
12864 !! html
12865 <p><a href="/index.php?title=Foobar&amp;action=edit&amp;redlink=1" class="new" title="Foobar (page does not exist)">Foobar</a>
12866 </p>
12867 !!end
12868
12869 !!test
12870 Templates: Links: 5. Generation of link text
12871 !! wikitext
12872 [[Foo|{{echo|bar}}]]
12873 !! html
12874 <p><a href="/wiki/Foo" title="Foo">bar</a>
12875 </p>
12876 !!end
12877
12878 !!test
12879 Templates: Links: 5. Nested templates (only outermost template should be marked)
12880 !! wikitext
12881 {{echo|[[{{echo|Foo}}|bar]]}}
12882 !! html
12883 <p><a href="/wiki/Foo" title="Foo">bar</a>
12884 </p>
12885 !!end
12886
12887 !!test
12888 Templates: HTML Tag: 1. Generation of HTML attr. key
12889 !! wikitext
12890 <div {{echo|style}}="color:red;">foo</div>
12891 !! html
12892 <div style="color:red;">foo</div>
12893
12894 !!end
12895
12896 !!test
12897 Templates: HTML Tag: 2. Generation of HTML attr. value
12898 !! wikitext
12899 <div style={{echo|'color:red;'}}>foo</div>
12900 !! html
12901 <div style="color:red;">foo</div>
12902
12903 !!end
12904
12905 !!test
12906 Templates: HTML Tag: 3. Generation of HTML attr key and value
12907 !! wikitext
12908 <div {{echo|style}}={{echo|'color:red;'}}>foo</div>
12909 !! html
12910 <div style="color:red;">foo</div>
12911
12912 !!end
12913
12914 !!test
12915 Templates: HTML Tag: 4. Generation of starting piece of HTML attr value
12916 !! wikitext
12917 <div title="{{echo|This is a long title}} with just one piece templated">foo</div>
12918 !! html
12919 <div title="This is a long title with just one piece templated">foo</div>
12920
12921 !!end
12922
12923 !!test
12924 Templates: HTML Tag: 5. Generation of middle piece of HTML attr value
12925 !! wikitext
12926 <div title="This is a long title with just {{echo|one piece}} templated">foo</div>
12927 !! html
12928 <div title="This is a long title with just one piece templated">foo</div>
12929
12930 !!end
12931
12932 !!test
12933 Templates: HTML Tag: 6. Generation of end piece of HTML attr value
12934 !! wikitext
12935 <div title="This is a long title with just one piece {{echo|templated}}">foo</div>
12936 !! html
12937 <div title="This is a long title with just one piece templated">foo</div>
12938
12939 !!end
12940
12941 # SSS FIXME: While it is great we added support for all this,
12942 # do we want to make this part of the spec? Maybe we want to
12943 # deprecate this kind of usage in the future?
12944 !!test
12945 Templates: HTML Tag: 7. Generation of partial attribute key string
12946 !! wikitext
12947 <div st{{echo|yle}}="color:red;">foo</div>
12948 !! html
12949 <div style="color:red;">foo</div>
12950
12951 !!end
12952
12953 !! test
12954 Templates: HTML Tag: 8. Template-generated attribute (k=v)
12955 !! wikitext
12956 <div {{echo|1=id="v1"}}>bar</div>
12957 !! html
12958 <div id="v1">bar</div>
12959
12960 !!end
12961
12962 !! test
12963 Templates: HTML Tag: 9. Multiple template-generated attributes
12964 !! wikitext
12965 <div {{echo|1=id="v1" title="foo"}}>bar</div>
12966 !! html
12967 <div id="v1" title="foo">bar</div>
12968
12969 !!end
12970
12971 !! test
12972 Templates: Support for templates generating attributes and content
12973 !! wikitext
12974 {| {{mixed_attr_content_template}}
12975 |-
12976 |bar
12977 |}
12978 !! html/php
12979 <table style="color:red;" title="T48811">
12980
12981 <tr>
12982 <td>foo
12983 </td></tr>
12984 <tr>
12985 <td>bar
12986 </td></tr></table>
12987
12988 !! html/parsoid
12989 <table style="color:red;" title="T48811" about="#mwt1" typeof="mw:Transclusion mw:ExpandedAttrs" data-mw='{"parts":["{| ",{"template":{"target":{"wt":"mixed_attr_content_template","href":"./Template:Mixed_attr_content_template"},"params":{},"i":0}},"\n|-\n|bar\n|}"]}'>
12990 <tbody><tr>
12991 <td>foo</td></tr>
12992 <tr>
12993 <td>bar</td></tr>
12994 </tbody></table>
12995 !!end
12996
12997 !! test
12998 1. Entities and nowikis inside templated attributes should be handled correctly
12999 !! wikitext
13000 <div {{echo|style{{=}}"background:&#35;f9f9f9;"}}>foo</div>
13001 !! html/php
13002 <div style="background:#f9f9f9;">foo</div>
13003
13004 !! html/parsoid
13005 <div style="background:#f9f9f9;" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html"}' data-mw='{"attribs":[[{"txt":"style","html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[5,49,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"style{{=}}\\\"background:&amp;amp;#35;f9f9f9;\\\"\"}},\"i\":0}}]}&#39;>style&lt;/span>&lt;span typeof=\"mw:Nowiki\" about=\"#mwt1\" data-parsoid=\"{}\">=&lt;/span>&lt;span about=\"#mwt1\" data-parsoid=\"{}\">\"background:&lt;/span>&lt;span typeof=\"mw:Entity\" about=\"#mwt1\" data-parsoid=&#39;{\"src\":\"&amp;amp;#35;\",\"srcContent\":\"#\"}&#39;>#&lt;/span>&lt;span about=\"#mwt1\" data-parsoid=\"{}\">f9f9f9;\"&lt;/span>"},{"html":""}]]}'>foo</div>
13006 !! end
13007
13008 !! test
13009 2. Entities and nowikis inside templated attributes should be handled correctly
13010 !! wikitext
13011 {|
13012 |{{table_attribs_3}}
13013 |}
13014 !! html/php
13015 <table>
13016 <tr>
13017 <td style="background:#f9f9f9;">Foo
13018 </td></tr></table>
13019
13020 !! html/parsoid
13021 <table>
13022 <tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td style="background:#f9f9f9;" typeof="mw:Transclusion" about="#mwt1" data-parsoid='{"autoInsertedEnd":true,"pi":[[]]}' data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_3","href":"./Template:Table_attribs_3"},"params":{},"i":0}}]}'>Foo</td></tr>
13023 </tbody></table>
13024 !! end
13025
13026 !! test
13027 3. Entities and nowikis inside templated attributes should be handled correctly inside templated tables
13028 !! wikitext
13029 {{tbl-start}}
13030 |{{table_attribs_3}}
13031 {{tbl-end}}
13032 !! html/php
13033 <table>
13034 <tr>
13035 <td style="background:#f9f9f9;">Foo
13036 </td></tr></table>
13037
13038 !! html/parsoid
13039 <table about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[],[],[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"tbl-start","href":"./Template:Tbl-start"},"params":{},"i":0}},"\n|",{"template":{"target":{"wt":"table_attribs_3","href":"./Template:Table_attribs_3"},"params":{},"i":1}},"\n",{"template":{"target":{"wt":"tbl-end","href":"./Template:Tbl-end"},"params":{},"i":2}}]}'>
13040 <tbody><tr><td style="background:#f9f9f9;">Foo</td></tr>
13041 </tbody></table>
13042 !! end
13043
13044 # T107622
13045 !! test
13046 4. Entities and nowikis inside templated attributes should be handled correctly inside templated tables
13047 !! wikitext
13048 {|
13049 | {{table_attribs_6}} hi
13050 |}
13051 !! html/php
13052 <table>
13053 <tr>
13054 <td style="background: red;"> hi
13055 </td></tr></table>
13056
13057 !! html/parsoid
13058 <table>
13059 <tbody><tr><td style="background: red;" typeof="mw:Transclusion" about="#mwt1" data-parsoid='{"autoInsertedEnd":true,"pi":[[]]}' data-mw='{"parts":["| ",{"template":{"target":{"wt":"table_attribs_6","href":"./Template:Table_attribs_6"},"params":{},"i":0}}," hi"]}'> hi</td></tr>
13060 </tbody></table>
13061 !! end
13062
13063 !!test
13064 Templates: HTML Tables: 1. Generating start of a HTML table
13065 !! wikitext
13066 {{echo|<table><tr><td>foo</td>}}</tr></table>
13067 !! html
13068 <table><tr><td>foo</td></tr></table>
13069
13070 !!end
13071
13072 !!test
13073 Templates: HTML Tables: 2a. Generating middle of a HTML table
13074 !! wikitext
13075 <table><tr>{{echo|<td>foo</td>}}</tr></table>
13076 !! html
13077 <table><tr><td>foo</td></tr></table>
13078
13079 !!end
13080
13081 !!test
13082 Templates: HTML Tables: 2b. Generating middle of a HTML table
13083 !! wikitext
13084 <table>{{echo|<tr><td>foo</td></tr>}}</table>
13085 !! html
13086 <table><tr><td>foo</td></tr></table>
13087
13088 !!end
13089
13090 !!test
13091 Templates: HTML Tables: 3. Generating end of a HTML table
13092 !! wikitext
13093 <table><tr>{{echo|<td>foo</td></tr></table>}}
13094 !! html
13095 <table><tr><td>foo</td></tr></table>
13096
13097 !!end
13098
13099 !!test
13100 Templates: HTML Tables: 4a. Generating a single tag of a HTML table
13101 !! wikitext
13102 {{echo|<table>}}<tr><td>foo</td></tr></table>
13103 !! html
13104 <table><tr><td>foo</td></tr></table>
13105
13106 !!end
13107
13108 !!test
13109 Templates: HTML Tables: 4b. Generating a single tag of a HTML table
13110 !! wikitext
13111 <table>{{echo|<tr>}}<td>foo</td></tr></table>
13112 !! html
13113 <table><tr><td>foo</td></tr></table>
13114
13115 !!end
13116
13117 !!test
13118 Templates: HTML Tables: 4c. Generating a single tag of a HTML table
13119 !! wikitext
13120 <table><tr>{{echo|<td>}}foo</td></tr></table>
13121 !! html
13122 <table><tr><td>foo</td></tr></table>
13123
13124 !!end
13125
13126 !!test
13127 Templates: HTML Tables: 4d. Generating a single tag of a HTML table
13128 !! wikitext
13129 <table><tr><td>foo{{echo|</td>}}</tr></table>
13130 !! html
13131 <table><tr><td>foo</td></tr></table>
13132
13133 !!end
13134
13135 !!test
13136 Templates: HTML Tables: 4e. Generating a single tag of a HTML table
13137 !! wikitext
13138 <table><tr><td>foo</td>{{echo|</tr>}}</table>
13139 !! html
13140 <table><tr><td>foo</td></tr></table>
13141
13142 !!end
13143
13144 !!test
13145 Templates: HTML Tables: 4f. Generating a single tag of a HTML table
13146 !! wikitext
13147 <table><tr><td>foo</td></tr>{{echo|</table>}}
13148 !! html
13149 <table><tr><td>foo</td></tr></table>
13150
13151 !!end
13152
13153 !!test
13154 Templates: HTML Tables: 5. Proper fostering of categories from inside
13155 !!options
13156 parsoid=wt2html,wt2wt
13157 !! wikitext
13158 <table>[[Category:foo1]]<tr><td>foo</td></tr></table>
13159 <!--Two categories (T52330)-->
13160 <table>[[Category:bar1]][[Category:bar2]]<tr><td>foo</td></tr></table>
13161 !! html
13162 <link rel="mw:PageProp/Category" href="./Category:Foo1"><table><tbody><tr><td>foo</td></tr></tbody></table>
13163 <!--Two categories (T52330)-->
13164 <link rel="mw:PageProp/Category" href="./Category:Bar1"><link rel="mw:PageProp/Category" href="./Category:Bar2"><table><tbody><tr><td>foo</td></tr></tbody></table>
13165 !!end
13166
13167 !!test
13168 Templates: Wiki Tables: 1a. Fostering of entire template content
13169 !! wikitext
13170 {|
13171 {{echo|a}}
13172 |}
13173 !! html
13174 <table>
13175 a
13176 <tr><td></td></tr></table>
13177
13178 !! html+tidy
13179 <p>a</p>
13180 <table>
13181 <tr>
13182 <td></td>
13183 </tr>
13184 </table>
13185 !! end
13186
13187 !!test
13188 Templates: Wiki Tables: 1b. Fostering of entire template content
13189 !! wikitext
13190 {|
13191 {{echo|<div>}}
13192 foo
13193 {{echo|</div>}}
13194 |}
13195 !! html
13196 <table>
13197 <div>
13198 <p>foo
13199 </p>
13200 </div>
13201 <tr><td></td></tr></table>
13202
13203 !! html+tidy
13204 <div>
13205 <p>foo</p>
13206 </div>
13207 <table>
13208 <tr>
13209 <td></td>
13210 </tr>
13211 </table>
13212 !! end
13213
13214 !!test
13215 Templates: Wiki Tables: 2. Fostering of partial template content
13216 !! wikitext
13217 {|
13218 {{echo|a
13219 <div>b</div>}}
13220 |}
13221 !! html
13222 <table>
13223 a
13224 <div>b</div>
13225 <tr><td></td></tr></table>
13226
13227 !! html+tidy
13228 <p>a</p>
13229 <div>b</div>
13230 <table>
13231 <tr>
13232 <td></td>
13233 </tr>
13234 </table>
13235 !! end
13236
13237 !!test
13238 Templates: Wiki Tables: 3. td-content via multiple templates
13239 !! wikitext
13240 {|
13241 {{echo|{{pipe}}a}}{{echo|b}}
13242 |}
13243 !! html
13244 <table>
13245 <tr>
13246 <td>ab
13247 </td></tr></table>
13248
13249 !!end
13250
13251 !!test
13252 Templates: Wiki Tables: 4. Templated tags, no content
13253 !! wikitext
13254 {{tbl-start}}
13255 {{tbl-end}}
13256 !! html
13257 <table>
13258 <tr><td></td></tr></table>
13259
13260 !!end
13261
13262 !!test
13263 Templates: Wiki Tables: 5. Templated tags, regular td-tags
13264 !! wikitext
13265 {{tbl-start}}
13266 |foo
13267 {{tbl-end}}
13268 !! html
13269 <table>
13270 <tr>
13271 <td>foo
13272 </td></tr></table>
13273
13274 !!end
13275
13276 !!test
13277 Templates: Wiki Tables: 6. Templated tags, templated td-tags
13278 !! wikitext
13279 {{tbl-start}}
13280 {{!}}foo
13281 {{tbl-end}}
13282 !! html
13283 <table>
13284 <tr>
13285 <td>foo
13286 </td></tr></table>
13287
13288 !!end
13289
13290 ## This test case is very specific to Parsoid's internals
13291 ## and is hence only tested for Parsoid's code. Parsoid uses
13292 ## a <meta> marker tag for <ref> tags and they are expanded
13293 ## much later. We are verifying that this <meta> tag usage
13294 ## doesn't prevent foster parenting.
13295 !!test
13296 Templates: Wiki Tables: 7. Fosterable <ref>s should get fostered
13297 !!wikitext
13298 {{PartialTable}}<ref>foo</ref>
13299 |}
13300
13301 <references />
13302 !!html/parsoid
13303 <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Transclusion mw:Extension/ref" data-mw='{"parts":[{"template":{"target":{"wt":"PartialTable","href":"./Template:PartialTable"},"params":{},"i":0}},"&lt;ref>foo&lt;/ref>\n|}"]}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span><table about="#mwt2">
13304 <tbody>
13305 </tbody></table>
13306
13307 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
13308 !!end
13309
13310 !! test
13311 Templates: Wiki Tables: 8. Fosterable meta-tags should get fostered
13312 !! wikitext
13313 {{echo|
13314 {{{!}}
13315 {{!}}-}}
13316 <onlyinclude>
13317 |foo
13318 </onlyinclude>
13319 {{!}}}
13320 !! html/parsoid
13321 <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"\n{{{!}}\n{{!}}-"}},"i":0}},"\n&lt;onlyinclude>\n|foo\n&lt;/onlyinclude>\n{{!}}}"]}'>
13322 </span><meta typeof="mw:Includes/OnlyInclude" about="#mwt1"/><table about="#mwt1">
13323 <tbody><tr>
13324
13325 <td>foo
13326 <meta typeof="mw:Includes/OnlyInclude/End"/></td></tr>
13327 </tbody></table>
13328 !! end
13329
13330 !!test
13331 Templates: Lists: Multi-line list-items via templates
13332 !! wikitext
13333 *{{echo|a {{nonexistent|
13334 unused}}}}
13335 *{{echo|b {{nonexistent|
13336 unused}}}}
13337 !! html
13338 <ul><li>a <a href="/index.php?title=Template:Nonexistent&amp;action=edit&amp;redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a></li>
13339 <li>b <a href="/index.php?title=Template:Nonexistent&amp;action=edit&amp;redlink=1" class="new" title="Template:Nonexistent (page does not exist)">Template:Nonexistent</a></li></ul>
13340
13341 !!end
13342
13343 !!test
13344 Templates: Ugly nesting: 1. Quotes opened/closed across templates (echo)
13345 !! wikitext
13346 {{echo|''a}}{{echo|b''c''d}}{{echo|''e}}
13347 !! html
13348 <p><i>ab</i>c<i>d</i>e
13349 </p>
13350 !!end
13351
13352 !!test
13353 Templates: Ugly nesting: 2. Quotes opened/closed across templates (echo_with_span)
13354 (PHP parser generates misnested html)
13355 !! wikitext
13356 {{echo_with_span|''a}}{{echo_with_span|b''c''d}}{{echo_with_span|''e}}
13357 !! html/parsoid
13358 <p><span about="#mwt1" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_span&quot;,&quot;href&quot;:&quot;./Template:Echo_with_span&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;''a&quot;}},&quot;i&quot;:0}}]}"><i>a</i></span><i about="#mwt2" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_span&quot;,&quot;href&quot;:&quot;./Template:Echo_with_span&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;b''c''d&quot;}},&quot;i&quot;:0}},{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_span&quot;,&quot;href&quot;:&quot;./Template:Echo_with_span&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;''e&quot;}},&quot;i&quot;:1}}]}"><span>b</span></i><span about="#mwt2">c</span><i about="#mwt2">d<span></span></i><span about="#mwt2">e</span></p>
13359 !!end
13360
13361 !!test
13362 Templates: Ugly nesting: 3. Quotes opened/closed across templates (echo_with_div)
13363 (PHP parser generates misnested html; Parsoid html2wt mode adds newlines between {{echo}}s)
13364 !! options
13365 parsoid=wt2html,wt2wt
13366 !! wikitext
13367 {{echo_with_div|''a}}{{echo_with_div|b''c''d}}{{echo_with_div|''e}}
13368 !! html
13369 <div about="#mwt1" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_div&quot;,&quot;href&quot;:&quot;./Template:Echo_with_div&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;''a&quot;}},&quot;i&quot;:0}}]}"><i>a</i></div>
13370 <div about="#mwt2" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_div&quot;,&quot;href&quot;:&quot;./Template:Echo_with_div&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;b''c''d&quot;}},&quot;i&quot;:0}}]}"><i>b</i>c<i>d</i></div>
13371 <div about="#mwt3" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_div&quot;,&quot;href&quot;:&quot;./Template:Echo_with_div&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;''e&quot;}},&quot;i&quot;:0}}]}">e</div>
13372 !!end
13373
13374 !!test
13375 Templates: Ugly nesting: 4. Divs opened/closed across templates
13376 !! wikitext
13377 a<div>b{{echo|c</div>d}}e
13378 !! html
13379 a<div>bc</div>de
13380
13381 !! html+tidy
13382 <p>a</p>
13383 <div>bc</div>
13384 <p>de</p>
13385 !! end
13386
13387 !!test
13388 Templates: Ugly templates: 1. Navbox template parses badly leading to table misnesting
13389 (Parsoid-centric)
13390 !! options
13391 parsoid
13392 !! wikitext
13393 {|
13394 |{{echo|foo</table>}}
13395 |bar
13396 |}
13397 !! html
13398 <table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["{|\n|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo</table>"}},"i":0}},"\n|bar\n|}"]}'>
13399
13400 <tbody>
13401 <tr>
13402 <td>foo</td></tr></tbody></table><span about="#mwt1">
13403 </span><span about="#mwt1">|bar</span><span about="#mwt1">
13404 |}</span>
13405 !!end
13406
13407 !!test
13408 Templates: Ugly templates: 2. Navbox template parses badly leading to table misnesting
13409 (Parsoid-centric)
13410 !! options
13411 parsoid
13412 !! wikitext
13413 <table>
13414 <tr>
13415 <td>
13416 <table>
13417 <tr>
13418 <td>1. {{echo|foo </table>}}</td>
13419 <td> bar </td>
13420 <td>2. {{echo|baz </table>}}</td>
13421 </tr>
13422 <tr>
13423 <td>abc</td>
13424 </tr>
13425 </table>
13426 </td>
13427 </tr>
13428 <tr>
13429 <td>xyz</td>
13430 </tr>
13431 </table>
13432 !! html
13433 <table about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["<table>\n <tr>\n <td>\n <table>\n <tr>\n <td>1. ",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo </table>"}},"i":0}},"</td>\n <td> bar </td>\n <td>2. ",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"baz </table>"}},"i":1}},"</td>\n </tr>\n <tr>\n <td>abc</td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td>xyz</td>\n </tr>\n</table>"]}'>
13434 <tbody><tr>
13435 <td>
13436 <table>
13437 <tbody><tr>
13438 <td>1. foo </td></tr></tbody></table></td>
13439 <td> bar </td>
13440 <td>2. baz </td></tr></tbody></table><span about="#mwt2">
13441 </span><span about="#mwt2">
13442 </span><span about="#mwt2">
13443 </span><span about="#mwt2">abc</span><span about="#mwt2">
13444 </span><span about="#mwt2">
13445 </span><span about="#mwt2">
13446 </span><span about="#mwt2">
13447 </span><span about="#mwt2">
13448 </span><span about="#mwt2">
13449 </span><span about="#mwt2">xyz</span><span about="#mwt2">
13450 </span><span about="#mwt2">
13451 </span>
13452 !!end
13453
13454 !! test
13455 Templates: Ugly templates: 3. newline-only template parameter
13456 !! wikitext
13457 foo {{echo|
13458 }}
13459 !! html
13460 <p>foo
13461 </p>
13462 !! end
13463
13464 # This looks like a bug: a single newline triggers p/br for some reason.
13465 !! test
13466 Templates: Ugly templates: 4. newline-only template parameter inconsistency
13467 !! wikitext
13468 {{echo|
13469 }}
13470 !! html
13471 <p><br />
13472 </p>
13473 !! end
13474
13475 # T66017 -- ugly wikitext with fostered content generates two template ranges that
13476 # have a true overlap (T1-start - T2-start - T1-end - T2-end).
13477 !! test
13478 Templates: Ugly templates: 5. Template encapsulation test: Non-trivial overlap of template ranges is properly handled
13479 !! wikitext
13480 {{echo|<table>}}
13481 {{echo|<div>foo}}
13482 {{echo|</table>}}
13483 !! html/parsoid
13484 <div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;table>"}},"i":0}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;div>foo"}},"i":1}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;/table>"}},"i":2}}]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}],[{"k":"1"}],[{"k":"1"}]]}'>foo
13485 </div><table about="#mwt1" data-parsoid='{"stx":"html"}'>
13486 </table>
13487 !! end
13488
13489 # T66017 -- ugly wikitext with fostered content generates two template ranges
13490 # that are "identical" and generate nesting cycles in the algorithm
13491 !! test
13492 Templates: Ugly templates: 6. Template encapsulation test: Cyclical nesting of template ranges is properly handled
13493 !! wikitext
13494 {{echo|<table><tr><td><table>}}
13495 {{echo|<div>}}
13496 {{echo|</div>}}
13497 !! html/parsoid
13498 <table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;table>&lt;tr>&lt;td>&lt;table>"}},"i":0}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;div>"}},"i":1}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;/div>"}},"i":2}}]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}],[{"k":"1"}],[{"k":"1"}]]}'><tbody><tr data-parsoid='{"stx":"html"}'><td data-parsoid='{"stx":"html"}'><div data-parsoid='{"stx":"html"}'>
13499 </div><table about="#mwt1" data-parsoid='{"stx":"html"}'>
13500 </table></td></tr></tbody></table>
13501 !! end
13502
13503 !! test
13504 Templates: Parameters substituted at the top-level
13505 !! wikitext
13506 {{{foo|''who'' {{echo|me}}? '''never!'''}}}
13507
13508 {{{foo|bar|baz}}}
13509 !! html/php
13510 <p><i>who</i> me? <b>never!</b>
13511 </p><p>bar
13512 </p>
13513 !! html/parsoid
13514 <p about="#mwt2" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"foo"},"params":{"1":{"wt":"&#39;&#39;who&#39;&#39; {{echo|me}}? &#39;&#39;&#39;never!&#39;&#39;&#39;"}},"i":0}}]}'><i>who</i> me? <b>never!</b></p>
13515
13516 <p about="#mwt3" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"foo"},"params":{"1":{"wt":"bar"},"2":{"wt":"baz"}},"i":0}}]}'>bar</p>
13517 !! end
13518
13519 !! test
13520 Templates: Param with empty arg in the final position
13521 !! wikitext
13522 {{{hi|}}}
13523 !! html/parsoid
13524 <span about="#mwt1" typeof="mw:Param" data-mw='{"parts":[{"templatearg":{"target":{"wt":"hi"},"params":{"1":{"wt":""}},"i":0}}]}'></span>
13525 !! end
13526
13527 !!test
13528 Parser Functions: 1. Simple example
13529 !! wikitext
13530 {{uc:foo}}
13531 !! html
13532 <p>FOO
13533 </p>
13534 !!end
13535
13536 !!test
13537 Parser Functions: 2. Nested use (only outermost should be marked up)
13538 !! wikitext
13539 {{uc:{{lc:FOO}}}}
13540 !! html
13541 <p>FOO
13542 </p>
13543 !!end
13544
13545 ###
13546 ### Pre-save transform tests
13547 ###
13548 !! test
13549 pre-save transform: subst:
13550 !! options
13551 pst
13552 !! wikitext
13553 {{subst:test}}
13554 !! html/php
13555 This is a test template
13556 !! end
13557
13558 !! test
13559 pre-save transform: normal template
13560 !! options
13561 pst
13562 !! wikitext
13563 {{test}}
13564 !! html/php
13565 {{test}}
13566 !! end
13567
13568 !! test
13569 pre-save transform: nonexistent template
13570 !! options
13571 pst
13572 !! wikitext
13573 {{thistemplatedoesnotexist}}
13574 !! html/php
13575 {{thistemplatedoesnotexist}}
13576 !! end
13577
13578 !! test
13579 pre-save transform: subst magic variables
13580 !! options
13581 pst
13582 !! wikitext
13583 {{subst:SITENAME}}
13584 !! html/php
13585 MediaWiki
13586 !! end
13587
13588 # This is T2089, which I fixed. -- wtm
13589 !! test
13590 pre-save transform: subst: templates with parameters
13591 !! options
13592 pst
13593 !! wikitext
13594 {{subst:paramtest|param="something else"}}
13595 !! html/php
13596 This is a test template with parameter "something else"
13597 !! end
13598
13599 !! article
13600 Template:nowikitest
13601 !! text
13602 <nowiki>'''not wiki'''</nowiki>
13603 !! endarticle
13604
13605 !! test
13606 pre-save transform: nowiki in subst (T3188)
13607 !! options
13608 pst
13609 !! wikitext
13610 {{subst:nowikitest}}
13611 !! html/php
13612 <nowiki>'''not wiki'''</nowiki>
13613 !! end
13614
13615 !! article
13616 Template:commenttest
13617 !! text
13618 This template has <!-- a comment --> in it.
13619 !! endarticle
13620
13621 !! test
13622 pre-save transform: comment in subst (T3936)
13623 !! options
13624 pst
13625 !! wikitext
13626 {{subst:commenttest}}
13627 !! html/php
13628 This template has <!-- a comment --> in it.
13629 !! end
13630
13631 !! test
13632 pre-save transform: unclosed tag
13633 !! options
13634 pst
13635 !! wikitext
13636 <nowiki>'''not wiki'''
13637 !! html/php
13638 <nowiki>'''not wiki'''
13639 !! end
13640
13641 !! test
13642 pre-save transform: mixed tag case
13643 !! options
13644 pst
13645 !! wikitext
13646 <NOwiki>'''not wiki'''</noWIKI>
13647 !! html/php
13648 <NOwiki>'''not wiki'''</noWIKI>
13649 !! end
13650
13651 !! test
13652 pre-save transform: unclosed comment in <nowiki>
13653 !! options
13654 pst
13655 !! wikitext
13656 wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
13657 !! html/php
13658 wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
13659 !!end
13660
13661 # Leading @ in this template definition works around a limitation
13662 # in parsoid's parserTests which otherwise strips the <span> from the
13663 # result (confusing it for a template wrapper)
13664 !! article
13665 Template:dangerous
13666 !!text
13667 @<span onmouseover="alert('crap')">Oh no</span>
13668 !!endarticle
13669
13670 !!test
13671 (confirming safety of fix for subst T3936)
13672 !! wikitext
13673 {{Template:dangerous}}
13674 !! html
13675 <p>@<span>Oh no</span>
13676 </p>
13677 !! end
13678
13679 !! test
13680 pre-save transform: comment containing gallery (T7024)
13681 !! options
13682 pst
13683 !! wikitext
13684 <!-- <gallery>data</gallery> -->
13685 !! html/php
13686 <!-- <gallery>data</gallery> -->
13687 !!end
13688
13689 !! test
13690 pre-save transform: comment containing extension
13691 !! options
13692 pst
13693 !! wikitext
13694 <!-- <tag>data</tag> -->
13695 !! html/php
13696 <!-- <tag>data</tag> -->
13697 !!end
13698
13699 !! test
13700 pre-save transform: comment containing nowiki
13701 !! options
13702 pst
13703 !! wikitext
13704 <!-- <nowiki>data</nowiki> -->
13705 !! html/php
13706 <!-- <nowiki>data</nowiki> -->
13707 !!end
13708
13709 !! test
13710 pre-save transform: <noinclude> in subst (T5298)
13711 !! options
13712 pst
13713 !! wikitext
13714 {{subst:Includes}}
13715 !! html/php
13716 Foobar
13717 !! end
13718
13719 !! test
13720 pre-save transform: <onlyinclude> in subst (T5298)
13721 !! options
13722 pst
13723 !! wikitext
13724 {{subst:Includes2}}
13725 !! html/php
13726 Foo
13727 !! end
13728
13729 !! article
13730 Template:SubstTest
13731 !!text
13732 {{<includeonly>subst:</includeonly>Includes}}
13733 !! endarticle
13734
13735 !! article
13736 Template:SafeSubstTest
13737 !! text
13738 {{<includeonly>safesubst:</includeonly>Includes}}
13739 !! endarticle
13740
13741 !! test
13742 T24297: safesubst: works during PST
13743 !! options
13744 pst
13745 !! wikitext
13746 {{subst:SafeSubstTest}}{{safesubst:SubstTest}}
13747 !! html/php
13748 FoobarFoobar
13749 !! end
13750
13751 !! test
13752 T24297: safesubst: works during normal parse
13753 !! wikitext
13754 {{SafeSubstTest}}
13755 !! html
13756 <p>Foobar
13757 </p>
13758 !! end
13759
13760 !! test
13761 subst: does not work during normal parse
13762 !! wikitext
13763 {{SubstTest}}
13764 !! html
13765 <p>{{subst:Includes}}
13766 </p>
13767 !! end
13768
13769 !! test
13770 pre-save transform: context links ("pipe trick")
13771 !! options
13772 pst
13773 !! wikitext
13774 [[Article (context)|]]
13775 [[Bar:Article|]]
13776 [[:Bar:Article|]]
13777 [[Bar:Article (context)|]]
13778 [[:Bar:Article (context)|]]
13779 [[|Article]]
13780 [[|Article (context)]]
13781 [[Bar:X (Y) Z|]]
13782 [[:Bar:X (Y) Z|]]
13783 !! html/php
13784 [[Article (context)|Article]]
13785 [[Bar:Article|Article]]
13786 [[:Bar:Article|Article]]
13787 [[Bar:Article (context)|Article]]
13788 [[:Bar:Article (context)|Article]]
13789 [[Article]]
13790 [[Article (context)]]
13791 [[Bar:X (Y) Z|X (Y) Z]]
13792 [[:Bar:X (Y) Z|X (Y) Z]]
13793 !! end
13794
13795 !! test
13796 pre-save transform: context links ("pipe trick") with interwiki prefix
13797 !! options
13798 pst
13799 !! wikitext
13800 [[interwiki:Article|]]
13801 [[:interwiki:Article|]]
13802 [[interwiki:Bar:Article|]]
13803 [[:interwiki:Bar:Article|]]
13804 !! html/php
13805 [[interwiki:Article|Article]]
13806 [[:interwiki:Article|Article]]
13807 [[interwiki:Bar:Article|Bar:Article]]
13808 [[:interwiki:Bar:Article|Bar:Article]]
13809 !! end
13810
13811 !! test
13812 pre-save transform: context links ("pipe trick") with parens in title
13813 !! options
13814 pst title=[[Somearticle (context)]]
13815 !! wikitext
13816 [[|Article]]
13817 !! html/php
13818 [[Article (context)|Article]]
13819 !! end
13820
13821 !! test
13822 pre-save transform: context links ("pipe trick") with comma in title
13823 !! options
13824 pst title=[[Someplace, Somewhere]]
13825 !! wikitext
13826 [[|Otherplace]]
13827 [[Otherplace, Elsewhere|]]
13828 [[Otherplace, Elsewhere, Anywhere|]]
13829 !! html/php
13830 [[Otherplace, Somewhere|Otherplace]]
13831 [[Otherplace, Elsewhere|Otherplace]]
13832 [[Otherplace, Elsewhere, Anywhere|Otherplace]]
13833 !! end
13834
13835 !! test
13836 pre-save transform: context links ("pipe trick") with parens and comma
13837 !! options
13838 pst title=[[Someplace (IGNORED), Somewhere]]
13839 !! wikitext
13840 [[|Otherplace]]
13841 [[Otherplace (place), Elsewhere|]]
13842 !! html/php
13843 [[Otherplace, Somewhere|Otherplace]]
13844 [[Otherplace (place), Elsewhere|Otherplace]]
13845 !! end
13846
13847 !! test
13848 pre-save transform: context links ("pipe trick") with comma and parens
13849 !! options
13850 pst title=[[Who, me? (context)]]
13851 !! wikitext
13852 [[|Yes, you.]]
13853 [[Me, Myself, and I (1937 song)|]]
13854 !! html/php
13855 [[Yes, you. (context)|Yes, you.]]
13856 [[Me, Myself, and I (1937 song)|Me, Myself, and I]]
13857 !! end
13858
13859 !! test
13860 pre-save transform: context links ("pipe trick") with namespace
13861 !! options
13862 pst title=[[Ns:Somearticle]]
13863 !! wikitext
13864 [[|Article]]
13865 !! html/php
13866 [[Ns:Article|Article]]
13867 !! end
13868
13869 !! test
13870 pre-save transform: context links ("pipe trick") with namespace and parens
13871 !! options
13872 pst title=[[Ns:Somearticle (context)]]
13873 !! wikitext
13874 [[|Article]]
13875 !! html/php
13876 [[Ns:Article (context)|Article]]
13877 !! end
13878
13879 !! test
13880 pre-save transform: context links ("pipe trick") with namespace and comma
13881 !! options
13882 pst title=[[Ns:Somearticle, Context, Whatever]]
13883 !! wikitext
13884 [[|Article]]
13885 !! html/php
13886 [[Ns:Article, Context, Whatever|Article]]
13887 !! end
13888
13889 !! test
13890 pre-save transform: context links ("pipe trick") with namespace, comma and parens
13891 !! options
13892 pst title=[[Ns:Somearticle, Context (context)]]
13893 !! wikitext
13894 [[|Article]]
13895 !! html/php
13896 [[Ns:Article (context)|Article]]
13897 !! end
13898
13899 !! test
13900 pre-save transform: context links ("pipe trick") with namespace, parens and comma
13901 !! options
13902 pst title=[[Ns:Somearticle (IGNORED), Context]]
13903 !! wikitext
13904 [[|Article]]
13905 !! html/php
13906 [[Ns:Article, Context|Article]]
13907 !! end
13908
13909 !! test
13910 pre-save transform: context links ("pipe trick") with full-width parens and no space (Japanese and Chinese style, T32149)
13911 !! options
13912 pst
13913 !! wikitext
13914 [[Article(context)|]]
13915 [[Bar:Article(context)|]]
13916 [[:Bar:Article(context)|]]
13917 [[|Article(context)]]
13918 [[Bar:X(Y)Z|]]
13919 [[:Bar:X(Y)Z|]]
13920 !! html/php
13921 [[Article(context)|Article]]
13922 [[Bar:Article(context)|Article]]
13923 [[:Bar:Article(context)|Article]]
13924 [[Article(context)]]
13925 [[Bar:X(Y)Z|X(Y)Z]]
13926 [[:Bar:X(Y)Z|X(Y)Z]]
13927 !! end
13928
13929 !! test
13930 pre-save transform: context links ("pipe trick") with full-width parens and space (Japanese and Chinese style, T32149)
13931 !! options
13932 pst
13933 !! wikitext
13934 [[Article (context)|]]
13935 [[Bar:Article (context)|]]
13936 [[:Bar:Article (context)|]]
13937 [[|Article (context)]]
13938 [[Bar:X (Y) Z|]]
13939 [[:Bar:X (Y) Z|]]
13940 !! html/php
13941 [[Article (context)|Article]]
13942 [[Bar:Article (context)|Article]]
13943 [[:Bar:Article (context)|Article]]
13944 [[Article (context)]]
13945 [[Bar:X (Y) Z|X (Y) Z]]
13946 [[:Bar:X (Y) Z|X (Y) Z]]
13947 !! end
13948
13949 !! test
13950 pre-save transform: context links ("pipe trick") with parens and no space (Korean style, T32149)
13951 !! options
13952 pst
13953 !! wikitext
13954 [[Article(context)|]]
13955 [[Bar:Article(context)|]]
13956 [[:Bar:Article(context)|]]
13957 [[|Article(context)]]
13958 [[Bar:X(Y)Z|]]
13959 [[:Bar:X(Y)Z|]]
13960 !! html/php
13961 [[Article(context)|Article]]
13962 [[Bar:Article(context)|Article]]
13963 [[:Bar:Article(context)|Article]]
13964 [[Article(context)]]
13965 [[Bar:X(Y)Z|X(Y)Z]]
13966 [[:Bar:X(Y)Z|X(Y)Z]]
13967 !! end
13968
13969 !! test
13970 pre-save transform: context links ("pipe trick") with commas (T23660)
13971 !! options
13972 pst
13973 !! wikitext
13974 [[Article (context), context|]]
13975 [[Article (context),context|]]
13976 [[Bar:Article (context), context|]]
13977 [[Bar:Article (context),context|]]
13978 [[:Bar:Article (context), context|]]
13979 [[:Bar:Article (context),context|]]
13980 !! html/php
13981 [[Article (context), context|Article]]
13982 [[Article (context),context|Article]]
13983 [[Bar:Article (context), context|Article]]
13984 [[Bar:Article (context),context|Article]]
13985 [[:Bar:Article (context), context|Article]]
13986 [[:Bar:Article (context),context|Article]]
13987 !! end
13988
13989 !! test
13990 Parsoid: backwards pipe trick
13991 !! wikitext
13992 [[|'''bar''']]
13993 !! html/php
13994 <p>[[|<b>bar</b>]]
13995 </p>
13996 !! html/parsoid
13997 <p>[[|<b>bar</b>]]</p>
13998 !! end
13999
14000 !! test
14001 pre-save transform: trim trailing empty lines
14002 !! options
14003 pst
14004 !! wikitext
14005 Empty lines are trimmed
14006
14007
14008
14009
14010 !! html/php
14011 Empty lines are trimmed
14012 !! end
14013
14014 !! test
14015 pre-save transform: Signature expansion
14016 !! options
14017 pst
14018 !! wikitext
14019 * ~~~
14020 * ~~~~
14021 * ~~~~~
14022 * <noinclude>~~~</noinclude>
14023 * <includeonly>~~~</includeonly>
14024 * <onlyinclude>~~~</onlyinclude>
14025 !! html/php
14026 * [[Special:Contributions/127.0.0.1|127.0.0.1]]
14027 * [[Special:Contributions/127.0.0.1|127.0.0.1]] 00:02, 1 January 1970 (UTC)
14028 * 00:02, 1 January 1970 (UTC)
14029 * <noinclude>[[Special:Contributions/127.0.0.1|127.0.0.1]]</noinclude>
14030 * <includeonly>[[Special:Contributions/127.0.0.1|127.0.0.1]]</includeonly>
14031 * <onlyinclude>[[Special:Contributions/127.0.0.1|127.0.0.1]]</onlyinclude>
14032 !! end
14033
14034
14035 !! test
14036 ParserOutput flags from signature expansion (T84843)
14037 !! options
14038 pst
14039 showflags
14040 !! wikitext
14041 ~~~~
14042 !! html/php
14043 [[Special:Contributions/127.0.0.1|127.0.0.1]] 00:02, 1 January 1970 (UTC)
14044 flags=user-signature
14045 !! end
14046
14047
14048 !! test
14049 pre-save transform: Signature expansion in nowiki tags (T2093)
14050 !! options
14051 pst disabled
14052 !! wikitext
14053 Shall not expand:
14054
14055 <nowiki>~~~~</nowiki>
14056
14057 <includeonly><nowiki>~~~~</nowiki></includeonly>
14058
14059 <noinclude><nowiki>~~~~</nowiki></noinclude>
14060
14061 <onlyinclude><nowiki>~~~~</nowiki></onlyinclude>
14062
14063 {{subst:Foo}} shall be converted to FOO
14064
14065 As well as inside noinclude/onlyinclude
14066 <noinclude>{{subst:Foo}}</noinclude>
14067 <onlyinclude>{{subst:Foo}}</onlyinclude>
14068
14069 But not inside includeonly
14070 <includeonly>{{subst:Foo}}</includeonly>
14071 !! html/php
14072 Shall not expand:
14073
14074 <nowiki>~~~~</nowiki>
14075
14076 <includeonly><nowiki>~~~~</nowiki></includeonly>
14077
14078 <noinclude><nowiki>~~~~</nowiki></noinclude>
14079
14080 <onlyinclude><nowiki>~~~~</nowiki></onlyinclude>
14081
14082 FOO shall be converted to FOO
14083
14084 As well as inside noinclude/onlyinclude
14085 <noinclude>FOO</noinclude>
14086 <onlyinclude>FOO</onlyinclude>
14087
14088 But not inside includeonly
14089 <includeonly>{{subst:Foo}}</includeonly>
14090 !! end
14091
14092 !! test
14093 Parsoid: Recognize nowiki with trailing space in tags
14094 !! options
14095 parsoid=wt2html
14096 !! wikitext
14097 <nowiki ><div>[[foo]]</nowiki >
14098
14099 a<nowiki / >b
14100
14101 c<nowiki />d
14102
14103 e<nowiki/ >f
14104 !! html
14105 <p><span typeof="mw:Nowiki">&lt;div&gt;[[foo]]</span></p>
14106 <p>ab</p>
14107 <p>cd</p>
14108 <p>ef</p>
14109 !! end
14110
14111 !! test
14112 Parsoid: Recognize nowiki with odd capitalization
14113 !! options
14114 parsoid=wt2html
14115 !! wikitext
14116 <noWikI ><div>[[foo]]</Nowiki >
14117 !! html
14118 <p><span typeof="mw:Nowiki">&lt;div&gt;[[foo]]</span></p>
14119 !! end
14120
14121
14122 !! test
14123 Parsoid: Escape nowiki with trailing space in tags
14124 !! options
14125 parsoid=html2wt
14126 !! html/parsoid
14127 <p>&lt;nowiki &gt; foo &lt/nowiki ></p>
14128 <p>a&lt;nowiki /&gt;b</p>
14129 <p>c&lt;nowiki/ &gt;d</p>
14130 !! wikitext
14131 &lt;nowiki &gt; foo &lt;/nowiki &gt;
14132
14133 a&lt;nowiki /&gt;b
14134
14135 c&lt;nowiki/ &gt;d
14136 !! end
14137
14138 !! test
14139 Parsoid: Escape weird noWikI capitalizations
14140 !! options
14141 parsoid=html2wt
14142 !! html/parsoid
14143 <p>&lt;noWikI &gt; foo &lt/NoWikI ></p>
14144 !! wikitext
14145 &lt;noWikI &gt; foo &lt;/NoWikI &gt;
14146 !! end
14147
14148 ###
14149 ### Message transform tests
14150 ###
14151 !! test
14152 message transform: magic variables
14153 !! options
14154 msg
14155 !! wikitext
14156 {{SITENAME}}
14157 !! html
14158 MediaWiki
14159 !! end
14160
14161 !! test
14162 message transform: should not transform wiki markup
14163 !! options
14164 msg
14165 !! wikitext
14166 ''test''
14167 !! html
14168 ''test''
14169 !! end
14170
14171 !! test
14172 message transform: <noinclude> in transcluded template (T6926)
14173 !! options
14174 msg
14175 !! wikitext
14176 {{Includes}}
14177 !! html
14178 Foobar
14179 !! end
14180
14181 !! test
14182 message transform: <onlyinclude> in transcluded template (T6926)
14183 !! options
14184 msg
14185 !! wikitext
14186 {{Includes2}}
14187 !! html
14188 Foo
14189 !! end
14190
14191 !! test
14192 {{#special:}} page name, known
14193 !! options
14194 msg
14195 !! wikitext
14196 {{#special:Recentchanges}}
14197 !! html
14198 Special:RecentChanges
14199 !! end
14200
14201 !! test
14202 {{#special:}} page name with subpage, known
14203 !! options
14204 msg
14205 !! wikitext
14206 {{#special:Recentchanges/param}}
14207 !! html
14208 Special:RecentChanges/param
14209 !! end
14210
14211 !! test
14212 {{#special:}} page name, unknown
14213 !! options
14214 msg
14215 !! wikitext
14216 {{#special:foobar nonexistent}}
14217 !! html
14218 Special:Foobar nonexistent
14219 !! end
14220
14221 !! test
14222 {{#speciale:}} page name, known
14223 !! options
14224 msg
14225 !! wikitext
14226 {{#speciale:Recentchanges}}
14227 !! html
14228 Special:RecentChanges
14229 !! end
14230
14231 !! test
14232 {{#speciale:}} page name with subpage, known
14233 !! options
14234 msg
14235 !! wikitext
14236 {{#speciale:Recentchanges/param}}
14237 !! html
14238 Special:RecentChanges/param
14239 !! end
14240
14241 !! test
14242 {{#speciale:}} page name, unknown
14243 !! options
14244 msg
14245 !! wikitext
14246 {{#speciale:foobar nonexistent}}
14247 !! html
14248 Special:Foobar_nonexistent
14249 !! end
14250
14251 ###
14252 ### Images
14253 ###
14254 ### For Parsoid-specific tests, see
14255 #### https://www.mediawiki.org/wiki/Parsoid/MediaWiki_DOM_spec#Images
14256
14257 !! test
14258 Simple image
14259 !! options
14260 parsoid=wt2html,wt2wt,html2html
14261 !! wikitext
14262 [[Image:foobar.jpg]]
14263 !! html/php
14264 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14265 </p>
14266 !! html/parsoid
14267 <p><span class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
14268 !! end
14269
14270 !! test
14271 Serialize simple image with figure-inline wrapper
14272 !! options
14273 parsoid=html2wt
14274 !! html/parsoid
14275 <p><figure-inline class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></figure-inline></p>
14276 !! wikitext
14277 [[File:Foobar.jpg]]
14278 !! end
14279
14280 !! test
14281 Simple image (using File: namespace, now canonical)
14282 !! wikitext
14283 [[File:Foobar.jpg]]
14284 !! html/php
14285 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14286 </p>
14287 !! html/parsoid
14288 <p><span class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
14289 !! end
14290
14291 !! test
14292 Right-aligned image
14293 !! wikitext
14294 [[File:Foobar.jpg|right]]
14295 !! html/php
14296 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
14297
14298 !! html/parsoid
14299 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></figure>
14300 !! end
14301
14302 !! test
14303 Image with caption
14304 !! wikitext
14305 [[File:Foobar.jpg|right|Caption text]]
14306 !! html/php
14307 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
14308
14309 !! html/parsoid
14310 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>Caption text</figcaption></figure>
14311 !! end
14312
14313 !! test
14314 Image with caption, T55312 #1
14315 !! wikitext
14316 [[File:Foobar.jpg|right|Caption page stuff]]
14317 !! html/php
14318 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption page stuff"><img alt="Caption page stuff" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
14319
14320 !! html/parsoid
14321 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>Caption page stuff</figcaption></figure>
14322 !! end
14323
14324 !! test
14325 Image with caption, T55312 #2
14326 !! wikitext
14327 [[File:Foobar.jpg|right|Caption page=]]
14328 !! html/php
14329 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption page="><img alt="Caption page=" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
14330
14331 !! html/parsoid
14332 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>Caption page=</figcaption></figure>
14333 !! end
14334
14335 !! test
14336 Image with caption, T55312 #3
14337 !! wikitext
14338 [[File:Foobar.jpg|right|Caption page=stuff]]
14339 !! html/php
14340 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption page=stuff"><img alt="Caption page=stuff" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
14341
14342 !! html/parsoid
14343 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>Caption page=stuff</figcaption></figure>
14344 !! end
14345
14346 !! test
14347 Image caption with pipe entity
14348 !! wikitext
14349 [[File:Foobar.jpg|thumb|one &#x7C; two]]
14350 [[File:Foobar.jpg|thumb|one ''two'' &#x7C; three]]
14351 !! html/php
14352 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>one &#x7c; two</div></div></div>
14353 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>one <i>two</i> &#x7c; three</div></div></div>
14354
14355 !! html/parsoid
14356 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>one <span typeof="mw:Entity">|</span> two</figcaption></figure>
14357 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>one <i>two</i> <span typeof="mw:Entity">|</span> three</figcaption></figure>
14358 !! end
14359
14360 !! test
14361 Allow empty links in image captions (T62753)
14362 !! options
14363 thumbsize=220
14364 !! wikitext
14365 [[File:Foobar.jpg|thumb|Caption [[Link1]]
14366 [[]]
14367 [[Link2]]
14368 ]]
14369 !! html/php
14370 <div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Caption <a href="/index.php?title=Link1&amp;action=edit&amp;redlink=1" class="new" title="Link1 (page does not exist)">Link1</a> [[]] <a href="/index.php?title=Link2&amp;action=edit&amp;redlink=1" class="new" title="Link2 (page does not exist)">Link2</a></div></div></div>
14371
14372 !! html/parsoid
14373 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption [[Link1]]\n[[]]\n[[Link2]]\n"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>Caption <a rel="mw:WikiLink" href="./Link1" title="Link1" data-parsoid='{"stx":"simple","a":{"href":"./Link1"},"sa":{"href":"Link1"}}'>Link1</a>
14374 [[]]
14375 <a rel="mw:WikiLink" href="./Link2" title="Link2" data-parsoid='{"stx":"simple","a":{"href":"./Link2"},"sa":{"href":"Link2"}}'>Link2</a>
14376 </figcaption></figure>
14377 !! end
14378
14379 !! test
14380 Titles in unlinked images (T23454)
14381 !! wikitext
14382 [[File:Foobar.jpg|link=|stuff]]
14383 !! html/php
14384 <p><img alt="stuff" src="http://example.com/images/3/3a/Foobar.jpg" title="stuff" width="1941" height="220" />
14385 </p>
14386 !! end
14387
14388 !! test
14389 Link with empty target
14390 !! wikitext
14391 [[]]
14392 !! html
14393 <p>[[]]
14394 </p>
14395 !! end
14396
14397 !! test
14398 Image with link trail
14399 !! wikitext
14400 Linktrails should not work for images: [[File:Foobar.jpg]]s
14401 !! html/php
14402 <p>Linktrails should not work for images: <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>s
14403 </p>
14404 !! html/parsoid
14405 <p>Linktrails should not work for images: <span class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span>s</p>
14406 !! end
14407
14408 !! test
14409 Image with empty attribute
14410 !! options
14411 parsoid=wt2html,wt2wt,html2html
14412 !! wikitext
14413 [[File:Foobar.jpg|right||Caption text]]
14414 !! html/php
14415 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
14416
14417 !! html/parsoid
14418 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>Caption text</figcaption></figure>
14419 !! end
14420
14421 !! test
14422 1. Block image with individual attributes from templates
14423 !! wikitext
14424 [[File:Foobar.jpg|thumb|{{echo|137px}}|This is a caption]]
14425 !! html/php
14426 <div class="thumb tright"><div class="thumbinner" style="width:139px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" width="137" height="16" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/274px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is a caption</div></div></div>
14427
14428 !! html/parsoid
14429 <figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"{{echo|137px}}"},{"ck":"caption","ak":"This is a caption"}]}' data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[24,38,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"137px\"}},\"i\":0}}]}&#39;>137px&lt;/span>"}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="16" width="137" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"16","width":"137"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>This is a caption</figcaption></figure>
14430 !! end
14431
14432 !! test
14433 2. Block Image with individual attributes from templates
14434 !! wikitext
14435 [[File:Foobar.jpg|{{echo|thumb}}|{{echo|137px}}|This is a caption]]
14436 !! html/php
14437 <div class="thumb tright"><div class="thumbinner" style="width:139px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" width="137" height="16" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/274px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is a caption</div></div></div>
14438
14439 !! html/parsoid
14440 <figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt3" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"{{echo|thumb}}"},{"ck":"width","ak":"{{echo|137px}}"},{"ck":"caption","ak":"This is a caption"}]}' data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[18,32,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"thumb\"}},\"i\":0}}]}&#39;>thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[33,47,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"137px\"}},\"i\":0}}]}&#39;>137px&lt;/span>"}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="16" width="137" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"16","width":"137"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>This is a caption</figcaption></figure>
14441 !! end
14442
14443 !! test
14444 3. Inline image with individual attributes from templates
14445 !! wikitext
14446 [[File:Foobar.jpg|{{echo|50px}}]]
14447 !! html/php
14448 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg 2x" /></a>
14449 </p>
14450 !! html/parsoid
14451 <p><span typeof="mw:Image mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}' data-mw='{"attribs":[["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[18,31,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"50px\"}},\"i\":0}}]}&#39;>50px&lt;/span>"}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
14452 !! end
14453
14454 ## Parsoid does not provide editing support for images where templates produce multiple image attributes.
14455 ## To signal this, we add a 'mw:Placeholder' type to such images. This could change in the future.
14456 !! test
14457 Image with multiple attributes from the same template
14458 !! wikitext
14459 [[File:Foobar.jpg|{{image_attribs}}]]
14460 !! html/php
14461 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
14462
14463 !! html/parsoid
14464 <figure class="mw-default-size mw-halign-right" typeof="mw:Image mw:Placeholder"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>Caption text</figcaption></figure>
14465 !! end
14466
14467 !! test
14468 Image with link tails
14469 !! options
14470 thumbsize=220
14471 !! wikitext
14472 123[[File:Foobar.jpg]]456
14473 123[[File:Foobar.jpg|right]]456
14474 123[[File:Foobar.jpg|thumb]]456
14475 !! html/php
14476 <p>123<a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>456
14477 </p>
14478 123<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>456
14479 123<div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div></div></div></div>456
14480
14481 !! html/php+tidy
14482 <p>123<a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>456</p>
14483 <p>123</p>
14484 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
14485 <p>456 123</p>
14486 <div class="thumb tright">
14487 <div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>
14488 <div class="thumbcaption">
14489 <div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
14490 </div>
14491 </div>
14492 </div>
14493 <p>456</p>
14494 !! html/parsoid
14495 <p>123<span class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span>456</p>
14496 <p>123</p><figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></figure><p>456</p>
14497 <p>123</p><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></figure><p>456</p>
14498 !! end
14499
14500 !! test
14501 Image with multiple captions -- only last one is accepted
14502 !! wikitext
14503 [[File:Foobar.jpg|right|Caption1 - ignored|[[Caption2]] - ignored|Caption3 - accepted]]
14504 !! html/php
14505 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption3 - accepted"><img alt="Caption3 - accepted" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
14506
14507 !! html/parsoid
14508 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>Caption3 - accepted</figcaption></figure>
14509 !! end
14510
14511 !! test
14512 Image with multiple widths -- use last
14513 !! wikitext
14514 [[File:Foobar.jpg|200px|300px|caption]]
14515 !! html/php
14516 <p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" width="300" height="34" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/450px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/600px-Foobar.jpg 2x" /></a>
14517 </p>
14518 !! html/parsoid
14519 <p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></span></p>
14520 !! end
14521
14522 !! test
14523 Image with multiple alignments -- use first (T50664)
14524 !! options
14525 thumbsize=220
14526 !! wikitext
14527 [[File:Foobar.jpg|thumb|left|right|center|caption]]
14528
14529 [[File:Foobar.jpg|middle|text-top|caption]]
14530 !! html/php
14531 <div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
14532 <p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" style="vertical-align: middle" /></a>
14533 </p>
14534 !! html/parsoid
14535 <figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
14536 <p><span class="mw-default-size mw-valign-middle" typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
14537 !! end
14538
14539 !! test
14540 Image with width attribute at different positions
14541 !! wikitext
14542 [[File:Foobar.jpg|200px|right|Caption]]
14543 [[File:Foobar.jpg|right|200px|Caption]]
14544 [[File:Foobar.jpg|right|Caption|200px]]
14545 !! html/php
14546 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
14547 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
14548 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
14549
14550 !! html/parsoid
14551 <figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>Caption</figcaption></figure>
14552 <figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>Caption</figcaption></figure>
14553 <figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>Caption</figcaption></figure>
14554 !! end
14555
14556 # a sad bit of backward-compatibility
14557 !! test
14558 Image with size specified with pxpx (T15500, T53628)
14559 !! options
14560 parsoid=wt2html,wt2wt,html2html
14561 !! wikitext
14562 [[File:Foobar.jpg|20pxpx]]
14563 [[File:Foobar.jpg|200x20pxpx]]
14564 !! html/php
14565 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" width="20" height="2" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/30px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/40px-Foobar.jpg 2x" /></a>
14566 <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/177px-Foobar.jpg" width="177" height="20" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/265px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/353px-Foobar.jpg 2x" /></a>
14567 </p>
14568 !! html/parsoid
14569 <p><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="2" width="20"/></a></span> <span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/177px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="20" width="177"/></a></span></p>
14570 !! end
14571
14572 !! test
14573 Image with link parameter, wiki target
14574 !! wikitext
14575 [[File:Foobar.jpg|link=Main Page]]
14576 !! html/php
14577 <p><a href="/wiki/Main_Page" title="Main Page"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14578 </p>
14579 !! html/parsoid
14580 <p><span class="mw-default-size" typeof="mw:Image"><a href="./Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
14581 !! end
14582
14583 # parsoid T51293 (part 1)
14584 !! test
14585 Image with link parameter, URL target
14586 !! wikitext
14587 [[File:Foobar.jpg|link=http://example.com/]]
14588 !! html/php
14589 <p><a href="http://example.com/" rel="nofollow"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14590 </p>
14591 !! html/parsoid
14592 <p><span class="mw-default-size" typeof="mw:Image"><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
14593 !! end
14594
14595 # parsoid T51293 (part 2)
14596 !! test
14597 Image with link parameter, protocol-less URL target
14598 !! wikitext
14599 [[File:Foobar.jpg|link=//example.com/]]
14600 !! html/php
14601 <p><a href="//example.com/" rel="nofollow"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14602 </p>
14603 !! html/parsoid
14604 <p><span class="mw-default-size" typeof="mw:Image"><a href="//example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
14605 !! end
14606
14607 !! test
14608 Escaping non-block captions (T107435)
14609 !! options
14610 parsoid={
14611 "modes": ["wt2wt"],
14612 "changes": [
14613 ["[typeof~='mw:Image']", "attr", "data-mw", "{\"caption\": \"|\"}"]
14614 ]
14615 }
14616 !! wikitext
14617 [[Image:Foobar.jpg|caption]]
14618 !! wikitext/edited
14619 [[Image:Foobar.jpg|<nowiki>|</nowiki>]]
14620 !! end
14621
14622 # wgExternalLinkTarget not supported by Parsoid
14623 !! test
14624 Image with link parameter, wgExternalLinkTarget
14625 !! wikitext
14626 [[Image:foobar.jpg|link=http://example.com/]]
14627 !! config
14628 wgExternalLinkTarget='foobar'
14629 !! html/php
14630 <p><a href="http://example.com/" target="foobar" rel="nofollow noreferrer noopener"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14631 </p>
14632 !! end
14633
14634 !! test
14635 Image with link parameter, wgNoFollowLinks set to false
14636 !! wikitext
14637 [[Image:foobar.jpg|link=http://example.com/]]
14638 !! config
14639 wgNoFollowLinks=false
14640 !! html
14641 <p><a href="http://example.com/"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14642 </p>
14643 !! end
14644
14645 !! test
14646 Image with link parameter, wgNoFollowDomainExceptions
14647 !! wikitext
14648 [[Image:foobar.jpg|link=http://example.com/]]
14649 !! config
14650 wgNoFollowDomainExceptions='example.com'
14651 !! html
14652 <p><a href="http://example.com/"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14653 </p>
14654 !! end
14655
14656 # wgExternalLinkTarget not supported by Parsoid
14657 !! test
14658 Image with link parameter, wgExternalLinkTarget, unnamed parameter
14659 !! wikitext
14660 [[Image:foobar.jpg|link=http://example.com/|Title]]
14661 !! config
14662 wgExternalLinkTarget='foobar'
14663 !! html/php
14664 <p><a href="http://example.com/" title="Title" target="foobar" rel="nofollow noreferrer noopener"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14665 </p>
14666 !! end
14667
14668 !! test
14669 Image with empty link parameter
14670 !! wikitext
14671 [[File:Foobar.jpg|link=]]
14672 !! html/php
14673 <p><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" />
14674 </p>
14675 !! html/parsoid
14676 <p><span class="mw-default-size" typeof="mw:Image"><span><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></span></span></p>
14677 !! end
14678
14679 !! test
14680 Image with link parameter (wiki target) and unnamed parameter
14681 !! wikitext
14682 [[File:Foobar.jpg|link=Main_Page|Title]]
14683 !! html/php
14684 <p><a href="/wiki/Main_Page" title="Title"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14685 </p>
14686 !! html/parsoid
14687 <p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="./Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
14688 !! end
14689
14690 !! test
14691 Image with link parameter (URL target) and unnamed parameter
14692 !! wikitext
14693 [[File:Foobar.jpg|link=http://example.com/|Title]]
14694 !! html/php
14695 <p><a href="http://example.com/" title="Title" rel="nofollow"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14696 </p>
14697 !! html/parsoid
14698 <p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
14699 !! end
14700
14701 !! test
14702 Thumbnail image with link parameter
14703 !! options
14704 thumbsize=220
14705 parsoid=wt2html,wt2wt,html2html
14706 !! wikitext
14707 [[File:Foobar.jpg|thumb|link=http://example.com/|Title]]
14708 !! html/php
14709 <div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="http://example.com/"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
14710
14711 !! html/parsoid
14712 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>Title</figcaption></figure>
14713 !! end
14714
14715 !! test
14716 Manually-specified thumbnail image
14717 !! options
14718 thumbsize=220
14719 !! wikitext
14720 [[File:Foobar.jpg|thumbnail=Thumb.png|Title]]
14721 !! html/php
14722 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/File:Foobar.jpg"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
14723
14724 !! html/parsoid
14725 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
14726 !! end
14727
14728 !! test
14729 Manually-specified thumbnail image with explicit link to wiki page
14730 !! options
14731 thumbsize=220
14732 parsoid=wt2html,wt2wt,html2html
14733 !! wikitext
14734 [[File:Foobar.jpg|thumb=Thumb.png|link=Main_Page|Title]]
14735 !! html/php
14736 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
14737
14738 !! html/parsoid
14739 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="./Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
14740 !! end
14741
14742 !! test
14743 Manually-specified thumbnail image with explicit link to url
14744 !! options
14745 thumbsize=220
14746 parsoid=wt2html,wt2wt,html2html
14747 !! wikitext
14748 [[File:Foobar.jpg|thumb=Thumb.png|link=http://example.com|Title]]
14749 !! html/php
14750 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="http://example.com"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
14751
14752 !! html/parsoid
14753 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="http://example.com"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
14754 !! end
14755
14756 !! test
14757 Manually-specified thumbnail image with explicit no link
14758 !! options
14759 thumbsize=220
14760 parsoid=wt2html,wt2wt,html2html
14761 !! wikitext
14762 [[File:Foobar.jpg|thumb=Thumb.png|link=|Title]]
14763 !! html/php
14764 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
14765
14766 !! html/parsoid
14767 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><span><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></span><figcaption>Title</figcaption></figure>
14768 !! end
14769
14770 !! test
14771 Manually-specified thumbnail image with explicit link and alt text
14772 !! options
14773 thumbsize=220
14774 parsoid=wt2html,wt2wt,html2html
14775 !! wikitext
14776 [[File:Foobar.jpg|thumb=Thumb.png|link=Main_Page|alt=alttext|Title]]
14777 !! html/php
14778 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="alttext" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
14779
14780 !! html/parsoid
14781 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="./Main_Page"><img alt="alttext" resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
14782 !! end
14783
14784 !! test
14785 Image with frame and link
14786 !! options
14787 parsoid=wt2html,wt2wt,html2html
14788 !! wikitext
14789 [[File:Foobar.jpg|frame|left|This is a test image [[Main Page]]]]
14790 !! html/php
14791 <div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" 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>
14792
14793 !! html/parsoid
14794 <figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></figcaption></figure>
14795 !! end
14796
14797 !! test
14798 Image with frame and link and explicit alt
14799 !! options
14800 parsoid=wt2html,wt2wt,html2html
14801 !! wikitext
14802 [[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]|alt=Altitude]]
14803 !! html/php
14804 <div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Altitude" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" 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>
14805
14806 !! html/parsoid
14807 <figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img alt="Altitude" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></figcaption></figure>
14808 !! end
14809
14810 !! test
14811 Image with wiki markup in implicit alt
14812 !! wikitext
14813 [[Image:Foobar.jpg|testing '''bold''' in alt]]
14814
14815 [[Image:Foobar.jpg|alt=testing '''bold''' in alt]]
14816 !! html/php
14817 <p><a href="/wiki/File:Foobar.jpg" class="image" title="testing bold in alt"><img alt="testing bold in alt" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14818 </p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="testing bold in alt" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
14819 </p>
14820 !! html/parsoid
14821 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"testing &#39;&#39;&#39;bold&#39;&#39;&#39; in alt"}]}' data-mw='{"caption":"testing &lt;b data-parsoid=&#39;{\"dsr\":[27,37,3,3]}&#39;>bold&lt;/b> in alt"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"Image:Foobar.jpg"}}'/></a></span></p>
14822
14823 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"alt","ak":"alt=testing &#39;&#39;&#39;bold&#39;&#39;&#39; in alt"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img alt="testing bold in alt" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"alt":"testing bold in alt","resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"alt":"alt=testing &#39;&#39;&#39;bold&#39;&#39;&#39; in alt","resource":"Image:Foobar.jpg"}}'/></a></span></p>
14824 !! end
14825
14826 !! test
14827 Alt image option should handle most kinds of wikitext without barfing
14828 !! wikitext
14829 [[Image:Foobar.jpg|thumb|This is the image caption|alt=This is a [[link]] and a {{echo|''bold template''}}.]]
14830 !! html/php
14831 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a link and a bold template." src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is the image caption</div></div></div>
14832
14833 !! html/parsoid
14834 <figure class="mw-default-size" typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"This is the image caption"},{"ck":"alt","ak":"alt=This is a [[link]] and a {{echo|&#39;&#39;bold template&#39;&#39;}}."}]}' data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["alt",{"html":"alt=This is a &lt;a rel=\"mw:WikiLink\" href=\"./Link\" title=\"Link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Link\"},\"sa\":{\"href\":\"link\"},\"dsr\":[65,73,2,2]}&#39;>link&lt;/a> and a &lt;i about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"dsr\":[80,106,null,null],\"pi\":[[{\"k\":\"1\"}]]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&amp;#39;&amp;#39;bold template&amp;#39;&amp;#39;\"}},\"i\":0}}]}&#39;>bold template&lt;/i>."}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img alt="This is a link and a bold template." resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"alt":"This is a link and a bold template.","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=This is a [[link]] and a {{echo|&#39;&#39;bold template&#39;&#39;}}.","resource":"Image:Foobar.jpg"}}'/></a><figcaption>This is the image caption</figcaption></figure>
14835 !! end
14836
14837 !! test
14838 Image with nested tables in caption
14839 !! wikitext
14840 [[File:Foobar.jpg|thumb|Foo<br />
14841 {|
14842 |
14843 {|
14844 |z
14845 |}
14846 |}
14847 ]]
14848 !! html/parsoid
14849 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Foo&lt;br/>\n{|\n|\n{|\n|z\n|}\n|}\n"}]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption data-parsoid='{"dsr":[null,50,null,null]}'>Foo<br data-parsoid='{"stx":"html","selfClose":true}'/>
14850 <table>
14851 <tbody><tr><td>
14852 <table>
14853 <tbody><tr><td>z</td></tr>
14854 </tbody></table></td></tr>
14855 </tbody></table>
14856 </figcaption></figure>
14857 !! end
14858
14859 ###################
14860 # Conflicting image format options.
14861 # First option specified should 'win'.
14862 # All three cases in each test should be identical.
14863
14864 !! test
14865 Image with 'frameless' first.
14866 !! options
14867 parsoid=wt2html,wt2wt,html2html
14868 !! wikitext
14869 [[File:Foobar.jpg|frameless|caption]]
14870
14871 [[File:Foobar.jpg|frameless|frame|caption]]
14872
14873 [[File:Foobar.jpg|frameless|thumb|caption]]
14874 !! html/php
14875 <p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
14876 </p><p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
14877 </p><p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
14878 </p>
14879 !! html/parsoid
14880 <p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
14881 <p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
14882 <p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
14883 !! end
14884
14885 !! test
14886 Image with 'frame' first.
14887 !! options
14888 parsoid=wt2html,wt2wt,html2html
14889 !! wikitext
14890 [[File:Foobar.jpg|frame|caption]]
14891 [[File:Foobar.jpg|frame|frameless|caption]]
14892 [[File:Foobar.jpg|frame|thumb|caption]]
14893 !! html/php
14894 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a> <div class="thumbcaption">caption</div></div></div>
14895 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a> <div class="thumbcaption">caption</div></div></div>
14896 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a> <div class="thumbcaption">caption</div></div></div>
14897
14898 !! html/parsoid
14899 <figure class="mw-default-size" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
14900 <figure class="mw-default-size" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
14901 <figure class="mw-default-size" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
14902 !! end
14903
14904 !! test
14905 Image with 'thumb' first.
14906 !! options
14907 parsoid=wt2html,wt2wt,html2html
14908 !! wikitext
14909 [[File:Foobar.jpg|thumb|caption]]
14910 [[File:Foobar.jpg|thumb|frameless|caption]]
14911 [[File:Foobar.jpg|thumb|frame|caption]]
14912 !! html/php
14913 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
14914 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
14915 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
14916
14917 !! html/parsoid
14918 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
14919 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
14920 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
14921 !! end
14922
14923 ###################
14924 # Image sizing.
14925 # See https://www.mediawiki.org/wiki/Help:Images#Size_and_frame
14926 # and https://phabricator.wikimedia.org/T64258
14927 # Foobar has actual size of 1941x220
14928 # 1. Thumbs & frameless always reduce, can't be enlarged unless it's
14929 # a scalable format.
14930 # 2. Framed images always ignore size options; always render at default size.
14931 # 3. "Unspecified format" and border are the only types which can be
14932 # enlarged.
14933
14934 !! test
14935 Image: unspecified format and border enlarge
14936 !! options
14937 parsoid=wt2html,wt2wt,html2html
14938 !! wikitext
14939 [[File:Foobar.jpg|2000px]]
14940
14941 [[File:Foobar.jpg|border|2000px]]
14942 !! html/php
14943 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="2000" height="227" /></a>
14944 </p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="2000" height="227" class="thumbborder" /></a>
14945 </p>
14946 !! html/parsoid
14947 <p><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="227" width="2000"/></a></span></p>
14948 <p><span class="mw-image-border" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="227" width="2000"/></a></span></p>
14949 !! end
14950
14951 !! test
14952 Image: "unspecified format" and border reduce
14953 !! options
14954 parsoid=wt2html,wt2wt,html2html
14955 !! wikitext
14956 [[File:Foobar.jpg|1000px]]
14957
14958 [[File:Foobar.jpg|border|1000px]]
14959 !! html/php
14960 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/1000px-Foobar.jpg" width="1000" height="113" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/1500px-Foobar.jpg 1.5x, http://example.com/images/3/3a/Foobar.jpg 2x" /></a>
14961 </p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/1000px-Foobar.jpg" width="1000" height="113" class="thumbborder" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/1500px-Foobar.jpg 1.5x, http://example.com/images/3/3a/Foobar.jpg 2x" /></a>
14962 </p>
14963 !! html/parsoid
14964 <p><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/1000px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="113" width="1000"/></a></span></p>
14965 <p><span class="mw-image-border" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/1000px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="113" width="1000"/></a></span></p>
14966 !! end
14967
14968 !! test
14969 Image: thumbs reduce
14970 !! options
14971 parsoid=wt2html,wt2wt,html2html
14972 !! wikitext
14973 [[File:Foobar.jpg|thumb|50px]]
14974 !! html/php
14975 <div class="thumb tright"><div class="thumbinner" style="width:52px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div></div></div></div>
14976
14977 !! html/parsoid
14978 <figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></figure>
14979 !! end
14980
14981 !! test
14982 Image: bitmap thumbs can't be enlarged past original size, but vector can.
14983 !! options
14984 parsoid=wt2html,wt2wt,html2html
14985 !! wikitext
14986 [[File:Foobar.jpg|thumb|2000px]]
14987
14988 [[File:Foobar.svg|thumb|2000px]]
14989 !! html/php
14990 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div></div></div></div>
14991 <div class="thumb tright"><div class="thumbinner" style="width:2002px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="Foobar.svg" src="http://example.com/images/thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png" width="2000" height="1500" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/3000px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/4000px-Foobar.svg.png 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"></a></div></div></div></div>
14992
14993 !! html/parsoid
14994 <figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></figure>
14995 <figure typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png" data-file-width="240" data-file-height="180" data-file-type="drawing" height="1500" width="2000"/></a></figure>
14996 !! end
14997
14998 !! test
14999 Image: frameless can reduce in size
15000 !! options
15001 parsoid=wt2html,wt2wt,html2html
15002 !! wikitext
15003 [[File:Foobar.jpg|frameless|50px]]
15004 !! html/php
15005 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg 2x" /></a>
15006 </p>
15007 !! html/parsoid
15008 <p><span typeof="mw:Image/Frameless"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
15009 !! end
15010
15011 !! test
15012 Image: bitmap frameless can't be enlarged past original size, but vector can
15013 !! options
15014 parsoid=wt2html,wt2wt,html2html
15015 !! wikitext
15016 [[File:Foobar.jpg|frameless|2000px]]
15017
15018 [[File:Foobar.svg|frameless|2000px]]
15019 !! html/php
15020 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
15021 </p><p><a href="/wiki/File:Foobar.svg" class="image"><img alt="Foobar.svg" src="http://example.com/images/thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png" width="2000" height="1500" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/3000px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/4000px-Foobar.svg.png 2x" /></a>
15022 </p>
15023 !! html/parsoid
15024 <p><span typeof="mw:Image/Frameless"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
15025 <p><span typeof="mw:Image/Frameless"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png" data-file-width="240" data-file-height="180" data-file-type="drawing" height="1500" width="2000"/></a></span></p>
15026 !! end
15027
15028 !! test
15029 Image: framed images are always unscaled.
15030 !! options
15031 parsoid=wt2html,wt2wt,html2html
15032 !! wikitext
15033 [[File:Foobar.jpg|frame]]
15034
15035 [[File:Foobar.jpg|frame|50px]]
15036
15037 [[File:Foobar.jpg|frame|50x50px]]
15038
15039 [[File:Foobar.jpg|frame|2000px]]
15040 !! html/php
15041 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a> <div class="thumbcaption"></div></div></div>
15042 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a> <div class="thumbcaption"></div></div></div>
15043 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a> <div class="thumbcaption"></div></div></div>
15044 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a> <div class="thumbcaption"></div></div></div>
15045
15046 !! html/parsoid
15047 <figure class="mw-default-size" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></figure>
15048 <figure typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></figure>
15049 <figure typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></figure>
15050 <figure typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></figure>
15051 !! end
15052
15053 ###################
15054
15055 !! test
15056 Link to image page- image page normally doesn't exists, hence edit link
15057 Add test with existing image page
15058 #<p><a href="/wiki/File:Test" title="Image:Test">Image:test</a>
15059 !! wikitext
15060 [[:Image:test]]
15061 !! html
15062 <p><a href="/index.php?title=File:Test&amp;action=edit&amp;redlink=1" class="new" title="File:Test (page does not exist)">Image:test</a>
15063 </p>
15064 !! end
15065
15066 !! test
15067 T20784 Link to non-existent image page with caption should use caption as link text
15068 !! wikitext
15069 [[:Image:test|caption]]
15070 !! html
15071 <p><a href="/index.php?title=File:Test&amp;action=edit&amp;redlink=1" class="new" title="File:Test (page does not exist)">caption</a>
15072 </p>
15073 !! end
15074
15075 !! test
15076 Frameless image caption with a free URL
15077 !! wikitext
15078 [[File:Foobar.jpg|http://example.com]]
15079 !! html/php
15080 <p><a href="/wiki/File: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" /></a>
15081 </p>
15082 !! html/parsoid
15083 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"http://example.com"}]}' data-mw='{"caption":"&lt;a rel=\"mw:ExtLink\" href=\"http://example.com\" data-parsoid=&#39;{\"stx\":\"url\",\"dsr\":[18,36,0,0]}&#39;>http://example.com&lt;/a>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15084 !! end
15085
15086 !! test
15087 Thumbnail image caption with a free URL
15088 !! options
15089 thumbsize=220
15090 !! wikitext
15091 [[File:Foobar.jpg|thumb|http://example.com]]
15092 !! html/php
15093 <div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div></div></div>
15094
15095 !! html/parsoid
15096 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
15097 !! end
15098
15099 !! test
15100 Thumbnail image caption with a free URL and explicit alt
15101 !! options
15102 thumbsize=220
15103 parsoid=wt2html,wt2wt,html2html
15104 !! wikitext
15105 [[File:Foobar.jpg|thumb|http://example.com|alt=Alteration]]
15106 !! html/php
15107 <div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Alteration" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div></div></div>
15108
15109 !! html/parsoid
15110 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img alt="Alteration" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
15111 !! end
15112
15113 !! test
15114 SVG thumbnails with no language set
15115 !! options
15116 !! wikitext
15117 [[File:Foobar.svg|thumb|caption]]
15118 !! html/php
15119 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
15120
15121 !! html/parsoid
15122 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/thumb/f/ff/Foobar.svg/220px-Foobar.svg.png" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>caption</figcaption></figure>
15123 !! end
15124
15125 !! test
15126 SVG thumbnails with language de
15127 !! options
15128 parsoid=wt2html,wt2wt,html2html
15129 !! wikitext
15130 [[File:Foobar.svg|thumb|caption|lang=de]]
15131 !! html/php
15132 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=File:Foobar.svg&amp;lang=de" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/langde-180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/langde-270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/langde-360px-Foobar.svg.png 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
15133
15134 !! html/parsoid
15135 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/thumb/f/ff/Foobar.svg/220px-Foobar.svg.png" lang="de" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>caption</figcaption></figure>
15136 !! end
15137
15138 !! test
15139 SVG thumbnails with invalid language code
15140 !! options
15141 parsoid=wt2html,wt2wt,html2html
15142 !! wikitext
15143 [[File:Foobar.svg|thumb|caption|lang=invalid.language.code]]
15144 !! html/php
15145 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"></a></div>lang=invalid.language.code</div></div></div>
15146
15147 !! html/parsoid
15148 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>lang=invalid.language.code</figcaption></figure>
15149 !! end
15150
15151 !! test
15152 T3887: A ISBN with a thumbnail
15153 !! wikitext
15154 [[File:Foobar.jpg|thumb|ISBN 1235467890]]
15155 !! html/php
15156 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div><a href="/wiki/Special:BookSources/1235467890" class="internal mw-magiclink-isbn">ISBN 1235467890</a></div></div></div>
15157
15158 !! html/parsoid
15159 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="./Special:BookSources/1235467890" rel="mw:WikiLink">ISBN 1235467890</a></figcaption></figure>
15160 !! end
15161
15162 !! test
15163 T3887: A RFC with a thumbnail
15164 !! wikitext
15165 [[File:Foobar.jpg|thumb|This is RFC 12354]]
15166 !! html/php
15167 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>
15168
15169 !! html/parsoid
15170 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>This is <a href="https://tools.ietf.org/html/rfc12354" rel="mw:ExtLink">RFC 12354</a></figcaption></figure>
15171 !! end
15172
15173 !! test
15174 T3887: A mailto link with a thumbnail
15175 !! wikitext
15176 [[File:Foobar.jpg|thumb|Please mailto:nobody@example.com]]
15177 !! html/php
15178 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Please <a rel="nofollow" class="external free" href="mailto:nobody@example.com">mailto:nobody@example.com</a></div></div></div>
15179
15180 !! html/parsoid
15181 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>Please <a rel="mw:ExtLink" href="mailto:nobody@example.com">mailto:nobody@example.com</a></figcaption></figure>
15182 !! end
15183
15184 # Pending resolution to T2368
15185 !! test
15186 T2648: Frameless image caption with a link
15187 !! wikitext
15188 [[File:Foobar.jpg|text with a [[link]] in it]]
15189 !! html/php
15190 <p><a href="/wiki/File: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" /></a>
15191 </p>
15192 !! html/parsoid
15193 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"text with a [[link]] in it"}]}' data-mw='{"caption":"text with a &lt;a rel=\"mw:WikiLink\" href=\"./Link\" title=\"Link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Link\"},\"sa\":{\"href\":\"link\"},\"dsr\":[30,38,2,2]}&#39;>link&lt;/a> in it"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15194 !! end
15195
15196 !! test
15197 T2648: Frameless image caption with a link (suffix)
15198 !! wikitext
15199 [[File:Foobar.jpg|text with a [[link]]foo in it]]
15200 !! html/php
15201 <p><a href="/wiki/File: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" /></a>
15202 </p>
15203 !! html/parsoid
15204 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"text with a [[link]]foo in it"}]}' data-mw='{"caption":"text with a &lt;a rel=\"mw:WikiLink\" href=\"./Link\" title=\"Link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Link\"},\"sa\":{\"href\":\"link\"},\"dsr\":[30,41,2,5],\"tail\":\"foo\"}&#39;>linkfoo&lt;/a> in it"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15205 !! end
15206
15207 !! test
15208 T2648: Frameless image caption with an interwiki link
15209 !! wikitext
15210 [[File:Foobar.jpg|text with a [[MeatBall:Link]] in it]]
15211 !! html/php
15212 <p><a href="/wiki/File: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" /></a>
15213 </p>
15214 !! html/parsoid
15215 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"text with a [[MeatBall:Link]] in it"}]}' data-mw='{"caption":"text with a &lt;a rel=\"mw:ExtLink\" href=\"http://www.usemod.com/cgi-bin/mb.pl?Link\" title=\"meatball:Link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"http://www.usemod.com/cgi-bin/mb.pl?Link\"},\"sa\":{\"href\":\"MeatBall:Link\"},\"isIW\":true,\"dsr\":[30,47,2,2]}&#39;>MeatBall:Link&lt;/a> in it"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15216 !! end
15217
15218 !! test
15219 T2648: Frameless image caption with a piped interwiki link
15220 !! wikitext
15221 [[File:Foobar.jpg|text with a [[MeatBall:Link|link]] in it]]
15222 !! html/php
15223 <p><a href="/wiki/File: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" /></a>
15224 </p>
15225 !! html/parsoid
15226 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"text with a [[MeatBall:Link|link]] in it"}]}' data-mw='{"caption":"text with a &lt;a rel=\"mw:ExtLink\" href=\"http://www.usemod.com/cgi-bin/mb.pl?Link\" title=\"meatball:Link\" data-parsoid=&#39;{\"stx\":\"piped\",\"a\":{\"href\":\"http://www.usemod.com/cgi-bin/mb.pl?Link\"},\"sa\":{\"href\":\"MeatBall:Link\"},\"isIW\":true,\"dsr\":[30,52,16,2]}&#39;>link&lt;/a> in it"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15227 !! end
15228
15229 !! test
15230 T107474: Frameless image caption with <nowiki>
15231 !! wikitext
15232 [[File:Foobar.jpg|<nowiki>text with a [[MeatBall:Link|link]] in it</nowiki>]]
15233 !! html/parsoid
15234 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"&lt;nowiki>text with a [[MeatBall:Link|link]] in it&lt;/nowiki>"}]}' data-mw='{"caption":"&lt;span typeof=\"mw:Nowiki\" data-parsoid=&#39;{\"dsr\":[18,75,8,9]}&#39;>text with a [[MeatBall:Link|link]] in it&lt;/span>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15235 !! end
15236
15237 !! test
15238 Escape HTML special chars in image alt text
15239 !! wikitext
15240 [[File:Foobar.jpg|& < > "]]
15241 !! html/php
15242 <p><a href="/wiki/File: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" /></a>
15243 </p>
15244 !! html/parsoid
15245 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"&amp; &lt; > \""}]}' data-mw='{"caption":"&amp;amp; &amp;lt; > \""}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15246 !! end
15247
15248 !! test
15249 Escape HTML special chars in image alt text with LanguageConverter
15250 !! options
15251 language=zh
15252 !! wikitext
15253 [[File:Foobar.jpg|& < > "]]
15254 !! html/php
15255 <p><a href="/wiki/File: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" /></a>
15256 </p>
15257 !! html/parsoid
15258 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"&amp; &lt; > \""}]}' data-mw='{"caption":"&amp;amp; &amp;lt; > \""}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15259 !! end
15260
15261 !! test
15262 Entities in file name and attributes
15263 !! wikitext
15264 [[File:7%25 solution.gif|manualthumb=7%25 solution.gif|link=7%25 solution|[[7%25 solution]]]]
15265 !! html/php
15266 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=7%25_solution.gif" class="new" title="File:7% solution.gif">7% solution</a>
15267 </p>
15268 !! html/parsoid
15269 <p><span class="mw-default-size" typeof="mw:Error mw:Image" data-parsoid='{"optList":[{"ck":"bogus","ak":"manualthumb=7%25 solution.gif"},{"ck":"link","ak":"link=7%25 solution"},{"ck":"caption","ak":"[[7%25 solution]]"}]}' data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}],"caption":"&lt;a rel=\"mw:WikiLink\" href=\"./7%25_solution\" title=\"7% solution\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./7%25_solution\"},\"sa\":{\"href\":\"7%25 solution\"},\"dsr\":[74,91,2,2]}&#39;>7% solution&lt;/a>"}'><a href="./7%25_solution" data-parsoid='{"a":{"href":"./7%25_solution"},"sa":{"href":"link=7%25 solution"}}'><img resource="./File:7%25_solution.gif" src="./Special:FilePath/7%25_solution.gif" height="220" width="220" data-parsoid='{"a":{"resource":"./File:7%25_solution.gif","height":"220","width":"220"},"sa":{"resource":"File:7%25 solution.gif"}}'/></a></span></p>
15270 !! end
15271
15272 !! test
15273 T2499: Alt text should have &#1234;, not &amp;1234;
15274 !! wikitext
15275 [[File:Foobar.jpg|&#9792;]]
15276 !! html/php
15277 <p><a href="/wiki/File:Foobar.jpg" class="image" title="♀"><img alt="♀" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
15278 </p>
15279 !! html/parsoid
15280 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"&amp;#9792;"}]}' data-mw='{"caption":"&lt;span typeof=\"mw:Entity\" data-parsoid=&#39;{\"src\":\"&amp;amp;#9792;\",\"srcContent\":\"♀\",\"dsr\":[18,25,null,null]}&#39;>♀&lt;/span>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15281 !! end
15282
15283 !! test
15284 Broken image caption with link
15285 !! options
15286 parsoid=wt2html,wt2wt,html2html
15287 !! wikitext
15288 [[Image:Foobar.jpg|thumb|This is a broken caption. But [[Main Page|this]] is just an ordinary link.
15289 !! html/php
15290 <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.
15291 </p>
15292 !! html/parsoid
15293 <p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">this</a> is just an ordinary link.</p>
15294 !! end
15295
15296 !! test
15297 Image caption containing another image
15298 !! wikitext
15299 [[File:Foobar.jpg|thumb|This is a caption with another [[File:Thumb.png|image]] inside it!]]
15300 !! html/php
15301 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is a caption with another <a href="/wiki/File:Thumb.png" class="image" title="image"><img alt="image" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" /></a> inside it!</div></div></div>
15302
15303 !! html/parsoid
15304 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>This is a caption with another <span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"image"}'><a href="./File:Thumb.png"><img resource="./File:Thumb.png" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a></span> inside it!</figcaption></figure>
15305 !! end
15306
15307 !! test
15308 Image: caption containing a newline
15309 !! wikitext
15310 [[File:Foobar.jpg|This
15311 *is some text]]
15312 !! html/php
15313 <p><a href="/wiki/File: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" /></a>
15314 </p>
15315 !! html/parsoid
15316 <p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"This\n*is some text"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
15317 !!end
15318
15319 !!test
15320 Image: caption containing leading space
15321 (The leading space should not trigger nowiki escaping in wt2wt mode)
15322 !! wikitext
15323 [[File:Foobar.jpg|thumb| bar]]
15324 !! html/php
15325 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>bar</div></div></div>
15326
15327 !! html/parsoid
15328 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption> bar</figcaption></figure>
15329 !!end
15330
15331 !! test
15332 Image: caption containing a table
15333 !! options
15334 parsoid=wt2html,wt2wt,html2html
15335 !! wikitext
15336 [[Image:Foobar.jpg|thumb|200px|This is an example image thumbnail caption with a table
15337 {|
15338 ! Foo !! Bar
15339 |-
15340 | Foo1 || Bar1
15341 |}
15342 and some more text.]]
15343 !! html/php
15344 <div class="thumb tright"><div class="thumbinner" style="width:202px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is an example image thumbnail caption with a table <table> <tr> <th> Foo </th> <th> Bar </th></tr> <tr> <td> Foo1 </td> <td> Bar1 </td></tr></table> and some more text.</div></div></div>
15345
15346 !! html/parsoid
15347 <figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>This is an example image thumbnail caption with a table
15348 <table>
15349 <tbody>
15350 <tr><th>Foo </th><th>Bar</th></tr>
15351 <tr>
15352 <td>Foo1 </td>
15353 <td>Bar1</td></tr></tbody></table>and some more text.</figcaption></figure>
15354 !! end
15355
15356 !! test
15357 T5090: External links other than http: in image captions
15358 !! wikitext
15359 [[File:Foobar.jpg|thumb|200x200px|This caption has [irc://example.net irc] and [https://example.com Secure] ext links in it.]]
15360 !! html/php
15361 <div class="thumb tright"><div class="thumbinner" style="width:202px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This caption has <a rel="nofollow" class="external text" href="irc://example.net">irc</a> and <a rel="nofollow" class="external text" href="https://example.com">Secure</a> ext links in it.</div></div></div>
15362
15363 !! html/parsoid
15364 <figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>This caption has <a rel="mw:ExtLink" href="irc://example.net">irc</a> and <a rel="mw:ExtLink" href="https://example.com">Secure</a> ext links in it.</figcaption></figure>
15365 !! end
15366
15367 !! test
15368 Custom class
15369 !! options
15370 parsoid=wt2html,wt2wt,html2html
15371 !! wikitext
15372 [[Image:foobar.jpg|a|class=b]]
15373 !! html/php
15374 <p><a href="/wiki/File:Foobar.jpg" class="image" title="a"><img alt="a" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="b" /></a>
15375 </p>
15376 !! html/parsoid
15377 <p><span class="mw-default-size b" typeof="mw:Image" data-mw='{"caption":"a"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
15378 !! end
15379
15380 !! test
15381 Localized image handling (1).
15382 !! options
15383 parsoid=wt2html,wt2wt,html2html
15384 language=es
15385 !! wikitext
15386 [[Archivo:Foobar.jpg|izquierda|enlace=foo|caption]]
15387 !! html/php
15388 <div class="floatleft"><a href="/wiki/Foo" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
15389
15390 !! html/parsoid
15391 <figure class="mw-default-size mw-halign-left" typeof="mw:Image"><a href="./Foo"><img resource="./Archivo:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
15392 !! end
15393
15394 !! test
15395 Localized image handling (2).
15396 !! options
15397 thumbsize=220
15398 parsoid=wt2html,wt2wt,html2html
15399 language=es
15400 !! wikitext
15401 [[Archivo:Foobar.jpg|miniatura|izquierda|enlace=foo|caption]]
15402 !! html/php
15403 <div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/Foo" title="Foo"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/Archivo:Foobar.jpg" class="internal" title="Aumentar"></a></div>caption</div></div></div>
15404
15405 !! html/parsoid
15406 <figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./Foo"><img resource="./Archivo:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
15407 !! end
15408
15409 !! test
15410 Localized image handling (3).
15411 !! options
15412 language=fa
15413 parsoid=html2wt
15414 !! html/parsoid
15415 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></figure>
15416 !! wikitext
15417 [[File:Foobar.jpg|بندانگشتی]]
15418 !! end
15419
15420 !! test
15421 "border", "frameless" and "class" attributes on an image.
15422 !! options
15423 thumbsize=220
15424 parsoid=wt2html,wt2wt,html2html
15425 !! wikitext
15426 [[File:Foobar.jpg|frameless|border|class=extra|caption]]
15427 !! html/php
15428 <p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="extra thumbborder" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>
15429 </p>
15430 !! html/parsoid
15431 <p><span class="mw-default-size mw-image-border extra" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
15432 !! end
15433
15434 # Note that 'right' is the default alignment, despite the misspelled 'righ' below
15435 !! test
15436 Invalid image attributes (T64500)
15437 !! options
15438 thumbsize=220
15439 parsoid=wt2html,wt2wt,html2html
15440 !! wikitext
15441 [[File:Foobar.jpg|thumb|float|left|caption]]
15442
15443 [[File:Foobar.jpg|thumb|righ|caption]]
15444
15445 [[File:Foobar.jpg|bogus1|thumb|bogus2|left|bogus3|caption]]
15446 !! html/php
15447 <div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
15448 <div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
15449 <div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
15450
15451 !! html/parsoid
15452 <figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
15453 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
15454 <figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
15455 !! end
15456
15457 !! article
15458 File:Barfoo.jpg
15459 !! text
15460 #REDIRECT [[File:Barfoo.jpg]]
15461 !! endarticle
15462
15463 # FIXME: Parsoid should run this test -- but we'd need to teach the
15464 # mockAPI about the redirected Barfoo.jpg image.
15465 !! test
15466 Redirected image
15467 !! wikitext
15468 [[Image:Barfoo.jpg]]
15469 !! html/php
15470 <p><a href="/wiki/File:Barfoo.jpg" class="mw-redirect" title="File:Barfoo.jpg">File:Barfoo.jpg</a>
15471 </p>
15472 !! end
15473
15474 !! test
15475 Missing image with uploads disabled
15476 !! options
15477 wgEnableUploads=0
15478 !! wikitext
15479 [[File:Foobaz.jpg]]
15480 !! html/php
15481 <p><a href="/wiki/File:Foobaz.jpg" title="File:Foobaz.jpg">File:Foobaz.jpg</a>
15482 </p>
15483 !! html/parsoid
15484 <p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}'><a href="./File:Foobaz.jpg"><img resource="./File:Foobaz.jpg" src="./Special:FilePath/Foobaz.jpg" height="220" width="220"/></a></span></p>
15485 !! end
15486
15487 # Parsoid-specific testing for images
15488 # https://www.mediawiki.org/wiki/Parsoid/MediaWiki_DOM_spec#Images
15489 # Currently imperfect due to a flaw in the Parsoid testrunner
15490 # Work in progress
15491 # THESE TESTS SHOULD BE MOVED UP and merged with the php-specific
15492 # image tests.
15493
15494 !! test
15495 Parsoid-specific image handling - simple image with size and middle alignment
15496 !! wikitext
15497 [[File:Foobar.jpg|middle|50px]]
15498 !! html/parsoid
15499 <p><span class="mw-valign-middle" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
15500 !! end
15501
15502 !! test
15503 Parsoid-specific image handling - simple image with size, middle alignment,
15504 non-standard namespace alias
15505 !! options
15506 parsoid=wt2wt,wt2html,html2html
15507 !! wikitext
15508 [[Image:Foobar.jpg|middle|50px]]
15509 !! html/parsoid
15510 <p><span class="mw-valign-middle" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
15511 !! end
15512
15513 !! test
15514 Parsoid-specific image handling - simple image with size and middle alignment
15515 (existing content)
15516 !! wikitext
15517 [[File:Foobar.jpg|50px|middle]]
15518 !! html/parsoid
15519 <p><span class="mw-valign-middle" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"50px"},{"ck":"middle","ak":"middle"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15520 !! end
15521
15522 !! test
15523 Parsoid-specific image handling - simple image with size and middle alignment
15524 and non-standard namespace name
15525 !! options
15526 parsoid=wt2html,wt2wt,html2html
15527 !! wikitext
15528 [[Image:Foobar.jpg|50px|middle]]
15529 !! html/parsoid
15530 <p><span class="mw-valign-middle" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
15531 !! end
15532
15533 !! test
15534 Parsoid-specific image handling - simple image with both sizes, a baseline alignment, and a caption
15535 !! wikitext
15536 [[File:Foobar.jpg|500x10px|baseline|caption]]
15537 !! html/parsoid
15538 <p><span class="mw-valign-baseline" typeof="mw:Image" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"width","ak":"500x10px"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption"}],"size":"500x10"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/89px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="10" width="89" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"10","width":"89"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15539 !! end
15540
15541 !! test
15542 Parsoid-specific image handling - simple image with border and size spec
15543 !! wikitext
15544 [[File:Foobar.jpg|50px|border|caption]]
15545 !! html/parsoid
15546 <p><span class="mw-image-border" typeof="mw:Image" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"width","ak":"50px"},{"ck":"border","ak":"border"},{"ck":"caption","ak":"caption"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15547 !! end
15548
15549 !! test
15550 Parsoid-specific image handling - thumbnail with halign, valign, and caption
15551 !! wikitext
15552 [[File:Foobar.jpg|left|baseline|thumb|caption content]]
15553 !! html/parsoid
15554 <figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption content</figcaption></figure>
15555 !! end
15556
15557 !! test
15558 Parsoid-specific image handling - thumbnail with halign, valign, and caption
15559 (existing content)
15560 !! wikitext
15561 [[File:Foobar.jpg|thumb|left|baseline|caption content]]
15562 !! html/parsoid
15563 <figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"left","ak":"left"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption content"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption content</figcaption></figure>
15564 !! end
15565
15566 !! test
15567 Parsoid-specific image handling - thumbnail with specific size, halign, valign, and caption
15568 !! wikitext
15569 [[Image:Foobar.jpg|right|middle|thumb|50x50px|caption]]
15570 !! html/parsoid
15571 <figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a><figcaption>caption</figcaption></figure>
15572 !! end
15573
15574 !! test
15575 Parsoid-specific image handling - thumbnail with specific size, halign,
15576 valign, and caption (existing content)
15577 !! wikitext
15578 [[File:Foobar.jpg|thumb|50x50px|right|middle|caption]]
15579 !! html/parsoid
15580 <figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"50x50px"},{"ck":"right","ak":"right"},{"ck":"middle","ak":"middle"},{"ck":"caption","ak":"caption"}],"size":"50x50"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption</figcaption></figure>
15581 !! end
15582
15583 !! test
15584 Parsoid-specific image handling - framed image with specific size and caption
15585 (size is ignored)
15586 !! options
15587 parsoid=wt2html,wt2wt,html2html
15588 !! wikitext
15589 [[File:Foobar.jpg|frame|500x50px|caption]]
15590 !! html/parsoid
15591 <figure typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
15592 !! end
15593
15594 !! test
15595 Parsoid-specific image handling - framed image with specific size, halign, valign, and caption
15596 (size is ignored)
15597 !! options
15598 parsoid=wt2html,wt2wt,html2html
15599 !! wikitext
15600 [[File:Foobar.jpg|left|baseline|frame|500x50px|caption]]
15601 !! html/parsoid
15602 <figure class="mw-halign-left mw-valign-baseline" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
15603 !! end
15604
15605 !! test
15606 Parsoid-specific image handling - frameless image with specific size, border, and caption
15607 !! wikitext
15608 [[File:Foobar.jpg|frameless|442x50px|border|caption]]
15609 !! html/parsoid
15610 <p><span class="mw-image-border" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"frameless","ak":"frameless"},{"ck":"width","ak":"442x50px"},{"ck":"border","ak":"border"},{"ck":"caption","ak":"caption"}],"size":"442x50"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/442px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="50" width="442" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"50","width":"442"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15611 !! end
15612
15613 !! test
15614 Parsoid-specific image handling - simple image with a formatted caption
15615 !! wikitext
15616 [[File:Foobar.jpg|<table><tr><td>a</td><td>b</td></tr><tr><td>c</td></tr></table>]]
15617 !! html/parsoid
15618 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"&lt;table>&lt;tr>&lt;td>a&lt;/td>&lt;td>b&lt;/td>&lt;/tr>&lt;tr>&lt;td>c&lt;/td>&lt;/tr>&lt;/table>"}]}' data-mw='{"caption":"&lt;table data-parsoid=&#39;{\"stx\":\"html\",\"dsr\":[18,81,7,8]}&#39;>&lt;tbody data-parsoid=&#39;{\"dsr\":[25,73,0,0]}&#39;>&lt;tr data-parsoid=&#39;{\"stx\":\"html\",\"dsr\":[25,54,4,5]}&#39;>&lt;td data-parsoid=&#39;{\"stx\":\"html\",\"dsr\":[29,39,4,5]}&#39;>a&lt;/td>&lt;td data-parsoid=&#39;{\"stx\":\"html\",\"dsr\":[39,49,4,5]}&#39;>b&lt;/td>&lt;/tr>&lt;tr data-parsoid=&#39;{\"stx\":\"html\",\"dsr\":[54,73,4,5]}&#39;>&lt;td data-parsoid=&#39;{\"stx\":\"html\",\"dsr\":[58,68,4,5]}&#39;>c&lt;/td>&lt;/tr>&lt;/tbody>&lt;/table>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15619 !! end
15620
15621 !! test
15622 Parsoid-specific image handling - caption with a template in it
15623 !! wikitext
15624 [[File:Foobar.jpg|thumb|200x23px|This caption has a {{echo|transclusion}} in it.]]
15625 !! html/parsoid
15626 <figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"></a><figcaption>This caption has a <span about="#mwt1" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;transclusion&quot;}},&quot;i&quot;:0}}]}">transclusion</span> in it.</figcaption></figure>
15627 !! end
15628
15629 !! test
15630 Parsoid-specific image handling - caption with unbalanced tags in it
15631 !! options
15632 parsoid=wt2html,wt2wt,html2html
15633 !! wikitext
15634 foo
15635 [[File:Foobar.jpg|thumb|200x200px|This caption has a <center>unbalanced tag in it.]]
15636 bar
15637 !! html/parsoid
15638 <p>foo</p>
15639 <figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>This caption has a <center>unbalanced tag in it.</center></figcaption></figure>
15640 <p>bar</p>
15641 !! end
15642
15643 !! test
15644 Parsoid-specific image handling - empty caption (1)
15645 !! options
15646 parsoid=wt2html,wt2wt
15647 !! wikitext
15648 [[File:Foobar.jpg|thumb|]]
15649 !! html/parsoid
15650 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption></figcaption></figure>
15651 !! end
15652
15653 # empty captions don't get serialized unless we're in the "round trip" case
15654 !! test
15655 Parsoid-specific image handling - empty caption (2)
15656 !! options
15657 parsoid=html2wt
15658 !! html/parsoid
15659 <figure class="mw-default-size" typeof="mw:Image/Thumb">
15660 <a href="./File:Foobar.jpg">
15661 <img resource="./File:Foobar.jpg"
15662 src="//example.com/images/3/3a/Foobar.jpg"
15663 data-file-width="1941" data-file-height="220" data-file-type="bitmap"
15664 height="25" width="220"/>
15665 </a>
15666 <figcaption></figcaption>
15667 </figure>
15668 !! wikitext
15669 [[File:Foobar.jpg|thumb]]
15670 !! end
15671
15672 !! test
15673 Parsoid-specific image handling - whitespace caption
15674 !! wikitext
15675 [[File:Foobar.jpg|thumb| ]]
15676 !! html/parsoid
15677 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption> </figcaption></figure>
15678 !! end
15679
15680 !! test
15681 Parsoid-specific image handling - lang option
15682 !! wikitext
15683 foo
15684 [[File:Foobar.svg|lang=de|caption]]
15685 bar
15686 !! html/parsoid
15687 <p>foo
15688 <span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" lang="de" data-file-width="240" data-file-height="180" data-file-type="drawing" height="180" width="240"/></a></span>
15689 bar</p>
15690 !! end
15691
15692 ## Edge case bugs in Parsoid from T93580
15693 !! test
15694 T93580: 1. Templated <ref> inside block images
15695 !! wikitext
15696 [[File:Foobar.jpg|thumb|Caption with templated ref: {{echo|<ref>foo</ref>}}]]
15697
15698 <references />
15699 !! html/parsoid
15700 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption with templated ref: {{echo|&lt;ref>foo&lt;/ref>}}"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>Caption with templated ref: <span about="#mwt5" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Transclusion mw:Extension/ref" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;ref>foo&lt;/ref>"}},"i":0}}]}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span></figcaption></figure>
15701
15702 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
15703 !! end
15704
15705 !! test
15706 T93580: 2. <ref> inside inline images
15707 !! wikitext
15708 [[File:Foobar.jpg|Undisplayed caption in inline image with ref: <ref>foo</ref>]]
15709
15710 <references />
15711 !! html/parsoid
15712 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: &lt;ref>foo&lt;/ref>"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[64,78,5,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-1\"},\"attrs\":{}}&#39;>&lt;a href=\"./Main_Page#cite_note-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\">&lt;span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]&lt;/span>&lt;/a>&lt;/span>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{"href":"File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15713
15714 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
15715 !! end
15716
15717 !! test
15718 T93580: 3. Templated <ref> inside inline images
15719 !! wikitext
15720 [[File:Foobar.jpg|Undisplayed caption in inline image with ref: {{echo|<ref>{{echo|foo}}</ref>}}]]
15721
15722 <references />
15723 !! html/parsoid
15724 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: {{echo|&lt;ref>{{echo|foo}}&lt;/ref>}}"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Transclusion mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[64,96,null,null],\"pi\":[[{\"k\":\"1\"}]]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&amp;lt;ref>{{echo|foo}}&amp;lt;/ref>\"}},\"i\":0}}]}&#39;>&lt;a href=\"./Main_Page#cite_note-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\">&lt;span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]&lt;/span>&lt;/a>&lt;/span>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{"href":"File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
15725
15726 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
15727 !! end
15728
15729 ###
15730 ### Subpages
15731 ###
15732 !! article
15733 Subpage test/subpage
15734 !! text
15735 foo
15736 !! endarticle
15737
15738 !! test
15739 Subpage link
15740 !! options
15741 subpage title=[[Subpage test]]
15742 !! wikitext
15743 [[/subpage]]
15744 !! html
15745 <p><a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">/subpage</a>
15746 </p>
15747 !! end
15748
15749 !! test
15750 Subpage noslash link
15751 !! options
15752 subpage title=[[Subpage test]]
15753 !! wikitext
15754 [[/subpage/]]
15755 !! html
15756 <p><a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">subpage</a>
15757 </p>
15758 !! end
15759
15760 !! article
15761 Subpage test/1/2/subpage
15762 !! text
15763 blah
15764 !! endarticle
15765
15766 !! test
15767 Relative subpage noslash link
15768 !! options
15769 parsoid=wt2wt,wt2html,html2html
15770 subpage title=[[Subpage test/1/2/3/4]]
15771 !! wikitext
15772 [[../../subpage/]]
15773
15774 [[../../subpage]]
15775 !! html/php
15776 <p><a href="/wiki/Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">subpage</a>
15777 </p><p><a href="/wiki/Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">Subpage test/1/2/subpage</a>
15778 </p>
15779 !! html/parsoid
15780 <p><a rel="mw:WikiLink" href="./Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">subpage</a></p>
15781 <p><a rel="mw:WikiLink" href="./Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">Subpage_test/1/2/subpage</a></p>
15782 !! end
15783
15784 !! test
15785 Parsoid: dot-slash prefixed wikilinks
15786 !! wikitext
15787 [[./foo]]
15788
15789 [[././bar]]
15790
15791 [[././baz/]]
15792 !! html/php
15793 <p>[[./foo]]
15794 </p><p>[[././bar]]
15795 </p><p>[[././baz/]]
15796 </p>
15797 !! html/parsoid
15798 <p>[[./foo]]
15799 </p><p>[[././bar]]
15800 </p><p>[[././baz/]]
15801 </p>
15802 !! end
15803
15804 !! test
15805 Render invalid page names as plain text (T53090)
15806 !! wikitext
15807 [[./../foo|bar]]
15808 [[foo�|bar]]
15809 [[foo/.|bar]]
15810 [[foo/..|bar]]
15811 [[foo~~~bar]]
15812 [[foo>bar]]
15813 [[foo[bar]]
15814 [[.]]
15815 [[..]]
15816 [[foo././bar]]
15817 [[foo[http://example.com]xyz]]
15818
15819 [[{{echo|./../foo}}|bar]]
15820 [[{{echo|foo/.}}|bar]]
15821 [[{{echo|foo/..}}|bar]]
15822 [[{{echo|foo~~~~bar}}]]
15823 [[{{echo|foo>bar}}]]
15824 [[{{echo|foo././bar}}]]
15825 [[{{echo|foo{bar}}]]
15826 [[{{echo|foo}bar}}]]
15827 [[{{echo|foo[bar}}]]
15828 [[{{echo|foo]bar}}]]
15829 [[{{echo|foo<bar}}]]
15830 !!html/php
15831 <p>[[./../foo|bar]]
15832 [[foo�|bar]]
15833 [[foo/.|bar]]
15834 [[foo/..|bar]]
15835 [[foo~~~bar]]
15836 [[foo&gt;bar]]
15837 [[foo[bar]]
15838 [[.]]
15839 [[..]]
15840 [[foo././bar]]
15841 [[foo<a rel="nofollow" class="external autonumber" href="http://example.com">[1]</a>xyz]]
15842 </p><p>[[./../foo|bar]]
15843 [[foo/.|bar]]
15844 [[foo/..|bar]]
15845 [[foo~~~~bar]]
15846 [[foo&gt;bar]]
15847 [[foo././bar]]
15848 [[foo{bar]]
15849 [[foo}bar]]
15850 [[foo[bar]]
15851 [[foo]bar]]
15852 [[foo&lt;bar]]
15853 </p>
15854 !!html/parsoid
15855 <p>[[./../foo|bar]]
15856 [[foo�|bar]]
15857 [[foo/.|bar]]
15858 [[foo/..|bar]]
15859 [[foo~~~bar]]
15860 [[foo>bar]]
15861 [[foo[bar]]
15862 [[.]]
15863 [[..]]
15864 [[foo././bar]]
15865 [[foo<a rel="mw:ExtLink" href="http://example.com"></a>xyz]]</p>
15866
15867 <p>[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"./../foo"}},"i":0}}]}'>./../foo</span>|bar]]
15868 [[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/."}},"i":0}}]}'>foo/.</span>|bar]]
15869 [[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/.."}},"i":0}}]}'>foo/..</span>|bar]]
15870 [[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo~~~~bar"}},"i":0}}]}'>foo~~~~bar</span>]]
15871 [[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo>bar"}},"i":0}}]}'>foo>bar</span>]]
15872 [[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo././bar"}},"i":0}}]}'>foo././bar</span>]]
15873 [[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo{bar"}},"i":0}}]}'>foo{bar</span>]]
15874 [[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo}bar"}},"i":0}}]}'>foo}bar</span>]]
15875 [[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo[bar"}},"i":0}}]}'>foo[bar</span>]]
15876 [[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo]bar"}},"i":0}}]}'>foo]bar</span>]]
15877 [[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo&lt;bar"}},"i":0}}]}'>foo&lt;bar</span>]]</p>
15878 !!end
15879
15880 !! test
15881 Disabled subpages
15882 !! wikitext
15883 [[/subpage]]
15884 !! html
15885 <p><a href="/index.php?title=/subpage&amp;action=edit&amp;redlink=1" class="new" title="/subpage (page does not exist)">/subpage</a>
15886 </p>
15887 !! end
15888
15889 !! test
15890 T2561: {{/Subpage}}
15891 !! options
15892 subpage title=[[Page]]
15893 !! wikitext
15894 {{/Subpage}}
15895 !! html
15896 <p><a href="/index.php?title=Page/Subpage&amp;action=edit&amp;redlink=1" class="new" title="Page/Subpage (page does not exist)">Page/Subpage</a>
15897 </p>
15898 !! end
15899
15900 ###
15901 ### Categories
15902 ###
15903 !! article
15904 Category:MediaWiki User's Guide
15905 !! text
15906 blah
15907 !! endarticle
15908
15909 !! test
15910 Link to category
15911 !! wikitext
15912 [[:Category:MediaWiki User's Guide]]
15913 !! html
15914 <p><a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User&#39;s Guide">Category:MediaWiki User's Guide</a>
15915 </p>
15916 !! end
15917
15918 !! test
15919 Simple category
15920 !! options
15921 cat
15922 !! wikitext
15923 [[Category:MediaWiki User's Guide]]
15924 !! html/php
15925 cat=MediaWiki_User's_Guide sort=
15926 !! html/parsoid
15927 <link rel="mw:PageProp/Category" href="./Category:MediaWiki_User's_Guide" data-parsoid='{"stx":"simple","a":{"href":"./Category:MediaWiki_User&#39;s_Guide"},"sa":{"href":"Category:MediaWiki User&#39;s Guide"}}'/>
15928 !! end
15929
15930 !! test
15931 PAGESINCATEGORY invalid title fatal (r33546 fix)
15932 !! wikitext
15933 {{PAGESINCATEGORY:<bogus>}}
15934 !! html
15935 <p>0
15936 </p>
15937 !! end
15938
15939 !! test
15940 Category with different sort key
15941 !! options
15942 cat
15943 !! wikitext
15944 [[Category:MediaWiki User's Guide|Foo]]
15945 !! html/php
15946 cat=MediaWiki_User's_Guide sort=Foo
15947 !! html/parsoid
15948 <link rel="mw:PageProp/Category" href="./Category:MediaWiki_User's_Guide#Foo" data-parsoid='{"stx":"piped","a":{"href":"./Category:MediaWiki_User&#39;s_Guide"},"sa":{"href":"Category:MediaWiki User&#39;s Guide"}}'/>
15949 !! end
15950
15951 !! test
15952 Category with identical sort key
15953 !! options
15954 cat
15955 !! wikitext
15956 [[Category:MediaWiki User's Guide|MediaWiki User's Guide]]
15957 !! html/php
15958 cat=MediaWiki_User's_Guide sort=MediaWiki User's Guide
15959 !! html/parsoid
15960 <link rel="mw:PageProp/Category" href="./Category:MediaWiki_User's_Guide#MediaWiki%20User's%20Guide" data-parsoid='{"stx":"piped","a":{"href":"./Category:MediaWiki_User&#39;s_Guide"},"sa":{"href":"Category:MediaWiki User&#39;s Guide"}}'/>
15961 !! end
15962
15963 !! test
15964 Category with empty sort key
15965 !! options
15966 cat
15967 pst
15968 !! wikitext
15969 [[Category:MediaWiki User's Guide|]]
15970 !! html/php
15971 [[Category:MediaWiki User's Guide|MediaWiki User's Guide]]
15972 !! end
15973
15974 !! test
15975 Category with empty sort key and parentheses
15976 !! options
15977 cat
15978 pst
15979 !! wikitext
15980 [[Category:Foo (bar)|]]
15981 !! html/php
15982 [[Category:Foo (bar)|Foo]]
15983 !! end
15984
15985 !! test
15986 Category with link tail
15987 !! options
15988 cat
15989 pst
15990 !! wikitext
15991 123[[Category:Foo]]456
15992 !! html/php
15993 123[[Category:Foo]]456
15994 !! end
15995
15996 !! test
15997 Category with template
15998 !! options
15999 cat
16000 pst
16001 !! wikitext
16002 [[Category:{{echo|Foo}}]]
16003 !! html/php
16004 [[Category:{{echo|Foo}}]]
16005 !! end
16006
16007 !! test
16008 Category with template in sort key
16009 !! options
16010 cat
16011 pst
16012 !! wikitext
16013 [[Category:Foo|{{echo|Bar}}]]
16014 !! html/php
16015 [[Category:Foo|{{echo|Bar}}]]
16016 !! end
16017
16018 !! test
16019 Category with template in sort key and title
16020 !! options
16021 cat
16022 pst
16023 !! wikitext
16024 [[Category:{{echo|Foo}}|{{echo|Bar}}]]
16025 !! html/php
16026 [[Category:{{echo|Foo}}|{{echo|Bar}}]]
16027 !! end
16028
16029 ## We used to, but no longer wt2wt this test since the default serializer
16030 ## will normalize all categories to serialize on their own line.
16031 ## This wikitext usage is going to be fairly uncommon in production and
16032 ## selser will take care of preserving formatting in those scenarios.
16033 !! test
16034 Category / paragraph interactions
16035 !! options
16036 parsoid=wt2html
16037 !! wikitext
16038 Foo [[Category:Baz]] Bar
16039
16040 Foo [[Category:Baz]]
16041 Bar
16042
16043 Foo
16044 [[Category:Baz]]
16045 Bar
16046
16047 Foo
16048 [[Category:Baz]] Bar
16049
16050 Foo
16051 [[Category:Baz]]
16052 [[Category:Baz]]
16053 [[Category:Baz]]
16054 Bar
16055
16056 [[Category:Baz]]
16057 [[Category:Baz]]
16058 [[Category:Baz]]
16059
16060 [[Category:Baz]]
16061 {{echo|[[Category:Baz]]}}
16062 [[Category:Baz]]
16063 !! html/php
16064 <p>Foo Bar
16065 </p><p>Foo
16066 Bar
16067 </p><p>Foo
16068 Bar
16069 </p><p>Foo Bar
16070 </p><p>Foo
16071 Bar
16072 </p>
16073 !! html/parsoid
16074 <p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
16075 <p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
16076 <p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
16077 <p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
16078 <p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link rel="mw:PageProp/Category" href="./Category:Baz" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Baz]]"}},"i":0}}]}'/></p>
16079 <link rel="mw:PageProp/Category" href="./Category:Baz"/>
16080 !! end
16081
16082 ## We used to, but no longer wt2wt this test since the default serializer
16083 ## will normalize all categories to serialize on their own line.
16084 ## This wikitext usage is going to be fairly uncommon in production and
16085 ## selser will take care of preserving formatting in those scenarios.
16086 ##
16087 ## The whitespace on the empty line is part of the test. Please do not delete
16088 !! test
16089 1. Categories and newlines: All preceding newlines should be suppressed (courtesy T2087)
16090 !! options
16091 parsoid=wt2html
16092 !! wikitext
16093 This
16094
16095 [[Category:Foo]] and this should be part of same paragraph (not an indent-pre)
16096
16097 {{echo|[[Category:Foo]] and so should this!}}
16098 !! html/php
16099 <p>This and this should be part of same paragraph (not an indent-pre) and so should this!
16100 </p>
16101 !! html/parsoid
16102 <p>This
16103
16104 <link rel="mw:PageProp/Category" href="./Category:Foo"/> and this should be part of same paragraph (not an indent-pre)
16105
16106 <link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Foo]] and so should this!"}},"i":0}}]}'/><span about="#mwt1"> and so should this!</span></p>
16107 !! end
16108
16109 ## Parsoid will not try to wt2wt this while preserving newlines because
16110 ## it suppresses excess newlines within list items -- and we don't want to
16111 ## introduce a special case just for categories, which is, in reality somewhat
16112 ## odd behavior -- categories are unlikely to be used in list items like this
16113 ## in top-level pages and are only likely to show up in template-generated
16114 ## list items where this RT-ing is a non-issue.
16115 ##
16116 ## The whitespace on the empty line is part of the test. Please do not delete
16117 !! test
16118 2. Categories and newlines: All preceding newlines should be suppressed (courtesy T2087)
16119 !! options
16120 parsoid=wt2html
16121 !! wikitext
16122 * This
16123
16124 [[Category:Foo]] and this should be part of the same list item
16125 * So should this
16126
16127 {{echo|[[Category:Foo]] and this should be part of the same list item}}
16128 !! html
16129 <ul><li>This and this should be part of the same list item</li>
16130 <li>So should this and this should be part of the same list item</li></ul>
16131 !! html/parsoid
16132 <ul>
16133 <li>This <link rel="mw:PageProp/Category" href="./Category:Foo"/> and this should be part of the same list item</li>
16134 <li>So should this <link rel="mw:PageProp/Category" href="./Category:Foo" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Foo]] and this should be part of the same list item"}},"i":0}}]}'/><span> and this should be part of the same list item</span></li>
16135 </ul>
16136 !! end
16137
16138 ## Newlines and categories that follow the last item of a list
16139 ## are treated differently because this (list followed by categories)
16140 ## is an extremely common pattern on wikis.
16141 !! test
16142 3. Categories and newlines: newline suppression for last list item should RT properly
16143 !! wikitext
16144 * a
16145 * b
16146
16147 [[Category:Foo]]
16148
16149 [[Category:Bar]]
16150 [[Category:Baz]]
16151 !! html/parsoid
16152 <ul><li> a</li>
16153 <li> b</li></ul>
16154
16155 <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/>
16156
16157 <link rel="mw:PageProp/Category" href="./Category:Bar" data-parsoid='{"stx":"simple","a":{"href":"./Category:Bar"},"sa":{"href":"Category:Bar"}}'/>
16158 <link rel="mw:PageProp/Category" href="./Category:Baz" data-parsoid='{"stx":"simple","a":{"href":"./Category:Baz"},"sa":{"href":"Category:Baz"}}'/>
16159 !! end
16160
16161 !! test
16162 4. Categories and newlines: newline suppression for last list item should RT properly
16163 !! wikitext
16164 * a
16165 **** b
16166
16167 [[Category:Foo]]
16168 !! html/parsoid
16169 <ul><li> a
16170 <ul><li><ul><li><ul><li> b</li></ul></li></ul></li></ul></li></ul>
16171
16172 <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/>
16173 !! end
16174
16175 ## only wt2html for this to make sure the algo only applies to the rightmost path
16176 !! test
16177 5. Categories and newlines: migrateTrailingCategories dom pass should only run on the rightmost path of nested lists
16178 !! options
16179 parsoid=wt2html
16180 !! wikitext
16181 * a
16182 ** b
16183 [[Category:Foo]]
16184 * c
16185 ** d
16186 [[Category:Foo]]
16187 !! html/parsoid
16188 <ul><li> a
16189 <ul><li> b
16190 <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/></li></ul></li>
16191 <li> c
16192 <ul><li> d</li></ul></li></ul>
16193 <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/>
16194 !! end
16195
16196 ## We used to, but no longer wt2wt this test since the default serializer
16197 ## will normalize all categories to serialize on their own line.
16198 ## This wikitext usage is going to be fairly uncommon in production and
16199 ## selser will take care of preserving formatting in those scenarios.
16200 !! test
16201 6. Categories and newlines: migrateTrailingCategories dom pass should not migrate categories not preceded by newlines
16202 !! options
16203 parsoid=wt2html
16204 !! wikitext
16205 * a [[Category:Foo]]
16206 !! html/parsoid
16207 <ul><li>a <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/></li></ul>
16208 !! end
16209
16210 # This test also demonstrates because of newline+category tunneling
16211 # through the list hander, template wrapping doesn't expand to the
16212 # containing list when the list item swallows the category.
16213 !! test
16214 7. Categories and newlines: migrateTrailingCategories dom pass should leave template content alone
16215 !! wikitext
16216 * {{echo|a
16217 [[Category:Foo]]}}
16218 !! html/parsoid
16219 <ul><li> <span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n[[Category:Foo]]"}},"i":0}}]}'>a
16220 </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/></li></ul>
16221 !! end
16222
16223 !! test
16224 8. Categories and newlines: migrateTrailingCategories dom pass should not get tripped by intervening templates
16225 !! wikitext
16226 * a
16227
16228 {{echo|[[Category:Foo]]
16229 [[Category:Bar]]}}
16230 [[Category:Baz]]
16231 !! html/parsoid
16232 <ul><li> a</li></ul>
16233
16234 <link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Foo]]\n[[Category:Bar]]"}},"i":0}}]}'/><span about="#mwt1">
16235 </span><link rel="mw:PageProp/Category" href="./Category:Bar" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Category:Bar"},"sa":{"href":"Category:Bar"}}'/>
16236 <link rel="mw:PageProp/Category" href="./Category:Baz" data-parsoid='{"stx":"simple","a":{"href":"./Category:Baz"},"sa":{"href":"Category:Baz"}}'/>
16237 !! end
16238
16239 !! test
16240 9. Categories and newlines: should behave properly with linkprefix (T87753)
16241 !! options
16242 language=ar
16243 !! wikitext
16244 foo bar
16245 foo bar
16246 [[تصنيف:Foo]]
16247 [[تصنيف:Bar]]
16248 !! html/php
16249 <p>foo bar
16250 foo bar
16251 </p>
16252 !! html/parsoid
16253 <p>foo bar
16254 foo bar</p>
16255 <link rel="mw:PageProp/Category" href="./تصنيف:Foo"/>
16256 <link rel="mw:PageProp/Category" href="./تصنيف:Bar"/>
16257 !! end
16258
16259 !! test
16260 10. No regressions on internal links following category (T174639)
16261 !! options
16262 parsoid=wt2html,html2html
16263 !! wikitext
16264 [[Category:Foo]]<div>a
16265
16266 [[Foo]]</div>
16267 !! html/php
16268 <div>a
16269 <a href="/wiki/Foo" title="Foo">Foo</a></div>
16270
16271 !! html/parsoid
16272 <link rel="mw:PageProp/Category" href="./Category:Foo"/><div>a
16273
16274 <a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a></div>
16275 !! end
16276
16277 # Note that Parsoid differs slightly from PHP due to T175421
16278 !! test
16279 11. Special case where only newlines separate links (T175416)
16280 !! options
16281 parsoid=wt2html,html2html
16282 !! wikitext
16283 [[Category:Foo]]
16284
16285 [[Foo]][[es:Alimento]]
16286
16287 [[Foo]]
16288 !! html/php
16289 <p><br />
16290 <a href="/wiki/Foo" title="Foo">Foo</a>
16291 </p><p><a href="/wiki/Foo" title="Foo">Foo</a>
16292 </p>
16293 !! html/parsoid
16294 <link rel="mw:PageProp/Category" href="./Category:Foo"/>
16295
16296 <p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a></p><link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Alimento"/>
16297
16298 <p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a></p>
16299 !! end
16300
16301 !! test
16302 Category links with multiple namespaces
16303 !! wikitext
16304 [[Category:Project:Foo]]
16305 !! html/parsoid
16306 <link rel="mw:PageProp/Category" href="./Category:Project:Foo" />
16307 !! end
16308
16309 !! test
16310 Parsoid: Serialize link to category page with colon escape
16311 !! options
16312 parsoid
16313 !! wikitext
16314
16315 [[:Category:Foo]]
16316 [[:Category:Foo|Bar]]
16317 !! html
16318 <p>
16319 <a rel="mw:WikiLink" href="./Category:Foo" title="Category:Foo">Category:Foo</a>
16320 <a rel="mw:WikiLink" href="./Category:Foo" title="Category:Foo">Bar</a>
16321 </p>
16322 !! end
16323
16324 # We used to, but no longer wt2wt this test since the default serializer
16325 # will normalize all categories to serialize on their own line.
16326 # This wikitext usage is going to be fairly uncommon in production and
16327 # selser will take care of preventing whitespace insertion if this
16328 # occurs in an article.
16329 #
16330 # html2html disabled for the same reason (whitespace insertion between
16331 # x and y).
16332 #
16333 # html2wt disabled because it localizes the "Category" namespace.
16334 !! test
16335 Link prefix/suffixes aren't applied to category links
16336 !! options
16337 parsoid=wt2html
16338 language=is
16339 !! wikitext
16340 x[[Category:Foo]]y
16341 !! html/php
16342 <p>xy
16343 </p>
16344 !! html/parsoid
16345 <p>x<link rel="mw:PageProp/Category" href="./Flokkur:Foo" data-parsoid=""/>y</p>
16346 !! end
16347
16348 !! test
16349 Link prefix/suffixes aren't applied to language links
16350 !! options
16351 parsoid=wt2html
16352 language=is
16353 !! wikitext
16354 x[[es:Foo]]y
16355 !! html/php
16356 <p>xy
16357 </p>
16358 !! html/parsoid
16359 <p>x<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo" data-parsoid=""/>y</p>
16360 !! end
16361
16362 !! test
16363 Parsoid: Serialize link to file page with colon escape
16364 !! options
16365 parsoid
16366 !! wikitext
16367
16368 [[:File:Foo.png]]
16369 [[:File:Foo.png|Bar]]
16370 !! html
16371 <p>
16372 <a rel="mw:WikiLink" href="./File:Foo.png" title="File:Foo.png">File:Foo.png</a>
16373 <a rel="mw:WikiLink" href="./File:Foo.png" title="File:Foo.png">Bar</a>
16374 </p>
16375 !! end
16376
16377 !! test
16378 Parsoid: Serialize a genuine category link without colon escape
16379 !! options
16380 parsoid
16381 !! wikitext
16382 [[Category:Foo]]
16383 [[Category:Foo|Bar]]
16384 !! html
16385 <link rel="mw:PageProp/Category" href="./Category:Foo">
16386 <link rel="mw:PageProp/Category" href="./Category:Foo#Bar">
16387 !! end
16388
16389 !! test
16390 Normalize hrefs properly before testing for invalid link targets (T72894)
16391 !! options
16392 parsoid=html2wt
16393 !! html/parsoid
16394 <link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne"/>
16395 !! wikitext
16396 [[Category:Toxine bactérienne]]
16397 !! end
16398
16399 !! test
16400 Parsoid: Defaultsort
16401 !! wikitext
16402 {{DEFAULTSORT:Foo}}
16403 !! html/parsoid
16404 <meta property="mw:PageProp/categorydefaultsort" content="Foo"/>
16405 !! end
16406
16407 # NOTE: mw:ExpandedAttrs is not the best typeof here. mw:Transclusion is better.
16408 # But, this is a limitation of our representation and is documented in
16409 # TemplateHandler.js in processSpecialMagicWord
16410 !! test
16411 Parsoid: Defaultsort (template-generated)
16412 !! wikitext
16413 {{{{echo|DEFAULTSORT}}:Foo}}
16414 !! html/parsoid
16415 <meta property="mw:PageProp/categorydefaultsort" content="Foo" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"src":"{{{{echo|DEFAULTSORT}}:Foo}}","dsr":[0,26,null,null]}' data-mw='{"attribs":[[{"txt":"content"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[2,22,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"DEFAULTSORT\"}},\"i\":0}}]}&#39;>DEFAULTSORT&lt;/span>:Foo"}]]}'/>
16416 !! end
16417
16418 ###
16419 ### Inter-language links
16420 ###
16421 !! test
16422 Interlanguage links
16423 !! options
16424 ill
16425 !! wikitext
16426 [[es:Alimento]]
16427 [[fr:Nourriture]]
16428 [[zh:食品]]
16429 !! html/php
16430 es:Alimento fr:Nourriture zh:食品
16431 !! html/parsoid
16432 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Alimento"/>
16433 <link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/Nourriture"/>
16434 <link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/食品"/>
16435 !! end
16436
16437 !! test
16438 Duplicate interlanguage links (T26502)
16439 !! options
16440 ill
16441 !! wikitext
16442 [[es:1]]
16443 [[es:2]]
16444 [[fr:1]]
16445 [[fr:2]]
16446 !! html/php
16447 es:1 fr:1
16448 !! html/parsoid
16449 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/1"/>
16450 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/2"/>
16451 <link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/1"/>
16452 <link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/2"/>
16453 !! end
16454
16455 ###
16456 ### Sections
16457 ###
16458 !! test
16459 Basic section headings
16460 !! wikitext
16461 == Headline 1 ==
16462 Some text
16463
16464 ==Headline 2==
16465 More
16466 ===Smaller headline===
16467 Blah blah
16468 !! html
16469 <h2><span class="mw-headline" id="Headline_1">Headline 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16470 <p>Some text
16471 </p>
16472 <h2><span class="mw-headline" id="Headline_2">Headline 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Headline 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16473 <p>More
16474 </p>
16475 <h3><span class="mw-headline" id="Smaller_headline">Smaller headline</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Smaller headline">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16476 <p>Blah blah
16477 </p>
16478 !! end
16479
16480 !! test
16481 Section headings with TOC
16482 !! wikitext
16483 == Headline 1 ==
16484 === Subheadline 1 ===
16485 ===== Skipping a level =====
16486 ====== Skipping a level ======
16487
16488 == Headline 2 ==
16489 Some text
16490 ===Another headline===
16491 !! html
16492 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
16493 <ul>
16494 <li class="toclevel-1 tocsection-1"><a href="#Headline_1"><span class="tocnumber">1</span> <span class="toctext">Headline 1</span></a>
16495 <ul>
16496 <li class="toclevel-2 tocsection-2"><a href="#Subheadline_1"><span class="tocnumber">1.1</span> <span class="toctext">Subheadline 1</span></a>
16497 <ul>
16498 <li class="toclevel-3 tocsection-3"><a href="#Skipping_a_level"><span class="tocnumber">1.1.1</span> <span class="toctext">Skipping a level</span></a>
16499 <ul>
16500 <li class="toclevel-4 tocsection-4"><a href="#Skipping_a_level_2"><span class="tocnumber">1.1.1.1</span> <span class="toctext">Skipping a level</span></a></li>
16501 </ul>
16502 </li>
16503 </ul>
16504 </li>
16505 </ul>
16506 </li>
16507 <li class="toclevel-1 tocsection-5"><a href="#Headline_2"><span class="tocnumber">2</span> <span class="toctext">Headline 2</span></a>
16508 <ul>
16509 <li class="toclevel-2 tocsection-6"><a href="#Another_headline"><span class="tocnumber">2.1</span> <span class="toctext">Another headline</span></a></li>
16510 </ul>
16511 </li>
16512 </ul>
16513 </div>
16514
16515 <h2><span class="mw-headline" id="Headline_1">Headline 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16516 <h3><span class="mw-headline" id="Subheadline_1">Subheadline 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Subheadline 1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16517 <h5><span class="mw-headline" id="Skipping_a_level">Skipping a level</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Skipping a level">edit</a><span class="mw-editsection-bracket">]</span></span></h5>
16518 <h6><span class="mw-headline" id="Skipping_a_level_2">Skipping a level</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Skipping a level">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
16519 <h2><span class="mw-headline" id="Headline_2">Headline 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Headline 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16520 <p>Some text
16521 </p>
16522 <h3><span class="mw-headline" id="Another_headline">Another headline</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Another headline">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16523
16524 !! end
16525
16526 !! test
16527 TOC anchors don't collide
16528 !! wikitext
16529 __FORCETOC__
16530 == Headline 2 ==
16531 == Headline ==
16532 == Headline 2 ==
16533 == Headline ==
16534 !! html/php
16535 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
16536 <ul>
16537 <li class="toclevel-1 tocsection-1"><a href="#Headline_2"><span class="tocnumber">1</span> <span class="toctext">Headline 2</span></a></li>
16538 <li class="toclevel-1 tocsection-2"><a href="#Headline"><span class="tocnumber">2</span> <span class="toctext">Headline</span></a></li>
16539 <li class="toclevel-1 tocsection-3"><a href="#Headline_2_2"><span class="tocnumber">3</span> <span class="toctext">Headline 2</span></a></li>
16540 <li class="toclevel-1 tocsection-4"><a href="#Headline_3"><span class="tocnumber">4</span> <span class="toctext">Headline</span></a></li>
16541 </ul>
16542 </div>
16543
16544 <h2><span class="mw-headline" id="Headline_2">Headline 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16545 <h2><span class="mw-headline" id="Headline">Headline</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Headline">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16546 <h2><span class="mw-headline" id="Headline_2_2">Headline 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Headline 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16547 <h2><span class="mw-headline" id="Headline_3">Headline</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Headline">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16548
16549 !! end
16550
16551 # perl -e 'print "="x$_," Level $_ heading","="x$_,"\n" for 1..10'
16552 !! test
16553 Handling of sections up to level 6 and beyond
16554 !! wikitext
16555 = Level 1 Heading=
16556 == Level 2 Heading==
16557 === Level 3 Heading===
16558 ==== Level 4 Heading====
16559 ===== Level 5 Heading=====
16560 ====== Level 6 Heading======
16561 ======= Level 7 Heading=======
16562 ======== Level 8 Heading========
16563 ========= Level 9 Heading=========
16564 ========== Level 10 Heading==========
16565 !! html
16566 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
16567 <ul>
16568 <li class="toclevel-1 tocsection-1"><a href="#Level_1_Heading"><span class="tocnumber">1</span> <span class="toctext">Level 1 Heading</span></a>
16569 <ul>
16570 <li class="toclevel-2 tocsection-2"><a href="#Level_2_Heading"><span class="tocnumber">1.1</span> <span class="toctext">Level 2 Heading</span></a>
16571 <ul>
16572 <li class="toclevel-3 tocsection-3"><a href="#Level_3_Heading"><span class="tocnumber">1.1.1</span> <span class="toctext">Level 3 Heading</span></a>
16573 <ul>
16574 <li class="toclevel-4 tocsection-4"><a href="#Level_4_Heading"><span class="tocnumber">1.1.1.1</span> <span class="toctext">Level 4 Heading</span></a>
16575 <ul>
16576 <li class="toclevel-5 tocsection-5"><a href="#Level_5_Heading"><span class="tocnumber">1.1.1.1.1</span> <span class="toctext">Level 5 Heading</span></a>
16577 <ul>
16578 <li class="toclevel-6 tocsection-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>
16579 <li class="toclevel-6 tocsection-7"><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>
16580 <li class="toclevel-6 tocsection-8"><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>
16581 <li class="toclevel-6 tocsection-9"><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>
16582 <li class="toclevel-6 tocsection-10"><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>
16583 </ul>
16584 </li>
16585 </ul>
16586 </li>
16587 </ul>
16588 </li>
16589 </ul>
16590 </li>
16591 </ul>
16592 </li>
16593 </ul>
16594 </div>
16595
16596 <h1><span class="mw-headline" id="Level_1_Heading">Level 1 Heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Level 1 Heading">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
16597 <h2><span class="mw-headline" id="Level_2_Heading">Level 2 Heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Level 2 Heading">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16598 <h3><span class="mw-headline" id="Level_3_Heading">Level 3 Heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Level 3 Heading">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16599 <h4><span class="mw-headline" id="Level_4_Heading">Level 4 Heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Level 4 Heading">edit</a><span class="mw-editsection-bracket">]</span></span></h4>
16600 <h5><span class="mw-headline" id="Level_5_Heading">Level 5 Heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Level 5 Heading">edit</a><span class="mw-editsection-bracket">]</span></span></h5>
16601 <h6><span class="mw-headline" id="Level_6_Heading">Level 6 Heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Level 6 Heading">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
16602 <h6><span class="mw-headline" id=".3D_Level_7_Heading.3D">= Level 7 Heading=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=7" title="Edit section: = Level 7 Heading=">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
16603 <h6><span class="mw-headline" id=".3D.3D_Level_8_Heading.3D.3D">== Level 8 Heading==</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=8" title="Edit section: == Level 8 Heading==">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
16604 <h6><span class="mw-headline" id=".3D.3D.3D_Level_9_Heading.3D.3D.3D">=== Level 9 Heading===</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=9" title="Edit section: === Level 9 Heading===">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
16605 <h6><span class="mw-headline" id=".3D.3D.3D.3D_Level_10_Heading.3D.3D.3D.3D">==== Level 10 Heading====</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=10" title="Edit section: ==== Level 10 Heading====">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
16606
16607 !! end
16608
16609 !! test
16610 TOC regression (T11764)
16611 !! wikitext
16612 == title 1 ==
16613 === title 1.1 ===
16614 ==== title 1.1.1 ====
16615 === title 1.2 ===
16616 == title 2 ==
16617 === title 2.1 ===
16618 !! html
16619 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
16620 <ul>
16621 <li class="toclevel-1 tocsection-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
16622 <ul>
16623 <li class="toclevel-2 tocsection-2"><a href="#title_1.1"><span class="tocnumber">1.1</span> <span class="toctext">title 1.1</span></a>
16624 <ul>
16625 <li class="toclevel-3 tocsection-3"><a href="#title_1.1.1"><span class="tocnumber">1.1.1</span> <span class="toctext">title 1.1.1</span></a></li>
16626 </ul>
16627 </li>
16628 <li class="toclevel-2 tocsection-4"><a href="#title_1.2"><span class="tocnumber">1.2</span> <span class="toctext">title 1.2</span></a></li>
16629 </ul>
16630 </li>
16631 <li class="toclevel-1 tocsection-5"><a href="#title_2"><span class="tocnumber">2</span> <span class="toctext">title 2</span></a>
16632 <ul>
16633 <li class="toclevel-2 tocsection-6"><a href="#title_2.1"><span class="tocnumber">2.1</span> <span class="toctext">title 2.1</span></a></li>
16634 </ul>
16635 </li>
16636 </ul>
16637 </div>
16638
16639 <h2><span class="mw-headline" id="title_1">title 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16640 <h3><span class="mw-headline" id="title_1.1">title 1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16641 <h4><span class="mw-headline" id="title_1.1.1">title 1.1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 1.1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h4>
16642 <h3><span class="mw-headline" id="title_1.2">title 1.2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: title 1.2">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16643 <h2><span class="mw-headline" id="title_2">title 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: title 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16644 <h3><span class="mw-headline" id="title_2.1">title 2.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: title 2.1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16645
16646 !! end
16647
16648 !! test
16649 TOC for heading containing <span id="..."></span> (T96153)
16650 !! wikitext
16651 __FORCETOC__
16652 ==<span id="old-anchor"></span>New title==
16653 !! html/php
16654 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
16655 <ul>
16656 <li class="toclevel-1 tocsection-1"><a href="#New_title"><span class="tocnumber">1</span> <span class="toctext">New title</span></a></li>
16657 </ul>
16658 </div>
16659
16660 <h2><span class="mw-headline" id="New_title"><span id="old-anchor"></span>New title</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: New title">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16661
16662 !! end
16663
16664 !! test
16665 TOC with wgMaxTocLevel=3 (T8204)
16666 !! options
16667 wgMaxTocLevel=3
16668 !! wikitext
16669 == title 1 ==
16670 === title 1.1 ===
16671 ==== title 1.1.1 ====
16672 === title 1.2 ===
16673 == title 2 ==
16674 === title 2.1 ===
16675 !! html
16676 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
16677 <ul>
16678 <li class="toclevel-1 tocsection-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
16679 <ul>
16680 <li class="toclevel-2 tocsection-2"><a href="#title_1.1"><span class="tocnumber">1.1</span> <span class="toctext">title 1.1</span></a></li>
16681 <li class="toclevel-2 tocsection-4"><a href="#title_1.2"><span class="tocnumber">1.2</span> <span class="toctext">title 1.2</span></a></li>
16682 </ul>
16683 </li>
16684 <li class="toclevel-1 tocsection-5"><a href="#title_2"><span class="tocnumber">2</span> <span class="toctext">title 2</span></a>
16685 <ul>
16686 <li class="toclevel-2 tocsection-6"><a href="#title_2.1"><span class="tocnumber">2.1</span> <span class="toctext">title 2.1</span></a></li>
16687 </ul>
16688 </li>
16689 </ul>
16690 </div>
16691
16692 <h2><span class="mw-headline" id="title_1">title 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16693 <h3><span class="mw-headline" id="title_1.1">title 1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16694 <h4><span class="mw-headline" id="title_1.1.1">title 1.1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 1.1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h4>
16695 <h3><span class="mw-headline" id="title_1.2">title 1.2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: title 1.2">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16696 <h2><span class="mw-headline" id="title_2">title 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: title 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16697 <h3><span class="mw-headline" id="title_2.1">title 2.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: title 2.1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16698
16699 !! end
16700
16701 !! test
16702 TOC with wgMaxTocLevel=3 and two level four headings (T8204)
16703 !! options
16704 wgMaxTocLevel=3
16705 !! wikitext
16706 ==Section 1==
16707 ===Section 1.1===
16708 ====Section 1.1.1====
16709 ====Section 1.1.1.1====
16710 ==Section 2==
16711 !! html
16712 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
16713 <ul>
16714 <li class="toclevel-1 tocsection-1"><a href="#Section_1"><span class="tocnumber">1</span> <span class="toctext">Section 1</span></a>
16715 <ul>
16716 <li class="toclevel-2 tocsection-2"><a href="#Section_1.1"><span class="tocnumber">1.1</span> <span class="toctext">Section 1.1</span></a></li>
16717 </ul>
16718 </li>
16719 <li class="toclevel-1 tocsection-5"><a href="#Section_2"><span class="tocnumber">2</span> <span class="toctext">Section 2</span></a></li>
16720 </ul>
16721 </div>
16722
16723 <h2><span class="mw-headline" id="Section_1">Section 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16724 <h3><span class="mw-headline" id="Section_1.1">Section 1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Section 1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16725 <h4><span class="mw-headline" id="Section_1.1.1">Section 1.1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Section 1.1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h4>
16726 <h4><span class="mw-headline" id="Section_1.1.1.1">Section 1.1.1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Section 1.1.1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h4>
16727 <h2><span class="mw-headline" id="Section_2">Section 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Section 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16728
16729 !! end
16730
16731
16732 !! test
16733 Resolving duplicate section names
16734 !! wikitext
16735 == Foo bar ==
16736 == Foo bar ==
16737 !! html
16738 <h2><span class="mw-headline" id="Foo_bar">Foo bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16739 <h2><span class="mw-headline" id="Foo_bar_2">Foo bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16740
16741 !! end
16742
16743 !! test
16744 Resolving duplicate section names with differing case (T12721)
16745 !! wikitext
16746 == Foo bar ==
16747 == Foo Bar ==
16748 !! html
16749 <h2><span class="mw-headline" id="Foo_bar">Foo bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16750 <h2><span class="mw-headline" id="Foo_Bar_2">Foo Bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16751
16752 !! end
16753
16754 !! article
16755 Template:sections
16756 !! text
16757 ===Section 1===
16758 ==Section 2==
16759 !! endarticle
16760
16761 !! test
16762 Template with sections, __NOTOC__
16763 !! wikitext
16764 __NOTOC__
16765 ==Section 0==
16766 {{sections}}
16767 ==Section 4==
16768 !! html
16769 <h2><span class="mw-headline" id="Section_0">Section 0</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 0">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16770 <h3><span class="mw-headline" id="Section_1">Section 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Template:Sections&amp;action=edit&amp;section=T-1" title="Template:Sections">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16771 <h2><span class="mw-headline" id="Section_2">Section 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Template:Sections&amp;action=edit&amp;section=T-2" title="Template:Sections">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16772 <h2><span class="mw-headline" id="Section_4">Section 4</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Section 4">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16773
16774 !! end
16775
16776 !! test
16777 __NOEDITSECTION__ keyword
16778 !! wikitext
16779 __NOEDITSECTION__
16780 ==Section 1==
16781 ==Section 2==
16782 !! html
16783 <h2><span class="mw-headline" id="Section_1">Section 1</span></h2>
16784 <h2><span class="mw-headline" id="Section_2">Section 2</span></h2>
16785
16786 !! end
16787
16788 !! test
16789 Link inside a section heading
16790 !! wikitext
16791 ==Section with a [[Main Page|link]] in it==
16792 !! html
16793 <h2><span class="mw-headline" id="Section_with_a_link_in_it">Section with a <a href="/wiki/Main_Page" title="Main Page">link</a> in it</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><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 class="mw-editsection-bracket">]</span></span></h2>
16794
16795 !! end
16796
16797 !! test
16798 TOC regression (T14077)
16799 !! wikitext
16800 __TOC__
16801 == title 1 ==
16802 === title 1.1 ===
16803 == title 2 ==
16804 !! html
16805 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
16806 <ul>
16807 <li class="toclevel-1 tocsection-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
16808 <ul>
16809 <li class="toclevel-2 tocsection-2"><a href="#title_1.1"><span class="tocnumber">1.1</span> <span class="toctext">title 1.1</span></a></li>
16810 </ul>
16811 </li>
16812 <li class="toclevel-1 tocsection-3"><a href="#title_2"><span class="tocnumber">2</span> <span class="toctext">title 2</span></a></li>
16813 </ul>
16814 </div>
16815
16816 <h2><span class="mw-headline" id="title_1">title 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16817 <h3><span class="mw-headline" id="title_1.1">title 1.1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
16818 <h2><span class="mw-headline" id="title_2">title 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16819
16820 !! end
16821
16822 !! test
16823 T3219 URL next to image (good)
16824 !! wikitext
16825 http://example.com [[File:Foobar.jpg]]
16826 !! html/php
16827 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
16828 </p>
16829 !! html/parsoid
16830 <p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a> <span class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
16831 !!end
16832
16833 !! test
16834 Short headings with trailing space should match behavior of Parser::doHeadings (T21910)
16835 !! wikitext
16836 ===
16837 The line above must have a trailing space!
16838 === <!--
16839 --> <!-- -->
16840 But just in case it doesn't...
16841 !! html
16842 <h1><span class="mw-headline" id=".3D">=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: =">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
16843 <p>The line above must have a trailing space!
16844 </p>
16845 <h1><span class="mw-headline" id=".3D_2">=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: =">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
16846 <p>But just in case it doesn't...
16847 </p>
16848 !! end
16849
16850 !! test
16851 Header with special characters (T27462)
16852 !! wikitext
16853 The tooltips shall not show entities to the user (ie. be double escaped)
16854
16855 == text > text ==
16856 section 1
16857
16858 == text < text ==
16859 section 2
16860
16861 == text & text ==
16862 section 3
16863
16864 == text ' text ==
16865 section 4
16866
16867 == text " text ==
16868 section 5
16869 !! html
16870 <p>The tooltips shall not show entities to the user (ie. be double escaped)
16871 </p>
16872 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
16873 <ul>
16874 <li class="toclevel-1 tocsection-1"><a href="#text_.3E_text"><span class="tocnumber">1</span> <span class="toctext">text &gt; text</span></a></li>
16875 <li class="toclevel-1 tocsection-2"><a href="#text_.3C_text"><span class="tocnumber">2</span> <span class="toctext">text &lt; text</span></a></li>
16876 <li class="toclevel-1 tocsection-3"><a href="#text_.26_text"><span class="tocnumber">3</span> <span class="toctext">text &amp; text</span></a></li>
16877 <li class="toclevel-1 tocsection-4"><a href="#text_.27_text"><span class="tocnumber">4</span> <span class="toctext">text ' text</span></a></li>
16878 <li class="toclevel-1 tocsection-5"><a href="#text_.22_text"><span class="tocnumber">5</span> <span class="toctext">text " text</span></a></li>
16879 </ul>
16880 </div>
16881
16882 <h2><span class="mw-headline" id="text_.3E_text">text &gt; text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: text &gt; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16883 <p>section 1
16884 </p>
16885 <h2><span class="mw-headline" id="text_.3C_text">text &lt; text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: text &lt; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16886 <p>section 2
16887 </p>
16888 <h2><span class="mw-headline" id="text_.26_text">text &amp; text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: text &amp; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16889 <p>section 3
16890 </p>
16891 <h2><span class="mw-headline" id="text_.27_text">text ' text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: text &#039; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16892 <p>section 4
16893 </p>
16894 <h2><span class="mw-headline" id="text_.22_text">text " text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: text &quot; text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16895 <p>section 5
16896 </p>
16897 !! end
16898
16899 !! test
16900 Header with space, plus and underscore as entity
16901 !! wikitext
16902 Id should not contain + for spaces
16903
16904 == Space between Text ==
16905 section 1
16906
16907 == Space-Entity&#32;between&#32;Text ==
16908 section 2
16909
16910 == Plus+between+Text ==
16911 section 3
16912
16913 == Plus-Entity&#43;between&#43;Text ==
16914 section 4
16915
16916 == Underscore_between_Text ==
16917 section 5
16918
16919 == Underscore-Entity&#95;between&#95;Text ==
16920 section 6
16921
16922 [[#Space between Text]]
16923 [[#Space-Entity&#32;between&#32;Text]]
16924 [[#Plus+between+Text]]
16925 [[#Plus-Entity&#43;between&#43;Text]]
16926 [[#Underscore_between_Text]]
16927 [[#Underscore-Entity&#95;between&#95;Text]]
16928 !! html
16929 <p>Id should not contain + for spaces
16930 </p>
16931 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
16932 <ul>
16933 <li class="toclevel-1 tocsection-1"><a href="#Space_between_Text"><span class="tocnumber">1</span> <span class="toctext">Space between Text</span></a></li>
16934 <li class="toclevel-1 tocsection-2"><a href="#Space-Entity_between_Text"><span class="tocnumber">2</span> <span class="toctext">Space-Entity&#32;between&#32;Text</span></a></li>
16935 <li class="toclevel-1 tocsection-3"><a href="#Plus.2Bbetween.2BText"><span class="tocnumber">3</span> <span class="toctext">Plus+between+Text</span></a></li>
16936 <li class="toclevel-1 tocsection-4"><a href="#Plus-Entity.2Bbetween.2BText"><span class="tocnumber">4</span> <span class="toctext">Plus-Entity&#43;between&#43;Text</span></a></li>
16937 <li class="toclevel-1 tocsection-5"><a href="#Underscore_between_Text"><span class="tocnumber">5</span> <span class="toctext">Underscore_between_Text</span></a></li>
16938 <li class="toclevel-1 tocsection-6"><a href="#Underscore-Entity_between_Text"><span class="tocnumber">6</span> <span class="toctext">Underscore-Entity&#95;between&#95;Text</span></a></li>
16939 </ul>
16940 </div>
16941
16942 <h2><span class="mw-headline" id="Space_between_Text">Space between Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Space between Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16943 <p>section 1
16944 </p>
16945 <h2><span class="mw-headline" id="Space-Entity_between_Text">Space-Entity&#32;between&#32;Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Space-Entity between Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16946 <p>section 2
16947 </p>
16948 <h2><span class="mw-headline" id="Plus.2Bbetween.2BText">Plus+between+Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Plus+between+Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16949 <p>section 3
16950 </p>
16951 <h2><span class="mw-headline" id="Plus-Entity.2Bbetween.2BText">Plus-Entity&#43;between&#43;Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Plus-Entity+between+Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16952 <p>section 4
16953 </p>
16954 <h2><span class="mw-headline" id="Underscore_between_Text">Underscore_between_Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Underscore between Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16955 <p>section 5
16956 </p>
16957 <h2><span class="mw-headline" id="Underscore-Entity_between_Text">Underscore-Entity&#95;between&#95;Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Underscore-Entity_between_Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
16958 <p>section 6
16959 </p><p><a href="#Space_between_Text">#Space between Text</a>
16960 <a href="#Space-Entity_between_Text">#Space-Entity&#32;between&#32;Text</a>
16961 <a href="#Plus.2Bbetween.2BText">#Plus+between+Text</a>
16962 <a href="#Plus-Entity.2Bbetween.2BText">#Plus-Entity&#43;between&#43;Text</a>
16963 <a href="#Underscore_between_Text">#Underscore_between_Text</a>
16964 <a href="#Underscore-Entity_between_Text">#Underscore-Entity&#95;between&#95;Text</a>
16965 </p>
16966 !! end
16967
16968 !! test
16969 Headers with excess '=' characters
16970 (Are similar tests necessary beyond the 1st level?)
16971 !! wikitext
16972 =foo==
16973 ==foo=
16974 =''italic'' heading==
16975 ==''italic'' heading=
16976 !! html
16977 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
16978 <ul>
16979 <li class="toclevel-1 tocsection-1"><a href="#foo.3D"><span class="tocnumber">1</span> <span class="toctext">foo=</span></a></li>
16980 <li class="toclevel-1 tocsection-2"><a href="#.3Dfoo"><span class="tocnumber">2</span> <span class="toctext">=foo</span></a></li>
16981 <li class="toclevel-1 tocsection-3"><a href="#italic_heading.3D"><span class="tocnumber">3</span> <span class="toctext"><i>italic</i> heading=</span></a></li>
16982 <li class="toclevel-1 tocsection-4"><a href="#.3Ditalic_heading"><span class="tocnumber">4</span> <span class="toctext">=<i>italic</i> heading</span></a></li>
16983 </ul>
16984 </div>
16985
16986 <h1><span class="mw-headline" id="foo.3D">foo=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: foo=">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
16987 <h1><span class="mw-headline" id=".3Dfoo">=foo</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: =foo">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
16988 <h1><span class="mw-headline" id="italic_heading.3D"><i>italic</i> heading=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: italic heading=">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
16989 <h1><span class="mw-headline" id=".3Ditalic_heading">=<i>italic</i> heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: =italic heading">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
16990
16991 !! end
16992
16993 !! test
16994 HTML headers vs TOC (T25393)
16995 (__NOEDITSECTION__ for clearer output, doesn't matter here)
16996 !! wikitext
16997 <h1>Header 1</h1>
16998 == Header 1.1 ==
16999 == Header 1.2 ==
17000
17001 <h1>Header 2
17002 </h1>
17003 == Header 2.1 ==
17004 == Header 2.2 ==
17005 __NOEDITSECTION__
17006 !! html
17007 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
17008 <ul>
17009 <li class="toclevel-1"><a href="#Header_1"><span class="tocnumber">1</span> <span class="toctext">Header 1</span></a>
17010 <ul>
17011 <li class="toclevel-2 tocsection-1"><a href="#Header_1.1"><span class="tocnumber">1.1</span> <span class="toctext">Header 1.1</span></a></li>
17012 <li class="toclevel-2 tocsection-2"><a href="#Header_1.2"><span class="tocnumber">1.2</span> <span class="toctext">Header 1.2</span></a></li>
17013 </ul>
17014 </li>
17015 <li class="toclevel-1"><a href="#Header_2"><span class="tocnumber">2</span> <span class="toctext">Header 2</span></a>
17016 <ul>
17017 <li class="toclevel-2 tocsection-3"><a href="#Header_2.1"><span class="tocnumber">2.1</span> <span class="toctext">Header 2.1</span></a></li>
17018 <li class="toclevel-2 tocsection-4"><a href="#Header_2.2"><span class="tocnumber">2.2</span> <span class="toctext">Header 2.2</span></a></li>
17019 </ul>
17020 </li>
17021 </ul>
17022 </div>
17023
17024 <h1><span class="mw-headline" id="Header_1">Header 1</span></h1>
17025 <h2><span class="mw-headline" id="Header_1.1">Header 1.1</span></h2>
17026 <h2><span class="mw-headline" id="Header_1.2">Header 1.2</span></h2>
17027 <h1><span class="mw-headline" id="Header_2">Header 2</span></h1>
17028 <h2><span class="mw-headline" id="Header_2.1">Header 2.1</span></h2>
17029 <h2><span class="mw-headline" id="Header_2.2">Header 2.2</span></h2>
17030
17031 !! end
17032
17033 !! test
17034 Single-line or multiline-comments can follow headings
17035 !! options
17036 parsoid=wt2html,wt2wt
17037 !! wikitext
17038 ==foo==<!---->
17039 ==bar==<!--c1-->
17040 ==baz==<!--
17041 c2
17042 c3-->
17043 !! html
17044 <h2><span class="mw-headline" id="foo">foo</span></h2>
17045 <h2><span class="mw-headline" id="bar">bar</span></h2>
17046 <h2><span class="mw-headline" id="baz">baz</span></h2>
17047
17048 !! end
17049
17050 !! test
17051 T3219 URL next to image (broken)
17052 !! wikitext
17053 http://example.com[[File:Foobar.jpg]]
17054 !! html/php
17055 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
17056 </p>
17057 !! html/parsoid
17058 <p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a><span class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
17059 !!end
17060
17061 !! test
17062 T3186 news: in the middle of text
17063 !! wikitext
17064 http://en.wikinews.org/wiki/Wikinews:Workplace
17065 !! html
17066 <p><a rel="nofollow" class="external free" href="http://en.wikinews.org/wiki/Wikinews:Workplace">http://en.wikinews.org/wiki/Wikinews:Workplace</a>
17067 </p>
17068 !!end
17069
17070
17071 !! test
17072 Namespaced link must have a title
17073 !! wikitext
17074 [[Project:]]
17075 !! html
17076 <p>[[Project:]]
17077 </p>
17078 !!end
17079
17080 !! test
17081 Namespaced link must have a title (bad fragment version)
17082 !! wikitext
17083 [[Project:#fragment]]
17084 !! html
17085 <p>[[Project:#fragment]]
17086 </p>
17087 !!end
17088
17089
17090 ###
17091 ### HTML tags and HTML attributes
17092 ###
17093
17094 !! test
17095 div with no attributes
17096 !! wikitext
17097 <div>HTML rocks</div>
17098 !! html
17099 <div>HTML rocks</div>
17100
17101 !! end
17102
17103 !! test
17104 div with double-quoted attribute
17105 !! wikitext
17106 <div id="rock">HTML rocks</div>
17107 !! html
17108 <div id="rock">HTML rocks</div>
17109
17110 !! end
17111
17112 !! test
17113 div with single-quoted attribute
17114 !! wikitext
17115 <div id='rock'>HTML rocks</div>
17116 !! html
17117 <div id="rock">HTML rocks</div>
17118
17119 !! end
17120
17121 !! test
17122 div with unquoted attribute
17123 !! wikitext
17124 <div id=rock>HTML rocks</div>
17125 !! html
17126 <div id="rock">HTML rocks</div>
17127
17128 !! end
17129
17130 !! test
17131 div with illegal double attributes
17132 !! wikitext
17133 <div id="a" id="b">HTML rocks</div>
17134 !! html
17135 <div id="b">HTML rocks</div>
17136
17137 !!end
17138
17139 !! test
17140 div with empty attribute value, space before equals
17141 !! options
17142 parsoid=wt2html,html2html
17143 !! wikitext
17144 <div class =>HTML rocks</div>
17145 !! html/php
17146 <div class="">HTML rocks</div>
17147
17148 !! html/parsoid
17149 <div class="" data-parsoid='{"stx":"html"}'>HTML rocks</div>
17150 !! end
17151
17152 !! test
17153 div with multiple empty attribute values
17154 !! options
17155 parsoid=wt2html,html2html
17156 !! wikitext
17157 <div id= title=>HTML rocks</div>
17158 !! html/php
17159 <div id="title.3D">HTML rocks</div>
17160
17161 !! html/parsoid
17162 <div id="title.3D" data-parsoid='{"stx":"html"}'>HTML rocks</div>
17163 !! end
17164
17165 !! test
17166 table with multiple empty attribute values
17167 !! options
17168 parsoid=wt2html,html2html
17169 !! wikitext
17170 {| title= id=
17171 | hi
17172 |}
17173 !! html/php
17174 <table title="id=">
17175 <tr>
17176 <td> hi
17177 </td></tr></table>
17178
17179 !! html/parsoid
17180 <table title="id=">
17181 <tbody><tr><td> hi</td></tr>
17182 </tbody></table>
17183 !! end
17184
17185 !! test
17186 div with braces in attribute value
17187 !! wikitext
17188 <div title="{}">Foo</div>
17189 !! html/php
17190 <div title="&#123;&#125;">Foo</div>
17191
17192 !! html/parsoid
17193 <div title="{}">Foo</div>
17194 !! end
17195
17196 !! test
17197 div with empty attribute value, no space before equals
17198 !! options
17199 parsoid=wt2html,html2html
17200 !! wikitext
17201 <div class=>HTML rocks</div>
17202 !! html/php
17203 <div class="">HTML rocks</div>
17204
17205 !! html/parsoid
17206 <div class="">HTML rocks</div>
17207 !! end
17208
17209 !! test
17210 HTML multiple attributes correction
17211 !! wikitext
17212 <p class="error" class="awesome">Awesome!</p>
17213 !! html
17214 <p class="awesome">Awesome!</p>
17215
17216 !!end
17217
17218 !! test
17219 Table multiple attributes correction
17220 !! wikitext
17221 {|
17222 !+ class="error" class="awesome"| status
17223 |}
17224 !! html
17225 <table>
17226 <tr>
17227 <th class="awesome"> status
17228 </th></tr></table>
17229
17230 !!end
17231
17232 !! test
17233 DIV IN UPPERCASE
17234 !! wikitext
17235 <DIV ID="x">HTML ROCKS</DIV>
17236 !! html
17237 <div id="x">HTML ROCKS</div>
17238
17239 !!end
17240
17241 !! test
17242 Non-ASCII pseudo-tags are rendered as text
17243 !! wikitext
17244 <khyô>
17245 !! html
17246 <p>&lt;khyô&gt;
17247 </p>
17248 !! end
17249
17250 !! test
17251 Pseudo-tag with URL 'name' renders as url link
17252 !! wikitext
17253 <http://example.com/>
17254 !! html
17255 <p>&lt;<a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>&gt;
17256 </p>
17257 !! end
17258
17259 !! test
17260 text with amp in the middle of nowhere
17261 !! wikitext
17262 Remember AT&T?
17263 !! html
17264 <p>Remember AT&amp;T?
17265 </p>
17266 !! end
17267
17268 !! test
17269 text with character entity: eacute
17270 !! wikitext
17271 I always thought &eacute; was a cute letter.
17272 !! html
17273 <p>I always thought &#233; was a cute letter.
17274 </p>
17275 !! html+tidy
17276 <p>I always thought é was a cute letter.</p>
17277 !! end
17278
17279 !! test
17280 text with entity-escaped character entity-like string: eacute
17281 !! wikitext
17282 I always thought &amp;eacute; was a cute letter.
17283 !! html
17284 <p>I always thought &amp;eacute; was a cute letter.
17285 </p>
17286 !! end
17287
17288 !! test
17289 text with undefined character entity: xacute
17290 !! wikitext
17291 I always thought &xacute; was a cute letter.
17292 !! html
17293 <p>I always thought &amp;xacute; was a cute letter.
17294 </p>
17295 !! end
17296
17297 !! test
17298 HTML5 tags
17299 !! wikitext
17300 <data value="5">five</data>
17301 <time datetime="2000-01-01T00:00Z">The new millenium started</time>
17302 <mark>This highlighted text</mark>
17303 !! html
17304 <p><data value="5">five</data>
17305 <time datetime="2000-01-01T00:00Z">The new millenium started</time>
17306 <mark>This highlighted text</mark>
17307 </p>
17308 !! end
17309
17310 !! test
17311 HTML tag with leading space is parsed as text
17312 !! wikitext
17313 < div>foo< /div>
17314 !! html
17315 <p>&lt; div&gt;foo&lt; /div&gt;
17316 </p>
17317 !! end
17318
17319 ## Don't expect Parsoid and PHP to match, since PHP isn't exactly following
17320 ## the HTML5 parsing spec.
17321 !! test
17322 Element with broken attribute syntax
17323 !! options
17324 parsoid=wt2html
17325 !! wikitext
17326 <div style=" style="123">hi</div>
17327 <div =>ho</div>
17328 !! html/php
17329 <div style="123">hi</div>
17330 <div>ho</div>
17331
17332 !! html/parsoid
17333 <div style=" style=" data-parsoid='{"stx":"html","a":{"123\"":null},"sa":{"123\"":""}}'>hi</div>
17334 <div data-parsoid='{"stx":"html","a":{"=":null},"sa":{"=":""}}'>ho</div>
17335 !! end
17336
17337 ###
17338 ### Nesting tests (see T43545, T52604, T53081)
17339 ###
17340
17341 # This test case is fixed in Parsoid by domino 1.0.12. (T52604)
17342 # Note that html2wt is considerably more difficult if we use <b> in
17343 # the test case, instead of <small>
17344 !! test
17345 Ensure that HTML adoption agency algorithm is properly implemented.
17346 !! wikitext
17347 <small>X<small>Y</small>Z</small>
17348 !! html
17349 <p><small>X<small>Y</small>Z</small>
17350 </p>
17351 !! end
17352
17353 # This was T43545 in the PHP parser.
17354 # Note that tidy doesn't handle this correctly.
17355 !! test
17356 Nesting of <kbd>
17357 !! wikitext
17358 <kbd>X<kbd>Y</kbd>Z</kbd>
17359 !! html
17360 <p><kbd>X<kbd>Y</kbd>Z</kbd>
17361 </p>
17362 !! end
17363
17364 # The following cases were T53081 in the PHP parser.
17365 # Note that there are some other nestable tags (b, i, etc) which are
17366 # not covered; see T53081 for discussion.
17367
17368 # Note that tidy doesn't handle this correctly.
17369 !! test
17370 Nesting of <em>
17371 !! wikitext
17372 <em>X<em>Y</em>Z</em>
17373 !! html
17374 <p><em>X<em>Y</em>Z</em>
17375 </p>
17376 !! end
17377
17378 # Note that tidy doesn't handle this correctly.
17379 !! test
17380 Nesting of <strong>
17381 !! wikitext
17382 <strong>X<strong>Y</strong>Z</strong>
17383 !! html
17384 <p><strong>X<strong>Y</strong>Z</strong>
17385 </p>
17386 !! end
17387
17388 !! test
17389 Nesting of <q>
17390 !! wikitext
17391 <q>X<q>Y</q>Z</q>
17392 !! html+tidy
17393 <p><q>X<q>Y</q>Z</q></p>
17394 !! end
17395
17396 # Note that tidy doesn't handle this correctly.
17397 !! test
17398 Nesting of <ruby>
17399 !! wikitext
17400 <ruby>X<ruby>Y</ruby>Z</ruby>
17401 !! html
17402 <p><ruby>X<ruby>Y</ruby>Z</ruby>
17403 </p>
17404 !! end
17405
17406 # Note that tidy doesn't handle this correctly.
17407 !! test
17408 Nesting of <bdo>
17409 !! wikitext
17410 <bdo>X<bdo>Y</bdo>Z</bdo>
17411 !! html
17412 <p><bdo>X<bdo>Y</bdo>Z</bdo>
17413 </p>
17414 !! end
17415
17416
17417 ###
17418 ### Media links
17419 ###
17420
17421 !! test
17422 Media link
17423 !! wikitext
17424 [[Media:Foobar.jpg]]
17425 [[Media:Video.ogv]]
17426 [[:Media:Video.ogv]]
17427 !! html/php
17428 <p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Media:Foobar.jpg</a>
17429 <a href="http://example.com/images/0/00/Video.ogv" class="internal" title="Video.ogv">Media:Video.ogv</a>
17430 <a href="http://example.com/images/0/00/Video.ogv" class="internal" title="Video.ogv">Media:Video.ogv</a>
17431 </p>
17432 !! html/parsoid
17433 <p><a rel="mw:MediaLink" href="//example.com/images/3/3a/Foobar.jpg" title="Foobar.jpg">Media:Foobar.jpg</a>
17434 <a rel="mw:MediaLink" href="//example.com/images/0/00/Video.ogv" title="Video.ogv">Media:Video.ogv</a>
17435 <a rel="mw:MediaLink" href="//example.com/images/0/00/Video.ogv" title="Video.ogv" data-parsoid='{"a":{"namespace":"Media"},"sa":{"namespace":":Media"}}'>Media:Video.ogv</a></p>
17436 !! end
17437
17438 !! test
17439 Media link with text
17440 !! wikitext
17441 [[Media:Foobar.jpg|A neat file to look at]]
17442 !! html/php
17443 <p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">A neat file to look at</a>
17444 </p>
17445 !! html/parsoid
17446 <p><a rel="mw:MediaLink" href="//example.com/images/3/3a/Foobar.jpg" title="Foobar.jpg">A neat file to look at</a></p>
17447 !! end
17448
17449 # FIXME: this is still bad HTML tag nesting
17450 # FIXME: doBlockLevels won't wrap this in a paragraph because it contains a div
17451 !! test
17452 Media link with nasty text
17453 !! wikitext
17454 [[Media:Foobar.jpg|Safe Link<div style=display:none>" onmouseover="alert(document.cookie)" onfoo="</div>]]
17455 !! html/php
17456 <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>
17457
17458 !! html+php/tidy
17459 <p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Safe Link</a></p>
17460 <div style="display:none">" onmouseover="alert(document.cookie)" onfoo="</div>
17461 !! html/parsoid
17462 <p><a rel="mw:MediaLink" href="//example.com/images/3/3a/Foobar.jpg" title="Foobar.jpg" data-parsoid='{"autoInsertedEnd":true}'>Safe Link</a></p><div style="display:none" data-parsoid='{"stx":"html"}'><a rel="mw:MediaLink" href="//example.com/images/3/3a/Foobar.jpg" title="Foobar.jpg" data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'>" onmouseover="alert(document.cookie)" onfoo="</a></div>
17463
17464 !! end
17465
17466 !! test
17467 Media link to nonexistent file (T3702)
17468 !! wikitext
17469 [[Media:No such.jpg]]
17470 [[Media:No_such file.jpg]]
17471 !! html/php
17472 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such.jpg" class="new" title="No such.jpg">Media:No such.jpg</a>
17473 <a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such_file.jpg" class="new" title="No such file.jpg">Media:No_such file.jpg</a>
17474 </p>
17475 !! html/parsoid
17476 <p><a rel="mw:MediaLink" href="./Special:FilePath/No_such.jpg" title="No such.jpg" typeof="mw:Error" data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}' data-parsoid='{"a":{"fileName":"No_such.jpg"},"sa":{"fileName":"No such.jpg"}}'>Media:No such.jpg</a>
17477 <a rel="mw:MediaLink" href="./Special:FilePath/No_such_file.jpg" title="No such file.jpg" typeof="mw:Error" data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}' data-parsoid='{"a":{"fileName":"No_such_file.jpg"},"sa":{"fileName":"No_such file.jpg"}}'>Media:No_such file.jpg</a></p>
17478 !! end
17479
17480 !! test
17481 Image link to nonexistent file (T3850 - good)
17482 !! wikitext
17483 [[File:No_such.jpg]]
17484 !! html/php
17485 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such.jpg" class="new" title="File:No such.jpg">File:No such.jpg</a>
17486 </p>
17487 !! html/parsoid
17488 <p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}'><a href="./File:No_such.jpg"><img resource="./File:No_such.jpg" src="./Special:FilePath/No_such.jpg" height="220" width="220"/></a></span></p>
17489 !! end
17490
17491 !! test
17492 :Image link to nonexistent file (T3850 - bad)
17493 !! wikitext
17494 [[:Image:No such.jpg]]
17495 !! html/php
17496 <p><a href="/index.php?title=File:No_such.jpg&amp;action=edit&amp;redlink=1" class="new" title="File:No such.jpg (page does not exist)">Image:No such.jpg</a>
17497 </p>
17498 !! html/parsoid
17499 <p><a rel="mw:WikiLink" href="./File:No_such.jpg" title="File:No such.jpg">Image:No such.jpg</a></p>
17500 !! end
17501
17502 !! test
17503 Character reference normalization in link text (T3938)
17504 !! wikitext
17505 [[Main Page|this&that]]
17506 !! html
17507 <p><a href="/wiki/Main_Page" title="Main Page">this&amp;that</a>
17508 </p>
17509 !!end
17510
17511 !! article
17512 אַ
17513 !! text
17514 Test for unicode normalization
17515
17516 The page's name is U+05d0 U+05b7, with non-canonical form U+FB2E
17517 !! endarticle
17518
17519 !! test
17520 (T21451) Links should refer to the normalized form.
17521 !! wikitext
17522 [[&#xFB2E;]]
17523 [[&#x5d0;&#x5b7;]]
17524 [[&#x5d0;ַ]]
17525 [[א&#x5b7;]]
17526 [[אַ]]
17527 !! html
17528 <p><a href="/wiki/%D7%90%D6%B7" title="אַ">&#xfb2e;</a>
17529 <a href="/wiki/%D7%90%D6%B7" title="אַ">&#x5d0;&#x5b7;</a>
17530 <a href="/wiki/%D7%90%D6%B7" title="אַ">&#x5d0;ַ</a>
17531 <a href="/wiki/%D7%90%D6%B7" title="אַ">א&#x5b7;</a>
17532 <a href="/wiki/%D7%90%D6%B7" title="אַ">אַ</a>
17533 </p>
17534 !! end
17535
17536 !! test
17537 Empty attribute crash test (T4067)
17538 !! wikitext
17539 <font color="">foo</font>
17540 !! html
17541 <p><font color="">foo</font>
17542 </p>
17543 !! end
17544
17545 !! test
17546 Empty attribute crash test single-quotes (T4067)
17547 !! wikitext
17548 <font color=''>foo</font>
17549 !! html
17550 <p><font color="">foo</font>
17551 </p>
17552 !! end
17553
17554 !! test
17555 Attribute test: equals, then nothing
17556 !! options
17557 parsoid=wt2html,html2html
17558 !! wikitext
17559 <font color=>foo</font>
17560 !! html/php
17561 <p><font color="">foo</font>
17562 </p>
17563 !! html/parsoid
17564 <p><font color="" data-parsoid='{"stx":"html"}'>foo</font></p>
17565 !! end
17566
17567 !! test
17568 Attribute test: unquoted value
17569 !! options
17570 parsoid=wt2html,html2html
17571 !! wikitext
17572 <font color=x>foo</font>
17573 !! html/php
17574 <p><font color="x">foo</font>
17575 </p>
17576 !! html/parsoid
17577 <p><font color="x" data-parsoid='{"stx":"html"}'>foo</font></p>
17578 !! end
17579
17580 !! test
17581 Attribute test: unquoted but illegal value (hash)
17582 !! wikitext
17583 <font color=#x>foo</font>
17584 !! html
17585 <p><font color="#x">foo</font>
17586 </p>
17587 !! end
17588
17589 # Parsoid does not serialize to empty attribute syntax,
17590 # so wt2wt and html2wt cases are skipped
17591 !! test
17592 Attribute test: no value (T54330)
17593 !! options
17594 parsoid=wt2html,html2html
17595 !! wikitext
17596 <font color>foo</font>
17597 !! html/php
17598 <p><font color="">foo</font>
17599 </p>
17600 !! html/parsoid
17601 <p><font color="">foo</font></p>
17602 !! end
17603
17604 !! test
17605 T4095: link with three closing brackets
17606 !! wikitext
17607 [[Main Page]]]
17608 !! html/php
17609 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>]
17610 </p>
17611 !! html/parsoid
17612 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a>]</p>
17613 !! end
17614
17615 !! test
17616 T4095: link with pipe and three closing brackets
17617 !! wikitext
17618 [[Main Page|link]]]
17619 !! html/php
17620 <p><a href="/wiki/Main_Page" title="Main Page">link</a>]
17621 </p>
17622 !! html/parsoid
17623 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">link</a>]</p>
17624 !! end
17625
17626 !! test
17627 T4095: link with pipe and three closing brackets, version 2
17628 !! wikitext
17629 [[Main Page|[http://example.com/]]]
17630 !! html/php
17631 <p><a href="/wiki/Main_Page" title="Main Page">[http://example.com/]</a>
17632 </p>
17633 !! html/parsoid
17634 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">[http://example.com/]</a></p>
17635 !! end
17636
17637
17638 ###
17639 ### Safety
17640 ###
17641
17642 !! article
17643 Template:Dangerous attribute
17644 !! text
17645 " onmouseover="alert(document.cookie)
17646 !! endarticle
17647
17648 !! article
17649 Template:Dangerous style attribute
17650 !! text
17651 border-size: expression(alert(document.cookie))
17652 !! endarticle
17653
17654 !! article
17655 Template:Div style
17656 !! text
17657 <div style="float: right; {{{1}}}">Magic div</div>
17658 !! endarticle
17659
17660 !! test
17661 T4304: HTML attribute safety (safe template; regression T4309)
17662 !! wikitext
17663 <div title="{{test}}"></div>
17664 !! html/php
17665 <div title="This is a test template"></div>
17666
17667 !! html/parsoid
17668 <div title="This is a test template" about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"title":"This is a test template"},"sa":{"title":"{{test}}"}}' data-mw='{"attribs":[[{"txt":"title"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[]],\"dsr\":[12,20,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"test\",\"href\":\"./Template:Test\"},\"params\":{},\"i\":0}}]}&#39;>This is a test template&lt;/span>"}]]}'></div>
17669 !! end
17670
17671 # Parsoid has enough context to handle this case
17672 !! test
17673 T4304: HTML attribute safety (dangerous template; 2309)
17674 !! wikitext
17675 <div title="{{dangerous attribute}}"></div>
17676 !! html/php
17677 <div title=""></div>
17678
17679 !! html/parsoid
17680 <div title='" onmouseover="alert(document.cookie)' about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"title":"\" onmouseover=\"alert(document.cookie)"},"sa":{"title":"{{dangerous attribute}}"}}' data-mw='{"attribs":[[{"txt":"title"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[]],\"dsr\":[12,35,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"dangerous attribute\",\"href\":\"./Template:Dangerous_attribute\"},\"params\":{},\"i\":0}}]}&#39;>\" onmouseover=\"alert(document.cookie)&lt;/span>"}]]}'></div>
17681 !! end
17682
17683 !! test
17684 T4304: HTML attribute safety (dangerous style template; 2309)
17685 !! wikitext
17686 <div style="{{dangerous style attribute}}"></div>
17687 !! html/php
17688 <div style="/* insecure input */"></div>
17689
17690 !! html/parsoid
17691 <div style="/* insecure input */" about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"{{dangerous style attribute}}"}}' data-mw='{"attribs":[[{"txt":"style"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[]],\"dsr\":[12,41,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"dangerous style attribute\",\"href\":\"./Template:Dangerous_style_attribute\"},\"params\":{},\"i\":0}}]}&#39;>border-size: expression(alert(document.cookie))&lt;/span>"}]]}'></div>
17692 !! end
17693
17694 !! test
17695 T4304: HTML attribute safety (safe parameter; 2309)
17696 !! wikitext
17697 {{div style|width: 200px}}
17698 !! html/php
17699 <div style="float: right; width: 200px">Magic div</div>
17700
17701 !! html/parsoid
17702 <div style="float: right; width: 200px" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","a":{"style":"float: right; width: 200px"},"sa":{"style":"float: right; {{{1}}}"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"div style","href":"./Template:Div_style"},"params":{"1":{"wt":"width: 200px"}},"i":0}}]}'>Magic div</div>
17703 !! end
17704
17705 !! test
17706 T4304: HTML attribute safety (unsafe parameter; 2309)
17707 !! wikitext
17708 {{div style|width: expression(alert(document.cookie))}}
17709 !! html/php
17710 <div style="/* insecure input */">Magic div</div>
17711
17712 !! html/parsoid
17713 <div style="/* insecure input */" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"float: right; {{{1}}}"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"div style","href":"./Template:Div_style"},"params":{"1":{"wt":"width: expression(alert(document.cookie))"}},"i":0}}]}'>Magic div</div>
17714 !! end
17715
17716 ## Parsoid output here differs; needs investigation.
17717 !! test
17718 T4304: HTML attribute safety (unsafe breakout parameter; 2309)
17719 !! wikitext
17720 {{div style|"><script>alert(document.cookie)</script>}}
17721 !! html
17722 <div style="float: right;">&lt;script&gt;alert(document.cookie)&lt;/script&gt;"&gt;Magic div</div>
17723
17724 !! end
17725
17726 ## Parsoid output here differs; needs investigation.
17727 !! test
17728 T4304: HTML attribute safety (unsafe breakout parameter 2; 2309)
17729 !! wikitext
17730 {{div style|" ><script>alert(document.cookie)</script>}}
17731 !! html
17732 <div style="float: right;">&lt;script&gt;alert(document.cookie)&lt;/script&gt;"&gt;Magic div</div>
17733
17734 !! end
17735
17736 !! test
17737 T4304: HTML attribute safety (link)
17738 !! wikitext
17739 <div title="[[Main Page]]"></div>
17740 !! html
17741 <div title="&#91;&#91;Main Page]]"></div>
17742
17743 !! end
17744
17745 !! test
17746 T4304: HTML attribute safety (italics)
17747 !! wikitext
17748 <div title="''foobar''"></div>
17749 !! html
17750 <div title="&#39;&#39;foobar&#39;&#39;"></div>
17751
17752 !! end
17753
17754 !! test
17755 T4304: HTML attribute safety (bold)
17756 !! wikitext
17757 <div title="'''foobar'''"></div>
17758 !! html
17759 <div title="&#39;&#39;&#39;foobar&#39;&#39;&#39;"></div>
17760
17761 !! end
17762
17763 !! test
17764 T4304: HTML attribute safety (ISBN)
17765 !! wikitext
17766 <div title="ISBN 1234567890"></div>
17767 !! html
17768 <div title="&#73;SBN 1234567890"></div>
17769
17770 !! end
17771
17772 !! test
17773 T4304: HTML attribute safety (RFC)
17774 !! wikitext
17775 <div title="RFC 1234"></div>
17776 !! html
17777 <div title="&#82;FC 1234"></div>
17778
17779 !! end
17780
17781 !! test
17782 T4304: HTML attribute safety (PMID)
17783 !! wikitext
17784 <div title="PMID 1234567890"></div>
17785 !! html
17786 <div title="&#80;MID 1234567890"></div>
17787
17788 !! end
17789
17790 !! test
17791 T4304: HTML attribute safety (web link)
17792 !! wikitext
17793 <div title="http://example.com/"></div>
17794 !! html
17795 <div title="http&#58;//example.com/"></div>
17796
17797 !! end
17798
17799 !! test
17800 T4304: HTML attribute safety (named web link)
17801 !! wikitext
17802 <div title="[http://example.com/ link]"></div>
17803 !! html
17804 <div title="&#91;http&#58;//example.com/ link]"></div>
17805
17806 !! end
17807
17808 !! test
17809 T5244: HTML attribute safety (extension; safe)
17810 !! wikitext
17811 <div style="<nowiki>background:blue</nowiki>"></div>
17812 !! html/php
17813 <div style="background:blue"></div>
17814
17815 !! html/parsoid
17816 <div style="background:blue" data-parsoid='{"stx":"html","a":{"style":"background:blue"},"sa":{"style":"&lt;nowiki>background:blue&lt;/nowiki>"}}'></div>
17817 !! end
17818
17819 !! test
17820 T5244: HTML attribute safety (extension; unsafe)
17821 !! wikitext
17822 <div style="<nowiki>border-left:expression(alert(document.cookie))</nowiki>"></div>
17823 !! html/php
17824 <div style="/* insecure input */"></div>
17825
17826 !! html/parsoid
17827 <div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"&lt;nowiki>border-left:expression(alert(document.cookie))&lt;/nowiki>"}}'></div>
17828 !! end
17829
17830 # More MSIE fun discovered by Tom Gilder
17831
17832 !! test
17833 MSIE CSS safety test: spurious slash
17834 !! wikitext
17835 <div style="background-image:u\rl(javascript:alert('boo'))">evil</div>
17836 !! html/php
17837 <div style="/* insecure input */">evil</div>
17838
17839 !! html/parsoid
17840 <div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"background-image:u\\rl(javascript:alert(&#39;boo&#39;))"}}'>evil</div>
17841 !! end
17842
17843 !! test
17844 MSIE CSS safety test: hex code
17845 !! wikitext
17846 <div style="background-image:u\72l(javascript:alert('boo'))">evil</div>
17847 !! html/php
17848 <div style="/* insecure input */">evil</div>
17849
17850 !! html/parsoid
17851 <div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"background-image:u\\72l(javascript:alert(&#39;boo&#39;))"}}'>evil</div>
17852 !! end
17853
17854 !! test
17855 MSIE CSS safety test: comment in url
17856 !! wikitext
17857 <div style="background-image:u/**/rl(javascript:alert('boo'))">evil</div>
17858 !! html/php
17859 <div style="background-image:u rl(javascript:alert(&#39;boo&#39;))">evil</div>
17860
17861 !! html/parsoid
17862 <div style="background-image:u rl(javascript:alert('boo'))" data-parsoid='{"stx":"html","a":{"style":"background-image:u rl(javascript:alert(&#39;boo&#39;))"},"sa":{"style":"background-image:u/**/rl(javascript:alert(&#39;boo&#39;))"}}'>evil</div>
17863 !! end
17864
17865 !! test
17866 MSIE CSS safety test: comment in expression
17867 !! wikitext
17868 <div style="background-image:expres/**/sion(alert('boo4'))">evil4</div>
17869 !! html/php
17870 <div style="background-image:expres sion(alert(&#39;boo4&#39;))">evil4</div>
17871
17872 !! html/parsoid
17873 <div style="background-image:expres sion(alert('boo4'))" data-parsoid='{"stx":"html","a":{"style":"background-image:expres sion(alert(&#39;boo4&#39;))"},"sa":{"style":"background-image:expres/**/sion(alert(&#39;boo4&#39;))"}}'>evil4</div>
17874 !! end
17875
17876 !! test
17877 CSS safety test (all browsers): vertical tab (T57332 / CVE-2013-4567)
17878 !! wikitext
17879 <p style="font-size: 100px; background-image:url\b(https://www.google.com/images/srpr/logo6w.png)">A</p>
17880 !! html/php
17881 <p style="/* invalid control char */">A</p>
17882
17883 !! html/parsoid
17884 <p style="/* invalid control char */" data-parsoid='{"stx":"html","a":{"style":"/* invalid control char */"},"sa":{"style":"font-size: 100px; background-image:url\\b(https://www.google.com/images/srpr/logo6w.png)"}}'>A</p>
17885 !! end
17886
17887 !! test
17888 MSIE 6 CSS safety test: Fullwidth (T57332)
17889 !! wikitext
17890 <p style="font-size: 100px; color: expression((title='XSSed'),'red')">A</p>
17891 <div style="top:EXPRESSION(alert())">B</div>
17892 !! html/php
17893 <p style="/* insecure input */">A</p>
17894 <div style="/* insecure input */">B</div>
17895
17896 !! html/parsoid
17897 <p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expression((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>A</p>
17898 <div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"top:EXPRESSION(alert())"}}'>B</div>
17899 !! end
17900
17901 !! test
17902 MSIE 6 CSS safety test: IPA extensions (T57332)
17903 !! wikitext
17904 <div style="background-image:uʀʟ(javascript:alert())">A</div>
17905 <p style="font-size: 100px; color: expʀessɪoɴ((title='XSSed'),'red')">B</p>
17906 !! html/php
17907 <div style="/* insecure input */">A</div>
17908 <p style="/* insecure input */">B</p>
17909
17910 !! html/parsoid
17911 <div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"background-image:uʀʟ(javascript:alert())"}}'>A</div>
17912 <p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expʀessɪoɴ((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>B</p>
17913 !! end
17914
17915 !! test
17916 MSIE 6 CSS safety test: sup/sub script (T57332)
17917 !! wikitext
17918 <div style="background-image:url⁽javascript:alert())">A</div>
17919 <div style="background-image:url₍javascript:alert())">B</div>
17920 <p style="font-size: 100px; color: expressioⁿ((title='XSSed'),'red')">C</p>
17921 !! html/php
17922 <div style="/* insecure input */">A</div>
17923 <div style="/* insecure input */">B</div>
17924 <p style="/* insecure input */">C</p>
17925
17926 !! html/parsoid
17927 <div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"background-image:url⁽javascript:alert())"}}'>A</div>
17928 <div style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"background-image:url₍javascript:alert())"}}'>B</div>
17929 <p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expressioⁿ((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>C</p>
17930 !! end
17931
17932 !! test
17933 Opera -o-link CSS
17934 !! options
17935 parsoid=wt2html,html2html
17936 !! wikitext
17937 <div
17938 title="&#100;&#97;&#116;&#97;&#58;&#116;&#101;&#120;&#116;&#47;&#104;&#116;&#109;&#108;&#44;&#60;&#105;&#109;&#103;&#32;&#115;&#114;&#99;&#61;&#49;&#32;&#111;&#110;&#101;&#114;&#114;&#111;&#114;&#61;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#62;"
17939 style="-o-link:attr(title);-o-link-source:current">X</div>
17940 !! html/php
17941 <div title="data:text/html,&lt;img src=1 onerror=alert(1)&gt;" style="/* insecure input */">X</div>
17942
17943 !! html/parsoid
17944 <div title="data:text/html,&lt;img src=1 onerror=alert(1)>" style="/* insecure input */" data-parsoid='{"stx":"html","a":{"title":"data:text/html,&lt;img src=1 onerror=alert(1)>","style":"/* insecure input */"},"sa":{"title":"&amp;#100;&amp;#97;&amp;#116;&amp;#97;&amp;#58;&amp;#116;&amp;#101;&amp;#120;&amp;#116;&amp;#47;&amp;#104;&amp;#116;&amp;#109;&amp;#108;&amp;#44;&amp;#60;&amp;#105;&amp;#109;&amp;#103;&amp;#32;&amp;#115;&amp;#114;&amp;#99;&amp;#61;&amp;#49;&amp;#32;&amp;#111;&amp;#110;&amp;#101;&amp;#114;&amp;#114;&amp;#111;&amp;#114;&amp;#61;&amp;#97;&amp;#108;&amp;#101;&amp;#114;&amp;#116;&amp;#40;&amp;#49;&amp;#41;&amp;#62;","style":"-o-link:attr(title);-o-link-source:current"}}'>X</div>
17945 !! end
17946
17947 !! test
17948 MSIE 6 CSS safety test: Repetition markers (T57332)
17949 !! wikitext
17950 <p style="font-size: 100px; color: expres〱ion((title='XSSed'),'red')">A</p>
17951 <p style="font-size: 100px; color: expresゝion((title='XSSed'),'red')">B</p>
17952 <p style="font-size: 100px; color: expresーion((title='XSSed'),'red')">C</p>
17953 <p style="font-size: 100px; color: expresヽion((title='XSSed'),'red')">D</p>
17954 <p style="font-size: 100px; color: expresﹽion((title='XSSed'),'red')">E</p>
17955 <p style="font-size: 100px; color: expresﹼion((title='XSSed'),'red')">F</p>
17956 <p style="font-size: 100px; color: expresーion((title='XSSed'),'red')">G</p>
17957 !! html/php
17958 <p style="/* insecure input */">A</p>
17959 <p style="/* insecure input */">B</p>
17960 <p style="/* insecure input */">C</p>
17961 <p style="/* insecure input */">D</p>
17962 <p style="/* insecure input */">E</p>
17963 <p style="/* insecure input */">F</p>
17964 <p style="/* insecure input */">G</p>
17965
17966 !! html/parsoid
17967 <p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expres〱ion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>A</p>
17968 <p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expresゝion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>B</p>
17969 <p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expresーion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>C</p>
17970 <p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expresヽion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>D</p>
17971 <p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expresﹽion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>E</p>
17972 <p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expresﹼion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>F</p>
17973 <p style="/* insecure input */" data-parsoid='{"stx":"html","a":{"style":"/* insecure input */"},"sa":{"style":"font-size: 100px; color: expresーion((title=&#39;XSSed&#39;),&#39;red&#39;)"}}'>G</p>
17974 !! end
17975
17976 !! test
17977 Table attribute legitimate extension
17978 !! wikitext
17979 {|
17980 !+ style="<nowiki>color:blue</nowiki>"| status
17981 |}
17982 !! html
17983 <table>
17984 <tr>
17985 <th style="color:blue"> status
17986 </th></tr></table>
17987
17988 !!end
17989
17990 !! test
17991 Table attribute safety
17992 !! wikitext
17993 {|
17994 !+ style="<nowiki>border-width:expression(0+alert(document.cookie))</nowiki>"| status
17995 |}
17996 !! html
17997 <table>
17998 <tr>
17999 <th style="/* insecure input */"> status
18000 </th></tr></table>
18001
18002 !! end
18003
18004 !! test
18005 CSS line continuation 1
18006 !! wikitext
18007 <div style="background-image: u\&#10;rl(test.jpg);"></div>
18008 !! html
18009 <div style="/* insecure input */"></div>
18010
18011 !! end
18012
18013 !! test
18014 CSS line continuation 2
18015 !! wikitext
18016 <div style="background-image: u\&#13;rl(test.jpg); "></div>
18017 !! html
18018 <div style="/* invalid control char */"></div>
18019
18020 !! end
18021
18022 !! article
18023 Template:Identity
18024 !! text
18025 {{{1}}}
18026 !! endarticle
18027
18028 !! test
18029 Expansion of multi-line templates in attribute values (T8255)
18030 !! wikitext
18031 <div style="background: {{identity|#00FF00}}">-</div>
18032 !! html
18033 <div style="background: #00FF00">-</div>
18034
18035 !! end
18036
18037 !! test
18038 Expansion of multi-line templates in attribute values (T8255 sanity check)
18039 !! wikitext
18040 <div style="background:
18041 #00FF00">-</div>
18042 !! html/php
18043 <div style="background: #00FF00">-</div>
18044
18045 !! html/parsoid
18046 <div style="background:
18047 #00FF00">-</div>
18048 !! end
18049
18050 !! test
18051 Expansion of multi-line templates in attribute values (T8255 sanity check 2)
18052 !! wikitext
18053 <div style="background: &#10;#00FF00">-</div>
18054 !! html
18055 <div style="background: &#10;#00FF00">-</div>
18056
18057 !! end
18058
18059 !! test
18060 Tags which are hidden from Tidy cannot pass through the Sanitizer
18061 !! wikitext
18062 <mw:toc><script>alert();</script></mw:toc>
18063 !! html+tidy
18064 <p>&lt;mw:toc&gt;&lt;script&gt;alert();&lt;/script&gt;&lt;/mw:toc&gt;</p>
18065 !! end
18066
18067 ###
18068 ### Parser hooks (see tests/parser/parserTestsParserHook.php for the <tag> extension)
18069 ###
18070
18071 !! test
18072 Parser hook: empty input
18073 !! wikitext
18074 <tag></tag>
18075 !! html/php
18076 <pre>
18077 ''
18078 array (
18079 )
18080 </pre>
18081
18082 !! html/parsoid
18083 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{},"body":{"extsrc":""}}' data-parsoid='{}' about="#mwt2"></pre>
18084 !! end
18085
18086 ## Don't expect parsoid to rt this form.
18087 !! test
18088 Parser hook: empty input using terminated empty elements
18089 !! options
18090 parsoid=wt2html,html2html
18091 !! wikitext
18092 <tag/>
18093 !! html/php
18094 <pre>
18095 NULL
18096 array (
18097 )
18098 </pre>
18099
18100 !! html/parsoid
18101 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{},"body":null}' data-parsoid='{}' about="#mwt2"></pre>
18102 !! end
18103
18104 !! test
18105 Parser hook: empty input using terminated empty elements (space before)
18106 !! wikitext
18107 <tag />
18108 !! html/php
18109 <pre>
18110 NULL
18111 array (
18112 )
18113 </pre>
18114
18115 !! html/parsoid
18116 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{},"body":null}' data-parsoid='{}' about="#mwt2"></pre>
18117 !! end
18118
18119 !! test
18120 Parser hook: basic input
18121 !! wikitext
18122 <tag>input</tag>
18123 !! html/php
18124 <pre>
18125 'input'
18126 array (
18127 )
18128 </pre>
18129
18130 !! html/parsoid
18131 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{},"body":{"extsrc":"input"}}' data-parsoid='{}' about="#mwt2"></pre>
18132 !! end
18133
18134 ## Don't expect parsoid to rt this form.
18135 !! test
18136 Parser hook: case insensitive
18137 !! options
18138 parsoid=wt2html,html2html
18139 !! wikitext
18140 <TAG>input</TAG>
18141 !! html/php
18142 <pre>
18143 'input'
18144 array (
18145 )
18146 </pre>
18147
18148 !! html/parsoid
18149 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{},"body":{"extsrc":"input"}}' data-parsoid='{}' about="#mwt2"></pre>
18150 !! end
18151
18152 ## Don't expect parsoid to rt this form.
18153 !! test
18154 Parser hook: case insensitive, redux
18155 !! options
18156 parsoid=wt2html,html2html
18157 !! wikitext
18158 <TaG>input</TAg>
18159 !! html/php
18160 <pre>
18161 'input'
18162 array (
18163 )
18164 </pre>
18165
18166 !! html/parsoid
18167 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{},"body":{"extsrc":"input"}}' data-parsoid='{}' about="#mwt2"></pre>
18168 !! end
18169
18170 !! test
18171 Parser hook: nested tags
18172 !! wikitext
18173 <tag><tag></tag></tag>
18174 !! html/php
18175 <pre>
18176 '<tag>'
18177 array (
18178 )
18179 </pre>&lt;/tag&gt;
18180
18181 !! html/parsoid
18182 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{},"body":{"extsrc":"&lt;tag>"}}' data-parsoid='{}' about="#mwt2"></pre>&lt;/tag>
18183 !! end
18184
18185 !! test
18186 Parser hook: basic arguments
18187 !! wikitext
18188 <tag width="200" height="100" depth="50" square=""></tag>
18189 !! html/php
18190 <pre>
18191 ''
18192 array (
18193 'width' => '200',
18194 'height' => '100',
18195 'depth' => '50',
18196 'square' => '',
18197 )
18198 </pre>
18199
18200 !! html/parsoid
18201 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{"width":"200","height":"100","depth":"50","square":""},"body":{"extsrc":""}}' data-parsoid='{}' about="#mwt2"></pre>
18202 !! end
18203
18204 ## Don't expect parsoid to rt this form.
18205 !! test
18206 Parser hook: basic arguments, variations
18207 !! options
18208 parsoid=wt2html,html2html
18209 !! wikitext
18210 <tag width=200 height = "100" depth = '50' square></tag>
18211 !! html/php
18212 <pre>
18213 ''
18214 array (
18215 'width' => '200',
18216 'height' => '100',
18217 'depth' => '50',
18218 'square' => '',
18219 )
18220 </pre>
18221
18222 !! html/parsoid
18223 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{"width":"200","height":"100","depth":"50","square":""},"body":{"extsrc":""}}' data-parsoid='{}' about="#mwt2"></pre>
18224 !! end
18225
18226 !! test
18227 Parser hook: argument containing a forward slash (T7344)
18228 !! wikitext
18229 <tag filename="/tmp/bla"></tag>
18230 !! html/php
18231 <pre>
18232 ''
18233 array (
18234 'filename' => '/tmp/bla',
18235 )
18236 </pre>
18237
18238 !! html/parsoid
18239 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{"filename":"/tmp/bla"},"body":{"extsrc":""}}' data-parsoid='{}' about="#mwt2"></pre>
18240 !! end
18241
18242 ## Don't expect parsoid to rt this form.
18243 !! test
18244 Parser hook: empty input using terminated empty elements (T4374)
18245 !! options
18246 parsoid=wt2html,html2html
18247 !! wikitext
18248 <tag foo=bar/>text
18249 !! html/php
18250 <pre>
18251 NULL
18252 array (
18253 'foo' => 'bar',
18254 )
18255 </pre>text
18256
18257 !! html/parsoid
18258 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{"foo":"bar"},"body":null}' data-parsoid='{}' about="#mwt2"></pre>text
18259 !! end
18260
18261 ## </tag> should be output literally since there is no matching tag that begins it
18262 ## Don't expect parsoid to rt this form.
18263 !! test
18264 Parser hook: basic arguments using terminated empty elements (T4374)
18265 !! options
18266 parsoid=wt2html
18267 !! wikitext
18268 <tag width=200 height = "100" depth = '50' square/>
18269 other stuff
18270 </tag>
18271 !! html/php
18272 <pre>
18273 NULL
18274 array (
18275 'width' => '200',
18276 'height' => '100',
18277 'depth' => '50',
18278 'square' => '',
18279 )
18280 </pre>
18281 <p>other stuff
18282 &lt;/tag&gt;
18283 </p>
18284 !! html/parsoid
18285 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{"width":"200","height":"100","depth":"50","square":""},"body":null}' about="#mwt2"></pre><p>other stuff
18286 &lt;/tag></p>
18287 !! end
18288
18289 ## Don't expect parsoid to rt this form.
18290 !! test
18291 Parser hook: Don't allow unclosed extension tags
18292 !! options
18293 parsoid=wt2html
18294 !! wikitext
18295 test <tag>123
18296
18297 this is a '''test'''
18298 !! html/php
18299 <p>test &lt;tag&gt;123
18300 </p><p>this is a <b>test</b>
18301 </p>
18302 !! html/parsoid
18303 <p>test &lt;tag>123</p>
18304
18305 <p>this is a <b>test</b></p>
18306 !! end
18307
18308 ###
18309 ### (see tests/parser/parserTestsParserHook.php for the <statictag> extension)
18310 ###
18311
18312 !! test
18313 Parser hook: static parser hook not inside a comment
18314 !! wikitext
18315 <statictag>hello, world</statictag>
18316
18317 <statictag action="flush" />
18318 !! html/php
18319 <p><br />
18320 hello, world
18321 </p>
18322 !! html/parsoid
18323 <p><span typeof="mw:Extension/statictag" data-mw='{"name":"statictag","attrs":{},"body":{"extsrc":"hello, world"}}' data-parsoid='{}' about="#mwt2"></span></p>
18324 <p typeof="mw:Extension/statictag" data-mw='{"name":"statictag","attrs":{"action":"flush"},"body":null}' data-parsoid='{}' about="#mwt4">hello, world</p>
18325 !! end
18326
18327 !! test
18328 Parser hook: static parser hook inside a comment
18329 !! wikitext
18330 <!-- <statictag>hello, world</statictag> -->
18331 <statictag action="flush" />
18332 !! html/php
18333 <p><br />
18334 </p>
18335 !! html/parsoid
18336 <!-- <statictag&#x3E;hello, world</statictag&#x3E; -->
18337 <p typeof='mw:Extension/statictag' data-mw='{"name":"statictag","attrs":{"action":"flush"},"body":null}' data-parsoid='{}' about='#mwt2'></p>
18338 !! end
18339
18340 # Nested template calls; this case was broken by Parser.php rev 1.506,
18341 # since reverted.
18342
18343 !! article
18344 Template:One-parameter
18345 !! text
18346 (My parameter is: {{{1}}})
18347 !! endarticle
18348
18349 !! article
18350 Template:Map-one-parameter
18351 !! text
18352 {{{{{1}}}|{{{2}}}}}
18353 !! endarticle
18354
18355 !! test
18356 Nested template calls
18357 !! wikitext
18358 {{Map-one-parameter|One-parameter|param}}
18359 !! html
18360 <p>(My parameter is: param)
18361 </p>
18362 !! end
18363
18364
18365 ###
18366 ### Sanitizer
18367 ###
18368
18369 # HTML+Tidy strips out empty tags completely. Parsoid doesn't.
18370 # FIXME: Wikitext for this first test doesn't match its title.
18371 !! test
18372 Sanitizer: Closing of open tags
18373 !! wikitext
18374 <s></s><table></table>
18375 !! html/php+tidy
18376
18377 !! html/parsoid
18378 <s></s><table></table>
18379 !! end
18380
18381 !! test
18382 Sanitizer: Closing of open but not closed tags
18383 !! wikitext
18384 <s>foo
18385 !! html
18386 <p><s>foo</s>
18387 </p>
18388 !! end
18389
18390 !! test
18391 Sanitizer: Closing of closed but not open tags
18392 !! options
18393 parsoid=wt2html
18394 !! wikitext
18395 </s>
18396 !! html/php+tidy
18397 !! html/parsoid
18398 !! end
18399
18400 !! test
18401 Sanitizer: Closing of closed but not open table tags
18402 !! options
18403 parsoid=wt2html
18404 !! wikitext
18405 Table not started</td></tr></table>
18406 !! html/php+tidy
18407 <p>Table not started</p>
18408 !! html/parsoid
18409 <p>Table not started</p>
18410 !! end
18411
18412 !! test
18413 Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id=""
18414 !! wikitext
18415 <span id="æ: v">byte</span>[[#æ: v|backlink]]
18416 !! html/php
18417 <p><span id=".C3.A6:_v">byte</span><a href="#.C3.A6:_v">backlink</a>
18418 </p>
18419 !! html/parsoid
18420 <p><span id=".C3.A6:_v" data-parsoid='{"stx":"html","a":{"id":".C3.A6:_v"},"sa":{"id":"æ: v"}}'>byte</span><a rel="mw:WikiLink" href="./Main_Page#.C3.A6:_v" data-parsoid='{"stx":"piped","a":{"href":"./Main_Page#.C3.A6:_v"},"sa":{"href":"#æ: v"}}'>backlink</a></p>
18421 !! end
18422
18423 # In HTML5, the restrictions are that id must contain at least one character,
18424 # and must not contain any space characters.
18425 !! test
18426 Sanitizer: Validating the contents of the id attribute (T6515)
18427 !! options
18428 disabled
18429 !! wikitext
18430 <br id="" /><br id="a space" />
18431 !! html
18432 Something ...
18433 !! end
18434
18435 # In HTML5, id must be unique amongst all the ids in the element's home subtree.
18436 !! test
18437 Sanitizer: Validating id attribute uniqueness (T6515, T8301)
18438 !! options
18439 disabled
18440 !! wikitext
18441 <br id="foo" /><br id="foo" />
18442 !! html
18443 Something need to be done. foo-2 ?
18444 !! end
18445
18446 !! test
18447 Sanitizer: Validating that <meta> and <link> work, but only for Microdata
18448 !! wikitext
18449 <div itemscope>
18450 <meta itemprop="hello" content="world">
18451 <meta http-equiv="refresh" content="5">
18452 <meta itemprop="hello" http-equiv="refresh" content="5">
18453 <link itemprop="hello" href="{{SERVER}}">
18454 <link rel="stylesheet" href="{{SERVER}}">
18455 <link rel="stylesheet" itemprop="hello" href="{{SERVER}}">
18456 </div>
18457 !! html
18458 <div itemscope="">
18459 <p> <meta itemprop="hello" content="world" />
18460 &lt;meta http-equiv="refresh" content="5"&gt;
18461 <meta itemprop="hello" content="5" />
18462 <link itemprop="hello" href="http&#58;//example.org" />
18463 &lt;link rel="stylesheet" href="<a rel="nofollow" class="external free" href="http://example.org">http://example.org</a>"&gt;
18464 <link itemprop="hello" href="http&#58;//example.org" />
18465 </p>
18466 </div>
18467
18468 !! end
18469
18470 !! test
18471 Sanitizer: Strip comments from CSS attributes
18472 !! options
18473 parsoid=wt2html,wt2wt
18474 !! wikitext
18475 <span style="margin:/*negate mbox-text padding */-0.125em -0.45em; /*rainbow*/rgba(255, 0, 0, 0.3)">2013</span>
18476 !! html/php
18477 <p><span style="margin: -0.125em -0.45em; rgba(255, 0, 0, 0.3)">2013</span>
18478 </p>
18479 !! html/parsoid
18480 <p><span style="margin: -0.125em -0.45em; rgba(255, 0, 0, 0.3)">2013</span></p>
18481 !! end
18482
18483 !! test
18484 Language converter: output gets cut off unexpectedly (T7757)
18485 !! options
18486 language=zh
18487 !! wikitext
18488 this bit is safe: }-
18489
18490 but if we add a conversion instance: -{zh-cn:xxx;zh-tw:yyy}-
18491
18492 then we get cut off here: }-
18493
18494 all additional text is vanished
18495 !! html/php
18496 <p>this bit is safe: }-
18497 </p><p>but if we add a conversion instance: xxx
18498 </p><p>then we get cut off here: }-
18499 </p><p>all additional text is vanished
18500 </p>
18501 !! html/parsoid
18502 <p>this bit is safe: }-</p>
18503 <p>but if we add a conversion instance: <span typeof="mw:LanguageVariant" data-parsoid='{"tSp":[6]}' data-mw-variant='{"twoway":[{"l":"zh-cn","t":"xxx"},{"l":"zh-tw","t":"yyy"}]}'></span></p>
18504 <p>then we get cut off here: }-</p>
18505 <p>all additional text is vanished</p>
18506 !! end
18507
18508 !! test
18509 Self closed html pairs (T7487)
18510 !! wikitext
18511 <center><font id="bug" />Centered text</center>
18512 <div><font id="bug2" />In div text</div>
18513 !! html+tidy
18514 <center><font id="bug"></font>Centered text</center>
18515 <div><font id="bug2"></font>In div text</div>
18516 !! end
18517
18518 #
18519 #
18520 #
18521
18522 !! test
18523 Punctuation: nbsp before exclamation
18524 !! wikitext
18525 C'est grave !
18526 !! html
18527 <p>C'est grave&#160;!
18528 </p>
18529 !! end
18530
18531 !! test
18532 Punctuation: CSS !important (T13874)
18533 !! wikitext
18534 <div style="width:50% !important">important</div>
18535 !! html
18536 <div style="width:50% !important">important</div>
18537
18538 !!end
18539
18540 !! test
18541 Punctuation: CSS ! important (T13874; with space after)
18542 !! wikitext
18543 <div style="width:50% ! important">important</div>
18544 !! html
18545 <div style="width:50% ! important">important</div>
18546
18547 !!end
18548
18549 !! test
18550 HTML bullet list, closed tags (T7497)
18551 !! wikitext
18552 <ul>
18553 <li>One</li>
18554 <li>Two</li>
18555 </ul>
18556 !! html/php
18557 <ul>
18558 <li>One</li>
18559 <li>Two</li>
18560 </ul>
18561
18562 !! html/parsoid
18563 <ul data-parsoid='{"stx":"html"}'>
18564 <li data-parsoid='{"stx":"html"}'>One</li>
18565 <li data-parsoid='{"stx":"html"}'>Two</li>
18566 </ul>
18567
18568 !! end
18569
18570 !! test
18571 HTML bullet list, unclosed tags (T7497)
18572 !! wikitext
18573 <ul>
18574 <li>One
18575 <li>Two
18576 </ul>
18577 !! html/php+tidy
18578 <ul>
18579 <li>One</li>
18580 <li>Two</li>
18581 </ul>
18582 !! html/parsoid
18583 <ul data-parsoid='{"stx":"html"}'>
18584 <li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
18585 <li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
18586 </ul>
18587
18588 !! end
18589
18590 !! test
18591 HTML ordered list, closed tags (T7497)
18592 !! wikitext
18593 <ol>
18594 <li>One</li>
18595 <li>Two</li>
18596 </ol>
18597 !! html/php
18598 <ol>
18599 <li>One</li>
18600 <li>Two</li>
18601 </ol>
18602
18603 !! html/parsoid
18604 <ol data-parsoid='{"stx":"html"}'>
18605 <li data-parsoid='{"stx":"html"}'>One</li>
18606 <li data-parsoid='{"stx":"html"}'>Two</li>
18607 </ol>
18608
18609 !! end
18610
18611 !! test
18612 HTML ordered list, unclosed tags (T7497)
18613 !! options
18614 !! wikitext
18615 <ol>
18616 <li>One
18617 <li>Two
18618 </ol>
18619 !! html/php+tidy
18620 <ol>
18621 <li>One</li>
18622 <li>Two</li>
18623 </ol>
18624 !! html/parsoid
18625 <ol data-parsoid='{"stx":"html"}'>
18626 <li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
18627 <li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
18628 </ol>
18629
18630 !! end
18631
18632 !! test
18633 HTML nested bullet list, closed tags (T7497)
18634 !! wikitext
18635 <ul>
18636 <li>One</li>
18637 <li>Two:
18638 <ul>
18639 <li>Sub-one</li>
18640 <li>Sub-two</li>
18641 </ul>
18642 </li>
18643 </ul>
18644 !! html/php
18645 <ul>
18646 <li>One</li>
18647 <li>Two:
18648 <ul>
18649 <li>Sub-one</li>
18650 <li>Sub-two</li>
18651 </ul>
18652 </li>
18653 </ul>
18654
18655 !! html/parsoid
18656 <ul data-parsoid='{"stx":"html"}'>
18657 <li data-parsoid='{"stx":"html"}'>One</li>
18658 <li data-parsoid='{"stx":"html"}'>Two:
18659 <ul data-parsoid='{"stx":"html"}'>
18660 <li data-parsoid='{"stx":"html"}'>Sub-one</li>
18661 <li data-parsoid='{"stx":"html"}'>Sub-two</li>
18662 </ul>
18663 </li>
18664 </ul>
18665 !! end
18666
18667 !! test
18668 HTML nested bullet list, open tags (T7497)
18669 !! wikitext
18670 <ul>
18671 <li>One
18672 <li>Two:
18673 <ul>
18674 <li>Sub-one
18675 <li>Sub-two
18676 </ul>
18677 </ul>
18678 !! html/php+tidy
18679 <ul>
18680 <li>One</li>
18681 <li>Two:
18682 <ul>
18683 <li>Sub-one</li>
18684 <li>Sub-two</li>
18685 </ul>
18686 </li>
18687 </ul>
18688 !! html/parsoid
18689 <ul>
18690 <li>One
18691 </li>
18692 <li>Two:
18693 <ul>
18694 <li>Sub-one
18695 </li>
18696 <li>Sub-two
18697 </li>
18698 </ul>
18699 </li>
18700 </ul>
18701
18702 !! end
18703
18704 !! test
18705 HTML nested ordered list, closed tags (T7497)
18706 !! wikitext
18707 <ol>
18708 <li>One</li>
18709 <li>Two:
18710 <ol>
18711 <li>Sub-one</li>
18712 <li>Sub-two</li>
18713 </ol>
18714 </li>
18715 </ol>
18716 !! html
18717 <ol>
18718 <li>One</li>
18719 <li>Two:
18720 <ol>
18721 <li>Sub-one</li>
18722 <li>Sub-two</li>
18723 </ol>
18724 </li>
18725 </ol>
18726
18727 !! end
18728
18729 !! test
18730 HTML nested ordered list, open tags (T7497)
18731 !! wikitext
18732 <ol>
18733 <li>One
18734 <li>Two:
18735 <ol>
18736 <li>Sub-one
18737 <li>Sub-two
18738 </ol>
18739 </ol>
18740 !! html/php
18741 <ol>
18742 <li>One
18743 <li>Two:
18744 <ol>
18745 <li>Sub-one
18746 <li>Sub-two
18747 </ol>
18748 </ol>
18749
18750 !! html/parsoid
18751 <ol>
18752 <li>One
18753 </li>
18754 <li>Two:
18755 <ol>
18756 <li>Sub-one
18757 </li>
18758 <li>Sub-two
18759 </li>
18760 </ol>
18761 </li>
18762 </ol>
18763
18764 !! end
18765
18766 !! test
18767 HTML ordered list item with parameters oddity
18768 !! wikitext
18769 <ol><li id="fragment">One</li>
18770 </ol>
18771 !! html
18772 <ol><li id="fragment">One</li>
18773 </ol>
18774
18775 !! end
18776
18777 # parsoid doesn't explicitly mark autonumbered links, see T55505
18778 !!test
18779 T7918: autonumbering
18780 !! wikitext
18781 [http://first/] [http://second] [ftp://ftp]
18782
18783 ftp://inlineftp
18784
18785 [mailto:enclosed@mail.tld With target]
18786
18787 [mailto:enclosed@mail.tld]
18788
18789 mailto:inline@mail.tld
18790 !! html/php
18791 <p><a rel="nofollow" class="external autonumber" href="http://first/">[1]</a> <a rel="nofollow" class="external autonumber" href="http://second">[2]</a> <a rel="nofollow" class="external autonumber" href="ftp://ftp">[3]</a>
18792 </p><p><a rel="nofollow" class="external free" href="ftp://inlineftp">ftp://inlineftp</a>
18793 </p><p><a rel="nofollow" class="external text" href="mailto:enclosed@mail.tld">With target</a>
18794 </p><p><a rel="nofollow" class="external autonumber" href="mailto:enclosed@mail.tld">[4]</a>
18795 </p><p><a rel="nofollow" class="external free" href="mailto:inline@mail.tld">mailto:inline@mail.tld</a>
18796 </p>
18797 !! html/parsoid
18798 <p><a rel="mw:ExtLink" href="http://first/"></a> <a rel="mw:ExtLink" href="http://second"></a> <a rel="mw:ExtLink" href="ftp://ftp"></a></p>
18799 <p><a rel="mw:ExtLink" href="ftp://inlineftp">ftp://inlineftp</a></p>
18800 <p><a rel="mw:ExtLink" href="mailto:enclosed@mail.tld">With target</a></p>
18801 <p><a rel="mw:ExtLink" href="mailto:enclosed@mail.tld"></a></p>
18802 <p><a rel="mw:ExtLink" href="mailto:inline@mail.tld">mailto:inline@mail.tld</a></p>
18803 !! end
18804
18805
18806 #
18807 # Security and HTML correctness
18808 # From Nick Jenkins' fuzz testing
18809 #
18810
18811 !! test
18812 Fuzz testing: Parser13
18813 !! wikitext
18814 {|
18815 | http://a|
18816 !! html
18817 <table>
18818 <tr>
18819 <td>
18820 </td>
18821 </tr>
18822 </table>
18823
18824 !! end
18825
18826 !! test
18827 Fuzz testing: Parser14
18828 !! wikitext
18829 == onmouseover= ==
18830 http://__TOC__
18831 !! html
18832 <h2><span class="mw-headline" id="onmouseover.3D">onmouseover=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: onmouseover=">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
18833 http://<div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
18834 <ul>
18835 <li class="toclevel-1 tocsection-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
18836 </ul>
18837 </div>
18838
18839
18840 !! html+tidy
18841 <h2><span class="mw-headline" id="onmouseover.3D">onmouseover=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: onmouseover=">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
18842 <p>http://</p>
18843 <div id="toc" class="toc">
18844 <div class="toctitle">
18845 <h2>Contents</h2>
18846 </div>
18847 <ul>
18848 <li class="toclevel-1 tocsection-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
18849 </ul>
18850 </div>
18851 <p></p>
18852 !! end
18853
18854 !! test
18855 Fuzz testing: Parser14-table
18856 !! options
18857 parsoid=wt2html,html2html
18858 !! wikitext
18859 ==a==
18860 {| STYLE=__TOC__
18861 !! html
18862 <h2><span class="mw-headline" id="a">a</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: a">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
18863 <table style="&#95;_TOC&#95;_">
18864 <tr><td></td></tr>
18865 </table>
18866
18867 !! html+tidy
18868 <h2><span class="mw-headline" id="a">a</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: a">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
18869 <table style="__TOC__">
18870 <tr>
18871 <td></td>
18872 </tr>
18873 </table>
18874 !! html/parsoid
18875 <h2>a</h2>
18876 <table style="__TOC__"></table>
18877 !! end
18878
18879 # Known to produce bogus xml (extra </td>)
18880 !! test
18881 Fuzz testing: Parser16
18882 !! wikitext
18883 {|
18884 !https://||||||
18885 !! html
18886 <table>
18887 <tr>
18888 <th>https://</th>
18889 <th></th>
18890 <th></th>
18891 <th>
18892 </td>
18893 </tr>
18894 </table>
18895
18896 !! html+tidy
18897 <table>
18898 <tr>
18899 <th>https://</th>
18900 <th></th>
18901 <th></th>
18902 <th></th>
18903 </tr>
18904 </table>
18905 !! end
18906
18907 !! test
18908 Fuzz testing: Parser21
18909 !! wikitext
18910 {|
18911 ! irc://{{ftp://a" onmouseover="alert('hello world');"
18912 |
18913 !! html
18914 <table>
18915 <tr>
18916 <th> <a rel="nofollow" class="external free" href="irc://{{ftp://a">irc://{{ftp://a</a>" onmouseover="alert('hello world');"
18917 </th>
18918 <td>
18919 </td>
18920 </tr>
18921 </table>
18922
18923 !! end
18924
18925 !! test
18926 Fuzz testing: Parser22
18927 !! wikitext
18928 http://===r:::https://b
18929
18930 {|
18931 !! html
18932 <p><a rel="nofollow" class="external free" href="http://===r:::https://b">http://===r:::https://b</a>
18933 </p>
18934 <table>
18935 <tr><td></td></tr>
18936 </table>
18937
18938 !! end
18939
18940 # Known to produce bad XML for now
18941 !! test
18942 Fuzz testing: Parser24
18943 !! options
18944 parsoid=wt2html
18945 !! wikitext
18946 {|
18947 {{{|
18948 <u CLASS=
18949 | {{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--><noinclude>}}}} >
18950 <br style="onmouseover='alert(document.cookie);' " />
18951
18952 MOVE YOUR MOUSE CURSOR OVER THIS TEXT
18953 |
18954 !! html/php
18955 <table>
18956 {{{|
18957 <u class="&#124;">}}}} &gt;
18958 <br style="onmouseover=&#39;alert(document.cookie);&#39;" />
18959
18960 MOVE YOUR MOUSE CURSOR OVER THIS TEXT
18961 <tr>
18962 <td></u>
18963 </td>
18964 </tr>
18965 </table>
18966
18967 !! html/parsoid
18968 <p data-parsoid='{"fostered":true,"autoInsertedEnd":true}'>{{{|
18969 <u class="|" data-parsoid='{"stx":"html","a":{"{{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--":null},"sa":{"{{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--":""},"autoInsertedEnd":true}'><meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/>}}}} >
18970 <br style="onmouseover='alert(document.cookie);' " data-parsoid='{"stx":"html","selfClose":true}'/></u></p><p data-parsoid='{"fostered":true,"autoInsertedEnd":true}'><u class="|" data-parsoid='{"stx":"html","a":{"{{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--":null},"sa":{"{{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--":""},"autoInsertedEnd":true,"autoInsertedStart":true}'>MOVE YOUR MOUSE CURSOR OVER THIS TEXT</u></p><table data-parsoid='{"autoInsertedEnd":true}'>
18971
18972
18973
18974 <tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'></td></tr></tbody></table>
18975 !! end
18976
18977 # Note: the current result listed for this is not what the original one was,
18978 # but the original bug was JavaScript injection, which is fixed in any case.
18979 # It's not clear that the original result listed was any more correct than the
18980 # current one. Original result:
18981 # <p>{{{|
18982 # </p>
18983 # <li class="&#124;&#124;">
18984 # }}}blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
18985 !!test
18986 Fuzz testing: Parser25 (T8055)
18987 !! wikitext
18988 {{{
18989 |
18990 <LI CLASS=||
18991 >
18992 }}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE
18993 !! html/php
18994 <p>&lt;LI CLASS=blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
18995 </p>
18996 !! html/parsoid
18997 <span about="#mwt1" typeof="mw:Param" data-parsoid='{"pi":[[{"k":"1"},{"k":"2"},{"k":"3"}]]}' data-mw='{"parts":[{"templatearg":{"target":{"wt":"\n"},"params":{"1":{"wt":" \n&lt;LI CLASS="},"2":{"wt":""},"3":{"wt":"\n >\n"}},"i":0}},"blah\" onmouseover=\"alert(&#39;hello world&#39;);\" align=\"left\"&#39;&#39;&#39;MOVE MOUSE CURSOR OVER HERE"]}'>
18998 </span><p about="#mwt1">&lt;LI CLASS=blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b></p>
18999 !! end
19000
19001 !!test
19002 Fuzz testing: URL adjacent extension (with space, clean)
19003 !! wikitext
19004 http://example.com <nowiki>junk</nowiki>
19005 !! html/php
19006 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> junk
19007 </p>
19008 !! html/parsoid
19009 <p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a> <span typeof="mw:Nowiki">junk</span></p>
19010 !! end
19011
19012 !!test
19013 Fuzz testing: URL adjacent extension (no space, dirty; nowiki)
19014 !! wikitext
19015 http://example.com<nowiki>junk</nowiki>
19016 !! html/php
19017 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>junk
19018 </p>
19019 !! html/parsoid
19020 <p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a><span typeof="mw:Nowiki">junk</span></p>
19021 !! end
19022
19023 !! test
19024 Fuzz testing: URL adjacent extension (no space, dirty; pre)
19025 !! wikitext
19026 http://example.com<pre>junk</pre>
19027 !! html/php
19028 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a><pre>junk</pre>
19029
19030 !! html/php+tidy
19031 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></p>
19032 <pre>
19033 junk
19034 </pre>
19035 !! html/parsoid
19036 <p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a></p><pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"junk"}}'>junk</pre>
19037 !! end
19038
19039 !! test
19040 Fuzz testing: image with bogus manual thumbnail
19041 !! wikitext
19042 [[Image:foobar.jpg|thumbnail= ]]
19043 !! html/php
19044 <div class="thumb tright"><div class="thumbinner" style="width:182px;">Error creating thumbnail: <div class="thumbcaption"></div></div></div>
19045
19046 !! html/parsoid
19047 <figure class="mw-default-size" typeof="mw:Error mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"manualthumb","ak":"thumbnail= "}]}' data-mw='{"errors":[{"key":"apierror-invalidtitle","message":"Invalid thumbnail title.","params":{"name":""}}],"thumb":""}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{"href":"Image:foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="./Special:FilePath/Foobar.jpg" height="220" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"220"},"sa":{"resource":"Image:foobar.jpg"}}'/></a></figure>
19048 !! end
19049
19050 !! test
19051 Fuzz testing: encoded newline in generated HTML replacements (T8577)
19052 !! wikitext
19053 <pre dir="&#10;"></pre>
19054 !! html/php
19055 <pre dir="&#10;"></pre>
19056
19057 !! html/parsoid
19058 <pre typeof="mw:Extension/pre" about="#mwt2" dir="&amp;#10;" data-mw='{"name":"pre","attrs":{"dir":"&amp;#10;"},"body":{"extsrc":""}}'></pre>
19059 !! end
19060
19061 !! test
19062 Parsing optional HTML elements (T8171)
19063 !! options
19064 !! wikitext
19065 <table>
19066 <tr>
19067 <td> Some tabular data</td>
19068 <td> More tabular data ...
19069 <td> And yet som tabular data</td>
19070 </tr>
19071 </table>
19072 !! html
19073 <table>
19074 <tr>
19075 <td> Some tabular data</td>
19076 <td> More tabular data ...
19077 </td><td> And yet som tabular data</td>
19078 </tr>
19079 </table>
19080
19081 !! end
19082
19083 !! test
19084 Correct handling of <td>, <tr> (T8171)
19085 !! options
19086 !! wikitext
19087 <table>
19088 <tr>
19089 <td> Some tabular data</td>
19090 <td> More tabular data ...</td>
19091 <td> And yet som tabular data</td>
19092 </tr>
19093 </table>
19094 !! html
19095 <table>
19096 <tr>
19097 <td> Some tabular data</td>
19098 <td> More tabular data ...</td>
19099 <td> And yet som tabular data</td>
19100 </tr>
19101 </table>
19102
19103 !! end
19104
19105
19106 !! test
19107 Parsing crashing regression (fr:JavaScript)
19108 !! wikitext
19109 </body></x>
19110 !! html
19111 <p>&lt;/body&gt;&lt;/x&gt;
19112 </p>
19113 !! end
19114
19115 !! test
19116 Inline wiki vs wiki block nesting
19117 !! wikitext
19118 '''Bold paragraph
19119
19120 New wiki paragraph
19121 !! html
19122 <p><b>Bold paragraph</b>
19123 </p><p>New wiki paragraph
19124 </p>
19125 !! end
19126
19127 # FIXME: The current php output is documented
19128 # and desired output is the parsoid target.
19129 !! test
19130 Inline HTML vs wiki block nesting
19131 !! wikitext
19132 <b>Bold paragraph
19133
19134 New wiki paragraph
19135 !! html/php
19136 <p><b>Bold paragraph
19137 </p><p>New wiki paragraph</b>
19138 </p>
19139 !! html/parsoid
19140 <p><b>Bold paragraph</b>
19141 </p><p>New wiki paragraph
19142 </p>
19143 !! end
19144
19145 # Original result was this:
19146 # <p><b>bold</b><b>bold<i>bolditalics</i></b>
19147 # </p>
19148 # While that might be marginally more intuitive, maybe, the six-apostrophe
19149 # construct is clearly pathological and the result stated here (which is what
19150 # the parser actually does) is about as reasonable as anything.
19151 !!test
19152 Mixing markup for italics and bold
19153 !! options
19154 !! wikitext
19155 '''bold''''''bold''bolditalics'''''
19156 !! html
19157 <p>'<i>bold'</i><b>bold<i>bolditalics</i></b>
19158 </p>
19159 !! end
19160
19161
19162 !! article
19163 Xyzzyx
19164 !! text
19165 Article for special page transclusion test
19166 !! endarticle
19167
19168 !! test
19169 Special page transclusion
19170 !! options
19171 !! wikitext
19172 {{Special:Prefixindex/Xyzzyx}}
19173 !! html
19174 <ul class="mw-prefixindex-list"><li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
19175 </ul>
19176
19177 !! end
19178
19179 !! test
19180 Special page transclusion twice (T7021)
19181 !! options
19182 !! wikitext
19183 {{Special:Prefixindex/Xyzzyx}}
19184 {{Special:Prefixindex/Xyzzyx}}
19185 !! html
19186 <ul class="mw-prefixindex-list"><li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
19187 </ul>
19188 <ul class="mw-prefixindex-list"><li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
19189 </ul>
19190
19191 !! end
19192
19193 !! test
19194 Transclusion of default MediaWiki message
19195 !! wikitext
19196 {{MediaWiki:Mainpage}}
19197 !! html
19198 <p>Main Page
19199 </p>
19200 !! end
19201
19202 !! test
19203 Transclusion of nonexistent MediaWiki message
19204 !! wikitext
19205 {{MediaWiki:Mainpagexxx}}
19206 !! html
19207 <p><a href="/index.php?title=MediaWiki:Mainpagexxx&amp;action=edit&amp;redlink=1" class="new" title="MediaWiki:Mainpagexxx (page does not exist)">MediaWiki:Mainpagexxx</a>
19208 </p>
19209 !! end
19210
19211 !! test
19212 Transclusion of MediaWiki message with underscore
19213 !! wikitext
19214 {{MediaWiki:history_short}}
19215 !! html
19216 <p>History
19217 </p>
19218 !! end
19219
19220 !! test
19221 Transclusion of MediaWiki message with space
19222 !! wikitext
19223 {{MediaWiki:history short}}
19224 !! html
19225 <p>History
19226 </p>
19227 !! end
19228
19229 !! test
19230 Invalid header with following text
19231 !! wikitext
19232 = x = y
19233 !! html
19234 <p>= x = y
19235 </p>
19236 !! end
19237
19238
19239 !! test
19240 Section extraction test (section 0)
19241 !! options
19242 section=0
19243 !! wikitext
19244 start
19245 ==a==
19246 ===aa===
19247 ====aaa====
19248 ==b==
19249 ===ba===
19250 ===bb===
19251 ====bba====
19252 ===bc===
19253 ==c==
19254 ===ca===
19255 !! html/php
19256 start
19257 !! end
19258
19259 !! test
19260 Section extraction test (section 1)
19261 !! options
19262 section=1
19263 !! wikitext
19264 start
19265 ==a==
19266 ===aa===
19267 ====aaa====
19268 ==b==
19269 ===ba===
19270 ===bb===
19271 ====bba====
19272 ===bc===
19273 ==c==
19274 ===ca===
19275 !! html/php
19276 ==a==
19277 ===aa===
19278 ====aaa====
19279 !! end
19280
19281 !! test
19282 Section extraction test (section 2)
19283 !! options
19284 section=2
19285 !! wikitext
19286 start
19287 ==a==
19288 ===aa===
19289 ====aaa====
19290 ==b==
19291 ===ba===
19292 ===bb===
19293 ====bba====
19294 ===bc===
19295 ==c==
19296 ===ca===
19297 !! html/php
19298 ===aa===
19299 ====aaa====
19300 !! end
19301
19302 !! test
19303 Section extraction test (section 3)
19304 !! options
19305 section=3
19306 !! wikitext
19307 start
19308 ==a==
19309 ===aa===
19310 ====aaa====
19311 ==b==
19312 ===ba===
19313 ===bb===
19314 ====bba====
19315 ===bc===
19316 ==c==
19317 ===ca===
19318 !! html/php
19319 ====aaa====
19320 !! end
19321
19322 !! test
19323 Section extraction test (section 4)
19324 !! options
19325 section=4
19326 !! wikitext
19327 start
19328 ==a==
19329 ===aa===
19330 ====aaa====
19331 ==b==
19332 ===ba===
19333 ===bb===
19334 ====bba====
19335 ===bc===
19336 ==c==
19337 ===ca===
19338 !! html/php
19339 ==b==
19340 ===ba===
19341 ===bb===
19342 ====bba====
19343 ===bc===
19344 !! end
19345
19346 !! test
19347 Section extraction test (section 5)
19348 !! options
19349 section=5
19350 !! wikitext
19351 start
19352 ==a==
19353 ===aa===
19354 ====aaa====
19355 ==b==
19356 ===ba===
19357 ===bb===
19358 ====bba====
19359 ===bc===
19360 ==c==
19361 ===ca===
19362 !! html/php
19363 ===ba===
19364 !! end
19365
19366 !! test
19367 Section extraction test (section 6)
19368 !! options
19369 section=6
19370 !! wikitext
19371 start
19372 ==a==
19373 ===aa===
19374 ====aaa====
19375 ==b==
19376 ===ba===
19377 ===bb===
19378 ====bba====
19379 ===bc===
19380 ==c==
19381 ===ca===
19382 !! html/php
19383 ===bb===
19384 ====bba====
19385 !! end
19386
19387 !! test
19388 Section extraction test (section 7)
19389 !! options
19390 section=7
19391 !! wikitext
19392 start
19393 ==a==
19394 ===aa===
19395 ====aaa====
19396 ==b==
19397 ===ba===
19398 ===bb===
19399 ====bba====
19400 ===bc===
19401 ==c==
19402 ===ca===
19403 !! html/php
19404 ====bba====
19405 !! end
19406
19407 !! test
19408 Section extraction test (section 8)
19409 !! options
19410 section=8
19411 !! wikitext
19412 start
19413 ==a==
19414 ===aa===
19415 ====aaa====
19416 ==b==
19417 ===ba===
19418 ===bb===
19419 ====bba====
19420 ===bc===
19421 ==c==
19422 ===ca===
19423 !! html/php
19424 ===bc===
19425 !! end
19426
19427 !! test
19428 Section extraction test (section 9)
19429 !! options
19430 section=9
19431 !! wikitext
19432 start
19433 ==a==
19434 ===aa===
19435 ====aaa====
19436 ==b==
19437 ===ba===
19438 ===bb===
19439 ====bba====
19440 ===bc===
19441 ==c==
19442 ===ca===
19443 !! html/php
19444 ==c==
19445 ===ca===
19446 !! end
19447
19448 !! test
19449 Section extraction test (section 10)
19450 !! options
19451 section=10
19452 !! wikitext
19453 start
19454 ==a==
19455 ===aa===
19456 ====aaa====
19457 ==b==
19458 ===ba===
19459 ===bb===
19460 ====bba====
19461 ===bc===
19462 ==c==
19463 ===ca===
19464 !! html/php
19465 ===ca===
19466 !! end
19467
19468 !! test
19469 Section extraction test (nonexistent section 11)
19470 !! options
19471 section=11
19472 !! wikitext
19473 start
19474 ==a==
19475 ===aa===
19476 ====aaa====
19477 ==b==
19478 ===ba===
19479 ===bb===
19480 ====bba====
19481 ===bc===
19482 ==c==
19483 ===ca===
19484 !! html/php
19485 !! end
19486
19487 !! test
19488 Section extraction test with bogus heading (section 1)
19489 !! options
19490 section=1
19491 !! wikitext
19492 ==a==
19493 ==bogus== not a legal section
19494 ==b==
19495 !! html/php
19496 ==a==
19497 ==bogus== not a legal section
19498 !! end
19499
19500 !! test
19501 Section extraction test with bogus heading (section 2)
19502 !! options
19503 section=2
19504 !! wikitext
19505 ==a==
19506 ==bogus== not a legal section
19507 ==b==
19508 !! html/php
19509 ==b==
19510 !! end
19511
19512 !! test
19513 Section extraction test with comment after heading (section 1)
19514 !! options
19515 section=1
19516 !! wikitext
19517 ==a==
19518 ==b== <!-- -->
19519 ==c==
19520 !! html/php
19521 ==a==
19522 !! end
19523
19524 !! test
19525 Section extraction test with comment after heading (section 2)
19526 !! options
19527 section=2
19528 !! wikitext
19529 ==a==
19530 ==b== <!-- -->
19531 ==c==
19532 !! html/php
19533 ==b== <!-- -->
19534 !! end
19535
19536 !! test
19537 Section extraction test with bogus <nowiki> heading (section 1)
19538 !! options
19539 section=1
19540 !! wikitext
19541 ==a==
19542 ==bogus== <nowiki>not a legal section</nowiki>
19543 ==b==
19544 !! html/php
19545 ==a==
19546 ==bogus== <nowiki>not a legal section</nowiki>
19547 !! end
19548
19549 !! test
19550 Section extraction test with bogus <nowiki> heading (section 2)
19551 !! options
19552 section=2
19553 !! wikitext
19554 ==a==
19555 ==bogus== <nowiki>not a legal section</nowiki>
19556 ==b==
19557 !! html/php
19558 ==b==
19559 !! end
19560
19561 # Formerly testing for T4587, now resolved by the use of unmarked sections
19562 # instead of respecting commented sections
19563 !! test
19564 Section extraction prefixed by comment (section 1)
19565 !! options
19566 section=1
19567 !! wikitext
19568 <!-- -->==sec1==
19569 ==sec2==
19570 !! html/php
19571 ==sec2==
19572 !!end
19573
19574 !! test
19575 Section extraction prefixed by comment (section 2)
19576 !! options
19577 section=2
19578 !! wikitext
19579 <!-- -->==sec1==
19580 ==sec2==
19581 !! html/php
19582
19583 !!end
19584
19585 # Formerly testing for T4607, now resolved by the use of unmarked sections
19586 # instead of respecting HTML-style headings
19587 !! test
19588 Section extraction, mixed wiki and html (section 1)
19589 !! options
19590 section=1
19591 !! wikitext
19592 <h2>unmarked</h2>
19593 unmarked
19594 ==1==
19595 one
19596 ==2==
19597 two
19598 !! html/php
19599 ==1==
19600 one
19601 !! end
19602
19603 !! test
19604 Section extraction, mixed wiki and html (section 2)
19605 !! options
19606 section=2
19607 !! wikitext
19608 <h2>unmarked</h2>
19609 unmarked
19610 ==1==
19611 one
19612 ==2==
19613 two
19614 !! html/php
19615 ==2==
19616 two
19617 !! end
19618
19619
19620 # Formerly testing for T5342
19621 !! test
19622 Section extraction, heading surrounded by <noinclude>
19623 !! options
19624 section=1
19625 !! wikitext
19626 <noinclude>==unmarked==</noinclude>
19627 ==marked==
19628 !! html/php
19629 ==marked==
19630 !!end
19631
19632 # Test behavior of T21910
19633 !! test
19634 Sectiion with all-equals
19635 !! options
19636 section=2
19637 !! wikitext
19638 ===
19639 The line above must have a trailing space
19640 === <!--
19641 --> <!-- -->
19642 But just in case it doesn't...
19643 !! html/php
19644 === <!--
19645 --> <!-- -->
19646 But just in case it doesn't...
19647 !! end
19648
19649 !! test
19650 Section replacement test (section 0)
19651 !! options
19652 replace=0,"xxx"
19653 !! wikitext
19654 start
19655 ==a==
19656 ===aa===
19657 ====aaa====
19658 ==b==
19659 ===ba===
19660 ===bb===
19661 ====bba====
19662 ===bc===
19663 ==c==
19664 ===ca===
19665 !! html/php
19666 xxx
19667
19668 ==a==
19669 ===aa===
19670 ====aaa====
19671 ==b==
19672 ===ba===
19673 ===bb===
19674 ====bba====
19675 ===bc===
19676 ==c==
19677 ===ca===
19678 !! end
19679
19680 !! test
19681 Section replacement test (section 1)
19682 !! options
19683 replace=1,"xxx"
19684 !! wikitext
19685 start
19686 ==a==
19687 ===aa===
19688 ====aaa====
19689 ==b==
19690 ===ba===
19691 ===bb===
19692 ====bba====
19693 ===bc===
19694 ==c==
19695 ===ca===
19696 !! html/php
19697 start
19698 xxx
19699
19700 ==b==
19701 ===ba===
19702 ===bb===
19703 ====bba====
19704 ===bc===
19705 ==c==
19706 ===ca===
19707 !! end
19708
19709 !! test
19710 Section replacement test (section 2)
19711 !! options
19712 replace=2,"xxx"
19713 !! wikitext
19714 start
19715 ==a==
19716 ===aa===
19717 ====aaa====
19718 ==b==
19719 ===ba===
19720 ===bb===
19721 ====bba====
19722 ===bc===
19723 ==c==
19724 ===ca===
19725 !! html/php
19726 start
19727 ==a==
19728 xxx
19729
19730 ==b==
19731 ===ba===
19732 ===bb===
19733 ====bba====
19734 ===bc===
19735 ==c==
19736 ===ca===
19737 !! end
19738
19739 !! test
19740 Section replacement test (section 3)
19741 !! options
19742 replace=3,"xxx"
19743 !! wikitext
19744 start
19745 ==a==
19746 ===aa===
19747 ====aaa====
19748 ==b==
19749 ===ba===
19750 ===bb===
19751 ====bba====
19752 ===bc===
19753 ==c==
19754 ===ca===
19755 !! html/php
19756 start
19757 ==a==
19758 ===aa===
19759 xxx
19760
19761 ==b==
19762 ===ba===
19763 ===bb===
19764 ====bba====
19765 ===bc===
19766 ==c==
19767 ===ca===
19768 !! end
19769
19770 !! test
19771 Section replacement test (section 4)
19772 !! options
19773 replace=4,"xxx"
19774 !! wikitext
19775 start
19776 ==a==
19777 ===aa===
19778 ====aaa====
19779 ==b==
19780 ===ba===
19781 ===bb===
19782 ====bba====
19783 ===bc===
19784 ==c==
19785 ===ca===
19786 !! html/php
19787 start
19788 ==a==
19789 ===aa===
19790 ====aaa====
19791 xxx
19792
19793 ==c==
19794 ===ca===
19795 !! end
19796
19797 !! test
19798 Section replacement test (section 5)
19799 !! options
19800 replace=5,"xxx"
19801 !! wikitext
19802 start
19803 ==a==
19804 ===aa===
19805 ====aaa====
19806 ==b==
19807 ===ba===
19808 ===bb===
19809 ====bba====
19810 ===bc===
19811 ==c==
19812 ===ca===
19813 !! html/php
19814 start
19815 ==a==
19816 ===aa===
19817 ====aaa====
19818 ==b==
19819 xxx
19820
19821 ===bb===
19822 ====bba====
19823 ===bc===
19824 ==c==
19825 ===ca===
19826 !! end
19827
19828 !! test
19829 Section replacement test (section 6)
19830 !! options
19831 replace=6,"xxx"
19832 !! wikitext
19833 start
19834 ==a==
19835 ===aa===
19836 ====aaa====
19837 ==b==
19838 ===ba===
19839 ===bb===
19840 ====bba====
19841 ===bc===
19842 ==c==
19843 ===ca===
19844 !! html/php
19845 start
19846 ==a==
19847 ===aa===
19848 ====aaa====
19849 ==b==
19850 ===ba===
19851 xxx
19852
19853 ===bc===
19854 ==c==
19855 ===ca===
19856 !! end
19857
19858 !! test
19859 Section replacement test (section 7)
19860 !! options
19861 replace=7,"xxx"
19862 !! wikitext
19863 start
19864 ==a==
19865 ===aa===
19866 ====aaa====
19867 ==b==
19868 ===ba===
19869 ===bb===
19870 ====bba====
19871 ===bc===
19872 ==c==
19873 ===ca===
19874 !! html/php
19875 start
19876 ==a==
19877 ===aa===
19878 ====aaa====
19879 ==b==
19880 ===ba===
19881 ===bb===
19882 xxx
19883
19884 ===bc===
19885 ==c==
19886 ===ca===
19887 !! end
19888
19889 !! test
19890 Section replacement test (section 8)
19891 !! options
19892 replace=8,"xxx"
19893 !! wikitext
19894 start
19895 ==a==
19896 ===aa===
19897 ====aaa====
19898 ==b==
19899 ===ba===
19900 ===bb===
19901 ====bba====
19902 ===bc===
19903 ==c==
19904 ===ca===
19905 !! html/php
19906 start
19907 ==a==
19908 ===aa===
19909 ====aaa====
19910 ==b==
19911 ===ba===
19912 ===bb===
19913 ====bba====
19914 xxx
19915
19916 ==c==
19917 ===ca===
19918 !!end
19919
19920 !! test
19921 Section replacement test (section 9)
19922 !! options
19923 replace=9,"xxx"
19924 !! wikitext
19925 start
19926 ==a==
19927 ===aa===
19928 ====aaa====
19929 ==b==
19930 ===ba===
19931 ===bb===
19932 ====bba====
19933 ===bc===
19934 ==c==
19935 ===ca===
19936 !! html/php
19937 start
19938 ==a==
19939 ===aa===
19940 ====aaa====
19941 ==b==
19942 ===ba===
19943 ===bb===
19944 ====bba====
19945 ===bc===
19946 xxx
19947 !! end
19948
19949 !! test
19950 Section replacement test (section 10)
19951 !! options
19952 replace=10,"xxx"
19953 !! wikitext
19954 start
19955 ==a==
19956 ===aa===
19957 ====aaa====
19958 ==b==
19959 ===ba===
19960 ===bb===
19961 ====bba====
19962 ===bc===
19963 ==c==
19964 ===ca===
19965 !! html/php
19966 start
19967 ==a==
19968 ===aa===
19969 ====aaa====
19970 ==b==
19971 ===ba===
19972 ===bb===
19973 ====bba====
19974 ===bc===
19975 ==c==
19976 xxx
19977 !! end
19978
19979 !! test
19980 Section replacement test with initial whitespace (T15728)
19981 !! options
19982 replace=2,"xxx"
19983 !! wikitext
19984 Preformatted initial line
19985 ==a==
19986 ===a===
19987 !! html/php
19988 Preformatted initial line
19989 ==a==
19990 xxx
19991 !! end
19992
19993
19994 !! test
19995 Section extraction, heading followed by pre with 20 spaces (T8398)
19996 !! options
19997 section=1
19998 !! wikitext
19999 ==a==
20000 a
20001 !! html/php
20002 ==a==
20003 a
20004 !! end
20005
20006 !! test
20007 Section extraction, heading followed by pre with 19 spaces (T8398 sanity check)
20008 !! options
20009 section=1
20010 !! wikitext
20011 ==a==
20012 a
20013 !! html/php
20014 ==a==
20015 a
20016 !! end
20017
20018
20019 !! test
20020 Section extraction, <pre> around bogus header (T12309)
20021 !! options
20022 section=2
20023 !! wikitext
20024 == Section One ==
20025 <pre>
20026 =======
20027 </pre>
20028
20029 == Section Two ==
20030 stuff
20031 !! html/php
20032 == Section Two ==
20033 stuff
20034 !! end
20035
20036 !! test
20037 Section replacement, <pre> around bogus header (T12309)
20038 !! options
20039 replace=2,"xxx"
20040 !! wikitext
20041 == Section One ==
20042 <pre>
20043 =======
20044 </pre>
20045
20046 == Section Two ==
20047 stuff
20048 !! html/php
20049 == Section One ==
20050 <pre>
20051 =======
20052 </pre>
20053
20054 xxx
20055 !! end
20056
20057 !! test
20058 Handling of &#x0A; in URLs
20059 !! wikitext
20060 ** irc://&#x0A;a
20061 !! html/php
20062 <ul><li><ul><li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
20063
20064 !! html/parsoid
20065 <ul><li><ul><li> <a rel="mw:ExtLink" href="irc://%0Aa" data-parsoid='{"stx":"url","a":{"href":"irc://%0Aa"},"sa":{"href":"irc://&amp;#x0A;a"}}'>irc://%0Aa</a></li></ul></li></ul>
20066 !! end
20067
20068 !! test
20069 Handling of %0A in URLs
20070 !! wikitext
20071 ** irc://%0Aa
20072 !! html/php
20073 <ul><li><ul><li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
20074
20075 !! html/parsoid
20076 <ul><li><ul><li> <a rel="mw:ExtLink" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
20077 !! end
20078
20079 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
20080 !! test
20081 5 quotes, code coverage +1 line
20082 !! options
20083 parsoid=wt2html
20084 !! wikitext
20085 '''''
20086 !! html/php
20087 !! html/parsoid
20088 <b><i></i></b>
20089 !! end
20090
20091 # same html as previous, but wikitext adjusted to match parsoid html2wt
20092 # note that wt2html and html2html will put the <i> before the <b>
20093 !! test
20094 5 quotes, code coverage +1 line w/ nowiki (1)
20095 !! options
20096 parsoid=wt2wt,html2wt
20097 !! wikitext
20098 '''''<nowiki/>'''''
20099 !! html/php
20100 <p><i></i>
20101 </p>
20102 !! html/parsoid
20103 <p><b><i></i></b></p>
20104 !! end
20105
20106 # same as previous, just swapping the <i> and <b>
20107 !! test
20108 5 quotes, code coverage +1 line w/ nowiki (2)
20109 !! wikitext
20110 '''''<nowiki/>'''''
20111 !! html/php
20112 <p><i></i>
20113 </p>
20114 !! html/parsoid
20115 <p><i><b></b></i></p>
20116 !! end
20117
20118 !! test
20119 Special:Search page linking.
20120 !! wikitext
20121 {{Special:search}}
20122 !! html
20123 <p><a href="/wiki/Special:Search" title="Special:Search">Special:Search</a>
20124 </p>
20125 !! end
20126
20127 !! test
20128 {{!}} is a magic word
20129 !! wikitext
20130 {{!}} is a magic word there and {{!}} is still a magic word here
20131 | is not a magic word here but {{!}} is still a magic word here
20132 !! html/php
20133 <p>| is a magic word there and | is still a magic word here
20134 | is not a magic word here but | is still a magic word here
20135 </p>
20136 !! html/parsoid
20137 <p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"!","function":"!"},"params":{},"i":0}}]}'>|</span> is a magic word there and <span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"!","function":"!"},"params":{},"i":0}}]}'>|</span> is still a magic word here
20138 | is not a magic word here but <span about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"!","function":"!"},"params":{},"i":0}}]}'>|</span> is still a magic word here</p>
20139 !! end
20140
20141 !! test
20142 Say the magic word
20143 !! options
20144 title=[[Parser test]]
20145 !! wikitext
20146 * {{PAGENAME}}
20147 * {{PAGENAMEE}}
20148 * {{FULLPAGENAME}}
20149 * {{FULLPAGENAMEE}}
20150 * {{BASEPAGENAME}}
20151 * {{BASEPAGENAMEE}}
20152 * {{SUBPAGENAME}}
20153 * {{SUBPAGENAMEE}}
20154 * {{ROOTPAGENAME}}
20155 * {{ROOTPAGENAMEE}}
20156 * {{TALKPAGENAME}}
20157 * {{TALKPAGENAMEE}}
20158 * {{SUBJECTPAGENAME}}
20159 * {{SUBJECTPAGENAMEE}}
20160 * {{NAMESPACEE}}
20161 * {{NAMESPACE}}
20162 * {{NAMESPACENUMBER}}
20163 * {{TALKSPACE}}
20164 * {{TALKSPACEE}}
20165 * {{SUBJECTSPACE}}
20166 * {{SUBJECTSPACEE}}
20167 * {{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}
20168 !! html
20169 <ul><li> Parser test</li>
20170 <li> Parser_test</li>
20171 <li> Parser test</li>
20172 <li> Parser_test</li>
20173 <li> Parser test</li>
20174 <li> Parser_test</li>
20175 <li> Parser test</li>
20176 <li> Parser_test</li>
20177 <li> Parser test</li>
20178 <li> Parser_test</li>
20179 <li> Talk:Parser test</li>
20180 <li> Talk:Parser_test</li>
20181 <li> Parser test</li>
20182 <li> Parser_test</li>
20183 <li> </li>
20184 <li> </li>
20185 <li> 0</li>
20186 <li> Talk</li>
20187 <li> Talk</li>
20188 <li> </li>
20189 <li> </li>
20190 <li> <a href="/index.php?title=Template:Dynamic&amp;action=edit&amp;redlink=1" class="new" title="Template:Dynamic (page does not exist)">Template:Dynamic</a></li></ul>
20191
20192 !! end
20193 ### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included.
20194
20195 !! test
20196 Gallery with valid attributes
20197 !! wikitext
20198 <gallery type="123" summary="345">
20199 File:File:Foobar.jpg
20200 </gallery>
20201 !! html/php
20202 <ul class="gallery mw-gallery-traditional" type="123">
20203 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20204 <div class="thumb" style="height: 150px;">File:Foobar.jpg</div>
20205 <div class="gallerytext">
20206 </div>
20207 </div></li>
20208 </ul>
20209
20210 !! html/parsoid
20211 <ul class="gallery mw-gallery-traditional" type="123" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"type":"123","summary":"345"},"body":{"extsrc":"\nFile:File:Foobar.jpg\n"}}'>
20212 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Error mw:Image"><a href="./File:File:Foobar.jpg"><img resource="./File:File:Foobar.jpg" src="./Special:FilePath/File:Foobar.jpg" height="120" width="120"/></a></span></div><div class="gallerytext"></div></li>
20213 </ul>
20214 !! end
20215
20216 ## Parsoid thinks the "centre" here is a property, not a caption.
20217 !! test
20218 Gallery
20219 !! options
20220 parsoid={
20221 "modes": ["wt2html"],
20222 "nativeGallery": true
20223 }
20224 !! wikitext
20225 <gallery>
20226 image1.png |
20227 image2.gif|||||
20228
20229 image3|
20230 image4 |300px| centre
20231 image5.svg| http://///////
20232 [[x|xx]]]]
20233 * image6
20234 </gallery>
20235 !! html/php
20236 <ul class="gallery mw-gallery-traditional">
20237 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20238 <div class="thumb" style="height: 150px;">Image1.png</div>
20239 <div class="gallerytext">
20240 </div>
20241 </div></li>
20242 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20243 <div class="thumb" style="height: 150px;">Image2.gif</div>
20244 <div class="gallerytext">
20245 </div>
20246 </div></li>
20247 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20248 <div class="thumb" style="height: 150px;">Image3</div>
20249 <div class="gallerytext">
20250 </div>
20251 </div></li>
20252 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20253 <div class="thumb" style="height: 150px;">Image4</div>
20254 <div class="gallerytext">
20255 <pre>centre
20256 </pre>
20257 </div>
20258 </div></li>
20259 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20260 <div class="thumb" style="height: 150px;">Image5.svg</div>
20261 <div class="gallerytext">
20262 <p><a rel="nofollow" class="external free" href="http://///////">http://///////</a>
20263 </p>
20264 </div>
20265 </div></li>
20266 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20267 <div class="thumb" style="height: 150px;">* image6</div>
20268 <div class="gallerytext">
20269 </div>
20270 </div></li>
20271 </ul>
20272
20273 !! html/parsoid
20274 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt3" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20275 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Error mw:Image"><a href="./File:Image1.png"><img resource="./File:Image1.png" src="./Special:FilePath/Image1.png" height="120" width="120"/></a></span></div><div class="gallerytext"></div></li>
20276 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Error mw:Image"><a href="./File:Image2.gif"><img resource="./File:Image2.gif" src="./Special:FilePath/Image2.gif" height="120" width="120"/></a></span></div><div class="gallerytext"></div></li>
20277 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Error mw:Image"><a href="./File:Image3"><img resource="./File:Image3" src="./Special:FilePath/Image3" height="120" width="120"/></a></span></div><div class="gallerytext"></div></li>
20278 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Error mw:Image"><a href="./File:Image4"><img resource="./File:Image4" src="./Special:FilePath/Image4" height="300" width="300"/></a></span></div><div class="gallerytext"></div></li>
20279 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Error mw:Image"><a href="./File:Image5.svg"><img resource="./File:Image5.svg" src="./Special:FilePath/Image5.svg" height="120" width="120"/></a></span></div><div class="gallerytext"> <a rel="mw:ExtLink" href="http://///////">http://///////</a></div></li>
20280 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Error mw:Image"><a href="./File:*_image6"><img resource="./File:*_image6" src="./Special:FilePath/*_image6" height="120" width="120"/></a></span></div><div class="gallerytext"></div></li>
20281 </ul>
20282 !! end
20283
20284 !! test
20285 Gallery (with options, html)
20286 !! options
20287 parsoid={
20288 "modes": ["wt2html", "html2html"],
20289 "nativeGallery": true
20290 }
20291 !! wikitext
20292 <gallery widths="70px" heights="40px" perrow="2" caption="Foo [[Main Page]]">
20293 File:Nonexistent.jpg|caption
20294 File:Nonexistent.jpg
20295 image:foobar.jpg|some '''caption''' [[Main Page]]
20296 image:foobar.jpg
20297 image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
20298 </gallery>
20299 !! html/php
20300 <ul class="gallery mw-gallery-traditional" style="max-width: 226px;_width: 226px;">
20301 <li class='gallerycaption'>Foo <a href="/wiki/Main_Page" title="Main Page">Main Page</a></li>
20302 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20303 <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
20304 <div class="gallerytext">
20305 <p>caption
20306 </p>
20307 </div>
20308 </div></li>
20309 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20310 <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
20311 <div class="gallerytext">
20312 </div>
20313 </div></li>
20314 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20315 <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
20316 <div class="gallerytext">
20317 <p>some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
20318 </p>
20319 </div>
20320 </div></li>
20321 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20322 <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
20323 <div class="gallerytext">
20324 </div>
20325 </div></li>
20326 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20327 <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a foo-bar." src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
20328 <div class="gallerytext">
20329 <p>blabla.
20330 </p>
20331 </div>
20332 </div></li>
20333 </ul>
20334
20335 !! html/parsoid
20336 <ul class="gallery mw-gallery-traditional" style="max-width: 226px; _width: 226px;" typeof="mw:Extension/gallery" about="#mwt3" data-mw='{"name":"gallery","attrs":{"widths":"70px","heights":"40px","perrow":"2"},"body":{}}'>
20337 <li class="gallerycaption">Foo <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></li>
20338 <li class="gallerybox" style="width: 105px;"><div class="thumb" style="width: 100px; height: 70px;"><span typeof="mw:Error mw:Image"><a href="./File:Nonexistent.jpg"><img resource="./File:Nonexistent.jpg" src="./Special:FilePath/Nonexistent.jpg" height="40" width="70"/></a></span></div><div class="gallerytext">caption</div></li>
20339 <li class="gallerybox" style="width: 105px;"><div class="thumb" style="width: 100px; height: 70px;"><span typeof="mw:Error mw:Image"><a href="./File:Nonexistent.jpg"><img resource="./File:Nonexistent.jpg" src="./Special:FilePath/Nonexistent.jpg" height="40" width="70"/></a></span></div><div class="gallerytext"></div></li>
20340 <li class="gallerybox" style="width: 105px;"><div class="thumb" style="width: 100px; height: 70px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="8" width="70"/></a></span></div><div class="gallerytext">some <b>caption</b> <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></div></li>
20341 <li class="gallerybox" style="width: 105px;"><div class="thumb" style="width: 100px; height: 70px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="8" width="70"/></a></span></div><div class="gallerytext"></div></li>
20342 <li class="gallerybox" style="width: 105px;"><div class="thumb" style="width: 100px; height: 70px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img alt="This is a foo-bar." resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="8" width="70"/></a></span></div><div class="gallerytext">blabla.</div></li>
20343 </ul>
20344 !! end
20345
20346 !! test
20347 Gallery (with options, extsrc)
20348 !! options
20349 parsoid={
20350 "nativeGallery": false
20351 }
20352 !! wikitext
20353 <gallery widths="70px" heights="40px" perrow="2" caption="Foo [[Main Page]]">
20354 File:Nonexistent.jpg|caption
20355 File:Nonexistent.jpg
20356 image:foobar.jpg|some '''caption''' [[Main Page]]
20357 image:foobar.jpg
20358 image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
20359 </gallery>
20360 !! html/php
20361 <ul class="gallery mw-gallery-traditional" style="max-width: 226px;_width: 226px;">
20362 <li class='gallerycaption'>Foo <a href="/wiki/Main_Page" title="Main Page">Main Page</a></li>
20363 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20364 <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
20365 <div class="gallerytext">
20366 <p>caption
20367 </p>
20368 </div>
20369 </div></li>
20370 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20371 <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
20372 <div class="gallerytext">
20373 </div>
20374 </div></li>
20375 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20376 <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
20377 <div class="gallerytext">
20378 <p>some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
20379 </p>
20380 </div>
20381 </div></li>
20382 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20383 <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
20384 <div class="gallerytext">
20385 </div>
20386 </div></li>
20387 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20388 <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a foo-bar." src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
20389 <div class="gallerytext">
20390 <p>blabla.
20391 </p>
20392 </div>
20393 </div></li>
20394 </ul>
20395
20396 !! html/parsoid
20397 <ul class="gallery mw-gallery-traditional" style="max-width: 226px; _width: 226px;" typeof="mw:Extension/gallery" about="#mwt3" data-mw='{"name":"gallery","attrs":{"widths":"70px","heights":"40px","perrow":"2","caption":"Foo [[Main Page]]"},"body":{"extsrc":"\nFile:Nonexistent.jpg|caption\nFile:Nonexistent.jpg\nimage:foobar.jpg|some &#39;&#39;&#39;caption&#39;&#39;&#39; [[Main Page]]\nimage:foobar.jpg\nimage:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.\n"}}'>
20398 <li class="gallerycaption">Foo <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></li>
20399 <li class="gallerybox" style="width: 105px;"><div class="thumb" style="width: 100px; height: 70px;"><span typeof="mw:Error mw:Image"><a href="./File:Nonexistent.jpg"><img resource="./File:Nonexistent.jpg" src="./Special:FilePath/Nonexistent.jpg" height="40" width="70"/></a></span></div><div class="gallerytext">caption</div></li>
20400 <li class="gallerybox" style="width: 105px;"><div class="thumb" style="width: 100px; height: 70px;"><span typeof="mw:Error mw:Image"><a href="./File:Nonexistent.jpg"><img resource="./File:Nonexistent.jpg" src="./Special:FilePath/Nonexistent.jpg" height="40" width="70"/></a></span></div><div class="gallerytext"></div></li>
20401 <li class="gallerybox" style="width: 105px;"><div class="thumb" style="width: 100px; height: 70px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="8" width="70"/></a></span></div><div class="gallerytext">some <b>caption</b> <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></div></li>
20402 <li class="gallerybox" style="width: 105px;"><div class="thumb" style="width: 100px; height: 70px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="8" width="70"/></a></span></div><div class="gallerytext"></div></li>
20403 <li class="gallerybox" style="width: 105px;"><div class="thumb" style="width: 100px; height: 70px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img alt="This is a foo-bar." resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="8" width="70"/></a></span></div><div class="gallerytext">blabla.</div></li>
20404 </ul>
20405 !! end
20406
20407 !! test
20408 Gallery with link that has fragment
20409 !! options
20410 parsoid={
20411 "modes": ["wt2html", "html2html"],
20412 "nativeGallery": true
20413 }
20414 !! wikitext
20415 <gallery>
20416 image:foobar.jpg|link=Main_Page
20417 image:foobar.jpg|link=Main_Page#section
20418 image:foobar.jpg|link=Main Page#section|caption
20419 </gallery>
20420 !! html/php
20421 <ul class="gallery mw-gallery-traditional">
20422 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20423 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20424 <div class="gallerytext">
20425 </div>
20426 </div></li>
20427 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20428 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20429 <div class="gallerytext">
20430 </div>
20431 </div></li>
20432 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20433 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20434 <div class="gallerytext">
20435 <p>caption
20436 </p>
20437 </div>
20438 </div></li>
20439 </ul>
20440
20441 !! html/parsoid
20442 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20443 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"></div></li>
20444 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./Main_Page#section"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"></div></li>
20445 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./Main_Page#section"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext">caption</div></li>
20446 </ul>
20447 !! end
20448
20449 ## Whoops, Parsoid shouldn't be parsing templates in the attribute caption!
20450 !! test
20451 Gallery with template inside caption
20452 !! options
20453 parsoid={
20454 "nativeGallery": true
20455 }
20456 !! wikitext
20457 <gallery caption="{{echo|hi}}">
20458 File:Foobar.jpg|{{echo|ho}}
20459 </gallery>
20460 !! html/php
20461 <ul class="gallery mw-gallery-traditional">
20462 <li class='gallerycaption'>{{echo|hi}}</li>
20463 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20464 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20465 <div class="gallerytext">
20466 <p>ho
20467 </p>
20468 </div>
20469 </div></li>
20470 </ul>
20471
20472 !! html/parsoid
20473 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt6" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20474 <li class="gallerycaption"><span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi"}},"i":0}}]}'>hi</span></li>
20475 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"><span about="#mwt5" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"ho"}},"i":0}}]}'>ho</span></div></li>
20476 </ul>
20477 !! end
20478
20479 !! test
20480 Gallery with wikitext inside caption
20481 !! options
20482 parsoid={
20483 "nativeGallery": true
20484 }
20485 !! wikitext
20486 <gallery>
20487 File:Foobar.jpg|alt=galleryalt|[[File:Foobar.jpg|alt=inneralt|20x20px|desc]]
20488 File:Foobar.jpg|alt=galleryalt|{{Test|unamedParam|alt=param}}
20489 </gallery>
20490 !! html/php
20491 <ul class="gallery mw-gallery-traditional">
20492 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20493 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20494 <div class="gallerytext">
20495 <p><a href="/wiki/File:Foobar.jpg" class="image" title="desc"><img alt="inneralt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" width="20" height="2" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/30px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/40px-Foobar.jpg 2x" /></a>
20496 </p>
20497 </div>
20498 </div></li>
20499 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20500 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20501 <div class="gallerytext">
20502 <p>This is a test template
20503 </p>
20504 </div>
20505 </div></li>
20506 </ul>
20507
20508 !! html/parsoid
20509 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt6" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20510 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img alt="galleryalt" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"><span typeof="mw:Image" data-mw='{"caption":"desc"}'><a href="./File:Foobar.jpg"><img alt="inneralt" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="2" width="20"/></a></span></div></li>
20511 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img alt="galleryalt" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"><span about="#mwt4" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Test","href":"./Template:Test"},"params":{"1":{"wt":"unamedParam"},"alt":{"wt":"param"}},"i":0}}]}'>This is a test template</span></div></li>
20512 </ul>
20513 !! end
20514
20515 !! test
20516 Gallery (with showfilename option)
20517 !! options
20518 parsoid={
20519 "nativeGallery": true
20520 }
20521 !! wikitext
20522 <gallery showfilename="">
20523 File:Nonexistent.jpg|caption
20524 File:Nonexistent.jpg
20525 File:Foobar.jpg|some '''caption''' [[Main Page]]
20526 File:Foobar.jpg
20527 </gallery>
20528 !! html/php
20529 <ul class="gallery mw-gallery-traditional">
20530 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20531 <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
20532 <div class="gallerytext">
20533 <p><a href="/wiki/File:Nonexistent.jpg" class="galleryfilename galleryfilename-truncate" title="File:Nonexistent.jpg">Nonexistent.jpg</a>
20534 caption
20535 </p>
20536 </div>
20537 </div></li>
20538 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20539 <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
20540 <div class="gallerytext">
20541 <p><a href="/wiki/File:Nonexistent.jpg" class="galleryfilename galleryfilename-truncate" title="File:Nonexistent.jpg">Nonexistent.jpg</a>
20542 </p>
20543 </div>
20544 </div></li>
20545 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20546 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20547 <div class="gallerytext">
20548 <p><a href="/wiki/File:Foobar.jpg" class="galleryfilename galleryfilename-truncate" title="File:Foobar.jpg">Foobar.jpg</a>
20549 some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
20550 </p>
20551 </div>
20552 </div></li>
20553 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20554 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20555 <div class="gallerytext">
20556 <p><a href="/wiki/File:Foobar.jpg" class="galleryfilename galleryfilename-truncate" title="File:Foobar.jpg">Foobar.jpg</a>
20557 </p>
20558 </div>
20559 </div></li>
20560 </ul>
20561
20562 !! html/parsoid
20563 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt3" data-mw='{"name":"gallery","attrs":{"showfilename":""},"body":{}}'>
20564 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Error mw:Image"><a href="./File:Nonexistent.jpg"><img resource="./File:Nonexistent.jpg" src="./Special:FilePath/Nonexistent.jpg" height="120" width="120"/></a></span></div><div class="gallerytext"><a href="./File:Nonexistent.jpg" class="galleryfilename galleryfilename-truncate" title="File:Nonexistent.jpg">File:Nonexistent.jpg</a>caption</div></li>
20565 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Error mw:Image"><a href="./File:Nonexistent.jpg"><img resource="./File:Nonexistent.jpg" src="./Special:FilePath/Nonexistent.jpg" height="120" width="120"/></a></span></div><div class="gallerytext"><a href="./File:Nonexistent.jpg" class="galleryfilename galleryfilename-truncate" title="File:Nonexistent.jpg">File:Nonexistent.jpg</a></div></li>
20566 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"><a href="./File:Foobar.jpg" class="galleryfilename galleryfilename-truncate" title="File:Foobar.jpg">File:Foobar.jpg</a>some <b>caption</b> <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></div></li>
20567 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"><a href="./File:Foobar.jpg" class="galleryfilename galleryfilename-truncate" title="File:Foobar.jpg">File:Foobar.jpg</a></div></li>
20568 </ul>
20569 !! end
20570
20571 ## Should Parsoid be preserving these variations? See T151367
20572 !! test
20573 Gallery (with namespace-less filenames)
20574 !! options
20575 parsoid={
20576 "modes": ["wt2html", "html2html"],
20577 "nativeGallery": true
20578 }
20579 !! wikitext
20580 <gallery>
20581 File:Nonexistent.jpg
20582 Nonexistent.jpg
20583 image:foobar.jpg
20584 foobar.jpg
20585 </gallery>
20586 !! html/php
20587 <ul class="gallery mw-gallery-traditional">
20588 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20589 <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
20590 <div class="gallerytext">
20591 </div>
20592 </div></li>
20593 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20594 <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
20595 <div class="gallerytext">
20596 </div>
20597 </div></li>
20598 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20599 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20600 <div class="gallerytext">
20601 </div>
20602 </div></li>
20603 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20604 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20605 <div class="gallerytext">
20606 </div>
20607 </div></li>
20608 </ul>
20609
20610 !! html/parsoid
20611 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20612 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Error mw:Image"><a href="./File:Nonexistent.jpg"><img resource="./File:Nonexistent.jpg" src="./Special:FilePath/Nonexistent.jpg" height="120" width="120"/></a></span></div><div class="gallerytext"></div></li>
20613 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Error mw:Image"><a href="./File:Nonexistent.jpg"><img resource="./File:Nonexistent.jpg" src="./Special:FilePath/Nonexistent.jpg" height="120" width="120"/></a></span></div><div class="gallerytext"></div></li>
20614 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"></div></li>
20615 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"></div></li>
20616 </ul>
20617 !! end
20618
20619 !! test
20620 Gallery override link with WikiLink (T36852)
20621 !! options
20622 parsoid={
20623 "nativeGallery": true
20624 }
20625 !! wikitext
20626 <gallery>
20627 File:Foobar.jpg|alt=galleryalt|link=InterWikiLink
20628 </gallery>
20629 !! html/php
20630 <ul class="gallery mw-gallery-traditional">
20631 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20632 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/InterWikiLink"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20633 <div class="gallerytext">
20634 </div>
20635 </div></li>
20636 </ul>
20637
20638 !! html/parsoid
20639 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-parsoid='{"dsr":[0,70,2,2]}' data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20640 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./InterWikiLink"><img alt="galleryalt" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"></div></li>
20641 </ul>
20642 !! end
20643
20644 !! test
20645 Gallery override link with absolute external link (T36852)
20646 !! options
20647 parsoid={
20648 "nativeGallery": true
20649 }
20650 !! wikitext
20651 <gallery>
20652 File:Foobar.jpg|alt=galleryalt|link=http://www.example.org
20653 </gallery>
20654 !! html/php
20655 <ul class="gallery mw-gallery-traditional">
20656 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20657 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="http://www.example.org"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20658 <div class="gallerytext">
20659 </div>
20660 </div></li>
20661 </ul>
20662
20663 !! html/parsoid
20664 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20665 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="http://www.example.org"><img alt="galleryalt" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"></div></li>
20666 </ul>
20667 !! end
20668
20669 !! test
20670 Gallery override link with absolute external link with LanguageConverter
20671 !! options
20672 language=zh
20673 !! input
20674 <gallery>
20675 File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
20676 </gallery>
20677 !! result
20678 <ul class="gallery mw-gallery-traditional">
20679 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20680 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="http://www.example.org"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20681 <div class="gallerytext">
20682 <p>caption
20683 </p>
20684 </div>
20685 </div></li>
20686 </ul>
20687
20688 !! end
20689
20690 !! test
20691 Gallery override link with malicious javascript (T36852)
20692 !! options
20693 parsoid={
20694 "modes": ["wt2html", "html2html"],
20695 "nativeGallery": true
20696 }
20697 !! wikitext
20698 <gallery>
20699 File:Foobar.jpg|alt=galleryalt|link=" onclick="alert('malicious javascript code!');
20700 </gallery>
20701 !! html/php
20702 <ul class="gallery mw-gallery-traditional">
20703 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20704 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/%22_onclick%3D%22alert(%27malicious_javascript_code!%27);"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20705 <div class="gallerytext">
20706 </div>
20707 </div></li>
20708 </ul>
20709
20710 !! html/parsoid
20711 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20712 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./%22_onclick=%22alert('malicious_javascript_code!');"><img alt="galleryalt" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"></div></li>
20713 </ul>
20714 !! end
20715
20716 # Note that parsoid uses the invalid link as a caption, PHP does not.
20717 !! test
20718 Gallery with invalid title as link (T45964)
20719 !! options
20720 parsoid={
20721 "modes": ["wt2html", "html2html"],
20722 "nativeGallery": true
20723 }
20724 !! wikitext
20725 <gallery>
20726 File:Foobar.jpg|link=<
20727 </gallery>
20728 !! html/php
20729 <ul class="gallery mw-gallery-traditional">
20730 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20731 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20732 <div class="gallerytext">
20733 </div>
20734 </div></li>
20735 </ul>
20736
20737 !! html/parsoid
20738 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20739 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext">link=&lt;</div></li>
20740 </ul>
20741 !! end
20742
20743 !! test
20744 Serialize gallery without attrs in data-mw
20745 !! options
20746 parsoid={
20747 "modes": ["html2wt"],
20748 "nativeGallery": true
20749 }
20750 !! html/parsoid
20751 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","body":{}}'>
20752 <li class="gallerycaption">123</li>
20753 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span>File:Test.png</span></div><div class="gallerytext"></div></li>
20754 </ul>
20755 !! wikitext
20756 <gallery caption="123">
20757 File:Test.png
20758 </gallery>
20759 !! end
20760
20761 !! test
20762 Gallery with class and style attributes
20763 !! options
20764 parsoid={
20765 "nativeGallery": true
20766 }
20767 !! wikitext
20768 <gallery class="center" style="text-align: center;">
20769 File:Foobar.jpg
20770 </gallery>
20771 !! html/php
20772 <ul class="gallery mw-gallery-traditional center" style="text-align: center;">
20773 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20774 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20775 <div class="gallerytext">
20776 </div>
20777 </div></li>
20778 </ul>
20779
20780 !! html/parsoid
20781 <ul class="gallery mw-gallery-traditional center" style="text-align: center;" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"class":"center","style":"text-align: center;"},"body":{}}'>
20782 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"></div></li>
20783 </ul>
20784 !! end
20785
20786 !! test
20787 Gallery in slideshow mode
20788 !! options
20789 parsoid={
20790 "nativeGallery": true
20791 }
20792 !! wikitext
20793 <gallery mode="slideshow" showthumbnails="">
20794 File:Foobar.jpg
20795 </gallery>
20796 !! html/php
20797 <ul class="gallery mw-gallery-slideshow" data-showthumbnails="1">
20798 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20799 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
20800 <div class="gallerytext">
20801 </div>
20802 </div></li>
20803 </ul>
20804
20805 !! html/parsoid
20806 <ul class="gallery mw-gallery-slideshow" data-showthumbnails="1" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"mode":"slideshow","showthumbnails":""},"body":{}}'>
20807 <li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px;"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"></div></li>
20808 </ul>
20809 !! end
20810
20811 !! test
20812 HTML Hex character encoding (spells the word "JavaScript")
20813 !! options
20814 parsoid=wt2html,wt2wt,html2html
20815 !! wikitext
20816 &#x4A;&#x061;&#x0076;&#x00061;&#x000053;&#x0000063;&#114;&#x0000069;&#00000112;&#x0000000074;
20817 !! html/php
20818 <p>&#x4a;&#x61;&#x76;&#x61;&#x53;&#x63;&#114;&#x69;&#112;&#x74;
20819 </p>
20820 !! html/php+tidy
20821 <p>JavaScript</p>
20822 !! html/parsoid
20823 <p><span typeof="mw:Entity">J</span><span typeof="mw:Entity">a</span><span typeof="mw:Entity">v</span><span typeof="mw:Entity">a</span><span typeof="mw:Entity">S</span><span typeof="mw:Entity">c</span><span typeof="mw:Entity">r</span><span typeof="mw:Entity">i</span><span typeof="mw:Entity">p</span><span typeof="mw:Entity">t</span></p>
20824 !! end
20825
20826 !! test
20827 HTML Hex character encoding bogus encoding (T28437 regression check)
20828 !! wikitext
20829 &#xsee;&#XSEE;
20830 !! html/php
20831 <p>&amp;#xsee;&amp;#XSEE;
20832 </p>
20833 !! html/parsoid
20834 <p>&amp;#xsee;&amp;#XSEE;</p>
20835 !! end
20836
20837 !! test
20838 HTML Hex character encoding mixed case
20839 !! options
20840 parsoid=wt2html,wt2wt,html2html
20841 !! wikitext
20842 &#xEE;&#Xee;
20843 !! html/php
20844 <p>&#xee;&#xee;
20845 </p>
20846 !! html/php+tidy
20847 <p>îî</p>
20848 !! html/parsoid
20849 <p><span typeof="mw:Entity">î</span><span typeof="mw:Entity">î</span></p>
20850 !! end
20851
20852 # See: https://www.w3.org/TR/html5/syntax.html#character-references
20853 # Note that U+000C (form feed) is not a valid XML character, so
20854 # it is banned even though allowed in HTML5.
20855 !! test
20856 Illegal character references (T106578)
20857 !! wikitext
20858 ; Null: &#00;
20859 ; FF: &#xC;
20860 ; CR: &#xD;
20861 ; Control (low): &#8;
20862 ; Control (high): &#x7F; &#x9F;
20863 ; Surrogate: &#xD83D;&#xDCA9;
20864 ; This is an okay astral character: &#x1F4A9;
20865 !! html+tidy
20866 <dl>
20867 <dt>Null</dt>
20868 <dd>&amp;#00;</dd>
20869 <dt>FF</dt>
20870 <dd>&amp;#xC;</dd>
20871 <dt>CR</dt>
20872 <dd>&amp;#xD;</dd>
20873 <dt>Control (low)</dt>
20874 <dd>&amp;#8;</dd>
20875 <dt>Control (high)</dt>
20876 <dd>&amp;#x7F; &amp;#x9F;</dd>
20877 <dt>Surrogate</dt>
20878 <dd>&amp;#xD83D;&amp;#xDCA9;</dd>
20879 <dt>This is an okay astral character</dt>
20880 <dd>💩</dd>
20881 </dl>
20882 !! end
20883
20884 !! test
20885 __FORCETOC__ override
20886 !! wikitext
20887 __NEWSECTIONLINK__
20888 __FORCETOC__
20889 !! html/php
20890 <p><br />
20891 </p>
20892 !! end
20893
20894 !! test
20895 ISBN code coverage
20896 !! wikitext
20897 ISBN 978-0-1234-56&#x20;789
20898 !! html
20899 <p><a href="/wiki/Special:BookSources/9780123456" class="internal mw-magiclink-isbn">ISBN 978-0-1234-56</a>&#x20;789
20900 </p>
20901 !! html+tidy
20902 <p><a href="/wiki/Special:BookSources/9780123456" class="internal mw-magiclink-isbn">ISBN 978-0-1234-56</a> 789</p>
20903 !! html/parsoid
20904 <p><a href="./Special:BookSources/9780123456" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978-0-1234-56</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#x20;","srcContent":" "}'> </span>789</p>
20905 !! end
20906
20907 !! test
20908 ISBN followed by 5 spaces
20909 !! wikitext
20910 ISBN
20911 !! html
20912 <p>ISBN
20913 </p>
20914 !! end
20915
20916 !! test
20917 Double ISBN
20918 !! wikitext
20919 ISBN ISBN 1234567890
20920 !! html/php
20921 <p>ISBN <a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
20922 </p>
20923 !! html/parsoid
20924 <p>ISBN <a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a></p>
20925 !! end
20926
20927 # Uppercase X and lowercase x as well
20928 !! test
20929 ISBN with an X
20930 !! wikitext
20931 ISBN 3-462-04561-X
20932 ISBN 3-462-04561-x
20933 ISBN 080442957X
20934 ISBN 080442957x
20935 ISBN 978080442957X
20936 ISBN 978080442957x
20937 !! html/php
20938 <p><a href="/wiki/Special:BookSources/346204561X" class="internal mw-magiclink-isbn">ISBN 3-462-04561-X</a>
20939 <a href="/wiki/Special:BookSources/346204561X" class="internal mw-magiclink-isbn">ISBN 3-462-04561-x</a>
20940 <a href="/wiki/Special:BookSources/080442957X" class="internal mw-magiclink-isbn">ISBN 080442957X</a>
20941 <a href="/wiki/Special:BookSources/080442957X" class="internal mw-magiclink-isbn">ISBN 080442957x</a>
20942 <a href="/wiki/Special:BookSources/978080442957X" class="internal mw-magiclink-isbn">ISBN 978080442957X</a>
20943 <a href="/wiki/Special:BookSources/978080442957X" class="internal mw-magiclink-isbn">ISBN 978080442957x</a>
20944 </p>
20945 !! html/parsoid
20946 <p><a href="./Special:BookSources/346204561X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-X</a>
20947 <a href="./Special:BookSources/346204561X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-x</a>
20948 <a href="./Special:BookSources/080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957X</a>
20949 <a href="./Special:BookSources/080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957x</a>
20950 <a href="./Special:BookSources/978080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957X</a>
20951 <a href="./Special:BookSources/978080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957x</a></p>
20952 !! end
20953
20954 !! test
20955 ISBN with empty prefix (parsoid test)
20956 !! wikitext
20957 ISBN 1234567890
20958 !! html/php
20959 <p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
20960 </p>
20961 !! html/parsoid
20962 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink">ISBN 1234567890</a></p>
20963 !! end
20964
20965 !! test
20966 T24905: <abbr> followed by ISBN followed by </a>
20967 !! wikitext
20968 <abbr>(fr)</abbr> ISBN 2753300917 [http://www.example.com example.com]
20969 !! html/php
20970 <p><abbr>(fr)</abbr> <a href="/wiki/Special:BookSources/2753300917" class="internal mw-magiclink-isbn">ISBN 2753300917</a> <a rel="nofollow" class="external text" href="http://www.example.com">example.com</a>
20971 </p>
20972 !! html/parsoid
20973 <p><abbr data-parsoid='{"stx":"html"}'>(fr)</abbr> <a href="./Special:BookSources/2753300917" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 2753300917</a> <a rel="mw:ExtLink" href="http://www.example.com">example.com</a></p>
20974 !! end
20975
20976 !! test
20977 Double RFC
20978 !! wikitext
20979 RFC RFC 1234
20980 !! html
20981 <p>RFC <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc1234">RFC 1234</a>
20982 </p>
20983 !! end
20984
20985 !! test
20986 Double RFC with a wiki link
20987 !! wikitext
20988 RFC [[RFC 1234]]
20989 !! html
20990 <p>RFC <a href="/index.php?title=RFC_1234&amp;action=edit&amp;redlink=1" class="new" title="RFC 1234 (page does not exist)">RFC 1234</a>
20991 </p>
20992 !! end
20993
20994 !! test
20995 RFC code coverage
20996 !! wikitext
20997 RFC 983&#x20;987
20998 !! html
20999 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
21000 </p>
21001 !! html+tidy
21002 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc983">RFC 983</a> 987</p>
21003 !! end
21004
21005 !! test
21006 Centre-aligned image
21007 !! wikitext
21008 [[Image:foobar.jpg|centre]]
21009 !! html
21010 <div class="center"><div class="floatnone"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div></div>
21011
21012 !!end
21013
21014 !! test
21015 None-aligned image
21016 !! wikitext
21017 [[Image:foobar.jpg|none]]
21018 !! html
21019 <div class="floatnone"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
21020
21021 !!end
21022
21023 !! test
21024 Width + Height sized image (using px) (height is ignored)
21025 !! wikitext
21026 [[Image:foobar.jpg|640x480px]]
21027 !! html
21028 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg 2x" /></a>
21029 </p>
21030 !!end
21031
21032 !! test
21033 Width-sized image (using px, no following whitespace)
21034 !! wikitext
21035 [[Image:foobar.jpg|640px]]
21036 !! html
21037 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg 2x" /></a>
21038 </p>
21039 !!end
21040
21041 !! test
21042 Width-sized image (using px, with following whitespace - test regression from r39467)
21043 !! wikitext
21044 [[Image:foobar.jpg|640px ]]
21045 !! html
21046 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg 2x" /></a>
21047 </p>
21048 !!end
21049
21050 !! test
21051 Width-sized image (using px, with preceding whitespace - test regression from r39467)
21052 !! wikitext
21053 [[Image:foobar.jpg| 640px]]
21054 !! html
21055 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg 2x" /></a>
21056 </p>
21057 !!end
21058
21059 !! test
21060 Image with page parameter
21061 !! options
21062 djvu
21063 !! wikitext
21064 [[File:LoremIpsum.djvu|page=2]]
21065 !! html/php
21066 <p><a href="/index.php?title=File:LoremIpsum.djvu&amp;page=2" class="image"><img alt="LoremIpsum.djvu" src="http://example.com/images/thumb/5/5f/LoremIpsum.djvu/page2-2480px-LoremIpsum.djvu.jpg" width="2480" height="3508" srcset="http://example.com/images/thumb/5/5f/LoremIpsum.djvu/page2-3720px-LoremIpsum.djvu.jpg 1.5x, http://example.com/images/thumb/5/5f/LoremIpsum.djvu/page2-4960px-LoremIpsum.djvu.jpg 2x" /></a>
21067 </p>
21068 !! html/parsoid
21069 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"page","ak":"page=2"}]}' data-mw='{"page":"2"}'><a href="./File:LoremIpsum.djvu" data-parsoid='{"a":{"href":"./File:LoremIpsum.djvu"},"sa":{"href":"File:LoremIpsum.djvu"}}'><img resource="./File:LoremIpsum.djvu" src="//example.com/images/5/5f/LoremIpsum.djvu" data-file-width="2480" data-file-height="3508" data-file-type="bitmap" height="3508" width="2480" data-parsoid='{"a":{"resource":"./File:LoremIpsum.djvu","height":"3508","width":"2480"},"sa":{"resource":"File:LoremIpsum.djvu"}}'/></a></span></p>
21070 !! end
21071
21072 !! test
21073 Another italics / bold test
21074 !! wikitext
21075 ''' ''x'
21076 !! html
21077 <pre>'<i> </i>x'
21078 </pre>
21079 !!end
21080
21081 # FIXME: The php output seems broken. It's interleaving some open/close tags.
21082 !! test
21083 dt/dd/dl test
21084 !! wikitext
21085 :;;;::
21086 !! html/php
21087 <dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dt></dl></dd></dl></dd></dl></dd></dl></dd></dl></dd></dl>
21088
21089 !! html/parsoid
21090 <dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dd></dl></dd></dl></dt></dl></dt></dl></dt></dl></dd></dl>
21091
21092 !!end
21093
21094 # Images with the "|" character in external URLs in comment tags; Eats half the comment, leaves unmatched "</a>" tag.
21095 !! test
21096 Images with the "|" character in the comment
21097 !! wikitext
21098 [[File:Foobar.jpg|thumb|An [http://test/?param1=|left|&param2=|x external] URL]]
21099 !! html/php
21100 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>An <a rel="nofollow" class="external text" href="http://test/?param1=%7Cleft%7C&amp;param2=%7Cx">external</a> URL</div></div></div>
21101
21102 !! html/parsoid
21103 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>An <a rel="mw:ExtLink" href="http://test/?param1=%7Cleft%7C&amp;param2=%7Cx" data-parsoid='{"a":{"href":"http://test/?param1=%7Cleft%7C&amp;param2=%7Cx"},"sa":{"href":"http://test/?param1=|left|&amp;param2=|x"}}'>external</a> URL</figcaption></figure>
21104 !! end
21105
21106 !! test
21107 [Before] HTML without raw HTML enabled ($wgRawHtml==false)
21108 !! wikitext
21109 <html><script>alert(1);</script></html>
21110 !! html
21111 <p>&lt;html&gt;&lt;script&gt;alert(1);&lt;/script&gt;&lt;/html&gt;
21112 </p>
21113 !! end
21114
21115 !! test
21116 HTML with raw HTML ($wgRawHtml==true)
21117 !! options
21118 wgRawHtml=1
21119 !! wikitext
21120 <html><script>alert(1);</script></html>
21121 !! html/php
21122 <p><script>alert(1);</script>
21123 </p>
21124 !! end
21125
21126 !! test
21127 Parents of subpages, one level up
21128 !! options
21129 subpage title=[[Subpage test/L1/L2/L3]]
21130 !! wikitext
21131 [[../|L2]]
21132 !! html
21133 <p><a href="/index.php?title=Subpage_test/L1/L2&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1/L2 (page does not exist)">L2</a>
21134 </p>
21135 !! end
21136
21137
21138 !! test
21139 Parents of subpages, one level up, not named
21140 !! options
21141 subpage title=[[Subpage test/L1/L2/L3]]
21142 !! wikitext
21143 [[../]]
21144 !! html
21145 <p><a href="/index.php?title=Subpage_test/L1/L2&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1/L2 (page does not exist)">Subpage test/L1/L2</a>
21146 </p>
21147 !! end
21148
21149
21150
21151 !! test
21152 Parents of subpages, two levels up
21153 !! options
21154 subpage title=[[Subpage test/L1/L2/L3]]
21155 !! wikitext
21156 [[../../|L1]]2
21157
21158 [[../../|L1]]l
21159 !! html
21160 <p><a href="/index.php?title=Subpage_test/L1&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1 (page does not exist)">L1</a>2
21161 </p><p><a href="/index.php?title=Subpage_test/L1&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1 (page does not exist)">L1l</a>
21162 </p>
21163 !! end
21164
21165 !! test
21166 Parents of subpages, two levels up, without trailing slash or name.
21167 !! options
21168 subpage title=[[Subpage test/L1/L2/L3]]
21169 !! wikitext
21170 [[../..]]
21171 !! html
21172 <p>[[../..]]
21173 </p>
21174 !! end
21175
21176 !! test
21177 Parents of subpages, two levels up, with lots of extra trailing slashes.
21178 !! options
21179 subpage title=[[Subpage test/L1/L2/L3]]
21180 !! wikitext
21181 [[../../////]]
21182 !! html
21183 <p><a href="/index.php?title=Subpage_test/L1&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1 (page does not exist)">Subpage test/L1</a>
21184 </p>
21185 !! end
21186
21187 !! article
21188 Subpage test/L1/L2/L3Sibling
21189 !! text
21190 Sibling article
21191 !! endarticle
21192
21193 !! test
21194 Transclusion of a sibling page (one level up)
21195 !! options
21196 subpage title=[[Subpage test/L1/L2/L3]]
21197 !! wikitext
21198 {{../L3Sibling}}
21199 !! html
21200 <p>Sibling article
21201 </p>
21202 !! end
21203
21204 !! test
21205 Transclusion of a child page
21206 !! options
21207 subpage title=[[Subpage test/L1/L2]]
21208 !! wikitext
21209 {{/L3Sibling}}
21210 !! html
21211 <p>Sibling article
21212 </p>
21213 !! end
21214
21215 # This is wt2html only in Parsoid because we add <nowiki>
21216 # because of {{..}} and we don't expect to fix that to
21217 # eliminate the nowikis selective for {{..}} markup.
21218 !! test
21219 Non-transclusion because of too many up levels
21220 !! options
21221 subpage title=[[Subpage test/L1/L2/L3]]
21222 parsoid=wt2html
21223 !! wikitext
21224 {{../../../../More than parent}}
21225 !! html/php
21226 <p>{{../../../../More than parent}}
21227 </p>
21228 !! html/parsoid
21229 <p>{{../../../../More than parent}}</p>
21230 !! end
21231
21232 !! test
21233 Definition list code coverage
21234 !! wikitext
21235 ; title : def
21236 ; title : def
21237 ;title: def
21238 !! html/php
21239 <dl><dt> title &#160;</dt>
21240 <dd> def</dd>
21241 <dt> title&#160;</dt>
21242 <dd> def</dd>
21243 <dt>title</dt>
21244 <dd> def</dd></dl>
21245
21246 !! html/parsoid
21247 <dl><dt> title <span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
21248 <dt> title<span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
21249 <dt>title</dt><dd> def</dd></dl>
21250 !! end
21251
21252 !! test
21253 Don't fall for the self-closing div
21254 !! wikitext
21255 <div>hello world</div/>
21256 !! html
21257 <div>hello world</div>
21258
21259 !! end
21260
21261 !! test
21262 MSGNW magic word
21263 !! wikitext
21264 {{MSGNW:msg}}
21265 !! html/php
21266 <p>&#91;&#91;:Template:Msg&#93;&#93;
21267 </p>
21268 !! end
21269
21270 !! test
21271 RAW magic word
21272 !! wikitext
21273 {{RAW:QUERTY}}
21274 !! html
21275 <p><a href="/index.php?title=Template:QUERTY&amp;action=edit&amp;redlink=1" class="new" title="Template:QUERTY (page does not exist)">Template:QUERTY</a>
21276 </p>
21277 !! end
21278
21279 # This isn't needed for XHTML conformance, but would be handy as a fallback security measure
21280 !! test
21281 Always escape literal '>' in output, not just after '<'
21282 !! wikitext
21283 ><>
21284 !! html
21285 <p>&gt;&lt;&gt;
21286 </p>
21287 !! end
21288
21289 !! test
21290 Template caching
21291 !! wikitext
21292 {{Test}}
21293 {{Test}}
21294 !! html
21295 <p>This is a test template
21296 This is a test template
21297 </p>
21298 !! end
21299
21300
21301 !! article
21302 MediaWiki:Fake
21303 !! text
21304 ==header==
21305 !! endarticle
21306
21307 !! test
21308 Inclusion of !userCanEdit() content
21309 !! wikitext
21310 {{MediaWiki:Fake}}
21311 !! html
21312 <h2><span class="mw-headline" id="header">header</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=MediaWiki:Fake&amp;action=edit&amp;section=T-1" title="MediaWiki:Fake">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
21313
21314 !! end
21315
21316
21317 !! test
21318 Out-of-order TOC heading levels
21319 !! wikitext
21320 ==2==
21321 ======6======
21322 ===3===
21323 =1=
21324 =====5=====
21325 ==2==
21326 !! html
21327 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
21328 <ul>
21329 <li class="toclevel-1 tocsection-1"><a href="#2"><span class="tocnumber">1</span> <span class="toctext">2</span></a>
21330 <ul>
21331 <li class="toclevel-2 tocsection-2"><a href="#6"><span class="tocnumber">1.1</span> <span class="toctext">6</span></a></li>
21332 <li class="toclevel-2 tocsection-3"><a href="#3"><span class="tocnumber">1.2</span> <span class="toctext">3</span></a></li>
21333 </ul>
21334 </li>
21335 <li class="toclevel-1 tocsection-4"><a href="#1"><span class="tocnumber">2</span> <span class="toctext">1</span></a>
21336 <ul>
21337 <li class="toclevel-2 tocsection-5"><a href="#5"><span class="tocnumber">2.1</span> <span class="toctext">5</span></a></li>
21338 <li class="toclevel-2 tocsection-6"><a href="#2_2"><span class="tocnumber">2.2</span> <span class="toctext">2</span></a></li>
21339 </ul>
21340 </li>
21341 </ul>
21342 </div>
21343
21344 <h2><span class="mw-headline" id="2">2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
21345 <h6><span class="mw-headline" id="6">6</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: 6">edit</a><span class="mw-editsection-bracket">]</span></span></h6>
21346 <h3><span class="mw-headline" id="3">3</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: 3">edit</a><span class="mw-editsection-bracket">]</span></span></h3>
21347 <h1><span class="mw-headline" id="1">1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: 1">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
21348 <h5><span class="mw-headline" id="5">5</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: 5">edit</a><span class="mw-editsection-bracket">]</span></span></h5>
21349 <h2><span class="mw-headline" id="2_2">2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
21350
21351 !! end
21352
21353
21354 !! test
21355 ISBN with a dummy number
21356 !! wikitext
21357 ISBN ---
21358 !! html
21359 <p>ISBN ---
21360 </p>
21361 !! end
21362
21363
21364 !! test
21365 ISBN with space-delimited number
21366 !! wikitext
21367 ISBN 92 9017 032 8
21368 !! html/php
21369 <p><a href="/wiki/Special:BookSources/9290170328" class="internal mw-magiclink-isbn">ISBN 92 9017 032 8</a>
21370 </p>
21371 !! html/parsoid
21372 <p data-parsoid='{"dsr":[0,18,0,0]}'><a href="./Special:BookSources/9290170328" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink","dsr":[0,18,2,2]}'>ISBN 92 9017 032 8</a></p>
21373 !! end
21374
21375
21376 !! test
21377 ISBN with multiple spaces, no number
21378 !! wikitext
21379 ISBN foo
21380 !! html
21381 <p>ISBN foo
21382 </p>
21383 !! end
21384
21385
21386 !! test
21387 ISBN length
21388 !! wikitext
21389 ISBN 123456789
21390
21391 ISBN 1234567890
21392
21393 ISBN 12345678901
21394 !! html/php
21395 <p>ISBN 123456789
21396 </p><p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
21397 </p><p>ISBN 12345678901
21398 </p>
21399 !! html/parsoid
21400 <p>ISBN 123456789</p>
21401
21402 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a></p>
21403
21404 <p>ISBN 12345678901</p>
21405 !! end
21406
21407
21408 !! test
21409 ISBN with trailing year (T9110)
21410 !! wikitext
21411 ISBN 1-234-56789-0 - 2006
21412
21413 ISBN 1 234 56789 0 - 2006
21414 !! html/php
21415 <p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1-234-56789-0</a> - 2006
21416 </p><p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1 234 56789 0</a> - 2006
21417 </p>
21418 !! html/parsoid
21419 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1-234-56789-0</a> - 2006</p>
21420
21421 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1 234 56789 0</a> - 2006</p>
21422 !! end
21423
21424
21425 !! test
21426 anchorencode
21427 !! wikitext
21428 {{anchorencode:foo bar©#%n}}
21429 !! html
21430 <p>foo_bar.C2.A9.23.25n
21431 </p>
21432 !! end
21433
21434 !! test
21435 anchorencode trims spaces
21436 !! wikitext
21437 {{anchorencode: __pretty__please__}}
21438 !! html
21439 <p>pretty_please
21440 </p>
21441 !! end
21442
21443 !! test
21444 anchorencode deals with links
21445 !! wikitext
21446 {{anchorencode: [[hello|world]] [[hi]]}}
21447 !! html
21448 <p>world_hi
21449 </p>
21450 !! end
21451
21452 !! test
21453 anchorencode deals with templates
21454 !! wikitext
21455 {{anchorencode: {{Foo}} }}
21456 !! html
21457 <p>FOO
21458 </p>
21459 !! end
21460
21461 !! test
21462 anchorencode encodes like the TOC generator: (T20431)
21463 !! wikitext
21464 === _ +:.3A%3A&&amp;]] ===
21465 {{anchorencode: _ +:.3A%3A&&amp;]] }}
21466 __NOEDITSECTION__
21467 !! html
21468 <h3><span class="mw-headline" id=".2B:.3A.253A.26.26.5D.5D">_ +:.3A%3A&amp;&amp;]]</span></h3>
21469 <p>.2B:.3A.253A.26.26.5D.5D
21470 </p>
21471 !! end
21472
21473 !! test
21474 T8200: blockquotes and paragraph formatting
21475 !! wikitext
21476 <blockquote>
21477 foo
21478 </blockquote>
21479
21480 bar
21481
21482 baz
21483 !! html
21484 <blockquote>
21485 <p>foo
21486 </p>
21487 </blockquote>
21488 <p>bar
21489 </p>
21490 <pre>baz
21491 </pre>
21492 !! end
21493
21494 !! test
21495 T10293: Use of center tag ruins paragraph formatting
21496 !! wikitext
21497 <center>
21498 foo
21499 </center>
21500
21501 bar
21502
21503 baz
21504 !! html
21505 <center>
21506 <p>foo
21507 </p>
21508 </center>
21509 <p>bar
21510 </p>
21511 <pre>baz
21512 </pre>
21513 !! end
21514
21515 !!test
21516 Parsing of overlapping (improperly nested) inline html tags
21517 !! wikitext
21518 <span><s>x</span></s>
21519 !! html/php
21520 <p><span><s>x&lt;/span&gt;</s></span>
21521 </p>
21522 !! html/parsoid
21523 <p><span><s>x</s></span>
21524 </p>
21525 !!end
21526
21527 ###
21528 ### Language variants related tests
21529 ###
21530
21531 # Parsoid does not mark self-links.
21532 # Parsoid does not convert links; PHP will do any necessary redirects.
21533
21534 !! test
21535 Self-link in language variants
21536 !! options
21537 title=[[Dunav]] language=sr
21538 !! wikitext
21539 Both [[Dunav]] and [[Дунав]] are names for this river.
21540 !! html/php
21541 <p>Both <a class="mw-selflink selflink">Dunav</a> and <a class="mw-selflink selflink">Дунав</a> are names for this river.
21542 </p>
21543 !! html/parsoid
21544 <p>Both <a rel="mw:WikiLink" href="./Dunav" title="Dunav">Dunav</a> and <a rel="mw:WikiLink" href="./Дунав" title="Дунав">Дунав</a> are names for this river.</p>
21545 !! end
21546
21547 !! article
21548 Дуна
21549 !! text
21550 content
21551 !! endarticle
21552
21553 !! test
21554 Link to another existing title shouldn't be parsed as self-link even if it's a variant of this title
21555 !! options
21556 title=[[Duna]] language=sr
21557 !! wikitext
21558 [[Дуна]] is not a self-link while [[Duna]] and [[Dуна]] are still self-links.
21559 !! html/php
21560 <p><a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Дуна</a> is not a self-link while <a class="mw-selflink selflink">Duna</a> and <a class="mw-selflink selflink">Dуна</a> are still self-links.
21561 </p>
21562 !! html/parsoid
21563 <p><a rel="mw:WikiLink" href="./Дуна" title="Дуна">Дуна</a> is not a self-link while <a rel="mw:WikiLink" href="./Duna" title="Duna">Duna</a> and <a rel="mw:WikiLink" href="./Dуна" title="Dуна">Dуна</a> are still self-links.</p>
21564 !! end
21565
21566 !! test
21567 Link to a section of a variant of this title shouldn't be parsed as self-link
21568 !! options
21569 title=[[Duna]] language=sr
21570 !! wikitext
21571 [[Dуна]] is a self-link while [[Dunа#Foo]] and [[Dуна#Foo]] are not self-links.
21572 !! html/php
21573 <p><a class="mw-selflink selflink">Dуна</a> is a self-link while <a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Dunа#Foo</a> and <a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Dуна#Foo</a> are not self-links.
21574 </p>
21575 !! html/parsoid
21576 <p><a rel="mw:WikiLink" href="./Dуна" title="Dуна">Dуна</a> is a self-link while <a rel="mw:WikiLink" href="./Dunа#Foo" title="Dunа">Dunа#Foo</a> and <a rel="mw:WikiLink" href="./Dуна#Foo" title="Dуна">Dуна#Foo</a> are not self-links.</p>
21577 !! end
21578
21579 !! test
21580 Link to pages in language variants
21581 !! options
21582 language=sr
21583 !! wikitext
21584 Main Page can be written as [[Маин Паге]]
21585 !! html/php
21586 <p>Main Page can be written as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a>
21587 </p>
21588 !! html/parsoid
21589 <p>Main Page can be written as <a rel="mw:WikiLink" href="./Маин_Паге" title="Маин Паге">Маин Паге</a></p>
21590 !! end
21591
21592
21593 !! test
21594 Multiple links to pages in language variants
21595 !! options
21596 language=sr
21597 !! wikitext
21598 [[Main Page]] can be written as [[Маин Паге]] same as [[Маин Паге]].
21599 !! html/php
21600 <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>.
21601 </p>
21602 !! html/parsoid
21603 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a> can be written as <a rel="mw:WikiLink" href="./Маин_Паге" title="Маин Паге">Маин Паге</a> same as <a rel="mw:WikiLink" href="./Маин_Паге" title="Маин Паге">Маин Паге</a>.</p>
21604 !! end
21605
21606
21607 !! test
21608 Simple template in language variants
21609 !! options
21610 language=sr
21611 !! wikitext
21612 {{тест}}
21613 !! html/php
21614 <p>This is a test template
21615 </p>
21616 !! end
21617
21618
21619 !! test
21620 Template with explicit namespace in language variants
21621 !! options
21622 language=sr
21623 !! wikitext
21624 {{Template:тест}}
21625 !! html/php
21626 <p>This is a test template
21627 </p>
21628 !! end
21629
21630
21631 !! test
21632 Basic test for template parameter in language variants
21633 !! options
21634 language=sr
21635 !! wikitext
21636 {{парамтест|param=foo}}
21637 !! html/php
21638 <p>This is a test template with parameter foo
21639 </p>
21640 !! end
21641
21642 !! test
21643 Simple category in language variants
21644 !! options
21645 language=sr cat
21646 !! wikitext
21647 [[Category:МедиаWики Усер'с Гуиде]]
21648 !! html/php
21649 cat=МедиаWики_Усер'с_Гуиде sort=
21650 !! html/parsoid
21651 <link rel="mw:PageProp/Category" href="./Категорија:МедиаWики_Усер'с_Гуиде" data-parsoid='{"stx":"simple","a":{"href":"./Категорија:МедиаWики_Усер&#39;с_Гуиде"},"sa":{"href":"Category:МедиаWики Усер&#39;с Гуиде"}}'/>
21652 !! end
21653
21654 !! article
21655 Category:分类
21656 !! text
21657 blah
21658 !! endarticle
21659
21660 !! article
21661 Category:分類
21662 !! text
21663 blah
21664 !! endarticle
21665
21666 ## We used to, but no longer wt2wt this test since the default serializer
21667 ## will normalize all categories to serialize on their own line.
21668 ## This wikitext usage is going to be fairly uncommon in production and
21669 ## selser will take care of preserving formatting in those scenarios.
21670 !! test
21671 Don't convert blue categorylinks to another variant (T35210)
21672 !! options
21673 cat
21674 language=zh
21675 parsoid=wt2html
21676 !! wikitext
21677 [[A]][[Category:分类]]
21678 !! html/php
21679 cat=分类 sort=
21680 !! html/parsoid
21681 <p><a rel="mw:WikiLink" href="./A" title="A">A</a></p>
21682 <link rel="mw:PageProp/Category" href="./Category:分类"/>
21683 !! end
21684
21685 !! test
21686 Stripping -{}- tags (language variants)
21687 !! options
21688 language=sr
21689 !! wikitext
21690 Latin proverb: -{Ne nuntium necare}-
21691 !! html/php
21692 <p>Latin proverb: Ne nuntium necare
21693 </p>
21694 !! html/parsoid
21695 <p>Latin proverb: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Ne nuntium necare"}}'></span></p>
21696 !! end
21697
21698
21699 !! test
21700 Prevent conversion with -{}- tags (language variants)
21701 !! options
21702 language=sr variant=sr-ec
21703 !! wikitext
21704 Latinski: -{Ne nuntium necare}-
21705 !! html/php
21706 <p>Латински: Ne nuntium necare
21707 </p>
21708 !! html/parsoid
21709 <p>Latinski: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Ne nuntium necare"}}'></span></p>
21710 !! end
21711
21712
21713 !! test
21714 Prevent conversion of text with -{}- tags (language variants)
21715 !! options
21716 language=sr variant=sr-ec
21717 !! wikitext
21718 Latinski: -{Ne nuntium necare}-
21719 !! html/php
21720 <p>Латински: Ne nuntium necare
21721 </p>
21722 !! html/parsoid
21723 <p>Latinski: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Ne nuntium necare"}}'></span></p>
21724 !! end
21725
21726
21727 !! test
21728 Prevent conversion of links with -{}- tags (language variants)
21729 !! options
21730 language=sr variant=sr-ec
21731 !! wikitext
21732 -{[[Main Page]]}-
21733 !! html/php
21734 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
21735 </p>
21736 !! html/parsoid
21737 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"&lt;a rel=\"mw:WikiLink\" href=\"./Main_Page\" title=\"Main Page\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Main_Page\"},\"sa\":{\"href\":\"Main Page\"},\"dsr\":[2,15,2,2]}&#39;>Main Page&lt;/a>"}}'></span></p>
21738 !! end
21739
21740
21741 !! test
21742 -{}- tags within headlines (within html for parserConvert())
21743 !! options
21744 language=sr variant=sr-ec
21745 !! wikitext
21746 == -{Naslov}- ==
21747
21748 Note that even an unprotected headline ID is not affected by language
21749 conversion:
21750
21751 == Latinski ==
21752 !! html/php
21753 <h2><span class="mw-headline" id="-.7BNaslov.7D-">Naslov</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Уреди одељак „Naslov“">уреди</a><span class="mw-editsection-bracket">]</span></span></h2>
21754 <p>Ноте тхат евен ан унпротецтед хеадлине ИД ис нот аффецтед бy лангуаге
21755 цонверсион:
21756 </p>
21757 <h2><span class="mw-headline" id="Latinski">Латински</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Уреди одељак „Латински“">уреди</a><span class="mw-editsection-bracket">]</span></span></h2>
21758
21759 !! html/parsoid
21760 <h2 id="-.7BNaslov.7D-"><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Naslov"}}'></span></h2>
21761
21762 <p>Note that even an unprotected headline ID is not affected by language
21763 conversion:</p>
21764
21765 <h2 id="Latinski">Latinski</h2>
21766 !! end
21767
21768 !! test
21769 Explicit definition of language variant alternatives
21770 !! options
21771 language=zh variant=zh-tw
21772 !! wikitext
21773 -{zh:China;zh-tw:Taiwan}-, not China
21774 !! html/php
21775 <p>Taiwan, not China
21776 </p>
21777 !! html/parsoid
21778 <p><span typeof="mw:LanguageVariant" data-parsoid='{"tSp":[6]}' data-mw-variant='{"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'></span>, not China</p>
21779 !! end
21780
21781 !! test
21782 Filter syntax for language variants
21783 !! options
21784 language=zh variant=zh-tw
21785 !! wikitext
21786 foo-{zh;zh-hans;zh-hant|blog, WEBJOURNAL, WEBLOG}-quux
21787 !! html/php
21788 <p>fooblog, WEBJOURNAL, WEBLOGquux
21789 </p>
21790 !! html/parsoid
21791 <p>foo<span typeof="mw:LanguageVariant" data-mw-variant='{"filter":{"l":["zh","zh-hans","zh-hant"],"t":"blog, WEBJOURNAL, WEBLOG"}}'></span>quux</p>
21792 !! end
21793
21794 # Note that Parsoid post-processing for language variants needs to
21795 # update the `title` attribute here, based on the mw:ExpandedAttrs property
21796 !! test
21797 Conversion around HTML tags
21798 !! options
21799 language=sr variant=sr-ec
21800 !! wikitext
21801 -{H|span=>sr-ec:script;title=>sr-ec:src}-
21802 <span title="La-{sr-el:L;sr-ec:C}-tin">ski</span>
21803 !! html/php
21804 <p>
21805 <span title="ЛаCтин">ски</span>
21806 </p>
21807 !! html/parsoid
21808 <p><meta typeof="mw:LanguageVariant" data-parsoid='{"tSp":[8]}' data-mw-variant='{"add":true,"oneway":[{"f":"span","l":"sr-ec","t":"script"},{"f":"title","l":"sr-ec","t":"src"}]}'/>
21809 <span title="Latin" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"title"},{"html":"La&lt;span typeof=\"mw:LanguageVariant\" data-mw-variant=&#39;{\"twoway\":[{\"l\":\"sr-el\",\"t\":\"L\"},{\"l\":\"sr-ec\",\"t\":\"C\"}]}&#39; data-parsoid=&#39;{\"fl\":[],\"tSp\":[6],\"dsr\":[57,76,null,2]}&#39;>&lt;/span>tin"}]]}'>ski</span></p>
21810 !! end
21811
21812 !! test
21813 Explicit session-wise two-way language variant mapping (A flag and - flag)
21814 !! options
21815 language=zh variant=zh-tw
21816 !! wikitext
21817 This is -{zh:China; zh-tw:Taiwan}-, but we'll forget that now.
21818
21819 Taiwan is not China.
21820
21821 But -{A|zh:China; zh-tw:Taiwan}- is China,
21822
21823 (This-{-|zh:China; zh-tw:Taiwan}- should be stripped!)
21824
21825 and -{China}- is China.
21826 !! html/php
21827 <p>This is Taiwan, but we'll forget that now.
21828 </p><p>Taiwan is not China.
21829 </p><p>But Taiwan is Taiwan,
21830 </p><p>(This should be stripped!)
21831 </p><p>and China is China.
21832 </p>
21833 !! html/parsoid
21834 <p>This is <span typeof="mw:LanguageVariant" data-mw-variant='{"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'></span>, but we'll forget that now.</p>
21835 <p>Taiwan is not China.</p>
21836 <p>But <span typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'></span> is China,</p>
21837 <p>(This<meta typeof="mw:LanguageVariant" data-mw-variant='{"remove":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/> should be stripped!)</p>
21838 <p>and <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"China"}}'></span> is China.</p>
21839 !! end
21840
21841 !! test
21842 Explicit session-wise one-way language variant mapping (A flag and - flag)
21843 !! options
21844 language=zh variant=zh-tw
21845 !! wikitext
21846 This is -{COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}-, but we'll forget that now.
21847
21848 COUNTRY is China or Taiwan.
21849
21850 But -{A|COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}- is COUNTRY,
21851
21852 (This-{-|COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}- should be stripped!)
21853
21854 and -{COUNTRY}- is COUNTRY.
21855 !! html/php
21856 <p>This is Taiwan, but we'll forget that now.
21857 </p><p>COUNTRY is China or Taiwan.
21858 </p><p>But Taiwan is Taiwan,
21859 </p><p>(This should be stripped!)
21860 </p><p>and COUNTRY is COUNTRY.
21861 </p>
21862 !! html/parsoid
21863 <p>This is <span typeof="mw:LanguageVariant" data-mw-variant='{"oneway":[{"f":"COUNTRY","l":"zh","t":"China"},{"f":"COUNTRY","l":"zh-tw","t":"Taiwan"}]}'></span>, but we'll forget that now.</p>
21864 <p>COUNTRY is China or Taiwan.</p>
21865 <p>But <span typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"oneway":[{"f":"COUNTRY","l":"zh","t":"China"},{"f":"COUNTRY","l":"zh-tw","t":"Taiwan"}]}'></span> is COUNTRY,</p>
21866 <p>(This<meta typeof="mw:LanguageVariant" data-mw-variant='{"oneway":[{"f":"COUNTRY","l":"zh","t":"China"},{"f":"COUNTRY","l":"zh-tw","t":"Taiwan"}],"remove":true}'/> should be stripped!)</p>
21867 <p>and <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"COUNTRY"}}'></span> is COUNTRY.</p>
21868 !! end
21869
21870 !! test
21871 Explicit session-wise two-way language variant mapping (H flag for hide)
21872 !! options
21873 language=zh variant=zh-tw
21874 !! wikitext
21875 (This-{H|zh:China;zh-tw:Taiwan}- should be stripped!)
21876
21877 Taiwan is China.
21878 !! html/php
21879 <p>(This should be stripped!)
21880 </p><p>Taiwan is Taiwan.
21881 </p>
21882 !! html/parsoid
21883 <p>(This<meta typeof="mw:LanguageVariant" data-parsoid='{"tSp":[6]}' data-mw-variant='{"add":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/> should be stripped!)</p>
21884 <p>Taiwan is China.</p>
21885 !! end
21886
21887 !! test
21888 Explicit session-wise one-way language variant mapping (H flag for hide)
21889 !! options
21890 language=zh variant=zh-tw
21891 !! wikitext
21892 (This-{H|COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}- should be stripped!)
21893
21894 COUNTRY is Taiwan or China.
21895 !! html/php
21896 <p>(This should be stripped!)
21897 </p><p>Taiwan is Taiwan or China.
21898 </p>
21899 !! html/parsoid
21900 <p>(This<meta typeof="mw:LanguageVariant" data-parsoid='{"tSp":[8]}' data-mw-variant='{"add":true,"oneway":[{"f":"COUNTRY","l":"zh","t":"China"},{"f":"COUNTRY","l":"zh-tw","t":"Taiwan"}]}'/> should be stripped!)</p>
21901 <p>COUNTRY is Taiwan or China.</p>
21902 !! end
21903
21904 ## Note that parsoid test runner does not support 'showtitle' option.
21905 !! test
21906 Adding explicit conversion rule for title (T flag)
21907 !! options
21908 language=zh variant=zh-tw showtitle
21909 !! wikitext
21910 Should be stripped-{T|zh:China;zh-tw:Taiwan}-!
21911
21912 Taiwan is China.
21913 !! html/php
21914 Taiwan
21915 <p>Should be stripped!
21916 </p><p>Taiwan is China.
21917 </p>
21918 !! html/parsoid
21919 <p>Should be stripped<meta typeof="mw:LanguageVariant" data-parsoid='{"tSp":[6]}' data-mw-variant='{"title":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/>!</p>
21920 <p>Taiwan is China.</p>
21921 !! end
21922
21923 !! test
21924 Code coverage: T combined with H flag
21925 !! options
21926 language=zh variant=zh-tw showtitle
21927 !! wikitext
21928 Should be stripped-{T;H|zh:China; zh-tw:Taiwan}-!
21929
21930 Taiwan is China.
21931 !! html/php
21932 Taiwan
21933 <p>Should be stripped!
21934 </p><p>Taiwan is Taiwan.
21935 </p>
21936 !! html/parsoid
21937 <p>Should be stripped<meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"title":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/>!</p>
21938 <p>Taiwan is China.</p>
21939 !! end
21940
21941 !! test
21942 Code coverage: T with no variants
21943 !! options
21944 language=zh variant=zh-tw showtitle
21945 !! wikitext
21946 -{H|zh:China; zh-tw:Taiwan}-
21947 Taiwan is China.-{T|Taiwan is China}-
21948 !! html/php
21949 Taiwan is China
21950 <p>
21951 Taiwan is Taiwan.
21952 </p>
21953 !! html/parsoid
21954 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/>
21955 Taiwan is China.<meta typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Taiwan is China"},"title":true}'/></p>
21956 !! end
21957
21958 !! test
21959 Code coverage: rules with no variants
21960 !! options
21961 language=zh variant=zh-tw
21962 !! wikitext
21963 -{H|zh:China; zh-tw:Taiwan}-
21964 Taiwan is China.
21965 -{H|China}-
21966 Taiwan is China.
21967 !! html/php
21968 <p>
21969 Taiwan is Taiwan.
21970
21971 Taiwan is China.
21972 </p>
21973 !! html/parsoid
21974 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/>
21975 Taiwan is China.
21976 <meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"*","t":"China"}]}'/>
21977 Taiwan is China.</p>
21978 !! end
21979
21980
21981 !! test
21982 Code coverage: D flag for conversion rule
21983 !! options
21984 language=zh variant=zh-tw
21985 !! wikitext
21986 -{D|zh-cn:XA; zh-tw:YA}-
21987 -{A;D|zh-cn:XB; zh-tw:YB}-
21988 -{D;H|zh-cn:XC; zh-tw:YC}-
21989
21990 -{D;H|FOO=>zh-tw:BAR;FOO=>zh-cn:BAT}-
21991
21992 -{D|0=>zh-tw:1}-
21993 -{A;D|2=>zh-tw:3}-
21994 -{D;H|4=>zh-tw:5}-
21995
21996 XA XB XC YA YB YC FOO BAR BAT 012345
21997 !! html/php
21998 <p>大陆:XA;台灣:YA;
21999
22000 大陆:XC;台灣:YC;
22001 </p><p>FOO⇒台灣:BAR;FOO⇒大陆:BAT;
22002 </p><p>0⇒台灣:1;
22003
22004 4⇒台灣:5;
22005 </p><p>XA YB YC YA YB YC BAR BAR BAT 013355
22006 </p>
22007 !! html/parsoid
22008 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"describe":true,"twoway":[{"l":"zh-cn","t":"XA"},{"l":"zh-tw","t":"YA"}]}'></span>
22009 <meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"twoway":[{"l":"zh-cn","t":"XB"},{"l":"zh-tw","t":"YB"}]}'/>
22010 <span typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"twoway":[{"l":"zh-cn","t":"XC"},{"l":"zh-tw","t":"YC"}]}'></span></p>
22011 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"oneway":[{"f":"FOO","l":"zh-tw","t":"BAR"},{"f":"FOO","l":"zh-cn","t":"BAT"}]}'></span></p>
22012 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"describe":true,"oneway":[{"f":"0","l":"zh-tw","t":"1"}]}'></span>
22013 <meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"oneway":[{"f":"2","l":"zh-tw","t":"3"}]}'/>
22014 <span typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"oneway":[{"f":"4","l":"zh-tw","t":"5"}]}'></span></p>
22015 <p>XA XB XC YA YB YC FOO BAR BAT 012345</p>
22016 !! end
22017
22018 !! test
22019 Code coverage: N flag for conversion rule
22020 !! options
22021 language=zh variant=zh-cn
22022 !! wikitext
22023 -{N|zh-cn}-
22024
22025 -{N|zh-tw}-
22026
22027 -{N|sr-ec}-
22028 !! html/php
22029 <p>大陆
22030 </p><p>台灣
22031 </p><p>српски (ћирилица)‎
22032 </p>
22033 !! html/parsoid
22034 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"name":{"t":"zh-cn"}}'></span></p>
22035 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"name":{"t":"zh-tw"}}'></span></p>
22036 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"name":{"t":"sr-ec"}}'></span></p>
22037 !! end
22038
22039 # html2wt suppresses the bogus 'D' flag, so this is wt2html only
22040 !! test
22041 Code coverage: N flag for conversion rule (wt2html only)
22042 !! options
22043 language=zh variant=zh-cn
22044 parsoid=wt2html,html2html
22045 !! wikitext
22046 -{D;N|en}-
22047 !! html/php
22048 <p>English
22049 </p>
22050 !! html/parsoid
22051 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"name":{"t":"en"}}' data-parsoid='{"fl":["D","N"]}'></span></p>
22052 !! end
22053
22054 !! test
22055 Testing that changing the language variant here in the tests actually works
22056 !! options
22057 language=zh variant=zh showtitle
22058 !! wikitext
22059 Should be stripped-{T|zh:China; zh-tw:Taiwan}-!
22060 !! html/php
22061 China
22062 <p>Should be stripped!
22063 </p>
22064 !! html/parsoid
22065 <p>Should be stripped<meta typeof="mw:LanguageVariant" data-mw-variant='{"title":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/>!</p>
22066 !! end
22067
22068 !! test
22069 Recursive conversion of alt and title attrs shouldn't clear converter state
22070 !! options
22071 language=zh variant=zh-cn
22072 showtitle
22073 !! wikitext
22074 -{H|zh-cn:Exclamation; zh-tw:exclamation}-
22075 Should be stripped-{T|zh-cn:China; zh-tw:Taiwan}-<span title="exclamation">!</span>
22076 !! html/php
22077 China
22078 <p>
22079 Should be stripped<span title="Exclamation">!</span>
22080 </p>
22081 !! html/parsoid
22082 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"zh-cn","t":"Exclamation"},{"l":"zh-tw","t":"exclamation"}]}'/>
22083 Should be stripped<meta typeof="mw:LanguageVariant" data-mw-variant='{"title":true,"twoway":[{"l":"zh-cn","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/><span title="exclamation">!</span></p>
22084 !! end
22085
22086 !! test
22087 T26072: more test on conversion rule for title
22088 !! options
22089 language=zh variant=zh-tw showtitle
22090 !! wikitext
22091 This should be stripped-{T|zh:China; zh-tw:Taiwan}-!
22092
22093 This won't take interferes with the title rule-{H|zh:Beijing; zh-tw:Taipei}-.
22094 !! html/php
22095 Taiwan
22096 <p>This should be stripped!
22097 </p><p>This won't take interferes with the title rule.
22098 </p>
22099 !! html/parsoid
22100 <p>This should be stripped<meta typeof="mw:LanguageVariant" data-mw-variant='{"title":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/>!</p>
22101 <p>This won't take interferes with the title rule<meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"zh","t":"Beijing"},{"l":"zh-tw","t":"Taipei"}]}'/>.</p>
22102 !! end
22103
22104 !! test
22105 Partly disable title conversion if variant == main language code
22106 !! options
22107 language=zh variant=zh title=[[ZH]] showtitle
22108 !! wikitext
22109 -{T|zh-cn:CN;zh-tw:TW}-
22110 !! html/php
22111 ZH
22112 <p>
22113 </p>
22114 !! html/parsoid
22115 <p><meta typeof="mw:LanguageVariant" data-parsoid='{"tSp":[6]}' data-mw-variant='{"title":true,"twoway":[{"l":"zh-cn","t":"CN"},{"l":"zh-tw","t":"TW"}]}'/></p>
22116 !! end
22117
22118 !! test
22119 Partly disable title conversion if variant == main language code, more
22120 !! options
22121 language=zh variant=zh title=[[ZH]] showtitle
22122 !! wikitext
22123 -{T|TW}-
22124 !! html/php
22125 ZH
22126 <p>
22127 </p>
22128 !! html/parsoid
22129 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"TW"},"title":true}'/></p>
22130 !! end
22131
22132 !! test
22133 Raw output of variant escape tags (R flag)
22134 !! options
22135 language=zh variant=zh-tw
22136 !! wikitext
22137 Raw: -{R|zh:China;zh-tw:Taiwan}-
22138 !! html/php
22139 <p>Raw: zh:China;zh-tw:Taiwan
22140 </p>
22141 !! html/parsoid
22142 <p>Raw: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"zh:China;zh-tw:Taiwan"}}'></span></p>
22143 !! end
22144
22145 # html2wt suppresses the bogus 'D' flags, so this is wt2html only
22146 !! test
22147 Raw output of variant escape tags (R flag) (wt2html only)
22148 !! options
22149 language=zh variant=zh-tw
22150 parsoid=wt2html,html2html
22151 !! wikitext
22152 -{Variant}- -{D|syntax}- -{D;R|options}-
22153 !! html/php
22154 <p>Variant syntax options
22155 </p>
22156 !! html/parsoid
22157 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Variant"}}'></span> <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"syntax"}}'></span> <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"options"}}'></span></p>
22158 !! end
22159
22160 !! test
22161 Nested markup inside raw output of variant escape tags (R flag)
22162 !! options
22163 language=zh variant=zh-tw
22164 !! wikitext
22165 Nested raw: -{R|nested -{zh:China;zh-tw:Taiwan}- nested}-
22166 !! html/php
22167 <p>Nested raw: nested Taiwan nested
22168 </p>
22169 !! html/parsoid
22170 <p>Nested raw: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"nested &lt;span typeof=\"mw:LanguageVariant\" data-mw-variant=&#39;{\"twoway\":[{\"l\":\"zh\",\"t\":\"China\"},{\"l\":\"zh-tw\",\"t\":\"Taiwan\"}]}&#39; data-parsoid=&#39;{\"fl\":[],\"tSp\":[6],\"dsr\":[23,48,null,2]}&#39;>&lt;/span> nested"}}'></span></p>
22171 !! end
22172
22173 !! test
22174 Nested markup and spaces inside raw output of variant escape tags (R flag)
22175 !! options
22176 language=zh variant=zh-tw
22177 !! wikitext
22178 X-{ outer -{ inner }- outer }-X
22179 !! html/php
22180 <p>X outer inner outer X
22181 </p>
22182 !! html/parsoid
22183 <p>X<span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":" outer &lt;span typeof=\"mw:LanguageVariant\" data-mw-variant=&#39;{\"disabled\":{\"t\":\" inner \"}}&#39; data-parsoid=&#39;{\"fl\":[],\"dsr\":[10,21,null,2]}&#39;>&lt;/span> outer "}}'></span>X</p>
22184 !! end
22185
22186 !! test
22187 Templates inside raw output of variant escape tags (R flag)
22188 !! options
22189 language=zh variant=zh-tw
22190 !! wikitext
22191 Nested raw: -{R|nested {{echo|hi}} templates}-
22192 !! html/php
22193 <p>Nested raw: nested hi templates
22194 </p>
22195 !! html/parsoid
22196 <p>Nested raw: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"nested &lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[23,34,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"hi\"}},\"i\":0}}]}&#39;>hi&lt;/span> templates"}}'></span></p>
22197 !! end
22198
22199 !! test
22200 Strings evaluating false shouldn't be ignored by Language converter (T51072)
22201 !! options
22202 language=zh variant=zh-cn
22203 !! input
22204 -{zh-cn:0;zh-sg:1;zh-tw:2;zh-hk:3}-
22205 !! html/php
22206 <p>0
22207 </p>
22208 !! html/parsoid
22209 <p><span typeof="mw:LanguageVariant" data-parsoid='{"tSp":[12]}' data-mw-variant='{"twoway":[{"l":"zh-cn","t":"0"},{"l":"zh-sg","t":"1"},{"l":"zh-tw","t":"2"},{"l":"zh-hk","t":"3"}]}'></span></p>
22210 !! end
22211
22212 !! test
22213 Conversion rules from [numeric-only string] to [something else] (T48634)
22214 !! options
22215 language=zh variant=zh-cn
22216 !! input
22217 -{H|0=>zh-cn:B}--{H|0=>zh-cn:C;0=>zh-cn:D}--{H|0=>zh-hans:A}-012345-{A|zh-tw:0;zh-cn:E;}-012345
22218 !! html/php
22219 <p>D12345EE12345
22220 </p>
22221 !! html/parsoid
22222 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"oneway":[{"f":"0","l":"zh-cn","t":"B"}]}'/><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"oneway":[{"f":"0","l":"zh-cn","t":"C"},{"f":"0","l":"zh-cn","t":"D"}]}'/><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"oneway":[{"f":"0","l":"zh-hans","t":"A"}]}'/>012345<span typeof="mw:LanguageVariant" data-parsoid='{"fl":["A"],"tSp":[7]}' data-mw-variant='{"add":true,"twoway":[{"l":"zh-tw","t":"0"},{"l":"zh-cn","t":"E"}]}'></span>012345</p>
22223 !! end
22224
22225 !! test
22226 Two-way converter rule entries with an empty value should be ignored (T53551)
22227 !! options
22228 language=zh variant=zh-cn
22229 !! input
22230 -{H|zh-cn:foo;zh-tw:;}-foobar
22231 !! html/php
22232 <p>foobar
22233 </p>
22234 !! html/parsoid
22235 <p><meta typeof="mw:LanguageVariant" data-parsoid='{"tSp":[7]}' data-mw-variant='{"add":true,"twoway":[{"l":"zh-cn","t":"foo"},{"l":"zh-tw","t":""}]}'/>foobar</p>
22236 !! end
22237
22238 !! test
22239 One-way converter rule entries with an empty "from" string should be ignored (T53551)
22240 !! options
22241 language=zh variant=zh-cn
22242 !! input
22243 -{H|=>zh-cn:foo;}-foobar
22244 !! html/php
22245 <p>foobar
22246 </p>
22247 !! html/parsoid
22248 <p><meta typeof="mw:LanguageVariant" data-parsoid='{"tSp":[5]}' data-mw-variant='{"add":true,"oneway":[{"f":"","l":"zh-cn","t":"foo"}]}'/>foobar</p>
22249 !! end
22250
22251 !! test
22252 Empty converter rule entries shouldn't be inserted into the conversion table (T53551)
22253 !! options
22254 language=zh variant=zh-cn
22255 !! input
22256 -{H|}-foobar
22257 !! html/php
22258 <p>foobar
22259 </p>
22260 !! html/parsoid
22261 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"*","t":""}]}'/>foobar</p>
22262 !! end
22263
22264 !! test
22265 Nested using of manual convert syntax
22266 !! options
22267 language=zh variant=zh-hk
22268 !! wikitext
22269 Nested: -{zh-hans:Hi -{zh-cn:China;zh-sg:Singapore;}-;zh-hant:Hello -{zh-tw:Taiwan;zh-hk:H-{ong}- K-{}-ong;}-;}-!
22270 !! html/php
22271 <p>Nested: Hello Hong Kong!
22272 </p>
22273 !! html/parsoid
22274 <p>Nested: <span typeof="mw:LanguageVariant" data-parsoid='{"tSp":[7]}' data-mw-variant='{"twoway":[{"l":"zh-hans","t":"Hi &lt;span typeof=\"mw:LanguageVariant\" data-mw-variant=&#39;{\"twoway\":[{\"l\":\"zh-cn\",\"t\":\"China\"},{\"l\":\"zh-sg\",\"t\":\"Singapore\"}]}&#39; data-parsoid=&#39;{\"fl\":[],\"tSp\":[7],\"dsr\":[21,53,null,2]}&#39;>&lt;/span>"},{"l":"zh-hant","t":"Hello &lt;span typeof=\"mw:LanguageVariant\" data-mw-variant=&#39;{\"twoway\":[{\"l\":\"zh-tw\",\"t\":\"Taiwan\"},{\"l\":\"zh-hk\",\"t\":\"H&amp;lt;span typeof=\\\"mw:LanguageVariant\\\" data-mw-variant=&amp;#39;{\\\"disabled\\\":{\\\"t\\\":\\\"ong\\\"}}&amp;#39; data-parsoid=&amp;#39;{\\\"fl\\\":[],\\\"dsr\\\":[90,97,null,2]}&amp;#39;>&amp;lt;/span> K&amp;lt;span typeof=\\\"mw:LanguageVariant\\\" data-mw-variant=&amp;#39;{\\\"disabled\\\":{\\\"t\\\":\\\"\\\"}}&amp;#39; data-parsoid=&amp;#39;{\\\"fl\\\":[],\\\"dsr\\\":[99,103,null,2]}&amp;#39;>&amp;lt;/span>ong\"}]}&#39; data-parsoid=&#39;{\"fl\":[],\"tSp\":[7],\"dsr\":[68,109,null,2]}&#39;>&lt;/span>"}]}'></span>!</p>
22275 !! end
22276
22277 !! test
22278 HTML markups with conversion syntax in attribs, nested in other conversion blocks
22279 !! options
22280 language=zh variant=zh-cn
22281 !! wikitext
22282 -{zh;zh-hans;zh-hant|<span title="-{X}-">A</span>}-
22283 !! html/php
22284 <p><span title="X">A</span>
22285 </p>
22286 !! html/parsoid
22287 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"filter":{"l":["zh","zh-hans","zh-hant"],"t":"&lt;span title=\"\" about=\"#mwt1\" typeof=\"mw:ExpandedAttrs\" data-parsoid=&#39;{\"stx\":\"html\",\"a\":{\"title\":\"\"},\"sa\":{\"title\":\"-{X}-\"},\"dsr\":[21,49,20,7]}&#39; data-mw=&#39;{\"attribs\":[[{\"txt\":\"title\"},{\"html\":\"&amp;lt;span typeof=\\\"mw:LanguageVariant\\\" data-mw-variant=&amp;#39;{\\\"disabled\\\":{\\\"t\\\":\\\"X\\\"}}&amp;#39; data-parsoid=&amp;#39;{\\\"fl\\\":[],\\\"dsr\\\":[34,39,null,2]}&amp;#39;>&amp;lt;/span>\"}]]}&#39;>A&lt;/span>"}}'></span></p>
22288 !! end
22289
22290 !! test
22291 HTML markups with conversion syntax in attribs, nested in other conversion blocks (not working yet in PHP parser)
22292 !! options
22293 language=zh variant=zh-cn
22294 !! wikitext
22295 -{<span title="-{X}-">A</span>}-
22296 !! html/php+disabled
22297 <p><span title="X">A</span>
22298 </p>
22299 !! html/parsoid
22300 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"&lt;span title=\"\" about=\"#mwt1\" typeof=\"mw:ExpandedAttrs\" data-parsoid=&#39;{\"stx\":\"html\",\"a\":{\"title\":\"\"},\"sa\":{\"title\":\"-{X}-\"},\"dsr\":[2,30,20,7]}&#39; data-mw=&#39;{\"attribs\":[[{\"txt\":\"title\"},{\"html\":\"&amp;lt;span typeof=\\\"mw:LanguageVariant\\\" data-mw-variant=&amp;#39;{\\\"disabled\\\":{\\\"t\\\":\\\"X\\\"}}&amp;#39; data-parsoid=&amp;#39;{\\\"fl\\\":[],\\\"dsr\\\":[15,20,null,2]}&amp;#39;>&amp;lt;/span>\"}]]}&#39;>A&lt;/span>"}}'></span></p>
22301 !! end
22302
22303 # Parsoid and PHP disagree on how to parse this example: Parsoid
22304 # insists that the content of a language converter element be a valid
22305 # DOM fragment or attribute string
22306 !! test
22307 Language converter markup with block content
22308 !! options
22309 language=zh variant=zh-cn
22310 !! wikitext
22311 <span>a-{b<div>c}-d
22312
22313 <span>a-{zh;zh-hans;zh-hant|b<div>c}-d
22314
22315 <span>a-{H|0=>zh-cn:x<span>y;0=>zh-tw:b<div>c}-d
22316 !! html/php+tidy
22317 <p><span>ab</span></p>
22318 <div><span>cd <span>ab</span></span>
22319 <div><span>cd <span>ad</span></span></div>
22320 </div>
22321 !! html/parsoid
22322 <p><span data-parsoid='{"stx":"html","autoInsertedEnd":true}'>a</span></p><div typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"b&lt;div data-parsoid=&#39;{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[10,16,5,0]}&#39;>c&lt;/div>"}}'></div><p>d</p>
22323
22324 <p><span data-parsoid='{"stx":"html","autoInsertedEnd":true}'>a</span></p><div typeof="mw:LanguageVariant" data-mw-variant='{"filter":{"l":["zh","zh-hans","zh-hant"],"t":"b&lt;div data-parsoid=&#39;{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[50,56,5,0]}&#39;>c&lt;/div>"}}'></div><p>d</p>
22325
22326 <p><span data-parsoid='{"stx":"html","autoInsertedEnd":true}'>a<meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"oneway":[{"f":"0","l":"zh-cn","t":"x&lt;span data-parsoid=&#39;{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[82,89,6,0]}&#39;>y&lt;/span>"},{"f":"0","l":"zh-tw","t":"b&lt;div data-parsoid=&#39;{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[100,106,5,0]}&#39;>c&lt;/div>"}]}'/>d</span></p>
22327 !! end
22328
22329 !! test
22330 LanguageConverter selser (1)
22331 !! options
22332 language=zh variant=zh-cn
22333 parsoid={
22334 "modes": ["wt2wt", "selser"],
22335 "changes": [
22336 ["span[typeof]", "attr", "data-mw-variant", "{\"disabled\":{\"t\":\"edited\"}}"]
22337 ]
22338 }
22339 !! wikitext
22340 -{raw}-
22341 !! wikitext/edited
22342 -{edited}-
22343 !! end
22344
22345 !! test
22346 LanguageConverter selser (2)
22347 !! options
22348 language=zh variant=zh-cn
22349 parsoid={
22350 "modes": ["wt2wt", "selser"],
22351 "changes": [
22352 ["span[class='x']", "contents", "text", "-{foo}-"],
22353 ["a", "contents", "text", "-{"],
22354 ["span[typeof]", "attr", "data-mw", "{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"-{\"}},\"i\":0}}]}"]
22355 ]
22356 }
22357 !! wikitext
22358 <span class="x">TEXT1</span>
22359 [http://example.com TEXT2]
22360 [[Foo|TEXT3]]
22361 {{echo|TEXT4}}
22362 !! wikitext/edited
22363 <span class="x"><nowiki>-{foo}-</nowiki></span>
22364 [http://example.com -{]
22365 [[Foo|<nowiki>-{</nowiki>]]
22366 {{1x|<nowiki>-{</nowiki>}}
22367 !! end
22368
22369 # Tests LanguageVariantText in ConstrainedText
22370 !! test
22371 LanguageConverter selser (3)
22372 !! options
22373 language=zh variant=zh-cn
22374 parsoid={
22375 "modes": ["wt2wt", "selser"],
22376 "changes": [
22377 ["td > span", "attr", "typeof", "mw:LanguageVariant"],
22378 ["td > span", "attr", "data-mw-variant", "{\"disabled\":{\"t\":\"edited\"}}"]
22379 ]
22380 }
22381 !! wikitext
22382 {|
22383 |-
22384 |<span>Foo</span>
22385 |}
22386 !! wikitext/edited
22387 {|
22388 |-
22389 |<nowiki/>-{edited}-
22390 |}
22391 !! end
22392
22393 # Tests LanguageVariantText._fromSelSer
22394 !! test
22395 LanguageConverter selser (4)
22396 !! options
22397 language=zh variant=zh-cn
22398 parsoid={
22399 "modes": ["wt2wt", "selser"],
22400 "changes": [
22401 ["td > span.x", "remove"]
22402 ]
22403 }
22404 !! wikitext
22405 {|
22406 |-
22407 |<span class="x">Foo</span>-{Bar}-
22408 ||<span class="x">Foo</span>-{Bar}-
22409 |}
22410 !! wikitext/edited
22411 {|
22412 |-
22413 |<nowiki/>-{Bar}-
22414 ||-{Bar}-
22415 |}
22416 !! end
22417
22418 # Since Parsoid is starting to emit canonical wikitext for links,
22419 # [http://example.com http://example.com] will not RT back to that
22420 # form anymore.
22421 # Parsoid does not language-convert links (it is done in a
22422 # post-processing step)
22423 !! test
22424 Proper conversion of text in external links
22425 !! options
22426 language=sr variant=sr-ec
22427 parsoid=wt2html
22428 !! wikitext
22429 http://www.google.com
22430 gopher://www.google.com
22431 [http://www.google.com http://www.google.com]
22432 [gopher://www.google.com gopher://www.google.com]
22433 [https://www.google.com irc://www.google.com]
22434 [ftp://www.google.com www.google.com/ftp://dir]
22435 [//www.google.com www.google.com]
22436 !! html/php
22437 <p><a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
22438 <a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
22439 <a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
22440 <a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
22441 <a rel="nofollow" class="external text" href="https://www.google.com">irc://www.google.com</a>
22442 <a rel="nofollow" class="external text" href="ftp://www.google.com">www.гоогле.цом/фтп://дир</a>
22443 <a rel="nofollow" class="external text" href="//www.google.com">www.гоогле.цом</a>
22444 </p>
22445 !! html/parsoid
22446 <p><a rel="mw:ExtLink" href="http://www.google.com">http://www.google.com</a>
22447 <a rel="mw:ExtLink" href="gopher://www.google.com">gopher://www.google.com</a>
22448 <a rel="mw:ExtLink" href="http://www.google.com">http://www.google.com</a>
22449 <a rel="mw:ExtLink" href="gopher://www.google.com">gopher://www.google.com</a>
22450 <a rel="mw:ExtLink" href="https://www.google.com">irc://www.google.com</a>
22451 <a rel="mw:ExtLink" href="ftp://www.google.com">www.google.com/ftp://dir</a>
22452 <a rel="mw:ExtLink" href="//www.google.com">www.google.com</a></p>
22453 !! end
22454
22455 !! test
22456 Do not convert roman numbers to language variants
22457 !! options
22458 language=sr variant=sr-ec
22459 !! wikitext
22460 Fridrih IV je car.
22461 !! html/php
22462 <p>Фридрих IV је цар.
22463 </p>
22464 !! html/parsoid
22465 <p>Fridrih IV je car.</p>
22466 !! end
22467
22468 !! test
22469 Unclosed language converter markup "-{"
22470 !! options
22471 language=sr
22472 !! wikitext
22473 -{T|hello
22474 !! html
22475 <p>-{T|hello
22476 </p>
22477 !! end
22478
22479 !! test
22480 Don't convert raw rule "-{R|=&gt;}-" to "=>"
22481 !! options
22482 language=sr
22483 !! wikitext
22484 -{R|=&gt;}-
22485 !! html/php
22486 <p>=&gt;
22487 </p>
22488 !! html/parsoid
22489 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"=&lt;span typeof=\"mw:Entity\" data-parsoid=&#39;{\"src\":\"&amp;amp;gt;\",\"srcContent\":\">\",\"dsr\":[5,9,null,null]}&#39;>>&lt;/span>"}}'></span></p>
22490 !!end
22491
22492 !! test
22493 Don't break link parsing if language converter markup is in the caption.
22494 !! options
22495 language=sr variant=sr-ec
22496 !! wikitext
22497 [[Main Page|-{R|main page}-]]
22498 !! html/php
22499 <p><a href="/wiki/Main_Page" title="Маин Паге">main page</a>
22500 </p>
22501 !! html/parsoid
22502 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page"><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"main page"}}' data-parsoid='{"fl":["R"]}'></span></a></p>
22503 !! end
22504
22505 !! test
22506 T146304: Don't break template parsing if language converter markup is in the parameter.
22507 !! options
22508 language=sr variant=sr-ec
22509 !! wikitext
22510 {{echo|-{R|foo}-}}
22511 !! html/php
22512 <p>foo
22513 </p>
22514 !! html/parsoid
22515 <p><span typeof="mw:Transclusion mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"foo"}}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Шаблон:Echo"},"params":{"1":{"wt":"-{R|foo}-"}},"i":0}}]}'></span></p>
22516 !! end
22517
22518 !! test
22519 T146305: Don't break image parsing if language converter markup is in the caption.
22520 !! options
22521 language=sr
22522 !! wikitext
22523 [[Датотека:Foobar.jpg|thumb|-{R|caption:}-]]
22524 !! html/php
22525 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/%D0%94%D0%B0%D1%82%D0%BE%D1%82%D0%B5%D0%BA%D0%B0:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/%D0%94%D0%B0%D1%82%D0%BE%D1%82%D0%B5%D0%BA%D0%B0:Foobar.jpg" class="internal" title="Повећај"></a></div>caption:</div></div></div>
22526
22527 !! html/parsoid
22528 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"}]}'><a href="./Датотека:Foobar.jpg"><img resource="./Датотека:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"caption:"}}' data-parsoid='{"fl":["R"]}'></span></figcaption></figure>
22529 !! end
22530
22531 !! test
22532 T146305: Don't break image parsing if nested language converter markup is in the caption.
22533 !! options
22534 language=zh variant=zh-cn
22535 !! wikitext
22536 [[File:Foobar.jpg|thumb|-{|zh-cn:blog (hk: -{zh-hans|WEBJOURNAL}-, tw: -{zh-hans|WEBLOG}-)}-]]
22537 !! html/php
22538 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="放大"></a></div>blog (hk: WEBJOURNAL, tw: WEBLOG)</div></div></div>
22539
22540 !! html/parsoid
22541 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"}]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><span typeof="mw:LanguageVariant" data-mw-variant='{"twoway":[{"l":"zh-cn","t":"blog (hk: &lt;span typeof=\"mw:LanguageVariant\" data-mw-variant=&#39;{\"filter\":{\"l\":[\"zh-hans\"],\"t\":\"WEBJOURNAL\"}}&#39; data-parsoid=&#39;{\"fl\":[\"zh-hans\"],\"dsr\":[43,65,null,2]}&#39;>&lt;/span>, tw: &lt;span typeof=\"mw:LanguageVariant\" data-mw-variant=&#39;{\"filter\":{\"l\":[\"zh-hans\"],\"t\":\"WEBLOG\"}}&#39; data-parsoid=&#39;{\"fl\":[\"zh-hans\"],\"dsr\":[71,89,null,2]}&#39;>&lt;/span>)"}]}'></span></figcaption></figure>
22542 !! end
22543
22544 # XXX html2wt disabled because rich markup in alt is not preserved.
22545 !! test
22546 Don't break gallery if language converter markup is inside.
22547 !! options
22548 language=zh
22549 !! wikitext
22550 <gallery>
22551 File:foobar.jpg|[[File:foobar.jpg|20px|desc|alt=-{R|foo}-|-{R|bar}-]]|alt=-{R|bat}-
22552 File:foobar.jpg|{{Test|unamedParam|alt=-{R|param}-}}|alt=galleryalt
22553 </gallery>
22554 !! html/php
22555 <ul class="gallery mw-gallery-traditional">
22556 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
22557 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="bat" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
22558 <div class="gallerytext">
22559 <p><a href="/wiki/File:Foobar.jpg" class="image" title="bar"><img alt="foo" src="http://example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" width="20" height="2" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/30px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/40px-Foobar.jpg 2x" /></a>
22560 </p>
22561 </div>
22562 </div></li>
22563 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
22564 <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
22565 <div class="gallerytext">
22566 <p>This is a test template
22567 </p>
22568 </div>
22569 </div></li>
22570 </ul>
22571
22572 !! html/parsoid
22573 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" data-mw='{"name":"gallery","attrs":{},"body":{"extsrc":"\nFile:foobar.jpg|[[File:foobar.jpg|20px|desc|alt=-{R|foo}-|-{R|bar}-]]|alt=-{R|bat}-\nFile:foobar.jpg|{{Test|unamedParam|alt=-{R|param}-}}|alt=galleryalt\n"}}'>
22574 <li class="gallerybox">
22575 <div class="thumb"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img alt="" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div>
22576 <div class="gallerytext"><span typeof="mw:Image" data-mw='{"caption":"&lt;span typeof=\"mw:LanguageVariant\" data-mw-variant=&#39;{\"disabled\":{\"t\":\"bar\"}}&#39; data-parsoid=&#39;{\"fl\":[\"R\"],\"dsr\":[68,77,null,2]}&#39;>&lt;/span>"}'><a href="./File:Foobar.jpg"><img alt="" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="2" width="20"/></a></span></div>
22577 </li>
22578 <li class="gallerybox">
22579 <div class="thumb"><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img alt="galleryalt" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div>
22580 <div class="gallerytext"><span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"Test","href":"./Template:Test"},"params":{"1":{"wt":"unamedParam"},"alt":{"wt":"-{R|param}-"}},"i":0}}]}'>This is a test template</span></div>
22581 </li>
22582 </ul>
22583 !! end
22584
22585 !! test
22586 T153135: Don't break list handling if language converter markup is in the item.
22587 !! options
22588 language=zh variant=zh-cn
22589 !! wikitext
22590 ;-{zh-cn:AAA;zh-tw:BBB}-
22591 ;-{R|foo:bar}-
22592 !! html/php
22593 <dl><dt>AAA</dt>
22594 <dt>foo:bar</dt></dl>
22595
22596 !! html/parsoid
22597 <dl><dt data-parsoid='{"dsr":[0,24,1,0]}'><span typeof="mw:LanguageVariant" data-parsoid='{"tSp":[6]}' data-mw-variant='{"twoway":[{"l":"zh-cn","t":"AAA"},{"l":"zh-tw","t":"BBB"}]}'></span></dt>
22598 <dt data-parsoid='{"dsr":[25,39,1,0]}'><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"foo:bar"}}'></span></dt>
22599 </dl>
22600 !! end
22601
22602 // Note that parsoid does not protect colons unless language converter
22603 // markup is properly nested, because it is a backtracking parser.
22604 !! test
22605 T153135: Unclosed markup in definition list (code coverage)
22606 !! options
22607 language=zh variant=zh-cn
22608 !! wikitext
22609 ;<b>foo:bar
22610 ;-{zh-cn:AAA
22611 !! html/php+tidy
22612 <dl>
22613 <dt><b>foo:bar</b></dt>
22614 <dt><b>-{zh-cn:AAA</b></dt>
22615 </dl>
22616 !! html/parsoid
22617 <dl><dt data-parsoid='{"dsr":[0,11,1,0]}'><b data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo:bar</b></dt><b data-parsoid='{"stx":"html","autoInsertedEnd":true,"autoInsertedStart":true}'>
22618 <dt data-parsoid='{"dsr":[12,20,1,0]}'>-{zh-cn</dt>
22619 <dd data-parsoid='{"stx":"row","dsr":[20,24,1,0]}'>AAA</dd>
22620 </b></dl>
22621 !! end
22622
22623 !! test
22624 T153135: Nested language converter markup in definition list (code coverage)
22625 !! options
22626 language=zh variant=zh-cn
22627 !! wikitext
22628 ;-{|zh-cn:AAA -{zh-hans|foo:bar}- -{R|bat:baz}-}-:def
22629 !! html/php
22630 <dl><dt>AAA foo:bar bat:baz</dt>
22631 <dd>def</dd></dl>
22632
22633 !! html/parsoid
22634 <dl><dt data-parsoid='{"dsr":[0,49,1,0]}'><span typeof="mw:LanguageVariant" data-mw-variant='{"twoway":[{"l":"zh-cn","t":"AAA &lt;span typeof=\"mw:LanguageVariant\" data-mw-variant=&#39;{\"filter\":{\"l\":[\"zh-hans\"],\"t\":\"foo:bar\"}}&#39; data-parsoid=&#39;{\"fl\":[\"zh-hans\"],\"dsr\":[14,33,null,2]}&#39;>&lt;/span> &lt;span typeof=\"mw:LanguageVariant\" data-mw-variant=&#39;{\"disabled\":{\"t\":\"bat:baz\"}}&#39; data-parsoid=&#39;{\"fl\":[\"R\"],\"dsr\":[34,47,null,2]}&#39;>&lt;/span>"}]}'></span></dt>
22635 <dd data-parsoid='{"stx":"row","dsr":[49,53,1,0]}'>def</dd>
22636 </dl>
22637 !! end
22638
22639 # html2wt mode disabled due to <nowiki> insertion.
22640 !! test
22641 T153140: Don't break table handling if language converter markup is in the cell.
22642 !! options
22643 language=sr variant=sr-ec
22644 parsoid=wt2html,wt2wt,html2html
22645 !! wikitext
22646 {|
22647 |-
22648 | -{R|B}-
22649 |}
22650 !! html/php
22651 <table>
22652
22653 <tr>
22654 <td> B
22655 </td></tr></table>
22656
22657 !! html/parsoid
22658 <table>
22659 <tbody>
22660 <tr>
22661 <td><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"B"}}'></span></td>
22662 </tr>
22663 </tbody>
22664 </table>
22665 !! end
22666
22667 !! test
22668 Language converter tricky html2wt cases (1)
22669 !! options
22670 language=sr
22671 parsoid=html2wt,wt2wt
22672 !! html/parsoid
22673 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"}-"}}'></span></p>
22674 !! wikitext
22675 -{<nowiki>}-</nowiki>}-
22676 !! html/php
22677 <p>&#125;-
22678 </p>
22679 !! end
22680
22681 !! test
22682 Language converter tricky html2wt cases (2)
22683 !! options
22684 language=sr
22685 parsoid=html2wt,wt2wt
22686 !! html/parsoid
22687 <p>-{foo}-</p>
22688 !! wikitext
22689 <nowiki>-{foo}-</nowiki>
22690 !! html/php
22691 <p>-&#123;foo&#125;-
22692 </p>
22693 !! end
22694
22695 !! test
22696 Language converter tricky html2wt cases (3)
22697 !! options
22698 language=sr
22699 parsoid=html2wt,wt2wt
22700 !! html/parsoid
22701 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"|"}}'></span></p>
22702 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"R|raw"}}'></span></p>
22703 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"-{foo}-"}}'></span></p>
22704 !! wikitext
22705 -{R||}-
22706
22707 -{R|R|raw}-
22708
22709 -{<nowiki>-{foo}-</nowiki>}-
22710 !! html/php
22711 <p>|
22712 </p><p>R|raw
22713 </p><p>-&#123;foo&#125;-
22714 </p>
22715 !! end
22716
22717 !! test
22718 Language converter tricky html2wt cases (4)
22719 !! options
22720 language=sr
22721 parsoid=html2wt,wt2wt
22722 !! html/parsoid
22723 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[2,14,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"hey\"}},\"i\":0}}]}&#39;>hey&lt;/span>"}}'></span></p>
22724 !! wikitext
22725 -{R|{{echo|hey}}}-
22726 !! html/php
22727 <p>hey
22728 </p>
22729 !! end
22730
22731 # Note that the <nowiki> escaping added by parsoid for source text,
22732 # destination text, and language names only works on the PHP side
22733 # for *destination text*. (HTML entity escaping wouldn't work
22734 # any better.) This is probably a bug, at least for source texts.
22735 # (For language names PHP uses a precise regexp based on the languages
22736 # it currently knows have variants, which is fragile since this set
22737 # can grow/shrink over time.)
22738 !! test
22739 Language converter tricky html2wt cases (5)
22740 !! options
22741 language=zh variant=zh-cn
22742 !! html/parsoid
22743 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"oneway":[{"f":"a:b=>c","l":"zh-cn","t":"x;foo=>zh-cn:boo"},{"f":"bar","l":"zh-cn","t":"bat;xyz=>zh-cn:abc"}]}'/>foobar</p>
22744 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"oneway":[{"f":"A","l":"bo:g;us","t":"B"}]}'/></p>
22745 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"zh-tw","t":"xyz"},{"l":"zh-cn","t":"0;zh-tw:bar"}]}'></span></p>
22746 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"twoway":[{"l":"bo:g;us","t":"xyz"},{"l":"zh-cn","t":"abc"}]}'></span></p>
22747 <p>a:b=>c xyz</p>
22748 !! wikitext
22749 -{H|<nowiki>a:b=>c</nowiki>=>zh-cn:<nowiki>x;foo=>zh-cn:boo</nowiki>;bar=>zh-cn:<nowiki>bat;xyz=>zh-cn:abc</nowiki>}-foobar
22750
22751 -{H|A=><nowiki>bo:g;us</nowiki>:B}-
22752
22753 -{A|zh-tw:xyz; zh-cn:<nowiki>0;zh-tw:bar</nowiki>}-
22754
22755 -{<nowiki>bo:g;us</nowiki>:xyz; zh-cn:abc}-
22756
22757 a:b=>c xyz
22758 !! html/php+disabled
22759 <p>foobat;xyz=&gt;zh-cn:abc
22760 </p><p>A
22761 </p><p>0;zh-tw:bar
22762 </p><p>abc
22763 </p><p>a:b=&gt;c 0;zh-tw:bar
22764 </p>
22765 !! end
22766
22767 !! test
22768 T179579: Nowiki and lc interaction
22769 !! options
22770 parsoid=wt2html
22771 language=sr
22772 !! wikitext
22773 -{</nowiki>123}-
22774
22775 -{123<nowiki>|</nowiki>456}-
22776 !! html/parsoid
22777 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"&amp;lt;/nowiki>123"}}' data-parsoid='{"fl":[],"src":"-{&lt;/nowiki>123}-"}'></span></p>
22778
22779 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"123&lt;span typeof=\"mw:Nowiki\" data-parsoid=&#39;{\"dsr\":[23,41,8,9]}&#39;>|&lt;/span>456"}}' data-parsoid='{"fl":[],"src":"-{123&lt;nowiki>|&lt;/nowiki>456}-"}'></span></p>
22780 !! end
22781
22782 !! test
22783 T2529: Uncovered bullet
22784 !! wikitext
22785 * Foo {{bullet}}
22786 !! html
22787 <ul><li> Foo </li>
22788 <li> Bar</li></ul>
22789
22790 !! end
22791
22792 # Plain MediaWiki does not remove empty lists, but tidy actually does.
22793 # Templates in Wikipedia rely on this behavior, as tidy has always been
22794 # enabled there. These tests are normally run *without* tidy, so specify the
22795 # full output here.
22796 # To test realistic parsing behavior, apply a tidy-like transformation to both
22797 # the expected output and your parser's output.
22798 !! test
22799 T2529: Uncovered bullet leaving empty list, normally removed by tidy
22800 !! wikitext
22801 ******* Foo {{bullet}}
22802 !! html
22803 <ul><li><ul><li><ul><li><ul><li><ul><li><ul><li><ul><li> Foo </li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li>
22804 <li> Bar</li></ul>
22805
22806 !! end
22807
22808 !! test
22809 T2529: Uncovered table already at line-start
22810 !! wikitext
22811 x
22812
22813 {{table}}
22814 y
22815 !! html
22816 <p>x
22817 </p>
22818 <table>
22819 <tr>
22820 <td> 1 </td>
22821 <td> 2
22822 </td></tr>
22823 <tr>
22824 <td> 3 </td>
22825 <td> 4
22826 </td></tr></table>
22827 <p>y
22828 </p>
22829 !! end
22830
22831 !! test
22832 T2529: Uncovered bullet in parser function result
22833 !! wikitext
22834 * Foo {{lc:{{bullet}} }}
22835 !! html
22836 <ul><li> Foo </li>
22837 <li> bar</li></ul>
22838
22839 !! end
22840
22841 !! test
22842 T7678: Double-parsed template argument
22843 !! wikitext
22844 {{lc:{{{1}}}|hello}}
22845 !! html
22846 <p>{{{1}}}
22847 </p>
22848 !! end
22849
22850 !! test
22851 T7678: Double-parsed template invocation
22852 !! wikitext
22853 {{lc:{{paramtest {{!}} param = hello }} }}
22854 !! html
22855 <p>{{paramtest | param = hello }}
22856 </p>
22857 !! end
22858
22859 !! test
22860 Case insensitivity of parser functions for non-ASCII characters (T10143)
22861 !! options
22862 language=cs
22863 title=[[Main Page]]
22864 !! wikitext
22865 {{PRVNÍVELKÉ:ěščř}}
22866 {{prvnívelké:ěščř}}
22867 {{PRVNÍMALÉ:ěščř}}
22868 {{prvnímalé:ěščř}}
22869 {{MALÁ:ěščř}}
22870 {{malá:ěščř}}
22871 {{VELKÁ:ěščř}}
22872 {{velká:ěščř}}
22873 !! html
22874 <p>Ěščř
22875 Ěščř
22876 ěščř
22877 ěščř
22878 ěščř
22879 ěščř
22880 ĚŠČŘ
22881 ĚŠČŘ
22882 </p>
22883 !! end
22884
22885 !! test
22886 Morwen/13: Unclosed link followed by heading
22887 !! wikitext
22888 [[link
22889 ==heading==
22890 !! html
22891 <p>[[link
22892 </p>
22893 <h2><span class="mw-headline" id="heading">heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: heading">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
22894
22895 !! end
22896
22897 !! test
22898 HHP2.1: Heuristics for headings in preprocessor parenthetical structures
22899 !! wikitext
22900 {{foo|
22901 =heading=
22902 !! html
22903 <p>{{foo|
22904 </p>
22905 <h1><span class="mw-headline" id="heading">heading</span></h1>
22906
22907 !! end
22908
22909 !! test
22910 HHP2.2: Heuristics for headings in preprocessor parenthetical structures
22911 !! wikitext
22912 {{foo|
22913 ==heading==
22914 !! html
22915 <p>{{foo|
22916 </p>
22917 <h2><span class="mw-headline" id="heading">heading</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: heading">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
22918
22919 !! end
22920
22921 !! test
22922 Tildes in comments
22923 !! options
22924 pst
22925 !! wikitext
22926 <!-- ~~~~ -->
22927 !! html/php
22928 <!-- ~~~~ -->
22929 !! end
22930
22931 !! test
22932 Paragraphs inside divs (no extra line breaks)
22933 !! wikitext
22934 <div>Line one
22935
22936 Line two</div>
22937 !! html
22938 <div>Line one
22939 Line two</div>
22940
22941 !! end
22942
22943 !! test
22944 Paragraphs inside divs (extra line break on open)
22945 !! wikitext
22946 <div>
22947 Line one
22948
22949 Line two</div>
22950 !! html
22951 <div>
22952 <p>Line one
22953 </p>
22954 Line two</div>
22955
22956 !! end
22957
22958 !! test
22959 Paragraphs inside divs (extra line break on close)
22960 !! wikitext
22961 <div>Line one
22962
22963 Line two
22964 </div>
22965 !! html
22966 <div>Line one
22967 <p>Line two
22968 </p>
22969 </div>
22970
22971 !! end
22972
22973 !! test
22974 Paragraphs inside divs (extra line break on open and close)
22975 !! wikitext
22976 <div>
22977 Line one
22978
22979 Line two
22980 </div>
22981 !! html
22982 <div>
22983 <p>Line one
22984 </p><p>Line two
22985 </p>
22986 </div>
22987
22988 !! end
22989
22990 !! test
22991 Nesting tags, paragraphs on lines which begin with <div>
22992 !! wikitext
22993 <div></div><strong>A
22994 B</strong>
22995 !! html/php+tidy
22996 <p><strong>A</strong></p>
22997 <p><strong>B</strong></p>
22998 !! html/parsoid
22999 <div></div>
23000 <p><strong>A
23001 B</strong>
23002 </p>
23003 !! end
23004
23005 # T8200: <blockquote> should behave like <div> with respect to line breaks
23006 !! test
23007 T8200: paragraphs inside blockquotes (no extra line breaks)
23008 !! wikitext
23009 <blockquote>Line one
23010
23011 Line two</blockquote>
23012 !! html
23013 <blockquote>Line one
23014 Line two</blockquote>
23015
23016 !! html+tidy
23017 <blockquote>
23018 <p>Line one Line two</p>
23019 </blockquote>
23020 !! end
23021
23022 !! test
23023 T8200: paragraphs inside blockquotes (extra line break on open)
23024 !! wikitext
23025 <blockquote>
23026 Line one
23027
23028 Line two</blockquote>
23029 !! html
23030 <blockquote>
23031 <p>Line one
23032 </p>
23033 Line two</blockquote>
23034
23035 !! html+tidy
23036 <blockquote>
23037 <p>Line one</p>
23038 Line two</blockquote>
23039 !! end
23040
23041 !! test
23042 T8200: paragraphs inside blockquotes (extra line break on close)
23043 !! wikitext
23044 <blockquote>Line one
23045
23046 Line two
23047 </blockquote>
23048 !! html
23049 <blockquote>Line one
23050 <p>Line two
23051 </p>
23052 </blockquote>
23053
23054 !! html+tidy
23055 <blockquote>
23056 <p>Line one</p>
23057 <p>Line two</p>
23058 </blockquote>
23059 !! end
23060
23061 !! test
23062 T8200: paragraphs inside blockquotes (extra line break on open and close)
23063 !! wikitext
23064 <blockquote>
23065 Line one
23066
23067 Line two
23068 </blockquote>
23069 !! html
23070 <blockquote>
23071 <p>Line one
23072 </p><p>Line two
23073 </p>
23074 </blockquote>
23075
23076 !! html+tidy
23077 <blockquote>
23078 <p>Line one</p>
23079 <p>Line two</p>
23080 </blockquote>
23081 !! end
23082
23083 !! test
23084 Paragraphs inside blockquotes/divs (no extra line breaks)
23085 !! wikitext
23086 <blockquote><div>Line one
23087
23088 Line two</div></blockquote>
23089 !! html
23090 <blockquote><div>Line one
23091 Line two</div></blockquote>
23092
23093 !! end
23094
23095 !! test
23096 Paragraphs inside blockquotes/divs (extra line break on open)
23097 !! wikitext
23098 <blockquote><div>
23099 Line one
23100
23101 Line two</div></blockquote>
23102 !! html
23103 <blockquote><div>
23104 <p>Line one
23105 </p>
23106 Line two</div></blockquote>
23107
23108 !! end
23109
23110 !! test
23111 Paragraphs inside blockquotes/divs (extra line break on close)
23112 !! wikitext
23113 <blockquote><div>Line one
23114
23115 Line two
23116 </div></blockquote>
23117 !! html
23118 <blockquote><div>Line one
23119 <p>Line two
23120 </p>
23121 </div></blockquote>
23122
23123 !! end
23124
23125 !! test
23126 Paragraphs inside blockquotes/divs (extra line break on open and close)
23127 !! wikitext
23128 <blockquote><div>
23129 Line one
23130
23131 Line two
23132 </div></blockquote>
23133 !! html
23134 <blockquote><div>
23135 <p>Line one
23136 </p><p>Line two
23137 </p>
23138 </div></blockquote>
23139
23140 !! end
23141
23142 !! test
23143 Interwiki links trounced by replaceExternalLinks after early LinkHolderArray expansion
23144 !! options
23145 wgLinkHolderBatchSize=0
23146 !! wikitext
23147 [[meatball:1]]
23148 [[meatball:2]]
23149 [[meatball:3]]
23150 !! html
23151 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?1" class="extiw" title="meatball:1">meatball:1</a>
23152 <a href="http://www.usemod.com/cgi-bin/mb.pl?2" class="extiw" title="meatball:2">meatball:2</a>
23153 <a href="http://www.usemod.com/cgi-bin/mb.pl?3" class="extiw" title="meatball:3">meatball:3</a>
23154 </p>
23155 !! end
23156
23157 !! test
23158 Free external link invading image caption
23159 !! wikitext
23160 [[Image:Foobar.jpg|thumb|http://x|hello]]
23161 !! html
23162 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>hello</div></div></div>
23163
23164 !! end
23165
23166 !! test
23167 T17196: localised external link numbers
23168 !! options
23169 language=fa
23170 !! wikitext
23171 [http://en.wikipedia.org/]
23172 !! html/php
23173 <p><a rel="nofollow" class="external autonumber" href="http://en.wikipedia.org/">[۱]</a>
23174 </p>
23175 !! html/parsoid
23176 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/"></a></p>
23177 !! end
23178
23179 !! test
23180 Multibyte character in padleft
23181 !! wikitext
23182 {{padleft:-Hello|7|Æ}}
23183 !! html
23184 <p>Æ-Hello
23185 </p>
23186 !! end
23187
23188 !! test
23189 Multibyte character in padright
23190 !! wikitext
23191 {{padright:Hello-|7|Æ}}
23192 !! html
23193 <p>Hello-Æ
23194 </p>
23195 !! end
23196
23197 !!test
23198 formatdate parser function
23199 !! wikitext
23200 {{#formatdate:2009-03-24}}
23201 !! html
23202 <p><span class="mw-formatted-date" title="2009-03-24">2009-03-24</span>
23203 </p>
23204 !! end
23205
23206 !!test
23207 formatdate parser function, with default format
23208 !! wikitext
23209 {{#formatdate:2009-03-24|mdy}}
23210 !! html
23211 <p><span class="mw-formatted-date" title="2009-03-24">March 24, 2009</span>
23212 </p>
23213 !! end
23214
23215 !! test
23216 Spacing of numbers in formatted dates
23217 !! wikitext
23218 {{#formatdate:January 15}}
23219 !! html
23220 <p><span class="mw-formatted-date" title="01-15">January 15</span>
23221 </p>
23222 !! end
23223
23224 !! test
23225 formatdate parser function, with default format and on a page of which the content language is always English and different from the wiki content language
23226 !! options
23227 language=nl title=[[MediaWiki:Common.css]]
23228 !! wikitext
23229 {{#formatdate:2009-03-24|dmy}}
23230 !! html
23231 <p><span class="mw-formatted-date" title="2009-03-24">24 March 2009</span>
23232 </p>
23233 !! end
23234
23235 #
23236 #
23237 #
23238
23239 #
23240 # Edit comments
23241 #
23242
23243 !! test
23244 Edit comment with link
23245 !! options
23246 comment
23247 !! wikitext
23248 I like the [[Main Page]] a lot
23249 !! html/php
23250 I like the <a href="/wiki/Main_Page" title="Main Page">Main Page</a> a lot
23251 !!end
23252
23253 !! test
23254 Edit comment with link and link text
23255 !! options
23256 comment
23257 !! wikitext
23258 I like the [[Main Page|best pages]] a lot
23259 !! html/php
23260 I like the <a href="/wiki/Main_Page" title="Main Page">best pages</a> a lot
23261 !!end
23262
23263 !! test
23264 Edit comment with link and link text with suffix
23265 !! options
23266 comment
23267 !! wikitext
23268 I like the [[Main Page|best page]]s a lot
23269 !! html/php
23270 I like the <a href="/wiki/Main_Page" title="Main Page">best pages</a> a lot
23271 !!end
23272
23273 !! test
23274 Edit comment with section link (non-local, eg in history list)
23275 !! options
23276 comment title=[[Main Page]]
23277 !! wikitext
23278 /* External links */ removed bogus entries
23279 !! html/php
23280 <a href="/wiki/Main_Page#External_links" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
23281 !!end
23282
23283 !! test
23284 Edit comment with section link and text before it (non-local, eg in history list)
23285 !! options
23286 comment title=[[Main Page]]
23287 !! wikitext
23288 pre-comment text /* External links */ removed bogus entries
23289 !! html/php
23290 pre-comment text <a href="/wiki/Main_Page#External_links" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
23291 !!end
23292
23293 !! test
23294 Edit comment with section link (local, eg in diff view)
23295 !! options
23296 comment local title=[[Main Page]]
23297 !! wikitext
23298 /* External links */ removed bogus entries
23299 !! html/php
23300 <a href="#External_links">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
23301 !!end
23302
23303 !! test
23304 Edit comment with subpage link (T16080)
23305 !! options
23306 comment
23307 subpage
23308 title=[[Subpage test]]
23309 !! wikitext
23310 Poked at a [[/subpage]] here...
23311 !! html/php
23312 Poked at a <a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">/subpage</a> here...
23313 !!end
23314
23315 !! test
23316 Edit comment with subpage link and link text (T16080)
23317 !! options
23318 comment
23319 subpage
23320 title=[[Subpage test]]
23321 !! wikitext
23322 Poked at a [[/subpage|neat little page]] here...
23323 !! html/php
23324 Poked at a <a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">neat little page</a> here...
23325 !!end
23326
23327 !! test
23328 Edit comment with bogus subpage link in non-subpage NS (T16080)
23329 !! options
23330 comment
23331 title=[[Subpage test]]
23332 !! wikitext
23333 Poked at a [[/subpage]] here...
23334 !! html/php
23335 Poked at a <a href="/index.php?title=/subpage&amp;action=edit&amp;redlink=1" class="new" title="/subpage (page does not exist)">/subpage</a> here...
23336 !!end
23337
23338 !! test
23339 Edit comment with bare anchor link (local, as on diff)
23340 !! options
23341 comment
23342 local
23343 title=[[Main Page]]
23344 !! wikitext
23345 [[#section]]
23346 !! html/php
23347 <a href="#section">#section</a>
23348 !! end
23349
23350 !! test
23351 Edit comment with bare anchor link (non-local, as on history)
23352 !! options
23353 comment
23354 title=[[Main Page]]
23355 !! wikitext
23356 [[#section]]
23357 !! html/php
23358 <a href="/wiki/Main_Page#section" title="Main Page">#section</a>
23359 !! end
23360
23361 !! test
23362 Anchor starting with underscore
23363 !! options
23364 title=[[Foo]]
23365 !! wikitext
23366 [[#_ref|One]]
23367 !! html/php
23368 <p><a href="#_ref">One</a>
23369 </p>
23370 !! html/parsoid
23371 <p><a rel="mw:WikiLink" href="./Foo#_ref" data-parsoid='{"stx":"piped","a":{"href":"./Foo#_ref"},"sa":{"href":"#_ref"}}'>One</a></p>
23372 !! end
23373
23374 !! test
23375 Id starting with underscore
23376 !! wikitext
23377 <div id="_ref"></div>
23378 !! html/*
23379 <div id="_ref"></div>
23380
23381 !! end
23382
23383 !! test
23384 Edit comment with link with more than one pipe (T99346)
23385 !! options
23386 comment
23387 !! wikitext
23388 [[Main Page|Many|pipes]]
23389 !! html/php
23390 <a href="/wiki/Main_Page" title="Main Page">Many|pipes</a>
23391 !! end
23392
23393 !! test
23394 Complex edit comment with link with more than one pipe (T99346)
23395 !! options
23396 comment
23397 !! wikitext
23398 Created page with "<noinclude>[[Category:Requests for permissions/Bot|{{subst:#titleparts:{{subst:PAGENAME}}|1|3}}]]</noinclude> === [[User:MineoBot|]] 8=== {{Request for permissions/links|Mineo..."
23399 !! html/php
23400 Created page with &quot;&lt;noinclude&gt;<a href="/index.php?title=Category:Requests_for_permissions/Bot&amp;action=edit&amp;redlink=1" class="new" title="Category:Requests for permissions/Bot (page does not exist)">{{subst:#titleparts:{{subst:PAGENAME}}|1|3}}</a>&lt;/noinclude&gt; === <a href="/index.php?title=User:MineoBot&amp;action=edit&amp;redlink=1" class="new" title="User:MineoBot (page does not exist)">User:MineoBot</a> 8=== {{Request for permissions/links|Mineo...&quot;
23401 !! end
23402
23403 !! test
23404 Space normalisation on autocomment (T24784)
23405 !! options
23406 comment
23407 title=[[Main Page]]
23408 !! wikitext
23409 /* __hello__world__ */
23410 !! html/php
23411 <a href="/wiki/Main_Page#hello_world" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">__hello__world__</span></span>
23412 !! end
23413
23414 !! test
23415 percent-encoding and + signs in comments (T28410)
23416 !! options
23417 comment
23418 !! wikitext
23419 [[ABC%33D% ++]] [[ABC%33D% ++|+%20]]
23420 !! html/php
23421 <a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">ABC3D% ++</a> <a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">+%20</a>
23422 !! end
23423
23424 # Parsoid doesn't support this yet: see T75581
23425 # but it *should* omit the 'src' attribute if the image is bad.
23426 # PHP side of tests was disabled in
23427 # mediawiki/core:6bd31e7d95161a6e88fa86df60871051da997c3c
23428 # because of issues in the PHP parserTests infrastructure
23429 # (but the output below is indeed what the PHP side emits)
23430 !! test
23431 Bad images - basic functionality
23432 !! wikitext
23433 [[File:Bad.jpg]]
23434 !! DISABLED/html/php
23435 !! html/parsoid
23436 <p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"bad-image","message":"This image is blacklisted in this context."}]}'><a href="./File:Bad.jpg"><img resource="./File:Bad.jpg" height="220" width="220"/></a></span></p>
23437 !! end
23438
23439 !! test
23440 Bad images - T18039: text after bad image disappears
23441 !! wikitext
23442 Foo bar
23443 [[File:Bad.jpg]]
23444 Bar foo
23445 !! DISABLED/html/php
23446 <p>Foo bar
23447 </p><p>Bar foo
23448 </p>
23449 !! html/parsoid
23450 <p>Foo bar
23451 <span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"bad-image","message":"This image is blacklisted in this context."}]}'><a href="./File:Bad.jpg"><img resource="./File:Bad.jpg" height="220" width="220"/></a></span>
23452 Bar foo</p>
23453 !! end
23454
23455 !! test
23456 Verify that displaytitle works (T24501) no displaytitle
23457 !! options
23458 showtitle
23459 !! config
23460 wgAllowDisplayTitle=true
23461 wgRestrictDisplayTitle=false
23462 !! wikitext
23463 this is not the the title
23464 !! html/php
23465 Parser test
23466 <p>this is not the the title
23467 </p>
23468 !! end
23469
23470 !! test
23471 Verify that displaytitle works (T24501) RestrictDisplayTitle=false
23472 !! options
23473 showtitle
23474 title=[[Screen]]
23475 !! config
23476 wgAllowDisplayTitle=true
23477 wgRestrictDisplayTitle=false
23478 !! wikitext
23479 this is not the the title
23480 {{DISPLAYTITLE:whatever}}
23481 !! html/php
23482 whatever
23483 <p>this is not the the title
23484 </p>
23485 !! end
23486
23487 !! test
23488 Verify that displaytitle works (T24501) RestrictDisplayTitle=true mismatch
23489 !! options
23490 showtitle
23491 title=[[Screen]]
23492 !! config
23493 wgAllowDisplayTitle=true
23494 wgRestrictDisplayTitle=true
23495 !! wikitext
23496 this is not the the title
23497 {{DISPLAYTITLE:whatever}}
23498 !! html/php
23499 Screen
23500 <p>this is not the the title
23501 </p>
23502 !! end
23503
23504 !! test
23505 Verify that displaytitle works (T24501) RestrictDisplayTitle=true matching
23506 !! options
23507 showtitle
23508 title=[[Screen]]
23509 !! config
23510 wgAllowDisplayTitle=true
23511 wgRestrictDisplayTitle=true
23512 !! wikitext
23513 this is not the the title
23514 {{DISPLAYTITLE:screen}}
23515 !! html/php
23516 screen
23517 <p>this is not the the title
23518 </p>
23519 !! end
23520
23521 !! test
23522 Verify that displaytitle works (T24501) AllowDisplayTitle=false
23523 !! options
23524 showtitle
23525 title=[[Screen]]
23526 !! config
23527 wgAllowDisplayTitle=false
23528 !! wikitext
23529 this is not the the title
23530 {{DISPLAYTITLE:screen}}
23531 !! html/php
23532 Screen
23533 <p>this is not the the title
23534 <a href="/index.php?title=Template:DISPLAYTITLE:screen&amp;action=edit&amp;redlink=1" class="new" title="Template:DISPLAYTITLE:screen (page does not exist)">Template:DISPLAYTITLE:screen</a>
23535 </p>
23536 !! end
23537
23538 !! test
23539 Verify that displaytitle works (T24501) AllowDisplayTitle=false no DISPLAYTITLE
23540 !! options
23541 showtitle
23542 title=[[Screen]]
23543 !! config
23544 wgAllowDisplayTitle=false
23545 !! wikitext
23546 this is not the the title
23547 !! html/php
23548 Screen
23549 <p>this is not the the title
23550 </p>
23551 !! end
23552
23553 !! test
23554 Verify that displaytitle handles inline CSS styles (T28547) - rejected value
23555 !! options
23556 showtitle
23557 title=[[Screen]]
23558 !! config
23559 wgAllowDisplayTitle=true
23560 wgRestrictDisplayTitle=true
23561 !! wikitext
23562 this is not the the title
23563 {{DISPLAYTITLE:<span style="display: none;">s</span>creen}}
23564 !! html/php
23565 <span style="/* attempt to bypass $wgRestrictDisplayTitle */">s</span>creen
23566 <p>this is not the the title
23567 </p>
23568 !! end
23569
23570 !! test
23571 Verify that displaytitle handles inline CSS styles (T28547) - accepted value
23572 !! options
23573 showtitle
23574 title=[[Screen]]
23575 !! config
23576 wgAllowDisplayTitle=true
23577 wgRestrictDisplayTitle=true
23578 !! wikitext
23579 this is not the the title
23580 {{DISPLAYTITLE:<span style="color: red;">s</span>creen}}
23581 !! html/php
23582 <span style="color: red;">s</span>creen
23583 <p>this is not the the title
23584 </p>
23585 !! end
23586
23587 !! test
23588 Page status indicators: Empty name is invalid
23589 !! options
23590 showindicators
23591 !! wikitext
23592 <indicator name=" "></indicator>
23593 <indicator></indicator>
23594 !! html/php
23595 <p><span class="error"><strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.</span>
23596 <span class="error"><strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.</span>
23597 </p>
23598 !! end
23599
23600 !! test
23601 Page status indicators: Weird syntaxes that are okay
23602 !! options
23603 showindicators
23604 !! wikitext
23605 <indicator name="empty" />
23606 <indicator name="name"></indicator>
23607 !! html/php
23608 empty=
23609 name=
23610 <p><br />
23611 </p>
23612 !! end
23613
23614 !! test
23615 Page status indicators: Torture test
23616 !! options
23617 showindicators
23618 !! wikitext
23619 <indicator name="01">hello world</indicator>
23620 <indicator name="02">[[Main Page]]</indicator>
23621 <indicator name="03">[[File:Foobar.jpg|25px|link=]]</indicator>
23622 <indicator name="04">[[File:Foobar.jpg|25px]]</indicator>
23623 <indicator name="05">* foo
23624 * bar</indicator>
23625 <indicator name="06"><nowiki>foo</nowiki></indicator>
23626 <indicator name="07"> Preformatted</indicator>
23627 <indicator name="08"><div>Broken tag</indicator>
23628 <indicator name="09">{| class=wikitable
23629 | cell
23630 |}</indicator>
23631 <indicator name="10">Two
23632
23633 paragraphs</indicator>
23634 !! html/php
23635 01=hello world
23636 02=<a href="/wiki/Main_Page" title="Main Page">Main Page</a>
23637 03=<img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/25px-Foobar.jpg" width="25" height="3" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/38px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg 2x" />
23638 04=<a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/25px-Foobar.jpg" width="25" height="3" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/38px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg 2x" /></a>
23639 05=<ul><li> foo</li>
23640 <li> bar</li></ul>
23641
23642 06=foo
23643 07=<pre>Preformatted
23644 </pre>
23645 08=<div>Broken tag</div>
23646
23647 09=<table class="wikitable">
23648 <tr>
23649 <td> cell
23650 </td></tr></table>
23651
23652 10=<p>Two
23653 </p><p>paragraphs
23654 </p>
23655 <p><br />
23656 </p><p><br />
23657 </p><p><br />
23658 </p><p><br />
23659 </p><p><br />
23660 </p>
23661 !! end
23662
23663 !! test
23664 preload: check <noinclude> and <includeonly>
23665 !! options
23666 preload
23667 !! wikitext
23668 Hello <noinclude>cruel</noinclude><includeonly>kind</includeonly> world.
23669 !! html/php
23670 Hello kind world.
23671 !! end
23672
23673 !! test
23674 preload: check <onlyinclude>
23675 !! options
23676 preload
23677 !! wikitext
23678 Goodbye <onlyinclude>Hello world</onlyinclude>
23679 !! html/php
23680 Hello world
23681 !! end
23682
23683 !! test
23684 preload: can pass tags through if we want to
23685 !! options
23686 preload
23687 !! wikitext
23688 <includeonly><</includeonly>includeonly>Hello world<includeonly><</includeonly>/includeonly>
23689 !! html/php
23690 <includeonly>Hello world</includeonly>
23691 !! end
23692
23693 !! test
23694 preload: check that it doesn't try to do tricks
23695 !! options
23696 preload
23697 !! wikitext
23698 * <!-- Hello --> ''{{world}}'' {{<includeonly>subst:</includeonly>How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
23699 !! html/php
23700 * <!-- Hello --> ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
23701 !! end
23702
23703 !! test
23704 Play a bit with r67090 and T5158
23705 !! wikitext
23706 <div style="width:50% !important">&nbsp;</div>
23707 <div style="width:50%&nbsp;!important">&nbsp;</div>
23708 <div style="width:50%&#160;!important">&nbsp;</div>
23709 <div style="border : solid;">&nbsp;</div>
23710 !! html/php
23711 <div style="width:50% !important">&#160;</div>
23712 <div style="width:50% !important">&#160;</div>
23713 <div style="width:50% !important">&#160;</div>
23714 <div style="border&#160;: solid;">&#160;</div>
23715
23716 !! html/parsoid
23717 <div style="width:50% !important" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
23718 <div style="width:50% !important" data-parsoid='{"stx":"html","a":{"style":"width:50% !important"},"sa":{"style":"width:50%&amp;nbsp;!important"}}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
23719 <div style="width:50% !important" data-parsoid='{"stx":"html","a":{"style":"width:50% !important"},"sa":{"style":"width:50%&amp;#160;!important"}}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
23720 <div style="border : solid;" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
23721
23722 !! end
23723
23724 !! test
23725 HTML5 data attributes
23726 !! wikitext
23727 <span data-foo="bar">Baz</span>
23728 <p data-abc-def_hij="">Quuz</p>
23729 !! html/php
23730 <p><span data-foo="bar">Baz</span>
23731 </p>
23732 <p data-abc-def_hij="">Quuz</p>
23733
23734 !! html/parsoid
23735 <p><span data-foo="bar" data-parsoid='{"stx":"html"}'>Baz</span></p>
23736 <p data-abc-def_hij="" data-parsoid='{"stx":"html"}'>Quuz</p>
23737 !! end
23738
23739 !! test
23740 Strip reserved data attributes
23741 !! wikitext
23742 <div data-mw="foo" data-parsoid="bar" data-mw-someext="baz" data-ok="fred" data-ooui="xyzzy" data-bad:ns="ns">d</div>
23743 !! html/php
23744 <div data-ok="fred">d</div>
23745
23746 !! html/parsoid
23747 <div data-x-data-mw="foo" data-x-data-parsoid="bar" data-x-data-mw-someext="baz" data-ok="fred" data-parsoid='{"stx":"html","a":{"data-ooui":null,"data-bad:ns":null},"sa":{"data-ooui":"xyzzy","data-bad:ns":"ns"}}'>d</div>
23748 !! end
23749
23750 !! test
23751 percent-encoding and + signs in internal links (T28410)
23752 !! wikitext
23753 [[User:+%]] [[Page+title%]]
23754 [[%+]] [[%+|%20]] [[%+ ]] [[%+r]]
23755 [[%]] [[+]] [[File:%+abc%39|foo|[[bar]]]]
23756 [[%33%45]] [[%33%45+]]
23757 !! html/php
23758 <p><a href="/index.php?title=User:%2B%25&amp;action=edit&amp;redlink=1" class="new" title="User:+% (page does not exist)">User:+%</a> <a href="/index.php?title=Page%2Btitle%25&amp;action=edit&amp;redlink=1" class="new" title="Page+title% (page does not exist)">Page+title%</a>
23759 <a href="/index.php?title=%25%2B&amp;action=edit&amp;redlink=1" class="new" title="%+ (page does not exist)">%+</a> <a href="/index.php?title=%25%2B&amp;action=edit&amp;redlink=1" class="new" title="%+ (page does not exist)">%20</a> <a href="/index.php?title=%25%2B&amp;action=edit&amp;redlink=1" class="new" title="%+ (page does not exist)">%+ </a> <a href="/index.php?title=%25%2Br&amp;action=edit&amp;redlink=1" class="new" title="%+r (page does not exist)">%+r</a>
23760 <a href="/index.php?title=%25&amp;action=edit&amp;redlink=1" class="new" title="% (page does not exist)">%</a> <a href="/index.php?title=%2B&amp;action=edit&amp;redlink=1" class="new" title="+ (page does not exist)">+</a> <a href="/index.php?title=Special:Upload&amp;wpDestFile=%25%2Babc9" class="new" title="File:%+abc9">bar</a>
23761 <a href="/index.php?title=3E&amp;action=edit&amp;redlink=1" class="new" title="3E (page does not exist)">3E</a> <a href="/index.php?title=3E%2B&amp;action=edit&amp;redlink=1" class="new" title="3E+ (page does not exist)">3E+</a>
23762 </p>
23763 !! html/parsoid
23764 <p><a rel="mw:WikiLink" href="./User:+%25" title="User:+%" data-parsoid='{"stx":"simple","a":{"href":"./User:+%25"},"sa":{"href":"User:+%"}}'>User:+%</a> <a rel="mw:WikiLink" href="./Page+title%25" title="Page+title%" data-parsoid='{"stx":"simple","a":{"href":"./Page+title%25"},"sa":{"href":"Page+title%"}}'>Page+title%</a>
23765 <a rel="mw:WikiLink" href="./%25+" title="%+" data-parsoid='{"stx":"simple","a":{"href":"./%25+"},"sa":{"href":"%+"}}'>%+</a> <a rel="mw:WikiLink" href="./%25+" title="%+" data-parsoid='{"stx":"piped","a":{"href":"./%25+"},"sa":{"href":"%+"}}'>%20</a> <a rel="mw:WikiLink" href="./%25+" title="%+" data-parsoid='{"stx":"simple","a":{"href":"./%25+"},"sa":{"href":"%+ "}}'>%+ </a> <a rel="mw:WikiLink" href="./%25+r" title="%+r" data-parsoid='{"stx":"simple","a":{"href":"./%25+r"},"sa":{"href":"%+r"}}'>%+r</a>
23766 <a rel="mw:WikiLink" href="./%25" title="%" data-parsoid='{"stx":"simple","a":{"href":"./%25"},"sa":{"href":"%"}}'>%</a> <a rel="mw:WikiLink" href="./+" title="+" data-parsoid='{"stx":"simple","a":{"href":"./+"},"sa":{"href":"+"}}'>+</a> <span class="mw-default-size" typeof="mw:Error mw:Image" data-parsoid='{"optList":[{"ck":"bogus","ak":"foo"},{"ck":"caption","ak":"[[bar]]"}]}' data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}],"caption":"&lt;a rel=\"mw:WikiLink\" href=\"./Bar\" title=\"Bar\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Bar\"},\"sa\":{\"href\":\"bar\"},\"dsr\":[94,101,2,2]}&#39;>bar&lt;/a>"}'><a href="./File:%25+abc9" data-parsoid='{"a":{"href":"./File:%25+abc9"},"sa":{}}'><img resource="./File:%25+abc9" src="./Special:FilePath/%25+abc9" height="220" width="220" data-parsoid='{"a":{"resource":"./File:%25+abc9","height":"220","width":"220"},"sa":{"resource":"File:%+abc%39"}}'/></a></span>
23767 <a rel="mw:WikiLink" href="./3E" title="3E" data-parsoid='{"stx":"simple","a":{"href":"./3E"},"sa":{"href":"%33%45"}}'>3E</a> <a rel="mw:WikiLink" href="./3E+" title="3E+" data-parsoid='{"stx":"simple","a":{"href":"./3E+"},"sa":{"href":"%33%45+"}}'>3E+</a></p>
23768 !! end
23769
23770 !! test
23771 Special characters in embedded file links (T29679)
23772 !! wikitext
23773 [[File:Contains & ampersand.jpg]]
23774 [[File:Does not exist.jpg|Title with & ampersand]]
23775 !! html/php
23776 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Contains_%26_ampersand.jpg" class="new" title="File:Contains &amp; ampersand.jpg">File:Contains &amp; ampersand.jpg</a>
23777 <a href="/index.php?title=Special:Upload&amp;wpDestFile=Does_not_exist.jpg" class="new" title="File:Does not exist.jpg">Title with &amp; ampersand</a>
23778 </p>
23779 !! html/parsoid
23780 <p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}]}'><a href="./File:Contains_&amp;_ampersand.jpg"><img resource="./File:Contains_&amp;_ampersand.jpg" src="./Special:FilePath/Contains_&amp;_ampersand.jpg" height="220" width="220"/></a></span>
23781 <span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"apierror-filedoesnotexist","message":"This image does not exist."}],"caption":"Title with &amp;amp; ampersand"}'><a href="./File:Does_not_exist.jpg"><img resource="./File:Does_not_exist.jpg" src="./Special:FilePath/Does_not_exist.jpg" height="220" width="220"/></a></span></p>
23782 !! end
23783
23784 !! test
23785 Confirm that 'apos' named character reference doesn't make it to output (not legal in HTML 4)
23786 !! wikitext
23787 Text&apos;s been normalized?
23788 !! html
23789 <p>Text&#39;s been normalized?
23790 </p>
23791 !! end
23792
23793 !! test
23794 T21052 U+3000 IDEOGRAPHIC SPACE should terminate free external links
23795 !! wikitext
23796 http://www.example.org/ <-- U+3000 (vim: ^Vu3000)
23797 !! html
23798 <p><a rel="nofollow" class="external free" href="http://www.example.org/">http://www.example.org/</a> &lt;-- U+3000 (vim: ^Vu3000)
23799 </p>
23800 !! end
23801
23802 !! test
23803 T21052 U+3000 IDEOGRAPHIC SPACE should terminate bracketed external links
23804 !! wikitext
23805 [http://www.example.org/ ideograms]
23806 !! html
23807 <p><a rel="nofollow" class="external text" href="http://www.example.org/">ideograms</a>
23808 </p>
23809 !! end
23810
23811 !! test
23812 T21052 U+3000 IDEOGRAPHIC SPACE should terminate external images links
23813 !! wikitext
23814 http://www.example.org/pic.png <-- U+3000 (vim: ^Vu3000)
23815 !! html
23816 <p><img src="http://www.example.org/pic.png" alt="pic.png"/> &lt;-- U+3000 (vim: ^Vu3000)
23817 </p>
23818 !! end
23819
23820 !! article
23821 Mediawiki:loop1
23822 !! text
23823 {{Identical|A}}
23824 !! endarticle
23825
23826 !! article
23827 Mediawiki:loop2
23828 !! text
23829 {{Identical|B}}
23830 !! endarticle
23831
23832 !! article
23833 Template:Identical
23834 !! text
23835 {{int:loop1}}
23836 {{int:loop2}}
23837 !! endarticle
23838
23839 !! test
23840 T33098 Template which includes system messages which includes the template
23841 !! wikitext
23842 {{Identical}}
23843 !! html
23844 <p><span class="error">Template loop detected: <a href="/wiki/Template:Identical" title="Template:Identical">Template:Identical</a></span>
23845 <span class="error">Template loop detected: <a href="/wiki/Template:Identical" title="Template:Identical">Template:Identical</a></span>
23846 </p>
23847 !! end
23848
23849 !! test
23850 T33490 Turkish: ucfirst 'blah'
23851 !! options
23852 language=tr
23853 !! wikitext
23854 {{ucfirst:blah}}
23855 !! html
23856 <p>Blah
23857 </p>
23858 !! end
23859
23860 !! test
23861 T33490 Turkish: ucfirst 'ix'
23862 !! options
23863 language=tr
23864 !! wikitext
23865 {{ucfirst:ix}}
23866 !! html
23867 <p>İx
23868 </p>
23869 !! end
23870
23871 !! test
23872 T33490 Turkish: lcfirst 'BLAH'
23873 !! options
23874 language=tr
23875 !! wikitext
23876 {{lcfirst:BLAH}}
23877 !! html
23878 <p>bLAH
23879 </p>
23880 !! end
23881
23882 !! test
23883 T33490 Turkish: ucfırst (with a dotless i)
23884 !! options
23885 language=tr
23886 !! wikitext
23887 {{ucfırst:blah}}
23888 !! html
23889 <p><a href="/index.php?title=%C5%9Eablon:Ucf%C4%B1rst:blah&amp;action=edit&amp;redlink=1" class="new" title="Şablon:Ucfırst:blah (sayfa mevcut değil)">Şablon:Ucfırst:blah</a>
23890 </p>
23891 !! end
23892
23893 !! test
23894 T33490 ucfırst (with a dotless i) with English language
23895 !! options
23896 language=en
23897 !! wikitext
23898 {{ucfırst:blah}}
23899 !! html
23900 <p><a href="/index.php?title=Template:Ucf%C4%B1rst:blah&amp;action=edit&amp;redlink=1" class="new" title="Template:Ucfırst:blah (page does not exist)">Template:Ucfırst:blah</a>
23901 </p>
23902 !! end
23903
23904 # Note that Parsoid doesn't emit an explicit TOC.
23905 # Note also that the html2wt direction tends to emit an extra newline
23906 # between the __TOC__ magicword and the first heading unless *both*
23907 # the <meta> and the <h2> have a data-parsoid attribute set (even if
23908 # it's "{}").
23909
23910 !! test
23911 T28375: TOC with italics
23912 !! options
23913 title=[[Main Page]]
23914 !! wikitext
23915 __TOC__
23916 == ''Lost'' episodes ==
23917 !! html/php
23918 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
23919 <ul>
23920 <li class="toclevel-1 tocsection-1"><a href="#Lost_episodes"><span class="tocnumber">1</span> <span class="toctext"><i>Lost</i> episodes</span></a></li>
23921 </ul>
23922 </div>
23923
23924 <h2><span class="mw-headline" id="Lost_episodes"><i>Lost</i> episodes</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Lost episodes">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
23925
23926 !! html/parsoid
23927 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
23928 <h2 data-parsoid='{}'> <i>Lost</i> episodes </h2>
23929 !! end
23930
23931 !! test
23932 T28375: TOC with bold
23933 !! options
23934 title=[[Main Page]]
23935 !! wikitext
23936 __TOC__
23937 == '''should be bold''' then normal text ==
23938 !! html/php
23939 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
23940 <ul>
23941 <li class="toclevel-1 tocsection-1"><a href="#should_be_bold_then_normal_text"><span class="tocnumber">1</span> <span class="toctext"><b>should be bold</b> then normal text</span></a></li>
23942 </ul>
23943 </div>
23944
23945 <h2><span class="mw-headline" id="should_be_bold_then_normal_text"><b>should be bold</b> then normal text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: should be bold then normal text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
23946
23947 !! html/parsoid
23948 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
23949 <h2 data-parsoid='{}'> <b>should be bold</b> then normal text </h2>
23950 !! end
23951
23952 !! test
23953 T35845: Headings become cursive in TOC when they contain an image
23954 !! options
23955 title=[[Main Page]]
23956 !! wikitext
23957 __TOC__
23958 == Image [[Image:foobar.jpg]] ==
23959 !! html/php
23960 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
23961 <ul>
23962 <li class="toclevel-1 tocsection-1"><a href="#Image"><span class="tocnumber">1</span> <span class="toctext">Image</span></a></li>
23963 </ul>
23964 </div>
23965
23966 <h2><span class="mw-headline" id="Image">Image <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Image">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
23967
23968 !! html/parsoid
23969 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
23970 <h2 data-parsoid='{}'> Image <span class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"Image:foobar.jpg"}}'/></a></span> </h2>
23971 !! end
23972
23973 !! test
23974 T35845 (2): Headings become bold in TOC when they contain a blockquote
23975 !! options
23976 title=[[Main Page]]
23977 !! wikitext
23978 __TOC__
23979 == <blockquote>Quote</blockquote> ==
23980 !! html/php
23981 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
23982 <ul>
23983 <li class="toclevel-1 tocsection-1"><a href="#Quote"><span class="tocnumber">1</span> <span class="toctext">Quote</span></a></li>
23984 </ul>
23985 </div>
23986
23987 <h2><span class="mw-headline" id="Quote"><blockquote>Quote</blockquote></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Quote">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
23988
23989 !! html/php+tidy
23990 <p></p>
23991 <div id="toc" class="toc">
23992 <div class="toctitle">
23993 <h2>Contents</h2>
23994 </div>
23995 <ul>
23996 <li class="toclevel-1 tocsection-1"><a href="#Quote"><span class="tocnumber">1</span> <span class="toctext">Quote</span></a></li>
23997 </ul>
23998 </div>
23999 <p></p>
24000 <h2><span class="mw-headline" id="Quote"></span></h2>
24001 <blockquote>
24002 <p><span class="mw-headline" id="Quote">Quote</span></p>
24003 </blockquote>
24004 <p><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Quote">edit</a><span class="mw-editsection-bracket">]</span></span></p>
24005 !! html/parsoid
24006 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24007 <h2 data-parsoid='{}'> <blockquote>Quote</blockquote> </h2>
24008 !! end
24009
24010 !! test
24011 Unclosed tags in TOC
24012 !! options
24013 title=[[Main Page]]
24014 !! wikitext
24015 __TOC__
24016 == Proof: 2 < 3 ==
24017 <small>Hanc marginis exiguitas non caperet.</small>
24018 QED
24019 !! html/php
24020 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24021 <ul>
24022 <li class="toclevel-1 tocsection-1"><a href="#Proof:_2_.3C_3"><span class="tocnumber">1</span> <span class="toctext">Proof: 2 &lt; 3</span></a></li>
24023 </ul>
24024 </div>
24025
24026 <h2><span class="mw-headline" id="Proof:_2_.3C_3">Proof: 2 &lt; 3</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Proof: 2 &lt; 3">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24027 <p><small>Hanc marginis exiguitas non caperet.</small>
24028 QED
24029 </p>
24030 !! html/parsoid
24031 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24032 <h2 data-parsoid='{}'> Proof: 2 &lt; 3 </h2>
24033 <p><small>Hanc marginis exiguitas non caperet.</small>
24034 QED</p>
24035 !! end
24036
24037 !! test
24038 Multiple tags in TOC
24039 !! wikitext
24040 __TOC__
24041 == <i>Foo</i> <b>Bar</b> ==
24042
24043 == <i>Foo</i> <blockquote>Bar</blockquote> ==
24044 !! html/php
24045 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24046 <ul>
24047 <li class="toclevel-1 tocsection-1"><a href="#Foo_Bar"><span class="tocnumber">1</span> <span class="toctext"><i>Foo</i> <b>Bar</b></span></a></li>
24048 <li class="toclevel-1 tocsection-2"><a href="#Foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext"><i>Foo</i> Bar</span></a></li>
24049 </ul>
24050 </div>
24051
24052 <h2><span class="mw-headline" id="Foo_Bar"><i>Foo</i> <b>Bar</b></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24053 <h2><span class="mw-headline" id="Foo_Bar_2"><i>Foo</i> <blockquote>Bar</blockquote></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24054
24055 !! html/php+tidy
24056 <p></p>
24057 <div id="toc" class="toc">
24058 <div class="toctitle">
24059 <h2>Contents</h2>
24060 </div>
24061 <ul>
24062 <li class="toclevel-1 tocsection-1"><a href="#Foo_Bar"><span class="tocnumber">1</span> <span class="toctext"><i>Foo</i> <b>Bar</b></span></a></li>
24063 <li class="toclevel-1 tocsection-2"><a href="#Foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext"><i>Foo</i> Bar</span></a></li>
24064 </ul>
24065 </div>
24066 <p></p>
24067 <h2><span class="mw-headline" id="Foo_Bar"><i>Foo</i> <b>Bar</b></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24068 <h2><span class="mw-headline" id="Foo_Bar_2"><i>Foo</i></span></h2>
24069 <blockquote>
24070 <p><span class="mw-headline" id="Foo_Bar_2">Bar</span></p>
24071 </blockquote>
24072 <p><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></p>
24073 !! html/parsoid
24074 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24075 <h2 data-parsoid='{}'> <i data-parsoid='{"stx":"html"}'>Foo</i> <b data-parsoid='{"stx":"html"}'>Bar</b> </h2>
24076 <h2> <i data-parsoid='{"stx":"html"}'>Foo</i> <blockquote>Bar</blockquote> </h2>
24077 !! end
24078
24079 # Don't expect Parsoid to roundtrip this until the php parser comes closer to
24080 # html5 tag parsing.
24081 !! test
24082 Tags with parameters in TOC
24083 !! options
24084 parsoid=wt2html
24085 !! wikitext
24086 __TOC__
24087 == <sup class="in-h2">Hello</sup> ==
24088
24089 == <sup class="a > b">Evilbye</sup> ==
24090 !! html/php
24091 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24092 <ul>
24093 <li class="toclevel-1 tocsection-1"><a href="#Hello"><span class="tocnumber">1</span> <span class="toctext"><sup>Hello</sup></span></a></li>
24094 <li class="toclevel-1 tocsection-2"><a href="#b.22.3EEvilbye"><span class="tocnumber">2</span> <span class="toctext"><sup> b"&gt;Evilbye</sup></span></a></li>
24095 </ul>
24096 </div>
24097
24098 <h2><span class="mw-headline" id="Hello"><sup class="in-h2">Hello</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Hello">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24099 <h2><span class="mw-headline" id="b.22.3EEvilbye"><sup class="a"> b"&gt;Evilbye</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b&quot;&gt;Evilbye">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24100
24101 !! html/parsoid
24102 <meta property="mw:PageProp/toc" />
24103 <h2> <sup class="in-h2" data-parsoid='{"stx":"html"}'>Hello</sup> </h2>
24104
24105 <h2> <sup class="a " data-parsoid='{"stx":"html"}'> b">Evilbye</sup> </h2>
24106 !! end
24107
24108 !! test
24109 span tags with directionality in TOC
24110 !! wikitext
24111 __TOC__
24112 == <span dir="ltr">C++</span> ==
24113
24114 == <span dir="rtl">זבנג!</span> ==
24115
24116 == <span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span> ==
24117
24118 == <span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span> ==
24119
24120 == <span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span> ==
24121 !! html/php
24122 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24123 <ul>
24124 <li class="toclevel-1 tocsection-1"><a href="#C.2B.2B"><span class="tocnumber">1</span> <span class="toctext"><span dir="ltr">C++</span></span></a></li>
24125 <li class="toclevel-1 tocsection-2"><a href="#.D7.96.D7.91.D7.A0.D7.92.21"><span class="tocnumber">2</span> <span class="toctext"><span dir="rtl">זבנג!</span></span></a></li>
24126 <li class="toclevel-1 tocsection-3"><a href="#The_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"><span class="tocnumber">3</span> <span class="toctext"><span>The attributes on these span tags must be deleted from the TOC</span></span></a></li>
24127 <li class="toclevel-1 tocsection-4"><a href="#All_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"><span class="tocnumber">4</span> <span class="toctext"><span>All attributes on these span tags must be deleted from the TOC</span></span></a></li>
24128 <li class="toclevel-1 tocsection-5"><a href="#Attributes_after_dir_on_these_span_tags_must_be_deleted_from_the_TOC"><span class="tocnumber">5</span> <span class="toctext"><span dir="ltr">Attributes after dir on these span tags must be deleted from the TOC</span></span></a></li>
24129 </ul>
24130 </div>
24131
24132 <h2><span class="mw-headline" id="C.2B.2B"><span dir="ltr">C++</span></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: C++">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24133 <h2><span class="mw-headline" id=".D7.96.D7.91.D7.A0.D7.92.21"><span dir="rtl">זבנג!</span></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: זבנג!">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24134 <h2><span class="mw-headline" id="The_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"><span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: The attributes on these span tags must be deleted from the TOC">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24135 <h2><span class="mw-headline" id="All_attributes_on_these_span_tags_must_be_deleted_from_the_TOC"><span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: All attributes on these span tags must be deleted from the TOC">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24136 <h2><span class="mw-headline" id="Attributes_after_dir_on_these_span_tags_must_be_deleted_from_the_TOC"><span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Attributes after dir on these span tags must be deleted from the TOC">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24137
24138 !! html/parsoid
24139 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24140 <h2 data-parsoid='{}'> <span dir="ltr">C++</span> </h2>
24141 <h2> <span dir="rtl">זבנג!</span> </h2>
24142 <h2> <span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span> </h2>
24143 <h2> <span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span> </h2>
24144 <h2> <span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span> </h2>
24145 !! end
24146
24147 !! test
24148 T74884: bdi element in ToC
24149 !! wikitext
24150 __TOC__
24151 == <bdi>test</bdi> ==
24152 !! html/php
24153 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24154 <ul>
24155 <li class="toclevel-1 tocsection-1"><a href="#test"><span class="tocnumber">1</span> <span class="toctext"><bdi>test</bdi></span></a></li>
24156 </ul>
24157 </div>
24158
24159 <h2><span class="mw-headline" id="test"><bdi>test</bdi></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: test">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24160
24161 !! html/parsoid
24162 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24163 <h2 data-parsoid='{}'> <bdi>test</bdi> </h2>
24164 !! end
24165
24166 !! test
24167 T35715: s/strike element in ToC
24168 !! wikitext
24169 __TOC__
24170 == <s>test</s> test <strike>test</strike> ==
24171 !! html/php
24172 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24173 <ul>
24174 <li class="toclevel-1 tocsection-1"><a href="#test_test_test"><span class="tocnumber">1</span> <span class="toctext"><s>test</s> test <strike>test</strike></span></a></li>
24175 </ul>
24176 </div>
24177
24178 <h2><span class="mw-headline" id="test_test_test"><s>test</s> test <strike>test</strike></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: test test test">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24179
24180 !! html/parsoid
24181 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24182 <h2 data-parsoid='{}'> <s>test</s> test <strike>test</strike> </h2>
24183 !! end
24184
24185 # Note that the html output does not have the <p></p>, but the
24186 # html+tidy output *does*. This is because the empty <p></p> is
24187 # removed by the sanitizer, but only when tidy is *not* enabled (!).
24188 !! test
24189 Empty <p> tag in TOC, removed by Sanitizer (T92892)
24190 !! wikitext
24191 __TOC__
24192 == x ==
24193 !! html/php
24194 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24195 <ul>
24196 <li class="toclevel-1 tocsection-1"><a href="#x"><span class="tocnumber">1</span> <span class="toctext">x</span></a></li>
24197 </ul>
24198 </div>
24199
24200 <h2><span class="mw-headline" id="x">x</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: x">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24201
24202 !! html/php+tidy
24203 <p></p>
24204 <div id="toc" class="toc">
24205 <div class="toctitle">
24206 <h2>Contents</h2>
24207 </div>
24208 <ul>
24209 <li class="toclevel-1 tocsection-1"><a href="#x"><span class="tocnumber">1</span> <span class="toctext">x</span></a></li>
24210 </ul>
24211 </div>
24212 <p></p>
24213 <h2><span class="mw-headline" id="x">x</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: x">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24214 !! html/parsoid
24215 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24216 <h2 data-parsoid='{}'> x </h2>
24217 !! end
24218
24219 !! article
24220 MediaWiki:T34057
24221 !! text
24222 == {{int:headline_sample}} ==
24223 !! endarticle
24224
24225 !! test
24226 T34057: Title needed when expanding <h> nodes.
24227 !! options
24228 title=[[Main Page]]
24229 !! wikitext
24230 {{int:T34057}}
24231 !! html
24232 <h2><span class="mw-headline" id="Headline_text">Headline text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Headline text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24233
24234 !! end
24235
24236 !! test
24237 Strip marker in urlencode
24238 !! wikitext
24239 {{urlencode:x<nowiki/>y}}
24240 {{urlencode:x<nowiki/>y|wiki}}
24241 {{urlencode:x<nowiki/>y|path}}
24242 {{urlencode:x<pre id="one">two</pre>y}}
24243 !! html/php
24244 <p>xy
24245 xy
24246 xy
24247 xy
24248 </p>
24249 !! end
24250
24251 !! test
24252 Strip marker in lc
24253 !! wikitext
24254 {{lc:x<nowiki/>y}}
24255 !! html
24256 <p>xy
24257 </p>
24258 !! end
24259
24260 !! test
24261 Strip marker in uc
24262 !! wikitext
24263 {{uc:x<nowiki/>y}}
24264 !! html
24265 <p>XY
24266 </p>
24267 !! end
24268
24269 !! test
24270 Strip marker in formatNum
24271 !! wikitext
24272 {{formatnum:1<nowiki/>2}}
24273 {{formatnum:1<nowiki/>2|R}}
24274 !! html
24275 <p>12
24276 12
24277 </p>
24278 !! end
24279
24280 !! test
24281 Check noCommafy in formatNum
24282 !! options
24283 language=be-tarask
24284 !! wikitext
24285 {{formatnum:123456.78}}
24286 {{formatnum:123456.78|NOSEP}}
24287 !! html
24288 <p>123 456,78
24289 123456.78
24290 </p>
24291 !! end
24292
24293 !! test
24294 Wrong option for formatNum (T58199)
24295 !! wikitext
24296 {{formatnum:1,234.56|Random}}
24297 {{formatnum:1,234.56|EVERYTHING}}
24298 {{formatnum:1234.56|any argument that has the string 'NOSEP'}}
24299 !! html
24300 <p>1,234.56
24301 1,234.56
24302 1,234.56
24303 </p>
24304 !! end
24305
24306 !! test
24307 Strip marker in grammar
24308 !! options
24309 language=fi
24310 !! wikitext
24311 {{grammar:elative|foo<nowiki/>bar}}
24312 !! html
24313 <p>foobarista
24314 </p>
24315 !! end
24316
24317 !! test
24318 Strip marker in padleft
24319 !! wikitext
24320 {{padleft:|2|x<nowiki/>y}}
24321 !! html
24322 <p>xy
24323 </p>
24324 !! end
24325
24326 !! test
24327 Strip marker in padright
24328 !! wikitext
24329 {{padright:|2|x<nowiki/>y}}
24330 !! html
24331 <p>xy
24332 </p>
24333 !! end
24334
24335 !! test
24336 Strip marker in anchorencode
24337 !! wikitext
24338 {{anchorencode:x<nowiki/>y}}
24339 !! html
24340 <p>xy
24341 </p>
24342 !! end
24343
24344 !! test
24345 nowiki inside link inside heading (T20295)
24346 !! wikitext
24347 ==[[foo|x<nowiki>y</nowiki>z]]==
24348 !! html
24349 <h2><span class="mw-headline" id="xyz"><a href="/wiki/Foo" title="Foo">xyz</a></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: xyz">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24350
24351 !! end
24352
24353 !! test
24354 new support for bdi element (T33817)
24355 !! wikitext
24356 <p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>
24357 !! html
24358 <p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>
24359
24360 !!end
24361
24362 !! test
24363 Ignore pipe between table row attributes
24364 !! wikitext
24365 {|
24366 | quux
24367 |- id=foo | style='color: red'
24368 | bar
24369 |}
24370 !! html
24371 <table>
24372 <tr>
24373 <td> quux
24374 </td></tr>
24375 <tr id="foo" style="color: red">
24376 <td> bar
24377 </td></tr></table>
24378
24379 !! end
24380
24381 !!test
24382 Language parser function
24383 !! wikitext
24384 {{#language:ar}}
24385 !! html
24386 <p>العربية
24387 </p>
24388 !! end
24389
24390 !!test
24391 Padleft and padright as substr
24392 !! wikitext
24393 {{padleft:|3|abcde}}
24394 {{padright:|3|abcde}}
24395 !! html
24396 <p>abc
24397 abc
24398 </p>
24399 !! end
24400
24401 !!test
24402 Special parser function
24403 !! wikitext
24404 {{#special:RandomPage}}
24405 {{#special:BaDtItLe}}
24406 {{#special:Foobar}}
24407 !! html
24408 <p>Special:Random
24409 Special:Badtitle
24410 Special:Foobar
24411 </p>
24412 !! end
24413
24414 !!test
24415 T36939 - Case insensitive link parsing ([HttP://])
24416 !! wikitext
24417 [HttP://MediaWiki.Org/]
24418 !! html/php
24419 <p><a rel="nofollow" class="external autonumber" href="HttP://MediaWiki.Org/">[1]</a>
24420 </p>
24421 !! html/parsoid
24422 <p><a rel="mw:ExtLink" href="HttP://MediaWiki.Org/"></a></p>
24423 !! end
24424
24425 !!test
24426 T36939 - Case insensitive link parsing ([HttP:// title])
24427 !! wikitext
24428 [HttP://MediaWiki.Org/ MediaWiki]
24429 !! html
24430 <p><a rel="nofollow" class="external text" href="HttP://MediaWiki.Org/">MediaWiki</a>
24431 </p>
24432 !! end
24433
24434 !!test
24435 T36939 - Case insensitive link parsing (HttP://)
24436 !! wikitext
24437 HttP://MediaWiki.Org/
24438 !! html/php
24439 <p><a rel="nofollow" class="external free" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a>
24440 </p>
24441 !! html/parsoid
24442 <p><a rel="mw:ExtLink" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a></p>
24443 !! end
24444
24445 !!test
24446 Disable TOC
24447 !! options
24448 notoc
24449 !! wikitext
24450 Lead
24451 == Section 1 ==
24452 == Section 2 ==
24453 == Section 3 ==
24454 == Section 4 ==
24455 == Section 5 ==
24456 !! html
24457 <p>Lead
24458 </p>
24459
24460 <h2><span class="mw-headline" id="Section_1">Section 1</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 1">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24461 <h2><span class="mw-headline" id="Section_2">Section 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Section 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24462 <h2><span class="mw-headline" id="Section_3">Section 3</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Section 3">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24463 <h2><span class="mw-headline" id="Section_4">Section 4</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Section 4">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24464 <h2><span class="mw-headline" id="Section_5">Section 5</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Section 5">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
24465
24466 !! end
24467
24468
24469 ###
24470 ### Parsoid-specific tests
24471 ### Parsoid-PHP parser incompatibilities
24472 ###
24473 !!test
24474 1. SOL-sensitive wikitext tokens as template-args
24475 !!options
24476 parsoid=wt2html,wt2wt
24477 !! wikitext
24478 {{echo|*a}}
24479 {{echo|#a}}
24480 {{echo|:a}}
24481 !! html
24482 <span about="#mwt1" typeof="mw:Transclusion">
24483 </span><ul about="#mwt1"><li>a</li>
24484 </ul>
24485 <span about="#mwt2" typeof="mw:Transclusion">
24486 </span><ol about="#mwt2"><li>a</li>
24487 </ol>
24488 <span about="#mwt3" typeof="mw:Transclusion">
24489 </span><dl about="#mwt3"><dd>a</dd>
24490 </dl>
24491 !!end
24492
24493 #### -----------------------------------------------------------------
24494 #### Parsoid-specific functionality tests
24495 #### -----------------------------------------------------------------
24496
24497 # T65642/T68749: Formatting elt fixup around images is cleaned up.
24498 # We know wt2wt will fail, but we expect selser to pass.
24499 # Due to the nature of our testing, wt2wt and selser tests will enter the
24500 # blacklist and we'll catch selser regressions based on changes to the
24501 # blacklist entries for selser tests.
24502 !! test
24503 1. Bad treebuilder fixup of formatting elt is cleaned up
24504 !! options
24505 parsoid=wt2html,wt2wt
24506 !! wikitext
24507 {|
24508 |
24509 <small>
24510 [[Image:Foobar.jpg|right|Test]]
24511 </small>
24512 |}
24513 !! html/parsoid
24514 <table>
24515 <tbody><tr><td>
24516 <small>
24517 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>Test</figcaption></figure>
24518 </small>
24519 </td></tr>
24520 </tbody></table>
24521 !! end
24522
24523 !! test
24524 2. Bad treebuilder fixup of formatting elt is cleaned up
24525 !! options
24526 parsoid=wt2html,wt2wt
24527 !! wikitext
24528 '''foo[[File:Foobar.jpg|thumb|caption]]bar'''
24529
24530 <small>[[Image:Foobar.jpg|right|300px]]</small>
24531 !! html/parsoid
24532
24533 <p><b>foo</b></p>
24534 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><b>caption</b></figcaption></figure>
24535 <p><b>bar</b></p>
24536 <small><figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></figure></small>
24537 !! end
24538
24539 !! test
24540 3. Bad treebuilder fixup of formatting elt is cleaned up
24541 !! options
24542 parsoid=wt2html,wt2wt
24543 !! wikitext
24544 <small>'''foo[[File:Foobar.jpg|thumb|caption]]bar'''</small>
24545 !! html/parsoid
24546 <p><small><b>foo</b></small></p>
24547 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><small><b>caption</b></small></figcaption></figure>
24548 <p><small><b>bar</b></small></p>
24549 !! end
24550
24551 !! test
24552 4. Bad treebuilder fixup of formatting elt is cleaned up: formatting tags around captionless images are ignored
24553 !! options
24554 parsoid=wt2html,wt2wt
24555 !! wikitext
24556 '''<small>[[Image:Foobar.jpg|right|300px]]</small>'''
24557 !! html/parsoid
24558 <b><small><figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></figure></small></b>
24559 !! end
24560
24561 #### ----------------------------------------------------------------
24562 #### Parsoid-only testing of Parsoid's impl of LST
24563 #### Not implemented yet, see
24564 #### https://www.mediawiki.org/wiki/Parsoid/HTML_based_LST
24565 #### ----------------------------------------------------------------
24566
24567 ## We still need to support serializing the older format while content is stored.
24568 !! test
24569 LST Sections: Backwards compatibility
24570 !! options
24571 parsoid={
24572 "suppressErrors": true,
24573 "modes": ["html2wt"]
24574 }
24575 !! wikitext
24576 <section begin="2011-05-16" />
24577 <section end="2014-04-10 (MW 1.23wmf22)" />
24578 !! html/parsoid
24579 <p><meta typeof="mw:Extension/LabeledSectionTransclusion/begin" content="2011-05-16"/>
24580 <meta typeof="mw:Extension/LabeledSectionTransclusion/end" content="2014-04-10 (MW 1.23wmf22)"/></p>
24581 !! end
24582
24583 !! test
24584 LST Sections: Newfangled approach
24585 !! wikitext
24586 <section begin="2011-05-16" />
24587 <section end="2014-04-10 (MW 1.23wmf22)" />
24588 !! html/parsoid
24589 <p><span typeof="mw:Extension/section" about="#mwt4" data-mw='{"name":"section","attrs":{"begin":"2011-05-16"},"body":null}'>
24590 </span>
24591 <span typeof="mw:Extension/section" about="#mwt6" data-mw='{"name":"section","attrs":{"end":"2014-04-10 (MW 1.23wmf22)"},"body":null}'>
24592 </span></p>
24593 !! end
24594
24595 #--------- Test stripping of empty nodes in template content ----------
24596
24597 !! test
24598 Empty LI and TR nodes should be stripped from template content
24599 !! wikitext
24600 {{EmptyLITest}}
24601 {{EmptyTRTest}}
24602 !! html/parsoid
24603 <ul about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyLITest","href":"./Template:EmptyLITest"},"params":{},"i":0}}]}'>
24604 <li>a</li>
24605 <li>b</li>
24606 </ul>
24607 <table about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRTest","href":"./Template:EmptyTRTest"},"params":{},"i":0}}]}'>
24608 <tbody>
24609 <tr>
24610 <td>foo</td>
24611 </tr>
24612 <tr>
24613 <td>bar</td>
24614 </tr>
24615 </tbody>
24616 </table>
24617 !! end
24618
24619 !! test
24620 Empty LI and TR nodes should not be stripped from top-level content
24621 !! wikitext
24622 * a
24623 *
24624 * b
24625 {|
24626 |-
24627 |-
24628 |foo
24629 |}
24630 !! html/parsoid
24631 <ul>
24632 <li> a</li>
24633 <li class='mw-empty-elt'></li>
24634 <li> b</li>
24635 </ul>
24636 <table>
24637 <tbody>
24638 <tr class='mw-empty-elt'></tr>
24639 <tr>
24640 <td>foo</td>
24641 </tr>
24642 </tbody>
24643 </table>
24644 !! end
24645
24646 !! test
24647 Empty TR nodes should not be stripped if they have any attributes set
24648 !! wikitext
24649 {{EmptyTRWithHTMLAttrTest}}
24650 !! html/parsoid
24651 <table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRWithHTMLAttrTest","href":"./Template:EmptyTRWithHTMLAttrTest"},"params":{},"i":0}}]}'>
24652 <tr align='center'></tr>
24653 <tr><td>foo</td></tr>
24654 <tr align='center'></tr>
24655 <tr><td>bar</td></tr>
24656 </table>
24657 !! end
24658
24659 #### ----------------------------------------------------------------
24660 #### The following section of tests are primarily to test
24661 #### wikitext escaping capabilities of Parsoid. Given that
24662 #### escaping can be done any number of ways, the wikitext (input)
24663 #### is always adjusted to reflect how Parsoid adds nowiki
24664 #### escape tags.
24665 ####
24666 #### We are marking several tests as parsoid-only since the
24667 #### HTML in the result section is different from what the
24668 #### PHP parser generates for it.
24669 #### ----------------------------------------------------------------
24670
24671
24672 #### --------------- Headings ---------------
24673 #### 0. Unnested
24674 #### 1. Nested inside html <h1>=foo=</h1>
24675 #### 2. Outside heading nest on a single line <h1>foo</h1>*bar
24676 #### 3. Nested inside html with wikitext split by html tags
24677 #### 4. No escape needed
24678 #### 5. Empty headings <h1></h1>
24679 #### 6. Heading chars in SOL context
24680 #### ----------------------------------------
24681 !! test
24682 Headings: 0. Unnested
24683 !! options
24684 parsoid=html2wt
24685 !! html/parsoid
24686 <p>=foo=</p>
24687
24688 <p> =foo=
24689 <!--cmt-->
24690 =foo=</p>
24691
24692 <p>=foo<i>a</i>=</p>
24693 !! wikitext
24694 <nowiki>=foo=</nowiki>
24695
24696 <nowiki> </nowiki>=foo=
24697 <!--cmt-->
24698 <nowiki>=foo=</nowiki>
24699
24700 =foo''a''<nowiki>=</nowiki>
24701 !!end
24702
24703 # New headings and existing headings are handled differently
24704 !! test
24705 Headings: 1. Nested inside html
24706 !! options
24707 parsoid=html2wt
24708 !! html/parsoid
24709 <h1>=foo=</h1>
24710 <h2>=foo=</h2>
24711 <h3>=foo=</h3>
24712
24713 <h1 data-parsoid=''>=foo=</h1>
24714 <h2 data-parsoid=''>=foo=</h2>
24715 <h3 data-parsoid=''>=foo=</h3>
24716 <h4 data-parsoid=''>=foo=</h4>
24717 <h5 data-parsoid=''>=foo=</h5>
24718 <h6 data-parsoid=''>=foo=</h6>
24719 !! wikitext
24720 = =foo= =
24721
24722 == =foo= ==
24723
24724 === =foo= ===
24725
24726 =<nowiki>=foo=</nowiki>=
24727 ==<nowiki>=foo=</nowiki>==
24728 ===<nowiki>=foo=</nowiki>===
24729 ====<nowiki>=foo=</nowiki>====
24730 =====<nowiki>=foo=</nowiki>=====
24731 ======<nowiki>=foo=</nowiki>======
24732
24733 !!end
24734
24735 !! test
24736 Headings: 2. Outside heading nest on a single line <h1>foo</h1>*bar
24737 !! options
24738 parsoid=html2wt
24739 !! html/parsoid
24740 <h1>foo</h1>*bar
24741 <h1>foo</h1>=bar
24742 <h1>foo</h1>=bar=
24743 !! wikitext
24744 = foo =
24745 <nowiki>*</nowiki>bar
24746
24747 = foo =
24748 =bar
24749
24750 = foo =
24751 <nowiki>=bar=</nowiki>
24752 !!end
24753
24754 !! test
24755 Headings: 3. Nested inside html with wikitext split by html tags
24756 !! options
24757 parsoid=html2wt
24758 !! html/parsoid
24759 <h1>=<b>bold</b>foo=</h1>
24760 !! wikitext
24761 = ='''bold'''foo= =
24762 !!end
24763
24764 !! test
24765 Headings: 4a. No escaping needed (testing just h1 and h2)
24766 !! options
24767 parsoid=html2wt
24768 !! html/parsoid
24769 <h1>=foo</h1>
24770 <h1>foo=</h1>
24771 <h1> =foo= </h1>
24772 <h1>=foo= bar</h1>
24773 <h2>=foo</h2>
24774 <h2>foo=</h2>
24775 <h1>=</h1>
24776 <h1><i>=</i>foo=</h1>
24777 !! wikitext
24778 = =foo =
24779
24780 = foo= =
24781
24782 = =foo= =
24783
24784 = =foo= bar =
24785
24786 == =foo ==
24787
24788 == foo= ==
24789
24790 = = =
24791
24792 = ''=''foo= =
24793 !!end
24794
24795 !! test
24796 Headings: 4b. No escaping needed (inside p-tags)
24797 !! options
24798 parsoid=html2wt
24799 !! html/parsoid
24800 <p>===
24801 =foo= x
24802 =foo= <s></s>
24803 </p>
24804 !! wikitext
24805 ===
24806 =foo= x
24807 =foo= <s></s>
24808 !!end
24809
24810 !! test
24811 Headings: 5. Empty headings
24812 !! options
24813 parsoid=html2wt
24814 !! html/parsoid
24815 <h1 data-parsoid='{}'></h1>
24816
24817 <h2 data-parsoid='{}'></h2>
24818
24819 <h3 data-parsoid='{}'></h3>
24820
24821 <h4 data-parsoid='{}'></h4>
24822
24823 <h5 data-parsoid='{}'></h5>
24824
24825 <h6 data-parsoid='{}'></h6>
24826 !! wikitext
24827 =<nowiki/>=
24828
24829 ==<nowiki/>==
24830
24831 ===<nowiki/>===
24832
24833 ====<nowiki/>====
24834
24835 =====<nowiki/>=====
24836
24837 ======<nowiki/>======
24838 !!end
24839
24840 !! test
24841 Headings: 6a. Heading chars in SOL context (with trailing spaces)
24842 !! options
24843 parsoid=html2wt
24844 !! html/parsoid
24845 <p>=a=</p>
24846
24847 <p>=a=</p>
24848
24849 <p>=a=</p>
24850 !! wikitext
24851 <nowiki>=a=</nowiki>
24852
24853 <nowiki>=a=</nowiki>
24854
24855 <nowiki>=a=</nowiki>
24856 !!end
24857
24858 !! test
24859 Headings: 6b. Heading chars in SOL context (with trailing newlines)
24860 !! options
24861 parsoid=html2wt
24862 !! html/parsoid
24863 <p>=a=
24864 b</p>
24865
24866 <p>=a=
24867 b</p>
24868
24869 <p>=a=
24870 b</p>
24871 !! wikitext
24872 <nowiki>=a=</nowiki>
24873 b
24874
24875 <nowiki>=a=</nowiki>
24876 b
24877
24878 <nowiki>=a=</nowiki>
24879 b
24880 !!end
24881
24882 !! test
24883 Headings: 6c. Heading chars in SOL context (leading newline break)
24884 !! options
24885 parsoid=html2wt
24886 !! html/parsoid
24887 <p>a
24888 =b=</p>
24889 !! wikitext
24890 a
24891 <nowiki>=b=</nowiki>
24892 !!end
24893
24894 !! test
24895 Headings: 6d. Heading chars in SOL context (with interspersed comments)
24896 !! options
24897 parsoid=html2wt
24898 !! html/parsoid
24899 <!--c0--><p>=a=</p>
24900
24901 <!--c1--><p>=a=</p> <!--c2--> <!--c3-->
24902 !! wikitext
24903 <!--c0--><nowiki>=a=</nowiki>
24904
24905 <!--c1--><nowiki>=a=</nowiki> <!--c2--> <!--c3-->
24906 !!end
24907
24908 !! test
24909 Headings: 6d. Heading chars in SOL context (No escaping needed)
24910 !! options
24911 parsoid=html2wt
24912 !! html/parsoid
24913 =a=<div>b</div>
24914 !! wikitext
24915 =a=<div>b</div>
24916 !!end
24917
24918 !! test
24919 Headings: 7. Insert a newline between new content and headings
24920 !! options
24921 parsoid=html2wt
24922 !! html/parsoid
24923 <h2>NEW</h2>
24924 <p>new</p>
24925 <h2 data-parsoid='{}'>A</h2>
24926 <p data-parsoid='{}'>a</p>
24927 !! wikitext
24928 == NEW ==
24929 new
24930
24931 ==A==
24932 a
24933
24934 !! end
24935
24936 #### --------------- Lists ---------------
24937 #### 0. Outside nests (*foo, etc.)
24938 #### 1. Nested inside html <ul><li>*foo</li></ul>
24939 #### 2. Inside definition lists
24940 #### 3. Only bullets at start should be escaped
24941 #### 4. No escapes needed
24942 #### 5. No unnecessary escapes
24943 #### 6. Escape bullets in SOL position
24944 #### 7. Escape bullets in a multi-line context
24945 #### ----------------------------------------
24946
24947 !! test
24948 Lists: 0. Outside nests
24949 !! options
24950 parsoid=html2wt
24951 !! html/parsoid
24952 <p>*foo</p>
24953
24954 <p>#foo</p>
24955
24956 <p>;Foo:bar</p>
24957 !! wikitext
24958 <nowiki>*</nowiki>foo
24959
24960 <nowiki>#</nowiki>foo
24961
24962 <nowiki>;</nowiki>Foo<nowiki>:</nowiki>bar
24963 !!end
24964
24965 ## Making these next 3 tests Parsoid-only since they are html2wt tests
24966 ## to test wikitext escaping, and insignificant whitespace diffs
24967 ## cause PHP parser tests to barf
24968 !! test
24969 Lists: 1. Nested inside html (No unnecessary escapes)
24970 !! options
24971 parsoid=html2wt
24972 !! html/parsoid
24973 <ul>
24974 <li>*foo</li>
24975 <li>#foo</li>
24976 <li>:foo</li>
24977 <li>;foo</li>
24978 <li data-parsoid='{}'>*foo</li>
24979 <li data-parsoid='{}'>#foo</li>
24980 <li data-parsoid='{}'>:foo</li>
24981 <li data-parsoid='{}'>;foo</li>
24982 </ul>
24983
24984 <ol>
24985 <li>*foo</li>
24986 <li>#foo</li>
24987 <li>:foo</li>
24988 <li>;foo</li>
24989 <li data-parsoid='{}'>*foo</li>
24990 <li data-parsoid='{}'>#foo</li>
24991 <li data-parsoid='{}'>:foo</li>
24992 <li data-parsoid='{}'>;foo</li>
24993 </ol>
24994 !! wikitext
24995 * *foo
24996 * #foo
24997 * :foo
24998 * ;foo
24999 *<nowiki>*foo</nowiki>
25000 *<nowiki>#foo</nowiki>
25001 *<nowiki>:foo</nowiki>
25002 *<nowiki>;foo</nowiki>
25003
25004 # *foo
25005 # #foo
25006 # :foo
25007 # ;foo
25008 #<nowiki>*foo</nowiki>
25009 #<nowiki>#foo</nowiki>
25010 #<nowiki>:foo</nowiki>
25011 #<nowiki>;foo</nowiki>
25012 !!end
25013
25014 !! test
25015 Lists: 2. Inside definition lists
25016 !! options
25017 parsoid=html2wt
25018 !! html/parsoid
25019 <dl><dt>;foo</dt></dl>
25020 <dl><dt>:foo</dt></dl>
25021 <dl><dt>:foo</dt>
25022 <dd>bar</dd></dl>
25023 <dl><dd>:foo</dd></dl>
25024 !! wikitext
25025 ; ;foo
25026
25027 ; <nowiki>:foo</nowiki>
25028
25029 ; <nowiki>:foo</nowiki>
25030 : bar
25031
25032 : :foo
25033 !!end
25034
25035 !! test
25036 Lists: 3. Only bullets at start of text in wikitext-generated HTML should be escaped
25037 !! options
25038 parsoid=html2wt
25039 !! html/parsoid
25040 <ul>
25041 <li>*foo*bar</li>
25042 <li data-parsoid='{}'>*foo<i>it</i>*bar</li>
25043 </ul>
25044 !! wikitext
25045 * *foo*bar
25046 *<nowiki>*foo</nowiki>''it''*bar
25047 !!end
25048
25049 !! test
25050 Lists: 4. No escapes needed
25051 !! options
25052 parsoid=html2wt
25053 !! html/parsoid
25054 <ul>
25055 <li>foo*bar
25056 </li>
25057 </ul>
25058 <ul>
25059 <li><i>foo</i>*bar
25060 </li>
25061 </ul>
25062 <ul>
25063 <li><a rel="mw:WikiLink" href="Foo" title="Foo">Foo</a>: bar
25064 </li>
25065 </ul>
25066 <ul>
25067 <li><a rel="mw:WikiLink" href="Foo" title="Foo">Foo</a>*bar
25068 </li>
25069 </ul>
25070 !! wikitext
25071 *foo*bar
25072
25073 *''foo''*bar
25074
25075 *[[Foo]]: bar
25076
25077 *[[Foo]]*bar
25078 !!end
25079
25080 !! test
25081 Lists: 5. No unnecessary escapes
25082 !! options
25083 parsoid=html2wt
25084 !! html/parsoid
25085 <ul><li> bar <span>[[foo]]</span></li></ul>
25086 <ul><li> =bar <span>[[foo]]</span></li></ul>
25087 <ul><li> [[bar <span>[[foo]]</span></li></ul>
25088 <ul><li> ]]bar <span>[[foo]]</span></li></ul>
25089 <ul><li> =bar <span>foo]]</span>=</li></ul>
25090 <ul><li> <s></s>: a</li></ul>
25091 <ul><li> <i>* foo</i></li></ul>
25092
25093 !! wikitext
25094 * bar <span><nowiki>[[foo]]</nowiki></span>
25095
25096 * =bar <span><nowiki>[[foo]]</nowiki></span>
25097
25098 * [[bar <span><nowiki>[[foo]]</nowiki></span>
25099
25100 * ]]bar <span><nowiki>[[foo]]</nowiki></span>
25101
25102 * =bar <span>foo]]</span>=
25103
25104 * <s></s>: a
25105
25106 * ''* foo''
25107 !!end
25108
25109 !! test
25110 Lists: 6. Escape bullets in SOL position
25111 !! options
25112 parsoid=html2wt
25113 !! html/parsoid
25114 <p><!--cmt-->*foo</p>
25115 !! wikitext
25116 <!--cmt--><nowiki>*</nowiki>foo
25117 !!end
25118
25119 !! test
25120 Lists: 7. Escape bullets in a multi-line context
25121 !! options
25122 parsoid=html2wt
25123 !! html/parsoid
25124 <p>a
25125 *b
25126 </p>
25127 !! wikitext
25128 a
25129 <nowiki>*</nowiki>b
25130 !!end
25131
25132 !! test
25133 Lists: 8. Escape colons only if not present in tags
25134 !! options
25135 parsoid=html2wt
25136 !! html/parsoid
25137 <dl><dt>a:b<i>c:d</i></dt></dl>
25138 !! wikitext
25139 ; <nowiki>a:b</nowiki>''c:d''
25140 !! end
25141
25142 #### --------------- HRs ---------------
25143 #### 1. Single line
25144 #### -----------------------------------
25145
25146 !! test
25147 HRs: 1. Single line
25148 !! options
25149 parsoid=html2wt
25150 !! html/parsoid
25151 <hr />----
25152 <hr />=foo=
25153 <hr />*foo
25154 !! wikitext
25155 ----<nowiki>----</nowiki>
25156 ----=foo=
25157 ----*foo
25158 !! end
25159
25160 #### --------------- Tables ---------------
25161 #### 1a. Simple example
25162 #### 1b. No escaping needed (!foo)
25163 #### 1c. No escaping needed (|foo)
25164 #### 1d. No escaping needed (|}foo)
25165 ####
25166 #### 2a. Nested in td (<td>foo|bar</td>)
25167 #### 2b. Nested in td (<td>foo||bar</td>)
25168 #### 2c. Nested in td -- no escaping needed(<td>foo!!bar</td>)
25169 ####
25170 #### 3a. Nested in th (<th>foo!bar</th>)
25171 #### 3b. Nested in th (<th>foo!!bar</th>)
25172 #### 3c. Nested in th -- no escaping needed(<th>foo||bar</th>)
25173 ####
25174 #### 4a. Escape -
25175 #### 4b. Escape +
25176 #### 4c. No escaping needed
25177 #### --------------------------------------
25178
25179 !! test
25180 Tables: 1a. Simple example
25181 !! options
25182 parsoid=html2wt
25183 !! html/parsoid
25184 <p>{|
25185 |}
25186 </p>
25187 !! wikitext
25188 <nowiki>{|</nowiki>
25189 |}
25190 !! end
25191
25192 !! test
25193 Tables: 1b. No escaping needed
25194 !! options
25195 parsoid=html2wt
25196 !! html/parsoid
25197 <p>!foo
25198 </p>
25199 !! wikitext
25200 !foo
25201 !! end
25202
25203 !! test
25204 Tables: 1c. No escaping needed
25205 !! options
25206 parsoid=html2wt
25207 !! html/parsoid
25208 <p>|foo
25209 </p>
25210 !! wikitext
25211 |foo
25212 !! end
25213
25214 !! test
25215 Tables: 1d. No escaping needed
25216 !! options
25217 parsoid=html2wt
25218 !! html/parsoid
25219 <p>|}foo
25220 </p>
25221 !! wikitext
25222 |}foo
25223 !! end
25224
25225 !! test
25226 Tables: 2a. Nested in td
25227 !! options
25228 parsoid=html2wt
25229 !! html/parsoid
25230 <table><tbody><tr>
25231 <td>foo|bar</td></tr>
25232 <tr><td>x<div>a|b</div></td>
25233 </tbody></table>
25234 !! wikitext
25235 {|
25236 |<nowiki>foo|bar</nowiki>
25237 |-
25238 |x<div><nowiki>a|b</nowiki></div>
25239 |}
25240 !! html/php+tidy
25241 <table>
25242 <tr>
25243 <td>foo|bar</td>
25244 </tr>
25245 <tr>
25246 <td>x
25247 <div>a|b</div>
25248 </td>
25249 </tr>
25250 </table>
25251 !! end
25252
25253 !! test
25254 Tables: 2b. Nested in td
25255 !! options
25256 parsoid=html2wt
25257 !! html/parsoid
25258 <table><tbody><tr>
25259 <td>foo||bar</td>
25260 <td>a<i>b||c</i></td>
25261 <td>a<i><div>b||c</div></i></td>
25262 </tr></tbody></table>
25263 !! wikitext
25264 {|
25265 |<nowiki>foo||bar</nowiki>
25266 |a''<nowiki>b||c</nowiki>''
25267 |a''<div><nowiki>b||c</nowiki></div>''
25268 |}
25269 !! html/php
25270 <table>
25271 <tr>
25272 <td>foo||bar
25273 </td>
25274 <td>a<i>b||c</i>
25275 </td>
25276 <td>a<i><div>b||c</div></i>
25277 </td></tr></table>
25278
25279 !! end
25280
25281 !! test
25282 Tables: 2c. Nested in td -- no escaping needed
25283 !! options
25284 parsoid=html2wt
25285 !! html/*
25286 <table>
25287 <tr>
25288 <td>foo!!bar
25289 </td></tr></table>
25290
25291 !! wikitext
25292 {|
25293 |foo!!bar
25294 |}
25295 !! end
25296
25297 !! test
25298 Tables: 3a. Nested in th
25299 !! options
25300 parsoid=html2wt
25301 !! html/*
25302 <table>
25303 <tr>
25304 <th>foo!bar
25305 </th></tr></table>
25306
25307 !! wikitext
25308 {|
25309 !foo!bar
25310 |}
25311 !! end
25312
25313 !! test
25314 Tables: 3b. Nested in th
25315 !! options
25316 parsoid=html2wt
25317 !! html/parsoid
25318 <table><tbody>
25319 <tr><th>foo!!bar</th>
25320 <th><i>foo|bar</i></th>
25321 <th><i>foo!!bar</i></th>
25322 <th><i><span>foo!!bar</span></i></th>
25323 </tr></tbody></table>
25324 !! wikitext
25325 {|
25326 !<nowiki>foo!!bar</nowiki>
25327 !''<nowiki>foo|bar</nowiki>''
25328 !''<nowiki>foo!!bar</nowiki>''
25329 !''<span><nowiki>foo!!bar</nowiki></span>''
25330 |}
25331 !! html/php
25332 <table>
25333 <tr>
25334 <th>foo!!bar
25335 </th>
25336 <th><i>foo|bar</i>
25337 </th>
25338 <th><i>foo!!bar</i>
25339 </th>
25340 <th><i><span>foo!!bar</span></i>
25341 </th></tr></table>
25342
25343 !! end
25344
25345 !! test
25346 Tables: 3c. Nested in th
25347 !! options
25348 parsoid=html2wt
25349 !! html/parsoid
25350 <table><tbody>
25351 <tr><th>foo||bar</th>
25352 <th><span typeof="mw:Nowiki">foo||bar</span></th>
25353 </tr></tbody></table>
25354 !! wikitext
25355 {|
25356 !<nowiki>foo||bar</nowiki>
25357 !<nowiki>foo||bar</nowiki>
25358 |}
25359 !! html/php
25360 <table>
25361 <tr>
25362 <th>foo||bar
25363 </th>
25364 <th>foo||bar
25365 </th></tr></table>
25366
25367 !! end
25368
25369 !! test
25370 Tables: 4a. Escape -
25371 !! options
25372 parsoid=html2wt
25373 !! html/*
25374 <table>
25375 <tr>
25376 <th>-bar
25377 </th></tr>
25378 <tr>
25379 <td>-bar
25380 </td></tr></table>
25381
25382 !! wikitext
25383 {|
25384 !-bar
25385 |-
25386 |<nowiki>-bar</nowiki>
25387 |}
25388 !! end
25389
25390 !! test
25391 Tables: 4b. Escape +
25392 !! options
25393 parsoid=html2wt
25394 !! html/*
25395 <table>
25396 <tr>
25397 <th>+bar
25398 </th></tr>
25399 <tr>
25400 <td>+bar
25401 </td></tr></table>
25402
25403 !! wikitext
25404 {|
25405 !+bar
25406 |-
25407 |<nowiki>+bar</nowiki>
25408 |}
25409 !! end
25410
25411 !! test
25412 Tables: 4c. No escaping needed
25413 !! options
25414 parsoid=html2wt
25415 !! html/parsoid
25416 <table><tbody>
25417 <tr><td>foo-bar</td><td>foo+bar</td></tr>
25418 <tr><td><i>foo</i>-bar</td><td><i>foo</i>+bar</td></tr>
25419 <tr><td>foo
25420 <p>bar|baz
25421 +bar
25422 -bar</p></td></tr>
25423 <tr><td>x
25424 <div>a|b</div></td>
25425 </tbody></table>
25426 !! wikitext
25427 {|
25428 |foo-bar
25429 |foo+bar
25430 |-
25431 |''foo''-bar
25432 |''foo''+bar
25433 |-
25434 |foo
25435 bar|baz
25436 +bar
25437 -bar
25438 |-
25439 |x
25440 <div>a|b</div>
25441 |}
25442 !! html/php
25443 <table>
25444 <tr>
25445 <td>foo-bar
25446 </td>
25447 <td>foo+bar
25448 </td></tr>
25449 <tr>
25450 <td><i>foo</i>-bar
25451 </td>
25452 <td><i>foo</i>+bar
25453 </td></tr>
25454 <tr>
25455 <td>foo
25456 <p>bar|baz
25457 +bar
25458 -bar
25459 </p>
25460 </td></tr>
25461 <tr>
25462 <td>x
25463 <div>a|b</div>
25464 </td></tr></table>
25465
25466 !! end
25467
25468 !! test
25469 Tables: 4d. No escaping needed
25470 !! options
25471 parsoid=html2wt
25472 !! html/parsoid
25473 <table>
25474 <tbody><tr><td><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>-bar</td>
25475 <td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>+1</td>
25476 <td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>-2</td></tr>
25477 </tbody></table>
25478 !! wikitext
25479 {|
25480 |[[Foo]]-bar
25481 ||+1
25482 ||-2
25483 |}
25484 !! html/php
25485 <table>
25486 <tr>
25487 <td><a href="/wiki/Foo" title="Foo">Foo</a>-bar
25488 </td>
25489 <td>+1
25490 </td>
25491 <td>-2
25492 </td></tr></table>
25493
25494 !! end
25495
25496 !! test
25497 T97430: Don't emit empty nowiki pairs around marker meta tags
25498 !! options
25499 parsoid=html2wt
25500 !! html/parsoid
25501 <p>*This is a long sentence here that will make the nowiki algo split up the nowikis into multiple pairs
25502 |** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.</p>
25503 !! wikitext
25504 <nowiki>*</nowiki>This is a long sentence here that will make the nowiki algo split up the nowikis into multiple pairs
25505 |** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.
25506 !! end
25507
25508 !! test
25509 Unclosed xmlish element in table line shouldn't eat end delimiters
25510 !! options
25511 parsoid=html2wt
25512 !! html/parsoid
25513 <table>
25514 <tbody><tr><td> &lt;foo</td>
25515 <td> bar></td></tr>
25516 </tbody></table>
25517 !! wikitext
25518 {|
25519 | <foo
25520 | bar>
25521 |}
25522 !! html/php
25523 <table>
25524 <tr>
25525 <td> &lt;foo
25526 </td>
25527 <td> bar&gt;
25528 </td></tr></table>
25529
25530 !! end
25531
25532 #### --------------- Links ----------------
25533 #### 1. Quote marks in link text
25534 #### 2. Wikilinks: Escapes needed
25535 #### 3. Wikilinks: No escapes needed
25536 #### 4. Extlinks: Escapes needed
25537 #### 5. Extlinks: No escapes needed
25538 #### --------------------------------------
25539 !! test
25540 Links 1. WikiLinks: No escapes needed
25541 !! options
25542 parsoid=html2wt
25543 !! html/parsoid
25544 <p><a rel="mw:WikiLink" href="Foo" title="Foo">Foo<i>boo</i></a>
25545 <a rel="mw:WikiLink" href="Foo" title="Foo">[Foobar]</a>
25546 <a rel="mw:WikiLink" href="Foo" title="Foo">x [Foobar] x</a></p>
25547 !! wikitext
25548 [[Foo|Foo''boo'']]
25549 [[Foo|[Foobar]]]
25550 [[Foo|x [Foobar] x]]
25551 !! html/php
25552 <p><a href="/wiki/Foo" title="Foo">Foo<i>boo</i></a>
25553 <a href="/wiki/Foo" title="Foo">[Foobar]</a>
25554 <a href="/wiki/Foo" title="Foo">x [Foobar] x</a>
25555 </p>
25556 !! end
25557
25558 !! test
25559 Links 2. WikiLinks: Escapes needed
25560 !! options
25561 parsoid=html2wt
25562 !! html/parsoid
25563 <a href="Foo" rel="mw:WikiLink">Foobar]</a>
25564 <a href="Foo" rel="mw:WikiLink">x [http://google.com g] x</a>
25565 <a href="Foo" rel="mw:WikiLink">[[Bar]]</a>
25566 <a href="Foo" rel="mw:WikiLink">x [[Bar]] x</a>
25567 <a href="Foo" rel="mw:WikiLink">|Bar</a>
25568 <a href="Foo" rel="mw:WikiLink">]]bar</a>
25569 <a href="Foo" rel="mw:WikiLink">[[bar</a>
25570 <a href="Foo" rel="mw:WikiLink">x [[ y</a>
25571 <a href="Foo" rel="mw:WikiLink">x ]] y</a>
25572 <a href="Foo" rel="mw:WikiLink">x ]] y [[ z</a>
25573 !! wikitext
25574 [[Foo|<nowiki>Foobar]</nowiki>]]
25575 [[Foo|x <nowiki>[http://google.com g]</nowiki> x]]
25576 [[Foo|<nowiki>[[Bar]]</nowiki>]]
25577 [[Foo|<nowiki>x [[Bar]] x</nowiki>]]
25578 [[Foo|<nowiki>|Bar</nowiki>]]
25579 [[Foo|<nowiki>]]bar</nowiki>]]
25580 [[Foo|<nowiki>[[bar</nowiki>]]
25581 [[Foo|<nowiki>x [[ y</nowiki>]]
25582 [[Foo|<nowiki>x ]] y</nowiki>]]
25583 [[Foo|<nowiki>x ]] y [[ z</nowiki>]]
25584 !! html/php
25585 <p><a href="/wiki/Foo" title="Foo">Foobar]</a>
25586 <a href="/wiki/Foo" title="Foo">x [http://google.com g] x</a>
25587 <a href="/wiki/Foo" title="Foo">[[Bar]]</a>
25588 <a href="/wiki/Foo" title="Foo">x [[Bar]] x</a>
25589 <a href="/wiki/Foo" title="Foo">|Bar</a>
25590 <a href="/wiki/Foo" title="Foo">]]bar</a>
25591 <a href="/wiki/Foo" title="Foo">[[bar</a>
25592 <a href="/wiki/Foo" title="Foo">x [[ y</a>
25593 <a href="/wiki/Foo" title="Foo">x ]] y</a>
25594 <a href="/wiki/Foo" title="Foo">x ]] y [[ z</a>
25595 </p>
25596 !! end
25597
25598 !! test
25599 Links 3. WikiLinks: No escapes needed
25600 !! options
25601 parsoid=html2wt
25602 !! html/parsoid
25603 <p><a rel="mw:WikiLink" href="Foo">[Foobar</a>
25604 <a rel="mw:WikiLink" href="Foo" title="Foo">foo|bar</a></p>
25605 !! wikitext
25606 [[Foo|[Foobar]]
25607 [[Foo|foo|bar]]
25608 !! html/php
25609 <p><a href="/wiki/Foo" title="Foo">[Foobar</a>
25610 <a href="/wiki/Foo" title="Foo">foo|bar</a>
25611 </p>
25612 !! end
25613
25614 !! test
25615 Links 4. ExtLinks: Escapes needed
25616 !! options
25617 parsoid=html2wt
25618 !! html/parsoid
25619 <p><a rel="mw:ExtLink" href="http://google.com">[google]</a>
25620 <a rel="mw:ExtLink" href="http://google.com">google]</a>
25621 <a rel="mw:ExtLink" href="http://google.com">goog] le</a></p>
25622 <p>[http://google.com]</p>
25623 <p>[http://google.com google]</p>
25624 <p>[<a rel="mw:ExtLink" href="http://google.com">http://google.com</a>]</p>
25625 <p>[<a rel="mw:ExtLink" href="http://google.com" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://google.com"}},"i":0}}]}'>http://google.com</a>]</p>
25626 !! wikitext
25627 [http://google.com <nowiki>[google]</nowiki>]
25628 [http://google.com <nowiki>google]</nowiki>]
25629 [http://google.com <nowiki>goog] le</nowiki>]
25630
25631 <nowiki>[http://google.com]</nowiki>
25632
25633 <nowiki>[http://google.com google]</nowiki>
25634
25635 [http://google.com<nowiki>]</nowiki>
25636
25637 [{{echo|http://google.com}}<nowiki>]</nowiki>
25638 !! html/php
25639 <p><a rel="nofollow" class="external text" href="http://google.com">[google]</a>
25640 <a rel="nofollow" class="external text" href="http://google.com">google]</a>
25641 <a rel="nofollow" class="external text" href="http://google.com">goog] le</a>
25642 </p><p>[http://google.com]
25643 </p><p>[http://google.com google]
25644 </p><p>[<a rel="nofollow" class="external free" href="http://google.com">http://google.com</a>]
25645 </p><p>[<a rel="nofollow" class="external free" href="http://google.com">http://google.com</a>]
25646 </p>
25647 !! end
25648
25649 !! test
25650 Links 5. ExtLinks: No escapes needed
25651 !! options
25652 parsoid=html2wt
25653 !! html/parsoid
25654 <p><a rel="mw:ExtLink" href="http://google.com">[google</a></p>
25655 <p>[<a ref="mw:ExtLink" href="http://google.com"></a>]</p>
25656 !! wikitext
25657 [http://google.com [google]
25658
25659 [[http://google.com]]
25660 !! html/php
25661 <p><a rel="nofollow" class="external text" href="http://google.com">[google</a>
25662 </p><p>[<a rel="nofollow" class="external autonumber" href="http://google.com">[1]</a>]
25663 </p>
25664 !! end
25665
25666 !! test
25667 Links 6. Add <nowiki/>s between text-nodes and url-links when required (T66300)
25668 !! options
25669 parsoid=html2wt
25670 !! html/parsoid
25671 <p>x<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>y
25672 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>?x
25673 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>&amp;x
25674 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>'x
25675 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>,x
25676 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>.x
25677 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>;x
25678 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>:x
25679 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>;x
25680 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>!x
25681 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>=x
25682 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>(x)
25683 <a rel="mw:ExtLink" href="http://example.com(x" data-parsoid='{"stx":"url"}'>http://example.com(x</a>)
25684 </p>
25685 !! wikitext
25686 x<nowiki/>http://example.com<nowiki/>y
25687 http://example.com<nowiki/>?x
25688 http://example.com<nowiki/>&x
25689 http://example.com<nowiki/>'x
25690 http://example.com<nowiki/>,x
25691 http://example.com<nowiki/>.x
25692 http://example.com<nowiki/>;x
25693 http://example.com<nowiki/>:x
25694 http://example.com<nowiki/>;x
25695 http://example.com<nowiki/>!x
25696 http://example.com<nowiki/>=x
25697 http://example.com<nowiki/>(x)
25698 http://example.com(x<nowiki/>)
25699 !! end
25700
25701 !! test
25702 Links 7a. Don't add spurious <nowiki/>s between text-nodes and url-links (T66300)
25703 !! options
25704 parsoid=html2wt
25705 !! html/parsoid
25706 <p>x
25707 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>
25708 y
25709 "<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>"
25710 (<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>)
25711 (<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>) foo
25712 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>,
25713 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>, foo
25714 </p>
25715 !! wikitext
25716 x
25717 http://example.com
25718 y
25719 "http://example.com"
25720 (http://example.com)
25721 (http://example.com) foo
25722 http://example.com,
25723 http://example.com, foo
25724 !! html/php
25725 <p>x
25726 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
25727 y
25728 "<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>"
25729 (<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
25730 (<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>) foo
25731 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>,
25732 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>, foo
25733 </p>
25734 !! end
25735
25736 !! test
25737 Links 7b. Don't add spurious <nowiki/>s between text-nodes and url-links (T66300)
25738 !! options
25739 parsoid=html2wt
25740 !! html/parsoid
25741 <p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>.,;:!?\
25742 -<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>:</p>
25743 !! wikitext
25744 http://example.com.,;:!?\
25745 -http://example.com:
25746 !! html/php
25747 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>.,;:!?\
25748 -<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>:
25749 </p>
25750 !! end
25751
25752 !! test
25753 Links 8. Add <nowiki/>s between text-nodes and RFC-links when required (T66300)
25754 !! options
25755 parsoid=html2wt
25756 !! html/parsoid
25757 <p><a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>4
25758 <a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y
25759 X<a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y</p>
25760 !! wikitext
25761 RFC 123<nowiki/>4
25762 RFC 123<nowiki/>y
25763 X<nowiki/>RFC 123<nowiki/>y
25764 !! end
25765
25766 !! test
25767 Links 9. Don't add spurious <nowiki/>s between text-nodes and RFC-links (T66300)
25768 !! options
25769 parsoid=html2wt
25770 !! html/parsoid
25771 <p><a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>?foo
25772 <a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>&amp;foo
25773 -<a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>-
25774 </p>
25775 !! wikitext
25776 RFC 123?foo
25777 RFC 123&foo
25778 -RFC 123-
25779 !! html/php
25780 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc123">RFC 123</a>?foo
25781 <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc123">RFC 123</a>&amp;foo
25782 -<a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc123">RFC 123</a>-
25783 </p>
25784 !! end
25785
25786 !! test
25787 Links 10. Add <nowiki/>s between text-nodes and PMID-links when required (T66300)
25788 !! options
25789 parsoid=html2wt
25790 !! html/parsoid
25791 <p><a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>4
25792 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
25793 X<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
25794 !! wikitext
25795 PMID 123<nowiki/>4
25796 PMID 123<nowiki/>y
25797 X<nowiki/>PMID 123<nowiki/>y
25798 !! end
25799
25800 !! test
25801 Links 11. Don't add spurious <nowiki/>s between text-nodes and PMID-links (T66300)
25802 !! options
25803 parsoid=html2wt
25804 !! html/parsoid
25805 <p><a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>?foo
25806 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>&foo
25807 -<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>-
25808 </p>
25809 !! wikitext
25810 PMID 123?foo
25811 PMID 123&foo
25812 -PMID 123-
25813 !! html/php
25814 <p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract">PMID 123</a>?foo
25815 <a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract">PMID 123</a>&amp;foo
25816 -<a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract">PMID 123</a>-
25817 </p>
25818 !! end
25819
25820 !! test
25821 Links 12. Add <nowiki/>s between text-nodes and ISBN-links when required (T66300)
25822 !! options
25823 parsoid=html2wt
25824 !! html/parsoid
25825 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>1
25826 <a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>x
25827 a<a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>b
25828 </p>
25829 !! wikitext
25830 ISBN 1234567890<nowiki/>1
25831 ISBN 1234567890<nowiki/>x
25832 a<nowiki/>ISBN 1234567890<nowiki/>b
25833 !! end
25834
25835 !! test
25836 Links 13. Don't add spurious <nowiki/>s between text-nodes and ISBN-links (T66300)
25837 !! options
25838 parsoid=html2wt
25839 !! html/parsoid
25840 <p>-<a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>'s
25841 !! wikitext
25842 -ISBN 1234567890's
25843 !! html/php
25844 <p>-<a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>'s
25845 </p>
25846 !! end
25847
25848 !! test
25849 Links 14. Protect link-like plain text. (Parsoid bug T78425)
25850 !! options
25851 parsoid=html2wt
25852 !! html/*
25853 <p>this is not a link: http://example.com
25854 </p>
25855 !! wikitext
25856 this is not a link: <nowiki>http://example.com</nowiki>
25857 !! end
25858
25859 !! test
25860 Links 15. Link trails can't become link prefixes.
25861 !! options
25862 language=is
25863 parsoid=html2wt
25864 !! html/parsoid
25865 <p><a rel="mw:WikiLink" href="Söfnuður" title="Söfnuður" data-parsoid='{"stx":"simple","tail":"-"}'>Söfnuður-</a><a rel="mw:WikiLink" href="00" title="00">00</a></p>
25866 !! wikitext
25867 [[Söfnuður]]-[[00]]
25868 !! html/php
25869 <p><a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">Söfnuður-</a><a href="/wiki/00" title="00">00</a>
25870 </p>
25871 !! end
25872
25873 #### --------------- Quotes ---------------
25874 #### 1. Quotes inside <b> and <i>
25875 #### 2. Link fragments separated by <i> and <b> tags
25876 #### 3. Link fragments inside <i> and <b>
25877 #### 4. No escaping needed
25878 #### --------------------------------------
25879 !! test
25880 1a. Quotes inside <b> and <i>
25881 !! options
25882 parsoid=html2wt
25883 !! html/*
25884 <p><i>'foo'</i>
25885 <i>''foo''</i>
25886 <i>'''foo'''</i>
25887 <i>foo</i>'s
25888 <b>'foo'</b>
25889 <b>''foo''</b>
25890 <b>'''foo'''</b>
25891 <b>foo'<i>bar'</i>baz</b>
25892 <b>foo</b>'s
25893 '<i>foo</i>
25894 <i>foo</i>'
25895 <i>foo'</i>'
25896 '<i>foo</i>'
25897 '<b>foo</b>
25898 <b>foo</b>'
25899 '<b>foo</b>'
25900 <i>fools'<span> errand</span></i>
25901 <i><span>fool</span>'s errand</i>
25902 '<i>foo</i> bar '<i>baz</i>
25903 a|!*#-:;+-~[]{}b'<i>x</i>
25904 </p>
25905 !! wikitext
25906 ''<nowiki/>'foo'''
25907 ''<nowiki>''foo''</nowiki>''
25908 ''<nowiki>'''foo'''</nowiki>''
25909 ''foo''<nowiki/>'s
25910 '''<nowiki/>'foo''''
25911 '''<nowiki>''foo''</nowiki>'''
25912 '''<nowiki>'''foo'''</nowiki>'''
25913 '''foo'<nowiki/>''bar'<nowiki/>''baz'''
25914 '''foo'''<nowiki/>'s
25915 '''foo''
25916 ''foo''<nowiki/>'
25917 ''foo'''<nowiki/>'
25918 '''foo''<nowiki/>'
25919 ''''foo'''
25920 '''foo'''<nowiki/>'
25921 ''''foo'''<nowiki/>'
25922 ''fools'<span> errand</span>''
25923 ''<span>fool</span>'s errand''
25924 '<nowiki/>''foo'' bar '''baz''
25925 a|!*#-:;+-~[]{}b'''x''
25926 !! end
25927
25928 !! test
25929 1b. Quotes inside <b> and <i> with other tags on same line
25930 !! options
25931 parsoid=html2wt
25932 !! html/parsoid
25933 '<i>a</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
25934 <i>a'</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
25935 <i>a'</i> foo <b><a rel="mw:WikiLink" href="Bar" title="Bar" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[bar]]"}},"i":0}}]}'>bar</a></b>
25936 <a rel="mw:WikiLink" href="Foo" title="Foo">foo</a> x'<i><a href="Bar" rel="mw:WikiLink" title="Bar">bar</a></i>
25937 '<i>foo</i> <span class="mw-ref" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span>
25938 '<i>foo</i> <div title="name">test</div>
25939 '<i>foo</i> and <br data-parsoid='{"stx":"html","noClose":true}'/> bar
25940 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
25941 <li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="./Main_Page#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">test</span></li>
25942 </ol>
25943 !! wikitext
25944 '''a'' foo ''[[bar]]''
25945 ''a''' foo ''[[bar]]''
25946 ''a''' foo '''{{echo|[[bar]]}}'''
25947 [[foo]] x'''[[bar]]''
25948 '''foo'' <ref>test</ref>
25949 '''foo'' <div title="name">test</div>
25950 '''foo'' and <br> bar
25951 <references />
25952 !! end
25953
25954 !! test
25955 2. Link fragments separated by <i> and <b> tags
25956 !! options
25957 parsoid=html2wt
25958 !! html/parsoid
25959 <p>[[<i>foo</i>hello]]</p>
25960 <p>[[<b>foo</b>hello]]</p>
25961 !! wikitext
25962 [[''foo''<nowiki>hello]]</nowiki>
25963
25964 [['''foo'''<nowiki>hello]]</nowiki>
25965 !! end
25966
25967 # FIXME: Escaping one or both of [[ and ]] is also acceptable --
25968 # this is one of the shortcomings of this format
25969 !! test
25970 3. Link fragments inside <i> and <b>
25971 !! options
25972 parsoid=html2wt
25973 !! html/parsoid
25974 <p><i>[[foo</i>]]</p>
25975 <p><b>[[foo</b>]]</p>
25976 !! wikitext
25977 ''[[foo''<nowiki>]]</nowiki>
25978
25979 '''[[foo'''<nowiki>]]</nowiki>
25980 !! end
25981
25982 !! test
25983 4. No escaping needed
25984 !! options
25985 parsoid=html2wt
25986 !! html/parsoid
25987 <p>'<span><i>bar</i></span>'
25988 '<span><b>bar</b></span>'
25989 'a:b'foo
25990 </p>
25991 !! wikitext
25992 '<span>''bar''</span>'
25993 '<span>'''bar'''</span>'
25994 'a:b'foo
25995 !! end
25996
25997 #### ----------- Paragraphs ---------------
25998 #### 1. No unnecessary escapes
25999 #### --------------------------------------
26000
26001 !! test
26002 1. No unnecessary escapes
26003 !! options
26004 parsoid=html2wt
26005 !! html/parsoid
26006 <p>bar <span>[[foo]]</span>
26007 </p><p>=bar <span>[[foo]]</span>
26008 </p><p>[[bar <span>[[foo]]</span>
26009 </p><p>]]bar <span>[[foo]]</span>
26010 </p><p>=bar <span>foo]]</span>=
26011 </p>
26012 !! wikitext
26013 bar <span><nowiki>[[foo]]</nowiki></span>
26014
26015 =bar <span><nowiki>[[foo]]</nowiki></span>
26016
26017 [[bar <span><nowiki>[[foo]]</nowiki></span>
26018
26019 ]]bar <span><nowiki>[[foo]]</nowiki></span>
26020
26021 =bar <span>foo]]</span><nowiki>=</nowiki>
26022 !!end
26023
26024 #### ----------------------- PRE --------------------------
26025 #### 1. Leading whitespace in SOL context should be escaped
26026 #### ------------------------------------------------------
26027 !! test
26028 1. Leading whitespace in SOL context should be escaped
26029 !! options
26030 parsoid=html2wt
26031 !! html/parsoid
26032 <p> a</p>
26033
26034 <p> a</p>
26035
26036 <p> a(tab)</p>
26037
26038 <p> a
26039 <!--cmt-->
26040 a</p>
26041
26042 <p>a
26043 b</p>
26044
26045 <p>a
26046 b</p>
26047
26048 <p>a
26049 b</p>
26050 !! wikitext
26051 <nowiki> </nowiki>a
26052
26053 <nowiki> </nowiki> a
26054
26055 a(tab)
26056
26057 <nowiki> </nowiki> a
26058 <!--cmt-->
26059 <nowiki> </nowiki>a
26060
26061 a
26062 <nowiki> </nowiki>b
26063
26064 a
26065 b
26066
26067 a
26068 b
26069 !! html/php
26070 <p> a
26071 </p><p> a
26072 </p><p> a(tab)
26073 </p><p> a
26074 a
26075 </p><p>a
26076 b
26077 </p><p>a
26078 b
26079 </p><p>a
26080 b
26081 </p>
26082 !! end
26083
26084 !! test
26085 2. Leading whitespace in non-indent-pre contexts should not be escaped
26086 !! options
26087 parsoid=html2wt
26088 !! html/parsoid
26089 <p>foo <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
26090 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
26091 <li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><i>a</i>
26092 b</span></li>
26093 </ol>
26094 !! wikitext
26095 foo <ref>''a''
26096 b</ref>
26097 <references />
26098 !! end
26099
26100 !! test
26101 3. Leading whitespace in indent-pre suppressing contexts should not be escaped
26102 !! options
26103 parsoid=html2wt
26104 !! html/parsoid
26105 <blockquote>
26106 <p>
26107 a
26108 <span>b</span>
26109 c</p>
26110 </blockquote>
26111 !! wikitext
26112 <blockquote>
26113 a
26114 <span>b</span>
26115 c
26116 </blockquote>
26117 !! end
26118
26119 !! test
26120 4. Leading whitespace in indent-pre suppressing contexts should not be escaped
26121 !! options
26122 parsoid=html2wt
26123 !! html/parsoid
26124 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
26125 !! wikitext
26126 [[File:Foobar.jpg|thumb|caption]]
26127 !! end
26128
26129 !! test
26130 5. Nowiki escaping should account for indent-pres
26131 !! options
26132 parsoid=html2wt
26133 !! html/parsoid
26134 <pre>==foo==</pre>
26135 !! wikitext
26136 ==foo==
26137 !! end
26138
26139 !!test
26140 T95794: nowiki escaping should account for leading space at start-of-line in an indent-pre block
26141 !! options
26142 parsoid=html2wt
26143 !! html/parsoid
26144 <pre>
26145 * foo
26146 * bar
26147 </pre>
26148 !! wikitext
26149 * foo
26150 * bar
26151 !! end
26152
26153 #### --------------- Behavior Switches --------------------
26154
26155 !! test
26156 1. Valid behavior switches should be escaped
26157 !! options
26158 parsoid=html2wt
26159 !! html/parsoid
26160 __TOC__
26161 <i>__TOC__</i>
26162 !! wikitext
26163 <nowiki>__TOC__</nowiki>
26164 ''<nowiki>__TOC__</nowiki>''
26165 !! end
26166
26167 !! test
26168 2. Invalid behavior switches should not be escaped
26169 !! options
26170 parsoid=html2wt
26171 !! html/parsoid
26172 __TOO__
26173 __|__
26174 !! wikitext
26175 __TOO__
26176 __|__
26177 !! end
26178
26179 # We use indent-pre as an indirect way to test for sol-transparent behavior.
26180 !! test
26181 Behavior switches should be SOL-transparent
26182 !! options
26183 parsoid=html2wt
26184 !! html/parsoid
26185 <meta property="mw:PageProp/toc" />
26186
26187 <!-- this one's bogus -->
26188 <pre>__TOO__</pre>
26189
26190 <pre data-parsoid='{}'><meta property="mw:PageProp/toc" data-parsoid='{"src":"__TOC__","magicSrc":"__TOC__"}'/> foo</pre>
26191
26192 <meta property="mw:PageProp/toc" data-parsoid='{"src":"__TOC__","magicSrc":"__TOC__"}'/><pre data-parsoid='{}'>bar</pre>
26193 !! wikitext
26194 __TOC__
26195
26196 <!-- this one's bogus -->
26197 __TOO__
26198
26199 __TOC__ foo
26200
26201 __TOC__
26202 bar
26203 !! end
26204
26205 #### --------------- HTML tags ---------------
26206 #### 1. a tags
26207 #### 2. other tags
26208 #### 3. multi-line html tag
26209 #### 4. extension tags
26210 #### -----------------------------------------
26211 !! test
26212 1. a tags
26213 !! options
26214 parsoid=html2wt
26215 !! html/parsoid
26216 &lt;a href=&quot;http://google.com&quot;&gt;google&lt;/a&gt;
26217 !! wikitext
26218 <a href="http://google.com">google</a>
26219 !! end
26220
26221 !! test
26222 2. other tags
26223 !! options
26224 parsoid=html2wt
26225 !! html/parsoid
26226 <ul><li> &lt;div&gt;foo&lt;/div&gt;</li>
26227 <li> &lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;</li>
26228 <li> &lt;td&gt;</li></ul>
26229
26230 !! wikitext
26231 * <nowiki><div>foo</div></nowiki>
26232 * <nowiki><div style="color:red">foo</div></nowiki>
26233 * <nowiki><td></nowiki>
26234 !! end
26235
26236 !! test
26237 3. multi-line html tag
26238 !! options
26239 parsoid=html2wt
26240 !! html/parsoid
26241 <p>&lt;div
26242 &gt;foo&lt;/div
26243 &gt;
26244 </p>
26245 !! wikitext
26246 <nowiki><div
26247 >foo</div
26248 ></nowiki>
26249 !! end
26250
26251 !! test
26252 4. extension tags
26253 !! options
26254 parsoid=html2wt
26255 !! html/parsoid
26256 <p>&lt;ref&gt;foo&lt;/ref&gt;
26257 </p><p>&lt;ref&gt;bar
26258 </p><p>baz&lt;/ref&gt;
26259 </p>
26260 !! wikitext
26261 <nowiki><ref>foo</ref></nowiki>
26262
26263 <nowiki><ref>bar</nowiki>
26264
26265 baz<nowiki></ref></nowiki>
26266 !! end
26267
26268 #### --------------- Others ---------------
26269 !! test
26270 Escaping nowikis
26271 !! options
26272 parsoid=html2wt
26273 !! html/parsoid
26274 <p>&lt;nowiki&gt;foo&lt;/nowiki&gt;
26275 </p>
26276 !! wikitext
26277 &lt;nowiki&gt;foo&lt;/nowiki&gt;
26278 !! end
26279
26280 ## The quote-char in the input is necessary for triggering the bug
26281 !! test
26282 (T54035) Nowiki-escaping should not get tripped by " :" in text
26283 !! options
26284 parsoid=html2wt
26285 !! html/parsoid
26286 <p>foo's bar :</p>
26287 !! wikitext
26288 foo's bar :
26289 !! end
26290
26291 #----------- End of wikitext escaping tests --------------
26292
26293 !! test
26294
26295 Tag-like HTML structures are passed through as text
26296 !! wikitext
26297 <x y>
26298
26299 <x.y>
26300
26301 <x-y>
26302
26303 1>2
26304
26305 x<y
26306
26307 a>b
26308
26309 1<d e>f
26310 !! html
26311 <p>&lt;x y&gt;
26312 </p><p>&lt;x.y&gt;
26313 </p><p>&lt;x-y&gt;
26314 </p><p>1&gt;2
26315 </p><p>x&lt;y
26316 </p><p>a&gt;b
26317 </p><p>1&lt;d e&gt;f
26318 </p>
26319 !! end
26320
26321 !! test
26322 HTML tag with necessary entities in attributes
26323 !! wikitext
26324 <span title="&amp;amp;">foo</span>
26325 !! html
26326 <p><span title="&amp;amp;">foo</span>
26327 </p>
26328 !! end
26329
26330 !! test
26331 HTML tag with 'unnecessary' entity encoding in attributes
26332 !! wikitext
26333 <span title="&amp;">foo</span>
26334 !! html
26335 <p><span title="&amp;">foo</span>
26336 </p>
26337 !! end
26338
26339 !! test
26340 HTML tag with broken attribute value quoting
26341 !! options
26342 parsoid=wt2html,html2html
26343 !! wikitext
26344 <span title="Hello world>Foo</span>
26345 !! html/php
26346 <p><span title="Hello world">Foo</span>
26347 </p>
26348 !! html/parsoid
26349 <p><span title="Hello world">Foo</span></p>
26350 !! end
26351
26352 !! test
26353 Self-closed tag with broken attribute value quoting
26354 !! options
26355 parsoid=wt2html,html2html
26356 !! wikitext
26357 <div title="Hello world />Foo
26358 !! html/php+tidy
26359 <div title="Hello world"></div>
26360 <p>Foo</p>
26361 !! html/parsoid
26362 <div title="Hello world " data-parsoid='{"stx":"html","selfClose":true}'></div><p>Foo</p>
26363 !! end
26364
26365 !! test
26366 Table with broken attribute value quoting
26367 !! options
26368 parsoid=wt2html,html2html
26369 !! wikitext
26370 {|
26371 | title="Hello world|Foo
26372 |}
26373 !! html/php
26374 <table>
26375 <tr>
26376 <td title="Hello world">Foo
26377 </td></tr></table>
26378
26379 !! html/parsoid
26380 <table>
26381 <tr>
26382 <td title="Hello world">Foo
26383 </td></tr></table>
26384
26385 !! end
26386
26387 !! test
26388 Table with broken attribute value quoting on consecutive lines
26389 !! options
26390 parsoid=wt2html,html2html
26391 !! wikitext
26392 {|
26393 | title="Hello world|Foo
26394 | style="color:red|Bar
26395 |}
26396 !! html/php
26397 <table>
26398 <tr>
26399 <td title="Hello world">Foo
26400 </td>
26401 <td style="color:red">Bar
26402 </td></tr></table>
26403
26404 !! html/parsoid
26405 <table><tbody>
26406 <tr>
26407 <td title="Hello world">Foo
26408 </td><td style="color: red">Bar
26409 </td></tr></tbody></table>
26410
26411 !! end
26412
26413 !!test
26414 Accept empty td cell attribute
26415 !! wikitext
26416 {|
26417 | align="center" | foo || |
26418 |}
26419 !! html
26420 <table>
26421 <tr>
26422 <td align="center"> foo </td>
26423 <td>
26424 </td></tr></table>
26425
26426 !!end
26427
26428 !!test
26429 Non-empty attributes in th-cells
26430 !! wikitext
26431 {|
26432 ! Foo !! style="color: red" | Bar
26433 |}
26434 !! html
26435 <table>
26436 <tr>
26437 <th> Foo </th>
26438 <th style="color: red"> Bar
26439 </th></tr></table>
26440
26441 !!end
26442
26443 !!test
26444 Accept empty attributes in th-cells
26445 !! wikitext
26446 {|
26447 !| foo !!| bar
26448 |}
26449 !! html
26450 <table>
26451 <tr>
26452 <th> foo </th>
26453 <th> bar
26454 </th></tr></table>
26455
26456 !!end
26457
26458 !!test
26459 Empty table rows go away
26460 !! wikitext
26461 {|
26462 | Hello
26463 | there
26464 |- class="foo"
26465 |-
26466 |}
26467 !! html
26468 <table>
26469 <tr>
26470 <td> Hello
26471 </td>
26472 <td> there
26473 </td></tr>
26474
26475 </table>
26476
26477 !! end
26478
26479 ###
26480 ### Parsoid-centric tests for testing RTing of inter-element separators
26481 ### Edge cases not tested by existing parser tests and specific to
26482 ### Parsoid-specific serialization strategies.
26483 ###
26484
26485 !!test
26486 RT-ed inter-element separators should be valid separators
26487 !! wikitext
26488 {|
26489 |- [[foo]]
26490 |}
26491 !! html/php
26492 <table>
26493
26494 </table>
26495
26496 !! html/parsoid
26497 <table>
26498 <tbody><tr class='mw-empty-elt' data-parsoid='{"startTagSrc":"|-","a":{"[[foo]]":null},"sa":{"[[foo]]":""},"autoInsertedEnd":true}'></tr>
26499 </tbody></table>
26500 !!end
26501
26502 # Parsoid-only since PHP parser relies on Tidy for correct output
26503 !!test
26504 Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out
26505 !!options
26506 parsoid
26507 !! wikitext
26508 {|
26509 |<small>foo
26510 bar
26511 |}
26512
26513 {|
26514 |<small>foo<small>
26515 |}
26516 !! html
26517 <table>
26518 <tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo
26519 <p>bar</p></small></td></tr>
26520 </tbody></table>
26521
26522 <table>
26523 <tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo<small data-parsoid='{"stx":"html","autoInsertedEnd":true}'></small></small></td></tr>
26524 </tbody></table>
26525 !!end
26526
26527 # Note that the "style" attribute is really a template parameter here.
26528 # The = would have to be {{=}} if you wanted the literal.
26529 !!test
26530 Empty TD followed by TD with tpl-generated attribute
26531 !! wikitext
26532 {|
26533 |-
26534 |
26535 |{{echo|style='color:red'}}|foo
26536 |}
26537 !! html
26538 <table>
26539
26540 <tr>
26541 <td>
26542 </td>
26543 <td>foo
26544 </td></tr></table>
26545
26546 !!end
26547
26548 !!test
26549 Indented table with an empty td
26550 !! wikitext
26551 {|
26552 |-
26553 |
26554 |foo
26555 |}
26556 !! html
26557 <table>
26558
26559 <tr>
26560 <td>
26561 </td>
26562 <td>foo
26563 </td></tr></table>
26564
26565 !!end
26566
26567 ## We have some newline diffs RT-ing this edge case
26568 ## and it is not important enough -- we seem to be emitting
26569 ## at most 2 newlines after a </tr> and this is unrelated to
26570 ## the issue from T85627 that this is testing.
26571 !!test
26572 Indented table with blank lines in between (T85627)
26573 !! options
26574 parsoid=wt2html
26575 !! wikitext
26576 {|
26577 |foo
26578
26579
26580 |}
26581 !! html
26582 <table>
26583
26584 <tr>
26585 <td>foo
26586 </td></tr></table>
26587
26588 !!end
26589
26590 !!test
26591 Indented block & table
26592 !! wikitext
26593 <div>foo</div>
26594 {|
26595 |foo
26596 |}
26597 !! html/php
26598 <div>foo</div>
26599 <table>
26600 <tr>
26601 <td>foo
26602 </td></tr></table>
26603
26604 !! html/parsoid
26605 <div data-parsoid='{"stx":"html"}'>foo</div>
26606 <table><tbody>
26607 <tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'>foo</td></tr>
26608 </tbody></table>
26609 !!end
26610
26611 !! test
26612 Indent and comment before table row
26613 !! wikitext
26614 {|
26615 <!--hi-->|-
26616 | there
26617 |}
26618 !! html/php
26619 <table>
26620
26621 <tr>
26622 <td> there
26623 </td></tr></table>
26624
26625 !! html/parsoid
26626 <table>
26627 <!--hi--><tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
26628 <td data-parsoid='{"autoInsertedEnd":true}'> there</td></tr>
26629 </tbody></table>
26630 !! end
26631
26632 # Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext
26633 !!test
26634 Empty TR followed by a template-generated TR
26635 !!options
26636 parsoid
26637 !! wikitext
26638 {|
26639 |-
26640 {{echo|<tr><td>foo</td></tr>}}
26641 |}
26642 !! html
26643 <table>
26644 <tbody>
26645 <tr class='mw-empty-elt'></tr>
26646 <tr about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<tr><td>foo</td></tr>"}},"i":0}}]}'>
26647 <td>foo</td></tr>
26648 </tbody></table>
26649 !!end
26650
26651 ## PHP and parsoid output differ for this, and since this is primarily
26652 ## for testing Parsoid's serializer, marking this Parsoid only
26653 !!test
26654 Empty TR followed by mixed-ws-comment line should RT correctly
26655 !!options
26656 parsoid
26657 !! wikitext
26658 {|
26659 |-
26660 <!--c-->
26661 |-
26662 <!--c--> <!--d-->
26663 |}
26664 !! html
26665 <table>
26666 <tbody>
26667 <tr class='mw-empty-elt'></tr>
26668 <!--c-->
26669 <tr>
26670 <!--c--> </tr><!--d-->
26671 </tbody></table>
26672
26673 !!end
26674
26675 !!test
26676 Multi-line image caption generated by templates with/without trailing newlines
26677 !! wikitext
26678 [[File:Foobar.jpg|thumb|300x300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}]]
26679 [[File:Foobar.jpg|thumb|300x300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}\n\n]]
26680 !! html/parsoid
26681 <figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a><figcaption>foo\n<span about="#mwt9" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"A"}},"i":0}}]}'>A</span>\n<span about="#mwt10" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"B"}},"i":0}}]}'>B</span>\n<span about="#mwt11" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"C"}},"i":0}}]}'>C</span></figcaption></figure>
26682 <figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a><figcaption>foo\n<span about="#mwt12" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"A"}},"i":0}}]}'>A</span>\n<span about="#mwt13" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"B"}},"i":0}}]}'>B</span>\n<span about="#mwt14" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"C"}},"i":0}}]}'>C</span>\n\n</figcaption></figure>
26683 !!end
26684
26685 !! test
26686 New element inserted (without intervening newlines) after an old sol-transparent node should serialize correctly
26687 !! options
26688 parsoid=html2wt
26689 !! html/parsoid
26690 <meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>foo&lt;/includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><p>new para</p>
26691
26692 <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{}'/><h1>new heading</h1>
26693 !! wikitext
26694 <includeonly>foo</includeonly>
26695 new para
26696
26697 [[Category:Foo]]
26698
26699 = new heading =
26700 !! end
26701
26702 ## PHP emits broken html for this, and since this is primarily
26703 ## a Parsoid serializer test, marking this Parsoid only
26704 !!test
26705 Improperly nested inline or quotes tags with whitespace in between
26706 !! wikitext
26707 <span> <s>x</span> </s>
26708 ''' ''x''' ''
26709 !! html/parsoid
26710 <p><span> <s>x</s></span><s> </s>
26711 <b> <i>x</i></b><i> </i>
26712 </p>
26713 !!end
26714
26715 !!test
26716 Encapsulate protected attributes from wt
26717 !! wikitext
26718 <div typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true">foo</div>
26719
26720 {| typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true"
26721 | ok
26722 |}
26723 !! html/parsoid
26724 <div data-x-typeof="mw:placeholder stuff" data-x-data-mw="whoo" data-x-data-parsoid="weird" data-x-data-parsoid-other="no" data-x-about="time" data-x-rel="mw:true">foo</div>
26725
26726 <table data-x-typeof="mw:placeholder stuff" data-x-data-mw="whoo" data-x-data-parsoid="weird" data-x-data-parsoid-other="no" data-x-about="time" data-x-rel="mw:true">
26727 <tbody><tr><td data-parsoid='{"autoInsertedEnd":true}'> ok</td></tr>
26728 </tbody></table>
26729 !!end
26730
26731 ## Currently the p-wrapper is fragile in how it adds / removes transformations.
26732 ## Having nested or stray pre tags results in the attempt to add duplicates,
26733 ## causing an assertion fail. This test tries to prevent that situation.
26734 !!test
26735 Ensure ParagraphWrapper can deal with stray closing pre tags
26736 !!options
26737 parsoid=wt2html
26738 !! wikitext
26739 plain text</pre>
26740 !! html/parsoid
26741 plain text
26742 !!end
26743
26744 !!test
26745 1. Ensure fostered text content is wrapped in element nodes
26746 !!options
26747 parsoid=wt2html
26748 !! wikitext
26749 <table>hi</table><table>ho</table>
26750 !! html/parsoid
26751 <p>hi</p>
26752 <table></table>
26753 <p>ho</p>
26754 <table></table>
26755 !!end
26756
26757 !!test
26758 2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost)
26759 !!options
26760 parsoid=wt2html,wt2wt
26761 !! wikitext
26762 <table>
26763 <tr> || ||
26764 <td> a
26765 </table>
26766 !! html/parsoid
26767 <p> || ||
26768 </p><table>
26769 <tbody><tr><td> a</td></tr>
26770 </tbody></table>
26771 !!end
26772
26773 !!test
26774 Encapsulation properly handles null DSR information from foster box
26775 !!options
26776 parsoid=wt2html,wt2wt
26777 !! wikitext
26778 {{echo|<table>foo<tr><td>bar</td></tr></table>}}
26779 !! html/parsoid
26780 <span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;<table>foo<tr><td>bar</td></tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span><table><tbody><tr><td>bar</td></tr></tbody></table>
26781 !!end
26782
26783 !!test
26784 1. Encapsulate foster-parented transclusion content
26785 !!options
26786 parsoid=wt2wt,wt2html
26787 !! wikitext
26788 <table>{{echo|foo<tr><td>bar</td></tr>}}</table>
26789 !! html/parsoid
26790 <p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo<tr><td>bar</td></tr>&quot;}},&quot;i&quot;:0}},&quot;</table>&quot;]}">foo</p><table>
26791 <tbody>
26792 <tr>
26793 <td>bar</td>
26794 </tr>
26795 </tbody>
26796 </table>
26797 !!end
26798
26799 !!test
26800 2. Encapsulate foster-parented transclusion content
26801 !!options
26802 parsoid=wt2wt,wt2html
26803 !! wikitext
26804 <table><div>{{echo|foo}}</div><tr><td>bar</td></tr></table>
26805 !! html/parsoid
26806 <div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo&quot;}},&quot;i&quot;:0}},&quot;</div><tr><td>bar</td></tr></table>&quot;]}">foo</div>
26807 <table>
26808 <tbody>
26809 <tr>
26810 <td>bar</td>
26811 </tr>
26812 </tbody>
26813 </table>
26814 !!end
26815
26816 !!test
26817 3. Encapsulate foster-parented transclusion content
26818 !!options
26819 parsoid=wt2wt,wt2html
26820 !! wikitext
26821 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
26822 !! html/parsoid
26823 <div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div><tr><td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
26824 <p>foo</p>
26825 </div>
26826 <table>
26827 <tbody>
26828 <tr>
26829 <td>bar</td>
26830 </tr>
26831 </tbody>
26832 </table>
26833 !!end
26834
26835 !!test
26836 4. Encapsulate foster-parented transclusion content
26837 !!options
26838 parsoid=wt2wt,wt2html
26839 !! wikitext
26840 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
26841 !! html/parsoid
26842 <div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div><tr><td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
26843 <p>foo</p>
26844 </div>
26845 <table>
26846 <tbody>
26847 <tr>
26848 <td>bar</td>
26849 </tr>
26850 </tbody>
26851 </table>
26852 !!end
26853
26854 !!test
26855 5. Encapsulate foster-parented transclusion content
26856 !!options
26857 parsoid=wt2wt,wt2html
26858 !! wikitext
26859 <table><tr><td><div><p>{{echo|foo</p></div></td>foo}}</tr></table>
26860 !! html/parsoid
26861 <p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><tr><td><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo&quot;}},&quot;i&quot;:0}},&quot;</tr></table>&quot;]}">foo</p>
26862 <table>
26863 <tbody>
26864 <tr>
26865 <td>
26866 <div>
26867 <p>foo</p>
26868 </div>
26869 </td>
26870 </tr>
26871 </tbody>
26872 </table>
26873 !!end
26874
26875 !!test
26876 6. Encapsulate foster-parented transclusion content
26877 !!options
26878 parsoid=wt2wt,wt2html
26879 !! wikitext
26880 <table><tr><td><div><p>{{echo|foo</p></div></td>foo</tr></table>}}<p>ok</p>
26881 !! html/parsoid
26882 <p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><tr><td><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo</tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</p>
26883 <table>
26884 <tbody>
26885 <tr>
26886 <td>
26887 <div>
26888 <p>foo</p>
26889 </div>
26890 </td>
26891 </tr>
26892 </tbody>
26893 </table>
26894 <p>ok</p>
26895 !!end
26896
26897 !!test
26898 7. Encapsulate foster-parented transclusion content
26899 !!options
26900 parsoid=wt2wt,wt2html
26901 !! wikitext
26902 <table>{{echo|<p>foo</p>}}<td>bar</td></table>
26903 !! html/parsoid
26904 <p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;<p>foo</p>&quot;}},&quot;i&quot;:0}},&quot;<td>bar</td></table>&quot;]}">foo</p>
26905 <table>
26906 <tbody>
26907 <tr>
26908 <td>bar</td>
26909 </tr>
26910 </tbody>
26911 </table>
26912 !!end
26913
26914 # Note that the wt is broken on purpose: the = should be {{=}} if you
26915 # don't want it to be a template parameter key.
26916 !!test
26917 8. Encapsulate foster-parented transclusion content
26918 !!options
26919 parsoid=wt2wt,wt2html
26920 !! wikitext
26921 {{echo|a
26922 }}{|{{echo|style='color:red'}}
26923 |-
26924 |b
26925 |}
26926 !! html/parsoid
26927 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n"}},"i":0}}]}'>a</p>
26928 <span> </span>
26929 <p typeof="mw:Transclusion" data-mw='{"parts":["{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"style":{"wt":"&#39;color:red&#39;"}},"i":0}},"\n|-\n|b\n|}"]}'>{{{1}}}</p>
26930 <table>
26931 <tbody>
26932 <tr>
26933 <td>b</td>
26934 </tr>
26935 </tbody>
26936 </table>
26937 !!end
26938
26939 !!test
26940 9. Encapsulate foster-parented transclusion content
26941 !!options
26942 parsoid=wt2wt,wt2html
26943 !! wikitext
26944 <table>{{echo|hi</table>hello}}
26945 !! html/parsoid
26946 <p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;/table>hello"}},"i":0}}]}' data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"pi":[[{"k":"1"}]]}'>hi</p><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><p about="#mwt2">hello</p>
26947 !!end
26948
26949 !!test
26950 Table in fosterable position
26951 !!options
26952 parsoid=wt2html
26953 !! wikitext
26954 {{OpenTable}}
26955 <div>
26956 {|
26957 |}
26958 </div>
26959 |}
26960 !! html/parsoid
26961 <div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"OpenTable","href":"./Template:OpenTable"},"params":{},"i":0}},"\n&lt;div>\n"]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[]]}'></div><span about="#mwt1">
26962 </span>
26963 <table about="#mwt1" data-parsoid='{"autoInsertedEnd":true}'></table>
26964
26965 <table>
26966 </table>
26967 !!end
26968
26969 # Parsoid only for T66747
26970 !! test
26971 Properly encapsulate empty-content transclusions in fosterable positions
26972 !! wikitext
26973 <table>
26974 {{#if:|
26975 <td>foo</td>
26976 }}
26977 </table>
26978 !! html/parsoid
26979 <table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>\n",{"template":{"target":{"wt":"#if:","function":"if"},"params":{"1":{"wt":"\n&lt;td>foo&lt;/td>\n"}},"i":0}},"\n&lt;/table>"]}' data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}'>
26980
26981 </table>
26982 !! end
26983
26984 !! test
26985 Always encapsulate foster box when template range is expanded to table
26986 !! options
26987 parsoid=wt2wt
26988 !! wikitext
26989 {|
26990 hello
26991 {{OpenTable}}
26992 |}
26993 !! html/parsoid
26994
26995 !! end
26996
26997 !! test
26998 T115289: Unclosed table
26999 !! wikitext
27000 {{echo|<table>}}<!--c-->[[Category:Two]]
27001 !! html/parsoid
27002 <link rel="mw:PageProp/Category" href="./Category:Two" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:Two"},"sa":{"href":"Category:Two"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;table>"}},"i":0}},"&lt;!--c-->[[Category:Two]]"]}'/><table about="#mwt1" data-parsoid='{"stx":"html","autoInsertedEnd":true}'><!--c--></table>
27003 !! end
27004
27005 !! test
27006 T115289: Don't migrate newlines out of tables with fostered content
27007 !! wikitext
27008 <table><td></td>{{echo|<tr>[[Category:One]]}}<!--c-->[[Category:Two]]
27009 !! html/parsoid
27010 <link rel="mw:PageProp/Category" href="./Category:One" about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:One"},"sa":{"href":"Category:One"},"fostered":true,"pi":[[{"k":"1"}]]}' data-mw='{"parts":["&lt;table>&lt;td>&lt;/td>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;tr>[[Category:One]]"}},"i":0}},"&lt;!--c-->[[Category:Two]]"]}'/><link rel="mw:PageProp/Category" href="./Category:Two" about="#mwt2"/><table about="#mwt2" data-parsoid='{"stx":"html","autoInsertedEnd":true}'><tbody><tr><td></td></tr><tr><!--c--></tr></tbody></table>
27011 !! end
27012
27013 !! test
27014 T73074: More fostering fun
27015 !! wikitext
27016 <table><td></td>{{echo|<tr>}}<!--c-->[[Category:Two]]
27017 !! html/parsoid
27018 <link rel="mw:PageProp/Category" href="./Category:Two" data-parsoid='{"stx":"simple","a":{"href":"./Category:Two"},"sa":{"href":"Category:Two"},"fostered":true}'/><table data-parsoid='{"stx":"html","autoInsertedEnd":true}'><tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"stx":"html"}'></td></tr><tr about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;tr>"}},"i":0}},"&lt;!--c-->[[Category:Two]]"]}'><!--c--></tr></tbody></table>
27019 !! end
27020
27021 !!test
27022 Support <object> element with .data attribute
27023 !!options
27024 parsoid=html2wt
27025 !! html/parsoid
27026 <object data="test.swf"></object>
27027 !! wikitext
27028 <object data="test.swf"></object>
27029 !!end
27030
27031 !! test
27032 Don't block XML namespace declaration
27033 !! wikitext
27034 <span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">MediaWiki</span>
27035 !! html/php
27036 <p><span xmlns:dct="http&#58;//purl.org/dc/terms/" property="dct:title">MediaWiki</span>
27037 </p>
27038 !! html/parsoid
27039 <p><span xmlns:dct="http://purl.org/dc/terms/" data-x-property="dct:title" data-parsoid='{"stx":"html"}'>MediaWiki</span></p>
27040 !! end
27041
27042 # -----------------------------------------------------------------
27043 # The following section of tests are primarily to spec requirements
27044 # around Parsoid's serialization (old, new, edited content)
27045 #
27046 # All these tests are marked Parsoid html2wt and html2html only
27047 # ----------------------------------------------------------------
27048
27049 !! test
27050 Ignore rel attribute in a-tags during serialization to url-links
27051 !! options
27052 parsoid=html2wt
27053 !! html/parsoid
27054 <a href='http://en.wikipedia.org/wiki/Foobar'>http://en.wikipedia.org/wiki/Foobar</a>
27055 <a href='http://en.wikipedia.org/wiki/Foobar' rel='mw:ExtLink'>http://en.wikipedia.org/wiki/Foobar</a>
27056 <a href='http://en.wikipedia.org/wiki/Foobar' rel='mw:WikiLink'>http://en.wikipedia.org/wiki/Foobar</a>
27057 !! wikitext
27058 http://en.wikipedia.org/wiki/Foobar
27059 http://en.wikipedia.org/wiki/Foobar
27060 http://en.wikipedia.org/wiki/Foobar
27061 !! end
27062
27063 # 'mi' is a localinterwiki prefix as well as a language
27064 !! test
27065 Serialize interwiki links pointing to the current wiki as plain wiki links (T67869)
27066 !! options
27067 parsoid=html2wt
27068 !! html/parsoid
27069 <p><a rel="mw:ExtLink" href="http://mi.wikipedia.org/wiki/Foo">Foo</a></p>
27070 !! wikitext
27071 [[Foo]]
27072 !! end
27073
27074 !! test
27075 Parsoid should accept interwiki shortcuts
27076 !! options
27077 parsoid=html2wt
27078 !! html/parsoid
27079 <p><a rel='mw:WikiLink' href='./fr:Foo'>Foo</a>
27080 <a rel='mw:ExtLink' href='./fr:Foo'>Foo</a>
27081 <a href='./fr:Foo'>Foo</a></p>
27082 <p><a rel='mw:WikiLink' href='fr%3AFoo'>Foo</a>
27083 <a rel='mw:ExtLink' href='fr%3AFoo'>Foo</a>
27084 <a href='fr%3AFoo'>Foo</a></p>
27085 <p><a href='FR%3AFoo'>Foo</a>
27086 <a href='./FR:Foo'>Foo</a></p>
27087 !! wikitext
27088 [[:fr:Foo|Foo]]
27089 [[:fr:Foo|Foo]]
27090 [[:fr:Foo|Foo]]
27091
27092 [[:fr:Foo|Foo]]
27093 [[:fr:Foo|Foo]]
27094 [[:fr:Foo|Foo]]
27095
27096 [[:fr:Foo|Foo]]
27097 [[:fr:Foo|Foo]]
27098 !! end
27099
27100 !! test
27101 Parsoid should not accept invalid interwiki shortcuts
27102 !! options
27103 parsoid=html2wt
27104 !! html/parsoid
27105 <p><a rel='mw:WikiLink' href='news:Foo'>Foo</a>
27106 <a rel='mw:ExtLink' href='news:Foo'>Foo</a>
27107 <a href='news:Foo'>Foo</a></p>
27108 !! wikitext
27109 [news:Foo Foo]
27110 [news:Foo Foo]
27111 [news:Foo Foo]
27112 !! end
27113
27114 # See T93839
27115 !! test
27116 New wikilinks should be serialized properly
27117 !! options
27118 parsoid=html2wt
27119 !! html/parsoid
27120 <a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{}'>Foo</a>
27121 <a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>
27122 <a href="//en.wikipedia.org/wiki/Foo">//en.wikipedia.org/wiki/Foo</a>
27123 <a href="http://en.wikipedia.org/wiki/Foo">http://en.wikipedia.org/wiki/Foo</a>
27124 <a href="//en.wikipedia.org/wiki/Foo_bar">//en.wikipedia.org/wiki/Foo bar</a>
27125 !! wikitext
27126 [[Foo]]
27127 [[Foo]]
27128 [[:en:Foo|//en.wikipedia.org/wiki/Foo]]
27129 http://en.wikipedia.org/wiki/Foo
27130 [[:en:Foo_bar|//en.wikipedia.org/wiki/Foo bar]]
27131 !! end
27132
27133 !! test
27134 New wiki links (href variations)
27135 !! options
27136 parsoid=html2wt
27137 !! html/parsoid
27138 <a rel="mw:WikiLink" href="./Foo_bar">Foo_bar</a>
27139 <a rel="mw:WikiLink" href="Foo_bar">Foo_bar</a>
27140 <a rel="mw:WikiLink" href="Foo bar">Foo_bar</a>
27141 <a rel="mw:WikiLink" href="./Toxine_bact%C3%A9rienne">Toxine bactérienne</a>
27142 !! wikitext
27143 [[Foo_bar]]
27144 [[Foo_bar]]
27145 [[Foo_bar]]
27146 [[Toxine bactérienne]]
27147 !! end
27148
27149 !! test
27150 New wiki links (content string variations)
27151 !! options
27152 parsoid=html2wt
27153 !! html/parsoid
27154 <a rel="mw:WikiLink" href="./Foo_bar">Foo_bar</a>
27155 <a rel="mw:WikiLink" href="./Foo_bar">Foo bar</a>
27156 <a rel="mw:WikiLink" href="./Foo_bar">./Foo_bar</a>
27157 !! wikitext
27158 [[Foo_bar]]
27159 [[Foo bar]]
27160 [[Foo_bar|./Foo_bar]]
27161 !! end
27162
27163 !! test
27164 New category links (href variations)
27165 !! options
27166 parsoid=html2wt
27167 !! html/parsoid
27168 <link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne" />
27169 <link rel="mw:PageProp/Category" href="./Category:Toxine_bact%C3%A9rienne" />
27170 <link rel="mw:PageProp/Category" href="Category:Toxine_bact%C3%A9rienne" />
27171 !! wikitext
27172 [[Category:Toxine bactérienne]]
27173 [[Category:Toxine bactérienne]]
27174 [[Category:Toxine bactérienne]]
27175 !! end
27176
27177 !! test
27178 New sol transparent links don't need indent-pre nowiki protection
27179 !! options
27180 parsoid=html2wt
27181 language=de
27182 !! html/parsoid
27183 <link rel="mw:PageProp/redirect" href="./Main_Page">
27184 <!-- this is good --> <link rel="mw:PageProp/Category" href="./Category:Good" />
27185 <!-- this is great --> <link rel="mw:PageProp/Category" href="./Kategorie:Great" />
27186 !! wikitext
27187 #WEITERLEITUNG [[Main Page]]
27188 <!-- this is good --> [[Category:Good]]
27189 <!-- this is great --> [[Kategorie:Great]]
27190 !! end
27191
27192 !! test
27193 New interlanguage links (href variations)
27194 !! options
27195 parsoid=html2wt
27196 !! html/parsoid
27197 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine bactérienne" />
27198 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine_bactérienne" />
27199 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine_bact%C3%A9rienne" />
27200 !! wikitext
27201 [[es:Toxine bactérienne]]
27202 [[es:Toxine_bactérienne]]
27203 [[es:Toxine_bactérienne]]
27204 !! end
27205
27206 !! test
27207 Image: Modifying size of an image (1)
27208 !! options
27209 parsoid={
27210 "modes": ["wt2wt"],
27211 "changes": [
27212 ["img[height]", "attr", "height", "22"],
27213 ["img[width]", "attr", "width", "200"]
27214 ]
27215 }
27216 !! wikitext
27217 [[Image:Foobar.jpg|230x230px]]
27218 !! wikitext/edited
27219 [[Image:Foobar.jpg|200x200px]]
27220 !!end
27221
27222 !! test
27223 Image: Modifying size of an image (2)
27224 !! options
27225 parsoid={
27226 "modes": ["wt2wt"],
27227 "changes": [
27228 ["img[height]", "attr", "height", "100"],
27229 ["img[width]", "attr", "width", "500"]
27230 ]
27231 }
27232 !! wikitext
27233 [[Image:Foobar.jpg|230x230px]]
27234 !! wikitext/edited
27235 [[Image:Foobar.jpg|500x500px]]
27236 !!end
27237
27238 # Change in size is ignored so long as class='mw-default-size'
27239 !! test
27240 Image: Modifying size of an image (3)
27241 !! options
27242 parsoid={
27243 "modes": ["wt2wt"],
27244 "changes": [
27245 ["figure[class]", "removeClass", "mw-default-size"],
27246 ["figure img", "attr", "height", "19"],
27247 ["figure img", "attr", "width", "170"]
27248 ]
27249 }
27250 !! wikitext
27251 [[Image:Foobar.jpg|thumb]]
27252 !! wikitext/edited
27253 [[Image:Foobar.jpg|thumb|170x170px]]
27254 !!end
27255
27256 !! test
27257 Image: Modifying alignment of an image (T50665)
27258 !! options
27259 parsoid={
27260 "modes": ["wt2wt"],
27261 "changes": [
27262 ["figure[class]", "removeClass", "mw-halign-right"],
27263 ["figure[class]", "addClass", "mw-halign-left"]
27264 ]
27265 }
27266 !! wikitext
27267 [[Image:Foobar.jpg|thumb|caption|right]]
27268 !! wikitext/edited
27269 [[Image:Foobar.jpg|thumb|caption|left]]
27270 !! end
27271
27272 !! test
27273 Image: Modifying mw-default-size of an frameless image (T64805)
27274 !! options
27275 parsoid={
27276 "modes": ["wt2wt"],
27277 "changes": [
27278 ["figure.mw-default-size", "removeClass", "mw-default-size"]
27279 ]
27280 }
27281 !! wikitext
27282 [[Image:Foobar.jpg|frameless|right]]
27283 !! wikitext/edited
27284 [[Image:Foobar.jpg|frameless|right|220x220px]]
27285 !! end
27286
27287 !! test
27288 Image: Modifying valign of an image (T51221)
27289 !! options
27290 parsoid={
27291 "modes": ["wt2wt"],
27292 "changes": [
27293 ["*[typeof=\"mw:Image\"]", "removeClass", "mw-valign-middle"],
27294 ["*[typeof=\"mw:Image\"]", "addClass", "mw-valign-text-top"]
27295 ]
27296 }
27297 !! wikitext
27298 [[File:Foobar.jpg|20px|middle]]
27299 !! wikitext/edited
27300 [[File:Foobar.jpg|20px|text-top]]
27301 !! end
27302
27303 !! test
27304 Image: Modifying alt attribute of an image (T58400)
27305 !! options
27306 parsoid={
27307 "modes": ["wt2wt"],
27308 "changes": [
27309 ["img[alt]", "attr", "alt", "some alternate edited text"]
27310 ]
27311 }
27312 !! wikitext
27313 [[File:Foobar.jpg|thumb|some caption|alt=some alternate text]]
27314 !! wikitext/edited
27315 [[File:Foobar.jpg|thumb|some caption|alt=some alternate edited text]]
27316 !!end
27317
27318 !! test
27319 Image: Modifying caption of an image
27320 !! options
27321 parsoid={
27322 "modes": ["wt2wt"],
27323 "changes": [
27324 ["figcaption", "text", "new caption"]
27325 ]
27326 }
27327 !! wikitext
27328 [[Image:Foobar.jpg|thumb|original caption]]
27329 !! wikitext/edited
27330 [[Image:Foobar.jpg|thumb|new caption]]
27331 !!end
27332
27333 !! test
27334 Image: empty alt attribute (T50924)
27335 !! options
27336 parsoid
27337 !! wikitext
27338 [[File:Foobar.jpg|thumb|alt=|bar]]
27339 !! html
27340 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"alt","ak":"alt="},{"ck":"caption","ak":"bar"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img alt="" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"alt":"","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=","resource":"File:Foobar.jpg"}}'/></a><figcaption>bar</figcaption></figure>
27341 !! end
27342
27343 !! test
27344 Image: new attributes should be serialized in wiki's language for RTL languages (T53852)
27345 !! options
27346 parsoid=html2wt
27347 language=ar
27348 disabled
27349 !! html/parsoid
27350 <figure class="mw-default-size mw-halign-right" typeof="mw:Image/Thumb"><a href="./Imagen:Foobar.jpg"><img resource="./Imagen:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="20" width="180"/></a></figure>
27351 !! wikitext
27352 [[Imagen:Foobar.jpg|derecha|miniaturadeimagen]]
27353 !! end
27354
27355 !! test
27356 Image: Block level image should have \n before and after
27357 !! wikitext
27358 123
27359 [[File:Foobar.jpg|right|thumb|150x150px]]
27360 456
27361 !! html/parsoid
27362 <p>123</p>
27363 <figure class="mw-halign-right" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/150px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="17" width="150"/></a></figure>
27364 <p>456</p>
27365 !! end
27366
27367 !! test
27368 Image: New block level image should have \n before and after (existing content)
27369 !! wikitext
27370 123
27371 [[File:Foobar.jpg|right|thumb|150x150px]]
27372 456
27373 !! html/parsoid
27374 <p>123</p>
27375 <figure class="mw-halign-right" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"right","ak":"right"},{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"150x150px"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/150px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="17" width="150" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"17","width":"150"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure>
27376 <p>456</p>
27377 !! end
27378
27379 !! test
27380 Image: upright option (parsoid)
27381 !! wikitext
27382 [[File:Foobar.jpg|thumb|upright|caption]]
27383 [[File:Foobar.jpg|thumb|upright=0.5|caption]]
27384 [[File:Foobar.jpg|thumb|500x500px|upright=0.5|caption]]
27385 !! html/parsoid
27386 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/170px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="19" width="170"/></a><figcaption>caption</figcaption></figure>
27387 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/110px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="12" width="110"/></a><figcaption>caption</figcaption></figure>
27388 <figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/500px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="57" width="500"/></a><figcaption>caption</figcaption></figure>
27389 !! end
27390
27391 !! test
27392 Image: upright option is ignored on inline and frame images (parsoid)
27393 !! wikitext
27394 [[File:Foobar.jpg|500x500px|upright=0.5|caption]]
27395 !! html/parsoid
27396 <p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/500px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="57" width="500"/></a></span></p>
27397 !! end
27398
27399 !! test
27400 Image: in template parameter with empty parameter
27401 !! wikitext
27402 {{echo|[[File:Foobar.jpg|link=]]}}
27403 !! html/parsoid
27404 <p><span class="mw-default-size" typeof="mw:Transclusion mw:Image" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[File:Foobar.jpg|link=]]"}},"i":0}}]}'><span><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></span></span></p>
27405 !! end
27406
27407 !! test
27408 Image: from basic HTML (1)
27409 !! options
27410 parsoid=html2wt
27411 !! html/parsoid
27412 <span typeof="mw:Image">
27413 <img src="./File:Foobar.jpg" width=100 height=100 alt="Alt">
27414 </span>
27415 !! wikitext
27416 [[File:Foobar.jpg|link=|alt=Alt|100x100px]]
27417 !! end
27418
27419 !! test
27420 Image: from basic HTML (2)
27421 !! options
27422 parsoid=html2wt
27423 !! html/parsoid
27424 <img src="./File:Foobar.jpg" width=100 height=100 alt="Alt">
27425 !! wikitext
27426 [[File:Foobar.jpg|link=|alt=Alt|100x100px]]
27427 !! end
27428
27429 !! test
27430 Image: from basic HTML (3)
27431 !! options
27432 parsoid=html2wt
27433 !! html/parsoid
27434 <a href="Main"><img src="./File:Foobar.jpg" width=100 height=100 alt="Alt"></a>
27435 !! wikitext
27436 [[File:Foobar.jpg|link=Main|alt=Alt|100x100px]]
27437 !! end
27438
27439 !! test
27440 Image: from basic HTML (4)
27441 !! options
27442 parsoid=html2wt
27443 !! html/parsoid
27444 <img src="./File:Foobar.jpg">
27445 !! wikitext
27446 [[File:Foobar.jpg|link=]]
27447 !! end
27448
27449 !! test
27450 Image: Invalid title as link
27451 !! wikitext
27452 [[File:Foobar.jpg|link=<]]
27453 !! html/php
27454 <p><a href="/wiki/File:Foobar.jpg" class="image" title="link=&lt;"><img alt="link=&lt;" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
27455 </p>
27456 !! html/parsoid
27457 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"link","ak":"link=&lt;"}]}' data-mw='{"caption":"link=&amp;lt;"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
27458 !! end
27459
27460 !! test
27461 Lists: Serialize correctly even when list content is wrapped in p-tags (like VE does)
27462 !! options
27463 parsoid=html2wt
27464 !! html/parsoid
27465 <ul>
27466 <li><p>foo</p></li>
27467 </ul>
27468 !! wikitext
27469 * foo
27470 !! end
27471
27472 !! test
27473 Lists: Serialize correctly even when list tags has unneeded whitespace between tags
27474 !! options
27475 parsoid=html2wt
27476 !! html/parsoid
27477 <ul> <li>foo</li></ul>
27478 !! wikitext
27479 * foo
27480 !! end
27481
27482 !! test
27483 Don't strip leading whitespace when handling indent-pre suppressing tags
27484 !! options
27485 parsoid=html2wt
27486 !! html/parsoid
27487 <table>
27488 <tr><td> indented row</td></tr>
27489 </table>
27490 <blockquote><p>
27491 <b>This is very bold of you!</b>
27492 </p>
27493 <table><tr><td>
27494 indented cell (no pre-wrapping!)
27495 </td></tr></table>
27496 </blockquote>
27497 <p>foo</p>
27498 <div>bar</div>
27499 !! wikitext
27500 {|
27501 | indented row
27502 |}
27503 <blockquote>
27504 '''This is very bold of you!'''
27505
27506 {|
27507 |
27508 indented cell (no pre-wrapping!)
27509 |}
27510 </blockquote>
27511 foo
27512 <div>bar</div>
27513 !! end
27514
27515 !! test
27516 Nowiki-wrap leading whitespace when handling indent-pre inducing tags
27517 !! options
27518 parsoid=html2wt
27519 !! html/parsoid
27520 <p>foo</p>
27521 <span>bar</span>
27522
27523 <span>foo2
27524 </span>bar2
27525
27526 <div>foo</div>
27527 <span>bar</span>
27528
27529 <div>
27530 <span>foo</span>
27531 </div>
27532 !! wikitext
27533 foo
27534
27535 <span>bar</span>
27536
27537 <span>foo2
27538 <nowiki> </nowiki></span>bar2
27539
27540 <div>foo</div>
27541 <nowiki> </nowiki><span>bar</span>
27542
27543 <div>
27544 <nowiki> </nowiki><span>foo</span>
27545 </div>
27546 !! end
27547
27548 !! test
27549 Lists: Dont insert newlines in a serialized list item.
27550 !! options
27551 parsoid=html2wt
27552 !! html/parsoid
27553 <ul><li>a<br>b</li><li>c</li></ul>
27554 !! wikitext
27555 * a<br>b
27556 * c
27557 !! end
27558
27559 !! test
27560 1. Headings: Force sol-transparent links and behavior switches to serialize before/after
27561 !! options
27562 parsoid={
27563 "modes": ["html2wt"],
27564 "scrubWikitext": false
27565 }
27566 !! html/parsoid
27567 <h2>hello there<link href="./Category:A1" rel="mw:PageProp/Category" /></h2>
27568 <h2><link href="./Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
27569
27570 <h2><!--foo--> <link href="./Category:A3" rel="mw:PageProp/Category" /> how goes it</h2>
27571 <h2>it goes well <link href="./Category:A4" rel="mw:PageProp/Category" /> <!--bar--></h2>
27572
27573 <h2 data-parsoid='{}'>howdy<link href="./Category:A5" rel="mw:PageProp/Category" /></h2>
27574
27575 <h2><meta property="mw:PageProp/toc" /> ok</h2>
27576 !! wikitext
27577 == hello there [[Category:A1]] ==
27578
27579 == [[Category:A2]] hi pal ==
27580
27581 == <!--foo--> [[Category:A3]] how goes it ==
27582
27583 == it goes well [[Category:A4]] <!--bar--> ==
27584
27585 ==howdy [[Category:A5]]==
27586
27587 == __TOC__ ok ==
27588 !! end
27589
27590 !! test
27591 2. Headings: Force sol-transparent links and behavior switches to serialize before/after
27592 !! options
27593 parsoid={
27594 "modes": ["html2wt"],
27595 "scrubWikitext": true
27596 }
27597 !! html/parsoid
27598 <h2>hello there<link href="./Category:A1" rel="mw:PageProp/Category" /></h2>
27599 <h2><link href="./Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
27600
27601 <h2><!--foo--> <link href="./Category:A3" rel="mw:PageProp/Category" /> how goes it</h2>
27602 <h2>it goes well <link href="./Category:A4" rel="mw:PageProp/Category" /> <!--bar--></h2>
27603
27604 <h2><meta property="mw:PageProp/toc" /> ok</h2>
27605 !! wikitext
27606 == hello there ==
27607 [[Category:A1]]
27608 [[Category:A2]]
27609
27610 == hi pal ==
27611
27612 <!--foo--> [[Category:A3]]
27613
27614 == how goes it ==
27615
27616 == it goes well ==
27617 [[Category:A4]] <!--bar-->
27618
27619 __TOC__
27620
27621 == ok ==
27622 !! end
27623
27624 !! test
27625 Headings: Don't hoist metas that come from templates
27626 !! options
27627 parsoid={
27628 "modes": ["html2wt"],
27629 "scrubWikitext": true
27630 }
27631 !! html/parsoid
27632 <h2><span about="#mwt1" typeof="mw:Transclusion" data-parsoid="{}" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo [[Category:Foo]]"}},"i":0}}]}'>foo </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" data-parsoid="{}" /></h2>
27633 !! wikitext
27634 == {{echo|foo [[Category:Foo]]}} ==
27635 !! end
27636
27637 !! test
27638 Headings: Category in ref isn't hoisted
27639 !! options
27640 parsoid={
27641 "modes": ["html2wt"],
27642 "scrubWikitext": true
27643 }
27644 !! html/parsoid
27645 <h2> foo <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> </h2>
27646
27647 <ol class="references" typeof="mw:Extension/references" about="#mwt3" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="./Main_Page#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">bar <link rel="mw:PageProp/Category" href="./Category:Baz" /> </span></li></ol>
27648 !! wikitext
27649 == foo <ref>bar
27650 [[Category:Baz]] </ref> ==
27651
27652 <references />
27653 !! end
27654
27655 !! test
27656 Parsoid: Serialize positional parameters with = in them as named parameter
27657 !! options
27658 parsoid=html2wt
27659 !! html/parsoid
27660 <p about="#mwt1" typeof="mw:Transclusion"
27661 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}},"i":0}}]}'>foo</p>
27662
27663 <p about="#mwt1" typeof="mw:Transclusion"
27664 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}, "2":{"wt":"bar"}},"i":0}}]}'>foo</p>
27665
27666 <!--Orig params with data-parsoid has heuristics for handling = chars-->
27667 <!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
27668 <p data-parsoid='{"pi":[[{"k":"1"},{"k":"2"}]]}' about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"},"2":{"wt":"bar"}},"i":0}}]}'>foo</p>
27669 !! wikitext
27670 {{echo|1=f=oo}}
27671
27672 {{echo|1=f=oo|2=bar}}
27673
27674 <!--Orig params with data-parsoid has heuristics for handling = chars-->
27675 <!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
27676 {{echo|<nowiki>f=oo</nowiki>|bar}}
27677 !! end
27678
27679 !! test
27680 Parsoid: Serialize positional parameters with = in extlink as named parameter
27681 !! options
27682 parsoid=html2wt
27683 !! html/parsoid
27684 <p><a rel="mw:ExtLink" href="http://stuff?is=ok" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://stuff?is=ok"}},"i":0}}]}'>http://stuff?is=ok</a></p>
27685 !! wikitext
27686 {{echo|1=http://stuff?is=ok}}
27687 !! end
27688
27689 !! test
27690 Parsoid: Correctly serialize block-node children when they are a combination of text and p-nodes
27691 !! options
27692 parsoid=html2wt
27693 !! html/parsoid
27694 <div>a<p>b</p></div>
27695 <div>a
27696 <p>b</p></div>
27697 <div>
27698 a
27699 <p>b</p></div>
27700 !! wikitext
27701 <div>a
27702 b
27703 </div>
27704 <div>a
27705 b
27706 </div>
27707 <div>
27708 a
27709
27710 b
27711 </div>
27712 !! end
27713
27714 !! test
27715 Substrings resembling wikitext in hrefs should not get nowiki escapes
27716 !! options
27717 parsoid=html2wt
27718 !! html/parsoid
27719 <a rel="mw:WikiLink" href="./Foo''bar''baz">Foo''bar''baz</a>
27720 !! wikitext
27721 [[Foo''bar''baz]]
27722 !! end
27723
27724 !! test
27725 Enforce single-line context in the serializer
27726 !! options
27727 parsoid=html2wt
27728 !! html/parsoid
27729 <h2>testing
27730 123</h2>
27731
27732 <h2> hi <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"bogus","href":"./Template:Bogus"},"params":{"1":{"wt":"there\nyou"}},"i":0}}]}'>there</span><span about="#mwt1">
27733 </span><span about="#mwt1">you</span> </h2>
27734
27735 <h2> foo <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> </h2>
27736
27737 <ol class="references" typeof="mw:Extension/references" about="#mwt3" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="./Main_Page#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">hello
27738 there</span></li></ol>
27739
27740 <ul><li>asd
27741 sdf</li></ul>
27742
27743 <ul><li>foo
27744 bar
27745 baz</li>
27746 <li>foo <b>bar</b>
27747 baz</li></ul>
27748
27749 <dl><dt>hi
27750 ho </dt><dd data-parsoid='{"stx":"row"}'> hi
27751 ho</dd></dl>
27752
27753 <dl><dd> <table>
27754 <tbody><tr><td> ha
27755 ha
27756 ha</td></tr>
27757 </tbody></table></dd></dl>
27758 !! wikitext
27759 == testing 123 ==
27760
27761 == hi {{bogus|there
27762 you}} ==
27763
27764 == foo <ref>hello
27765 there</ref> ==
27766
27767 <references />
27768
27769 * asd sdf
27770
27771 * foo bar baz
27772 * foo '''bar''' baz
27773
27774 ; hi ho : hi ho
27775
27776 : {|
27777 | ha
27778 ha
27779 ha
27780 |}
27781 !! end
27782
27783 !! test
27784 Serialize new placeholder space without spans
27785 !! options
27786 parsoid=html2wt
27787 !! html/parsoid
27788 <p>foo<span typeof="mw:Placeholder"> </span>: bar</p>
27789
27790 <p>foo<span typeof="mw:DisplaySpace mw:Placeholder" data-parsoid='{"src":" ","isDisplayHack":true}'> </span>: bar</p>
27791
27792 <span typeof="mw:Extension/ref" data-mw="{&quot;name&quot;:&quot;ref&quot;,&quot;body&quot;:{&quot;html&quot;:&quot;foo<span typeof=\&quot;mw:Placeholder\&quot;>&amp;nbsp;</span>: bar&quot;}}"><sup>[1]</sup></span>ok</p>
27793 !! wikitext
27794 foo : bar
27795
27796 foo : bar
27797
27798 <ref>foo : bar</ref>ok
27799 !! end
27800
27801
27802 #-----------------------
27803 # Tag minimization tests
27804 #-----------------------
27805
27806 !! test
27807 1. I/B quote minimization: wikitext-only tags should be combined
27808 !! options
27809 parsoid=html2wt
27810 !! html/parsoid
27811 <p><i>A</i><i>B</i></p>
27812 <p><b>A</b><b>B</b></p>
27813 <p><i>A</i><b><i>B</i></b></p>
27814 <p><b>A</b><i><b>B</b></i></p>
27815 <p><b>A</b><i><b>B</b><b>C</b></i><b>D</b></p>
27816 <p><i><b>A</b></i><i><b>B</b></i></p>
27817 <p><i><b>A</b></i><b><i>B</i></b></p>
27818 <p><b><i>A</i></b><i><b>B</b></i></p>
27819 !! wikitext
27820 ''AB''
27821
27822 '''AB'''
27823
27824 ''A'''B'''''
27825
27826 '''A''B'''''
27827
27828 '''A''BC''D'''
27829
27830 '''''AB'''''
27831
27832 '''''AB'''''
27833
27834 '''''AB'''''
27835 !! end
27836
27837 !! test
27838 2. I/B quote minimization: wikitext and html tags should not be combined
27839 !! options
27840 parsoid=html2wt
27841 !! html/parsoid
27842 <p><i>A</i><i data-parsoid='{"stx":"html"}'>B</i></p>
27843 <p><i>A</i><b><i data-parsoid='{"stx":"html"}'>B</i></b></p>
27844 !! wikitext
27845 ''A''<i>B</i>
27846
27847 ''A''<nowiki/>'''<i>B</i>'''
27848 !! end
27849
27850 !! test
27851 3. I/B quote minimization: templated content stops minimization
27852 !! options
27853 parsoid=html2wt
27854 !! html/parsoid
27855 <p><i>A</i><i about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;B&#39;&#39;"}},"i":0}}]}'>B</i>
27856 <p><i>A</i><b about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;&#39;&#39;&#39;B&#39;&#39;&#39;&#39;&#39;"}},"i":0}}]}'><i>B</i></b>
27857 !! wikitext
27858 ''A''{{echo|''B''}}
27859
27860 ''A''{{echo|'''''B'''''}}
27861 !! end
27862
27863 !! test
27864 4. I/B quote minimization: new content should be mimimized with adjacent old content
27865 !! options
27866 parsoid=html2wt
27867 !! html/parsoid
27868 <p><i>A</i><i>B</i></p>
27869 <p><b>A</b><b>B</b></p>
27870 <p><i>A</i><b><i>B</i></b></p>
27871 !! wikitext
27872 ''AB''
27873
27874 '''AB'''
27875
27876 ''A'''B'''''
27877 !! end
27878
27879 !! test
27880 5a. Merge adjacent quote nodes if they've been edited
27881 !! options
27882 parsoid={
27883 "modes": ["wt2wt", "selser"],
27884 "changes": [
27885 ["p", "contents", "remove", ":contains('b')"]
27886 ]
27887 }
27888 !! wikitext
27889 ''a''b''c''
27890 !! wikitext/edited
27891 ''ac''
27892 !! end
27893
27894 !! test
27895 5b. Merge adjacent quote nodes if they've been edited
27896 !! options
27897 parsoid={
27898 "modes": ["wt2wt", "selser"],
27899 "changes": [
27900 ["#x", "remove"]
27901 ]
27902 }
27903 !! wikitext
27904 ''a''<span id="x">b</span>''c''
27905 !! wikitext/edited
27906 ''ac''
27907 !! end
27908
27909 !! test
27910 1. Merge adjacent link nodes as long as at least one element is new
27911 !! options
27912 parsoid={
27913 "modes": ["html2wt"],
27914 "scrubWikitext": true
27915 }
27916 !! html/parsoid
27917 <a rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
27918 <a data-parsoid="{}" rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
27919 <a data-parsoid="{}" rel="mw:WikiLink" href="./Football">Foot</a><a data-parsoid="{}" rel="mw:WikiLink" href="./Football">ball</a>
27920 !! wikitext
27921 [[Football]]
27922 [[Football]]
27923 [[Football|Foot]][[Football|ball]]
27924 !! end
27925
27926 !! test
27927 2. Merge adjacent link nodes and enable additional normalizations
27928 !! options
27929 parsoid={
27930 "modes": ["html2wt"],
27931 "scrubWikitext": true
27932 }
27933 !! html/parsoid
27934 <a rel="mw:WikiLink" href="./Football"><i>Foot</i></a><a rel="mw:WikiLink" href="./Football"><i>ball</i></a>
27935 !! wikitext
27936 [[Football|''Football'']]
27937 !! end
27938
27939 !! test
27940 3. Don't merge adjacent link nodes if scrubWikitext is false
27941 !! options
27942 parsoid={
27943 "modes": ["html2wt"],
27944 "scrubWikitext": false
27945 }
27946 !! html/parsoid
27947 <a rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
27948 !! wikitext
27949 [[Football|Foot]][[Football|ball]]
27950 !! end
27951
27952 #------------------------------
27953 # End of tag minimization tests
27954 #------------------------------
27955
27956 !!test
27957 T56262: New entities
27958 !! options
27959 parsoid=html2wt
27960 !! html/parsoid
27961 <span typeof="mw:Entity">&nbsp;</span>
27962 !! wikitext
27963 &nbsp;
27964 !! end
27965
27966 ## Note that there is no wikitext output for 'unknownproperty' ##
27967 ## Unknown magic words are silently dropped ##
27968
27969 !! test
27970 Magic words
27971 !! options
27972 parsoid=html2wt
27973 !! html/parsoid
27974 <meta property='mw:PageProp/toc' />
27975 <meta property='mw:PageProp/notoc' />
27976 <meta property='mw:PageProp/forcetoc' />
27977 <meta property='mw:PageProp/index' />
27978 <meta property='mw:PageProp/noindex' />
27979 <meta property='mw:PageProp/nogallery' />
27980 <meta property='mw:PageProp/noeditsection' />
27981 <meta property='mw:PageProp/notitleconvert' />
27982 <meta property='mw:PageProp/nocontentconvert' />
27983 <meta property='mw:PageProp/unknownproperty' />
27984 !! wikitext
27985 __TOC__
27986 __NOTOC__
27987 __FORCETOC__
27988 __INDEX__
27989 __NOINDEX__
27990 __NOGALLERY__
27991 __NOEDITSECTION__
27992 __NOTITLECONVERT__
27993 __NOCONTENTCONVERT__
27994 !! end
27995
27996 !! test
27997 Consecutive <pre>s should not get merged
27998 !! options
27999 parsoid=html2wt,html2html
28000 !! html/parsoid
28001 <pre>a</pre><pre>b</pre>
28002
28003 <pre>c
28004 </pre><pre>
28005 d</pre>
28006
28007 <pre>e
28008
28009 </pre><pre>
28010
28011 f</pre>
28012 !! wikitext
28013 a
28014
28015 b
28016
28017 c
28018
28019 d
28020
28021 e
28022
28023
28024
28025 f
28026 !! end
28027
28028 !! test
28029 Edited ISBN links not serializable as ISBN links should serialize as wikilinks
28030 !! options
28031 parsoid=html2wt
28032 !! html/parsoid
28033 <a href="./Special:BookSources/1234567890" rel="mw:ExtLink">ISBN 1234567895</a>
28034 !! wikitext
28035 [[Special:BookSources/1234567890|ISBN 1234567895]]
28036 !! end
28037
28038 !! test
28039 Edited RFC links not serializable as RFC links should serialize as extlinks
28040 !! options
28041 parsoid=html2wt
28042 !! html/parsoid
28043 <a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink">New RFC</a>
28044 !! wikitext
28045 [https://tools.ietf.org/html/rfc123 New RFC]
28046 !! end
28047
28048 !! test
28049 Edited PMID links not serializable as PMID links should serialize as extlinks
28050 !! options
28051 parsoid=html2wt
28052 !! html/parsoid
28053 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink">New PMID</a>
28054 !! wikitext
28055 [//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract New PMID]
28056 !! end
28057
28058 !! test
28059 WTS of autolinks with trailing/surrounding context
28060 !! options
28061 parsoid=html2wt
28062 !! html/parsoid
28063 <p><a href="http://cscott.net">http://cscott.net</a><b>foo</b></p>
28064 <p><a href="http://cscott.net">http://cscott.net</a><b data-parsoid='{"stx":"html"}'>foo</b></p>
28065 <p><b><a href="http://cscott.net">http://cscott.net</a></b></p>
28066 <p><b><a href="http://cscott.net">http://cscott.net</a> </b></p>
28067 <p><b><a href="http://cscott.net">http://cscott.net</a>x</b></p>
28068 <p><a href="http://cscott.net">http://cscott.net</a>x</p>
28069 !! wikitext
28070 http://cscott.net'''foo'''
28071
28072 http://cscott.net<b>foo</b>
28073
28074 '''http://cscott.net'''
28075
28076 '''http://cscott.net '''
28077
28078 '''http://cscott.net<nowiki/>x'''
28079
28080 http://cscott.net<nowiki/>x
28081 !! end
28082
28083 !! test
28084 WTS of autolinks with nowikis (round-trip)
28085 !! wikitext
28086 x<nowiki/>http://cscott.net<nowiki/>x
28087 !! html/parsoid
28088 <p>x<a rel="mw:ExtLink" href="http://cscott.net">http://cscott.net</a>x</p>
28089 !! end
28090
28091 # this is the "easy" test because it leaves in place all the
28092 # data-parsoid information indicating this is an autolink
28093 !! test
28094 WTS of autolinks with escapes (editing)
28095 !! options
28096 parsoid={
28097 "modes": ["wt2wt"],
28098 "changes": [
28099 [ "span", "remove" ]
28100 ]
28101 }
28102 !! wikitext
28103 x<nowiki/>http://cscott.net<nowiki/>x
28104 !! wikitext/edited
28105 x<nowiki/>http://cscott.net<nowiki/>x
28106 !! end
28107
28108 !! test
28109 WTS of edited autolink-like text (T103364)
28110 !! options
28111 parsoid={
28112 "modes": ["wt2wt"],
28113 "changes": [
28114 [ "span[typeof]", "removeAttr", "typeof" ]
28115 ]
28116 }
28117 !! wikitext
28118 Not a link: <nowiki>http://example.com</nowiki>.
28119 !! wikitext/edited
28120 Not a link: <span><nowiki>http://example.com</nowiki></span>.
28121 !! end
28122
28123 !! test
28124 WTS of newly-authored autolink-like text (T103364)
28125 !! options
28126 parsoid=html2wt
28127 !! html/parsoid
28128 <p>http://example.com is not a link.</p>
28129 !! wikitext
28130 <nowiki>http://example.com</nowiki> is not a link.
28131 !! end
28132
28133 !! test
28134 WTS of autolink-like text after an autolink (T108563)
28135 !! options
28136 parsoid=html2wt
28137 !! html/parsoid
28138 <p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a> http://example.com is not a link.</p>
28139 !! wikitext
28140 http://example.com <nowiki>http://example.com</nowiki> is not a link.
28141 !! end
28142
28143 !! test
28144 Magic links inside links (not autolinked)
28145 !! wikitext
28146 [[Foo|http://example.com]]
28147 [[Foo|RFC 1234]]
28148 [[Foo|PMID 1234]]
28149 [[Foo|ISBN 123456789x]]
28150
28151 [http://foo.com http://example.com]
28152 [http://foo.com RFC 1234]
28153 [http://foo.com PMID 1234]
28154 [http://foo.com ISBN 123456789x]
28155 !! html+tidy
28156 <p><a href="/wiki/Foo" title="Foo">http://example.com</a> <a href="/wiki/Foo" title="Foo">RFC 1234</a> <a href="/wiki/Foo" title="Foo">PMID 1234</a> <a href="/wiki/Foo" title="Foo">ISBN 123456789x</a></p>
28157 <p><a rel="nofollow" class="external text" href="http://foo.com">http://example.com</a> <a rel="nofollow" class="external text" href="http://foo.com">RFC 1234</a> <a rel="nofollow" class="external text" href="http://foo.com">PMID 1234</a> <a rel="nofollow" class="external text" href="http://foo.com">ISBN 123456789x</a></p>
28158 !! html/parsoid
28159 <p><a rel="mw:WikiLink" href="./Foo" title="Foo">http://example.com</a>
28160 <a rel="mw:WikiLink" href="./Foo" title="Foo">RFC 1234</a>
28161 <a rel="mw:WikiLink" href="./Foo" title="Foo">PMID 1234</a>
28162 <a rel="mw:WikiLink" href="./Foo" title="Foo">ISBN 123456789x</a></p>
28163
28164 <p><a rel="mw:ExtLink" href="http://foo.com">http://example.com</a>
28165 <a rel="mw:ExtLink" href="http://foo.com">RFC 1234</a>
28166 <a rel="mw:ExtLink" href="http://foo.com">PMID 1234</a>
28167 <a rel="mw:ExtLink" href="http://foo.com">ISBN 123456789x</a></p>
28168 !! end
28169
28170 !! test
28171 Magic links inside image captions (autolinked)
28172 !! wikitext
28173 [[File:Foobar.jpg|thumb|http://example.com]]
28174 [[File:Foobar.jpg|thumb|RFC 1234]]
28175 [[File:Foobar.jpg|thumb|PMID 1234]]
28176 [[File:Foobar.jpg|thumb|ISBN 123456789x]]
28177 !! html+tidy
28178 <div class="thumb tright">
28179 <div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
28180 <div class="thumbcaption">
28181 <div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
28182 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div>
28183 </div>
28184 </div>
28185 <div class="thumb tright">
28186 <div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
28187 <div class="thumbcaption">
28188 <div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
28189 <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc1234">RFC 1234</a></div>
28190 </div>
28191 </div>
28192 <div class="thumb tright">
28193 <div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
28194 <div class="thumbcaption">
28195 <div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
28196 <a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a></div>
28197 </div>
28198 </div>
28199 <div class="thumb tright">
28200 <div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
28201 <div class="thumbcaption">
28202 <div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
28203 <a href="/wiki/Special:BookSources/123456789X" class="internal mw-magiclink-isbn">ISBN 123456789x</a></div>
28204 </div>
28205 </div>
28206 !! html/parsoid
28207 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
28208 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="https://tools.ietf.org/html/rfc1234" rel="mw:ExtLink">RFC 1234</a></figcaption></figure>
28209 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID 1234</a></figcaption></figure>
28210 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="./Special:BookSources/123456789X" rel="mw:WikiLink">ISBN 123456789x</a></figcaption></figure>
28211 !! end
28212
28213 !! test
28214 WTS of magic word text (T109371)
28215 !! options
28216 parsoid=html2wt
28217 !! html/parsoid
28218 <p>RFC 1234</p>
28219 <p><a href="http://foo.com" rel="mw:ExtLink">RFC 1234</a></p>
28220 <p><a href="./Foo" rel="mw:WikiLink">RFC 1234</a></p>
28221 !! wikitext
28222 <nowiki>RFC 1234</nowiki>
28223
28224 [http://foo.com RFC 1234]
28225
28226 [[Foo|RFC 1234]]
28227 !! end
28228
28229 !! test
28230 Edited Redirect link should emit a non-piped wikitext link
28231 !! options
28232 parsoid=html2wt
28233 !! html/parsoid
28234 <link rel="mw:PageProp/redirect" href="Bar" data-parsoid='{"a":{"href":"./Foo"},"sa":{"href":"Foo"}}'>
28235 !! wikitext
28236 #REDIRECT [[Bar]]
28237 !! end
28238
28239 !! test
28240 T75121: Infer extension name from typeOf if data-mw is not present
28241 !! options
28242 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
28243 !! html/parsoid
28244 <div typeOf="mw:Extension/foo"></div>
28245 !! wikitext
28246 <foo />
28247 !! end
28248
28249 # Note that the <p> wrapping isn't present in PHP parser output
28250 # The important thing for this test is that P-wrapping doesn't
28251 # interfere with the <nowiki> protection for leading - in <td>
28252 # (which isn't necessary for <th>).
28253 !! test
28254 T88318: p-wrapped dash in table.
28255 !! options
28256 parsoid=html2wt,wt2wt
28257 !! html/parsoid
28258 <table><tbody>
28259 <tr><th><p>-</p></th><th><p>- </p></th></tr>
28260 <tr><td><p>-</p></td><td><p>- </p></td></tr>
28261 <tr><td><small>-</small></td><td><br/><p>-</p></td><td><br/>-</td></tr>
28262 </tbody></table>
28263 !! wikitext
28264 {|
28265 !-
28266 !-
28267 |-
28268 |<nowiki>-</nowiki>
28269 |<nowiki>- </nowiki>
28270 |-
28271 |<small>-</small>
28272 |<br>
28273 -
28274 |<br>
28275 -
28276 |}
28277 !! html/php+tidy
28278 <table>
28279 <tr>
28280 <th>-</th>
28281 <th>-</th>
28282 </tr>
28283 <tr>
28284 <td>-</td>
28285 <td>-</td>
28286 </tr>
28287 <tr>
28288 <td><small>-</small></td>
28289 <td><br />
28290 <p>-</p>
28291 </td>
28292 <td><br />
28293 <p>-</p>
28294 </td>
28295 </tr>
28296 </table>
28297 !! end
28298
28299 !! test
28300 T149209: WTS: Handle newlines in table cells properly
28301 !! options
28302 parsoid=html2wt
28303 !! html/parsoid
28304 <table>
28305 <tbody>
28306 <tr><td>a
28307 b
28308 </td><td data-parsoid='{"stx_v":"row"}'>c</td></tr>
28309 <tr><td><p>x</p>
28310 </td><td data-parsoid='{"stx_v":"row", "startTagSrc": "{{!}}{{!}}"}'>y</td></tr>
28311 </tbody></table>
28312 <table>
28313 <tbody>
28314 <tr><th>a
28315 b
28316 </th><th data-parsoid='{"stx_v":"row"}'>c</th></tr>
28317 <tr><th><p>x</h>
28318 </th><th data-parsoid='{"stx_v":"row"}'>y</th></tr>
28319 </tbody></table>
28320 !! wikitext
28321 {|
28322 |a
28323 b
28324 |c
28325 |-
28326 |x
28327 {{!}}y
28328 |}
28329 {|
28330 !a
28331 b
28332 !c
28333 |-
28334 !x
28335 !y
28336 |}
28337 !! end
28338
28339 !! test
28340 T149209: Selser: Handle newlines in table cells properly
28341 !! options
28342 parsoid={
28343 "modes": ["selser"],
28344 "changes": [
28345 [ "#h1", "html", "a\nb\n" ],
28346 [ "#h2", "html", "a\nb\n" ],
28347 [ "#c1", "html", "a\nb\n" ],
28348 [ "#c2", "html", "<p>a</p>" ],
28349 [ "#c3", "html", "<p>a</p>" ],
28350 [ "#c4", "html", "edit-me<p>a</p>" ]
28351 ]
28352 }
28353 !! wikitext
28354 {|
28355 ! id="h1" |edit-me!!1
28356 |-
28357 ! id="h2" |edit-me||2
28358 |-
28359 | id="c1" |edit-me||3
28360 |-
28361 | id="c2" |edit-me||4
28362 |-
28363 | id="c3" |edit-me||p||q||r
28364 |-
28365 | id="c4" |edit-me||p||q||r
28366 |}
28367 !! wikitext/edited
28368 {|
28369 ! id="h1" |a
28370 b
28371 !1
28372 |-
28373 ! id="h2" |a
28374 b
28375 !2
28376 |-
28377 | id="c1" |a
28378 b
28379 |3
28380 |-
28381 | id="c2" |a
28382 |4
28383 |-
28384 | id="c3" |a
28385 |p||q||r
28386 |-
28387 | id="c4" |edit-me
28388 a
28389 |p||q||r
28390 |}
28391 !! end
28392
28393 !! test
28394 HTML id attribute with Parsoid-like element ids should not be serialized to wikitext
28395 !! options
28396 parsoid=html2wt
28397 !! html/parsoid
28398 <table id='mwAb'>
28399 <td id='mwAc'>foo</td>
28400 <td id='serialize-this'>bar</td>
28401 </table>
28402 !! wikitext
28403 {|
28404 |foo
28405 | id="serialize-this" |bar
28406 |}
28407 !! end
28408
28409 !! test
28410 Parsoid-like element ids should not be serialized to wikitext unless shadowed
28411 !! options
28412 parsoid=html2wt
28413 !! html/parsoid
28414 <div id="mwAQ" data-parsoid='{"stx":"html","a":{"id":"mwAQ"},"sa":{"id":"hello"}}'>ok</div>
28415 !! wikitext
28416 <div id="hello">ok</div>
28417 !! end
28418
28419 !! test
28420 WTS change modes
28421 !! options
28422 parsoid={
28423 "modes": ["wt2wt"],
28424 "changes": [
28425 [ "#xyz", "before", "<b>before</b> stuff " ],
28426 [ "#xyz", "after", " stuff <i>after</i>" ],
28427 [ "#xyz", "html", "x <b>y</b> z" ]
28428 ]
28429 }
28430 !! wikitext
28431 <span id="xyz">hello</span>
28432 !! wikitext/edited
28433 '''before''' stuff <span id="xyz">x '''y''' z</span> stuff ''after''
28434 !! end
28435
28436 !! test
28437 Never serialize a-tag as html, regardless of what data-parsoid has to say
28438 !! options
28439 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
28440 !! html/parsoid
28441 <a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"html"}'>Foo</a>
28442 !! wikitext
28443 [[Foo]]
28444 !! end
28445
28446 ## SSS FIXME: This is broken output nevertheless.
28447 ## What might be a reasonable non-broken output for this?
28448 ## This is an edge case unlikely to be seen in production
28449 ## that I am not wasting more time on this right now.
28450 !! test
28451 Never serialize a-tag as html, no matter what attributes it has
28452 !! options
28453 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
28454 !! html/parsoid
28455 <a bad='true' href='http://boo.org'><img src='http://boohoo.org' /></a>
28456 !! wikitext
28457 [http://boo.org http://boohoo.org]
28458 !! end
28459
28460 # Misnested is an indication that selser can reuse the source but these have
28461 # shown to sneak through on occasion. See T101768.
28462 # The original wikitext here is: [http://test.com [[one]] two three]
28463 !! test
28464 Strip span tags added to mark misnested links
28465 !! options
28466 parsoid=html2wt
28467 !! html/parsoid
28468 <p data-parsoid='{}'><a rel="mw:ExtLink" href="http://test.com" data-parsoid='{"targetOff":17,"contentOffsets":[17,34]}'></a><a rel="mw:WikiLink" href="./One" title="One" data-parsoid='{"stx":"simple","a":{"href":"./One"},"sa":{"href":"one"},"misnested":true}'>one</a><span data-parsoid='{"misnested":true}'> two three</span></p>
28469 !! wikitext
28470 [http://test.com][[one]] two three
28471 !! end
28472
28473 !! test
28474 Catch regression when unpacking misnested links
28475 !! options
28476 parsoid=wt2html
28477 !! wikitext
28478 {{echo|hi}}[http://example.com [[ho]]]
28479 !! html/parsoid
28480 <p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi"}},"i":0}}]}'>hi</span><a rel="mw:ExtLink" href="http://example.com"></a><a rel="mw:WikiLink" href="./Ho" title="Ho" data-parsoid='{"misnested":true}'>ho</a></p>
28481 !! end
28482
28483 !! test
28484 Use data-parsoid.firstWikitextNode to compute newline constraints for template content
28485 !! options
28486 parsoid=html2wt
28487 !! html/parsoid
28488 <span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span><table about="#mwt2" typeof="mw:Transclusion mw:ExpandedAttrs" data-parsoid='{"a":{"{{echo|c\n{{!}}d\n}}":null},"sa":{"{{echo|c\n{{!}}d\n}}":""},"firstWikitextNode":"table","pi":[[{"k":"1"}]]}' data-mw='{"parts":["{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"c\n{{!}}d\n"}},"i":0}},"\n|}"]}'>
28489 <tbody><tr><td>d
28490 </td></tr>
28491 </tbody></table>
28492 !! wikitext
28493 {{echo|a}}
28494 {|{{echo|c
28495 {{!}}d
28496 }}
28497 |}
28498 !! end
28499
28500 ## This test verifies the presence and computation of this attribute indirectly
28501 ## by making an edit and ensuring that the serialization is correct (which it would be
28502 ## only if firstWikitextNode is properly set).
28503 !! test
28504 data-parsoid.firstWikitextNode should be computed properly in the presence of fostered content
28505 !! options
28506 parsoid= {
28507 "modes": ["wt2wt"],
28508 "changes": [
28509 [ "div#x", "remove" ],
28510 [ "div", "before", "<div>new</div>" ]
28511 ]
28512 }
28513 !! wikitext
28514 <div id="x">foo</div>
28515 {|
28516 {{echo|<div>boo</div>
28517 {{!}}b}}
28518 |c
28519 |}
28520 !! wikitext/edited
28521
28522 <div>new</div>
28523 {|
28524 {{echo|<div>boo</div>
28525 {{!}}b}}
28526 |c
28527 |}
28528 !! end
28529
28530 # --------------------------------------------
28531 # Tests spec'ing wikitext serialization norms |
28532 # --------------------------------------------
28533
28534 !! test
28535 Serialize multi-line indent-pre starting with wikitext syntax
28536 !! options
28537 parsoid=html2wt
28538 !! html/parsoid
28539 <pre>* 1
28540 ** 2
28541 * 3</pre>
28542 !! wikitext
28543 * 1
28544 ** 2
28545 * 3
28546 !! end
28547
28548 !! test
28549 1. Categories should always be serialized on their own line
28550 !! options
28551 parsoid=html2wt
28552 !! html/parsoid
28553 foo<link rel="mw:PageProp/Category" href="./Category:Foo">bar
28554 !! wikitext
28555 foo
28556 [[Category:Foo]]
28557 bar
28558 !! end
28559
28560 !! test
28561 2. Categories that are part of templates should not introduce a line break
28562 !! wikitext
28563 foo {{echo|<span>bar</span> [[Category:baz]]}} bar
28564 !! html/parsoid
28565 <p>foo <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;span>bar&lt;/span> [[Category:baz]]"}},"i":0}}]}'>bar</span><span about="#mwt1"> </span><link rel="mw:PageProp/Category" href="./Category:Baz" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Category:Baz"},"sa":{"href":"Category:baz"}}'/> bar</p>
28566 !! end
28567
28568 # Careful while editing these next 2 tests. There are \u200f characters
28569 # before and after the <link> tags in the HTML and following some
28570 # of the categories in wikitext
28571 # Do not remove these characters in edits.
28572 #
28573 # As part of the serialization, these bidi characters will get stripped.
28574 !! test
28575 RTL (\u200f) and LTR (\u200e) markers around category tags should be stripped
28576 !! options
28577 parsoid={
28578 "modes": ["html2wt"],
28579 "scrubWikitext": true
28580 }
28581 !! html/parsoid
28582 <p>‏<link rel="mw:PageProp/Category" href="./קטגוריה:טקסים" />‏
28583 ‏<link rel="mw:PageProp/Category" href="./קטגוריה:_שיטות_משפט" />‏</p>
28584 !! wikitext
28585 [[קטגוריה:טקסים]]
28586 [[קטגוריה: שיטות משפט]]
28587 !! end
28588
28589 !! test
28590 RTL (\u200f) and LTR (\u200e) markers should not be stripped if followed by a text node
28591 !! options
28592 parsoid={
28593 "modes": ["html2wt"],
28594 "scrubWikitext": true
28595 }
28596 !! html/parsoid
28597 <p>‏<link rel="mw:PageProp/Category" href="./קטגוריה:טקסים" />‏y</p>
28598 !! wikitext
28599 [[קטגוריה:טקסים]]
28600 ‏y
28601 !! end
28602
28603 !! test
28604 Lists: Add space after bullets
28605 !! options
28606 parsoid=html2wt
28607 !! html/parsoid
28608 <ul>
28609 <li>foo</li>
28610 <li> bar</li>
28611 <li><span> baz</span></li>
28612 </ul>
28613 !! wikitext
28614 * foo
28615 * bar
28616 * <span> baz</span>
28617 !! end
28618
28619 !! test
28620 1. Headings: Add space before/after == (T53744)
28621 !! options
28622 parsoid=html2wt
28623 !! html/parsoid
28624 <h2>foo</h2>
28625 <h2> bar</h2>
28626 <h2>baz </h2>
28627 <h2><span> baz</span></h2>
28628 !! wikitext
28629 == foo ==
28630
28631 == bar ==
28632
28633 == baz ==
28634
28635 == <span> baz</span> ==
28636 !! end
28637
28638 !! test
28639 2. Headings: Add space before/after == even after hoisted content
28640 !! options
28641 parsoid={
28642 "modes": ["html2wt"],
28643 "scrubWikitext": true
28644 }
28645 !! html/parsoid
28646 <h2> <link href="./Category:A2" rel="mw:PageProp/Category" />ok</h2>
28647 !! wikitext
28648 [[Category:A2]]
28649
28650 == ok ==
28651 !! end
28652
28653 !! test
28654 1. Headings: suppress newly created empty headings
28655 !! options
28656 parsoid={
28657 "modes": ["html2wt"],
28658 "scrubWikitext": true
28659 }
28660 !! html/parsoid
28661 <h2></h2>
28662 !! wikitext
28663 !! end
28664
28665 !! test
28666 2. Headings: don't suppress empty headings if scrubWikitext is false
28667 !! options
28668 parsoid=html2wt
28669 !! html/parsoid
28670 <h2></h2>
28671 !! wikitext
28672 ==<nowiki/>==
28673 !! end
28674
28675 !! test
28676 3. Headings: suppress empty headings on edits
28677 !! options
28678 parsoid={
28679 "modes": ["selser"],
28680 "scrubWikitext": true,
28681 "changes": [
28682 [ "#x", "remove"]
28683 ]
28684 }
28685 !! wikitext
28686 ==<span id="x">foo</span>==
28687 !! wikitext/edited
28688 !! end
28689
28690 !! test
28691 Headings: Replace <br/> with a single whitespace char (when scrubWikitext = true)
28692 !! options
28693 parsoid={
28694 "modes": ["html2wt"],
28695 "scrubWikitext": true
28696 }
28697 !! html/parsoid
28698 <h2>foo<br/>bar</h2>
28699 <h2>foo <span><br/>bar</span> baz</h2>
28700 !! wikitext
28701 == foo bar ==
28702
28703 == foo <span> bar</span> baz ==
28704 !! end
28705
28706 !! test
28707 Headings: Replace <br/> with a single whitespace char (when scrubWikitext = false)
28708 !! options
28709 parsoid={
28710 "modes": ["html2wt"],
28711 "scrubWikitext": false
28712 }
28713 !! html/parsoid
28714 <h2>foo<br/>bar</h2>
28715 !! wikitext
28716 == foo<br> bar ==
28717 !! end
28718
28719 !! test
28720 1. WT Quote Tags: suppress newly created empty style tags
28721 !! options
28722 parsoid={
28723 "modes": ["html2wt"],
28724 "scrubWikitext": true
28725 }
28726 !! html/parsoid
28727 <i></i><b></b>
28728 !! wikitext
28729 !! end
28730
28731 !! test
28732 2. WT Quote Tags: don't suppress empty style tags if scrubWikitext is false
28733 !! options
28734 parsoid=html2wt
28735 !! html/parsoid
28736 <i></i><b></b>
28737 !! wikitext
28738 ''<nowiki/>'''''<nowiki/>'''
28739 !! end
28740
28741 !! test
28742 3. WT Quote Tags: suppress empty style tags on edits
28743 !! options
28744 parsoid={
28745 "modes": ["selser"],
28746 "scrubWikitext": true,
28747 "changes": [
28748 [ "#x", "remove"]
28749 ]
28750 }
28751 !! wikitext
28752 '''<span id="x">foo</span>'''
28753 !! wikitext/edited
28754 !! end
28755
28756 !! test
28757 1. Anchors: suppress newly created empty anchors
28758 !! options
28759 parsoid={
28760 "modes": ["html2wt"],
28761 "scrubWikitext": true
28762 }
28763 !! html/parsoid
28764 <a rel="mw:WikiLink" href="./Test" title="Test"></a>
28765 !! wikitext
28766 !! end
28767
28768 !! test
28769 2. Anchors: don't suppress empty anchors if scrubWikitext is false
28770 !! options
28771 parsoid={
28772 "modes": ["html2wt"],
28773 "scrubWikitext": false
28774 }
28775 !! html/parsoid
28776 <a rel="mw:WikiLink" href="./Test" title="Test"></a>
28777 !! wikitext
28778 [[Test|<nowiki/>]]
28779 !! end
28780
28781 !! test
28782 3. Anchors: suppress empty anchors on edits
28783 !! options
28784 parsoid={
28785 "modes": ["selser"],
28786 "scrubWikitext": true,
28787 "changes": [
28788 [ "#x", "remove"]
28789 ]
28790 }
28791 !! wikitext
28792 [[Test|<span id="x">foo</span>]]
28793 !! wikitext/edited
28794 !! end
28795
28796 !! test
28797 3a. Anchors: do not suppress numbered extlinks
28798 !! options
28799 parsoid={
28800 "modes": ["wt2wt"],
28801 "scrubWikitext": true
28802 }
28803 !! wikitext
28804 [http://foo.com]
28805 !! html/parsoid
28806 <a rel="mw:ExtLink" href="http://foo.com"></a>
28807 !! end
28808
28809 !! test
28810 3b. Anchors: do not suppress numbered extlinks
28811 !! options
28812 parsoid={
28813 "modes": ["wt2wt"],
28814 "scrubWikitext": true,
28815 "changes": [
28816 [ "#x", "remove"]
28817 ]
28818 }
28819 !! wikitext
28820 [http://foo.com <span id="x">foo</span>]
28821 !! wikitext/edited
28822 [http://foo.com]
28823 !! end
28824
28825 !!test
28826 Normalizations should be restricted to edited content
28827 !!options
28828 parsoid={
28829 "modes": ["selser"],
28830 "scrubWikitext": true,
28831 "changes": [
28832 [ "h1", "before", "<i></i>"]
28833 ]
28834 }
28835 !!wikitext
28836 a
28837 = =
28838 b
28839 !!wikitext/edited
28840 a
28841 = =
28842 b
28843 !!end
28844
28845 !! test
28846 1. Multiple normalizations (html2wt)
28847 !! options
28848 parsoid={
28849 "modes": ["html2wt"],
28850 "scrubWikitext": true
28851 }
28852 !! html
28853 <h2><i></i></h2>
28854 <p><a href='Foo' rel='mw:WikiLink'>foo<i></i>
28855 </a><b><i></i></b>x</p>
28856 !! wikitext
28857
28858 [[foo]]
28859 x
28860
28861 !! end
28862
28863 !! test
28864 2. Multiple normalizations (selser)
28865 !! options
28866 parsoid={
28867 "modes": ["selser"],
28868 "scrubWikitext": true,
28869 "changes": [
28870 [ "#x", "after", "<h1><i></i></h1>\n<p> x<b></b></p>"]
28871 ]
28872 }
28873 !! wikitext
28874 <span id="x">foo</span>
28875 !! wikitext/edited
28876 <span id="x">foo</span>
28877
28878 x
28879 !! end
28880
28881 !! test
28882 1. Indent Pre Nowiki: suppress whitespace at the start of new paragraph
28883 !! options
28884 parsoid={
28885 "modes": ["html2wt"],
28886 "scrubWikitext": true
28887 }
28888 !! html/parsoid
28889 <p> hi</p>
28890 <p> hello</p>
28891 !! wikitext
28892 hi
28893
28894 hello
28895 !! end
28896
28897 !! test
28898 2. Indent Pre Nowiki: don't suppress whitespace at the start of new paragraph if scrubWikitext is false
28899 !! options
28900 parsoid=html2wt
28901 !! html/parsoid
28902 <p> hi</p>
28903 <p> hello</p>
28904 !! wikitext
28905 <nowiki> </nowiki>hi
28906
28907 <nowiki> </nowiki> hello
28908 !! end
28909
28910 !! test
28911 3. Indent Pre Nowiki: suppress whitespace after newlines in new paragraph or table cell
28912 !! options
28913 parsoid={
28914 "modes": ["html2wt"],
28915 "scrubWikitext": true
28916 }
28917 !! html/parsoid
28918 <p>Foo
28919 bar
28920 baz</p>
28921
28922 <table><tr><td>Foo
28923 bar
28924 baz bang</td></tr></table>
28925
28926 <p><!--boo--> foo
28927 bar</p>
28928
28929 <p> foo
28930 bar<span>boo</span></p>
28931 !! wikitext
28932 Foo
28933 bar
28934 baz
28935
28936 {|
28937 |Foo
28938 bar
28939 baz bang
28940 |}
28941
28942 <!--boo-->foo
28943 bar
28944
28945 foo
28946 bar<span>boo</span>
28947 !! end
28948
28949 !! test
28950 4. Indent Pre Nowiki: suppress leading whitespace in edited paragraphs
28951 !! options
28952 parsoid={
28953 "modes": ["selser"],
28954 "scrubWikitext": true,
28955 "changes": [
28956 [ "p", "html", " a\n b" ]
28957 ]
28958 }
28959 !! wikitext
28960 xyz
28961 !! wikitext/edited
28962 a
28963 b
28964 !! end
28965
28966 !! test
28967 1. New links that end in spaces
28968 !! options
28969 parsoid={
28970 "modes": ["html2wt"],
28971 "scrubWikitext": false
28972 }
28973 !! html/parsoid
28974 <p><a rel="mw:WikiLink" href="./Berlin" title="Berlin">Berlin </a>is the capital of Germany.</p>
28975 <p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo </a><b>bar</b></p>
28976 <p><a rel="mw:WikiLink" href="./Boston" title="Boston">Boston </a> is a city.</p>
28977 !! wikitext
28978 [[Berlin ]]<nowiki/>is the capital of Germany.
28979
28980 [[Foo ]]'''bar'''
28981
28982 [[Boston ]] is a city.
28983 !! end
28984
28985 !! test
28986 2. New links that end in spaces
28987 !! options
28988 parsoid={
28989 "modes": ["html2wt"],
28990 "scrubWikitext": true
28991 }
28992 !! html/parsoid
28993 <p><a rel="mw:WikiLink" href="./Berlin" title="Berlin">Berlin </a>is the capital of Germany.</p>
28994 <p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo </a><b>bar</b></p>
28995 <p><a rel="mw:WikiLink" href="./Boston" title="Boston">Boston </a> is a city.</p>
28996 !! wikitext
28997 [[Berlin]] is the capital of Germany.
28998
28999 [[Foo]] '''bar'''
29000
29001 [[Boston]] is a city.
29002 !! end
29003
29004 !! test
29005 1. Table cells with escapable prefixes
29006 !! options
29007 parsoid={
29008 "modes": ["html2wt"],
29009 "scrubWikitext": false
29010 }
29011 !! html
29012 <table>
29013 <tr><td>a</td></tr>
29014 <tr><td>-</td></tr>
29015 <tr><td>+</td></tr>
29016 </table>
29017 !! wikitext
29018 {|
29019 |a
29020 |-
29021 |<nowiki>-</nowiki>
29022 |-
29023 |<nowiki>+</nowiki>
29024 |}
29025 !! end
29026
29027 !! test
29028 2. Table cells with escapable prefixes
29029 !! options
29030 parsoid={
29031 "modes": ["html2wt"],
29032 "scrubWikitext": true
29033 }
29034 !! html
29035 <table>
29036 <tr><td>a</td></tr>
29037 <tr><td>-</td></tr>
29038 <tr><td>+</td></tr>
29039 </table>
29040 !! wikitext
29041 {|
29042 |a
29043 |-
29044 | -
29045 |-
29046 | +
29047 |}
29048 !! end
29049
29050 !! test
29051 3a. Table cells with escapable prefixes after edits
29052 !! options
29053 parsoid={
29054 "modes": ["selser"],
29055 "scrubWikitext": true,
29056 "changes": [
29057 [ "table tbody tr:first-child td:first-child", "remove"]
29058 ]
29059 }
29060 !! wikitext
29061 {|
29062 |a||-
29063 |}
29064 !! wikitext/edited
29065 {|
29066 | -
29067 |}
29068 !! end
29069
29070 !! test
29071 3b. Table cells with escapable prefixes after edits
29072 !! options
29073 parsoid={
29074 "modes": ["selser"],
29075 "scrubWikitext": true,
29076 "changes": [
29077 [ "table tbody tr:first-child td:first-child", "html", "-" ],
29078 [ "#x", "remove" ]
29079 ]
29080 }
29081 !! wikitext
29082 {|
29083 |pqr
29084 |<span id="x">foo</span>+
29085 |}
29086 !! wikitext/edited
29087 {|
29088 | -
29089 | +
29090 |}
29091 !! end
29092
29093 # FIXME: This test will fail because
29094 # normalization doesn't realize that the id attribute
29095 # will eliminate the escapable scenario
29096 !! test
29097 4a. Table cells without escapable prefixes after edits
29098 !! options
29099 parsoid={
29100 "modes": ["selser"],
29101 "scrubWikitext": true,
29102 "changes": [
29103 [ "#x", "html", "-" ]
29104 ]
29105 }
29106 !! wikitext
29107 {|
29108 | id="x" |abcd
29109 |}
29110 !! wikitext/edited
29111 {|
29112 | id="x" |-
29113 |}
29114 !! end
29115
29116 ## This tests normalizer's ability to discriminate between
29117 ## cells having identical content.
29118 !! test
29119 4b. Table cells without escapable prefixes after edits
29120 !! options
29121 parsoid={
29122 "modes": ["selser"],
29123 "scrubWikitext": true,
29124 "changes": [
29125 [ "td", "html", "-" ]
29126 ]
29127 }
29128 !! wikitext
29129 {|
29130 |a||b
29131 |}
29132 !! wikitext/edited
29133 {|
29134 | -||-
29135 |}
29136 !! end
29137
29138 ## This tests normalizer's ability to not be tripped by
29139 ## comments (and whitespace)
29140 !! test
29141 4c. Table cells without escapable prefixes after edits
29142 !! options
29143 parsoid={
29144 "modes": ["selser"],
29145 "scrubWikitext": true,
29146 "changes": [
29147 [ "table tbody tr td:first-child", "remove" ]
29148 ]
29149 }
29150 !! wikitext
29151 {|
29152 |-
29153 <!--foo--> |a||-
29154 |}
29155 !! wikitext/edited
29156 {|
29157 |-
29158 <!--foo--> | -
29159 |}
29160 !! end
29161
29162 ## This tests normalizer's ability to handle HTML cells
29163 !! test
29164 4d. Table cells without escapable prefixes after edits
29165 !! options
29166 parsoid={
29167 "modes": ["selser"],
29168 "scrubWikitext": true,
29169 "changes": [
29170 [ "td", "html", "-" ]
29171 ]
29172 }
29173 !! wikitext
29174 <table>
29175 <tr><td>a</td></tr>
29176 </table>
29177 !! wikitext/edited
29178 <table>
29179 <tr><td>-</td></tr>
29180 </table>
29181 !! end
29182
29183 ## T111151 Remove font elements without attributes
29184 !! test
29185 5a. font tags without attributes should be dropped in scrubWikitext mode
29186 !! options
29187 parsoid={
29188 "modes": ["html2wt"],
29189 "scrubWikitext": true
29190 }
29191 !! html
29192 <font>foo</font>
29193 <font><font>bar</font></font>
29194 <font class="x">boo</font>
29195 !! wikitext
29196 foo
29197 bar
29198 <font class="x">boo</font>
29199 !! end
29200
29201 !! test
29202 5b. font tags should not be dropped without scrubWikitext being enabled
29203 !! options
29204 parsoid={
29205 "modes": ["html2wt"],
29206 "scrubWikitext": false
29207 }
29208 !! html
29209 <font>foo</font>
29210 !! wikitext
29211 <font>foo</font>
29212 !! end
29213
29214 !! test
29215 Escape nowiki DOM elements
29216 !! options
29217 parsoid=html2wt
29218 !! html/parsoid
29219 <nowiki><i>foo</i></nowiki>
29220 !! wikitext
29221 &lt;nowiki&gt;''foo''&lt;/nowiki&gt;
29222 !! end
29223
29224 # This is meant to be an interim fix while we go about figuring out
29225 # how to not introduce these trailing <nowiki/>s in the first place.
29226 !! test
29227 T115717: Strip trailing <nowiki/>s (without affecting valid uses)
29228 !! options
29229 parsoid=html2wt
29230 !! html/parsoid
29231 <p>x<meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/>
29232 y</p>
29233 <p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","named":true,"spc":["\n"," "," ",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;nowiki/>"}},"i":0}}]}'></span></p>
29234 <p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","named":true,"spc":["\n"," "," ","\n"]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;nowiki/>"}},"i":0}}]}'></span></p>
29235 !! wikitext
29236 x
29237 y
29238
29239 {{echo|
29240 1 = <nowiki/>}}
29241
29242 {{echo|
29243 1 = <nowiki/>
29244 }}
29245 !! end
29246
29247 # ---------------------------------------------------
29248 # End of tests spec'ing wikitext serialization norms |
29249 # ---------------------------------------------------
29250
29251 # T104032
29252 !! test
29253 Bare inline nodes not wrapped inside p-tags should be treated as p-wrapped
29254 !! options
29255 parsoid=html2wt
29256 !! html/parsoid
29257 a<p>b</p>
29258 <b>c</b><p>d</p>
29259 <table><tr>
29260 <td>a<p>b</p></td>
29261 <td><b>c</b><p>d</p></td>
29262 </tr></table>
29263 !! wikitext
29264 a
29265
29266 b
29267
29268 '''c'''
29269
29270 d
29271 {|
29272 |a
29273 b
29274 |'''c'''
29275 d
29276 |}
29277 !! end
29278
29279 !! test
29280 Anchor without href scenarios
29281 !! options
29282 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
29283 !! html/parsoid
29284 <a class="bc"></a>
29285 <a class="no">dice</a>
29286 <a name="foo"></a>
29287 !! wikitext
29288
29289 dice
29290 <span name="foo"></span>
29291 !! end
29292
29293 !! test
29294 New transclusion added after a list should be serialized after the list
29295 !! options
29296 parsoid=html2wt
29297 !! html/parsoid
29298 <ul><li>a</li></ul><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</span>
29299 !! wikitext
29300 * a
29301 {{echo|foo}}
29302 !! end
29303
29304 # -----------------------------------------------------------------
29305 # End of section for Parsoid-only html2wt tests for serialization
29306 # of new content
29307 # -----------------------------------------------------------------
29308
29309 # -----------------------------------------------------------------
29310 # The following section of tests are primarily to spec behavior of
29311 # the selective serializer. All these tests have manual selser
29312 # changes. The automated selser changes for all tests handle the
29313 # wide variation of changes, but these tests here capture specs
29314 # deterministically.
29315 # ----------------------------------------------------------------
29316
29317 ## T90517
29318 !! test
29319 Selser: New comments should not be lost
29320 !! options
29321 parsoid={
29322 "modes": ["selser"],
29323 "changes": [
29324 [ "#a", "after", "<!--c1-->" ],
29325 [ "#b", "before", "<!--c2-->" ]
29326 ]
29327 }
29328 !! wikitext
29329 <span id="a">a</span>
29330
29331 <span id="b">b</span>
29332 !! wikitext/edited
29333 <span id="a">a</span><!--c1-->
29334
29335 <!--c2--><span id="b">b</span>
29336 !! end
29337
29338 ## T89383
29339 !! test
29340 Selser: Check for validity of DSR before using it
29341 !! options
29342 parsoid={
29343 "modes": ["selser"],
29344 "changes": [
29345 [ "#a", "before", "<meta property='mw:PageProp/displaytitle' content='foo'>" ]
29346 ]
29347 }
29348 !! wikitext
29349 <span id="a">a</span>
29350 !! wikitext/edited
29351 {{DISPLAYTITLE:foo}}
29352 <span id="a">a</span>
29353 !! end
29354
29355 !! test
29356 1. DOMDiff: Changes to <ref> content should be looked up using id
29357 !! options
29358 parsoid={
29359 "modes": ["selser"],
29360 "changes": [
29361 ["#X", "after", "bar"],
29362 ["#Y", "after", "baz"]
29363 ]
29364 }
29365 !! wikitext
29366 X <ref><span id="X">foo</span></ref>
29367 Y <ref name="a" />
29368 <references>
29369 <ref name="a"><span id="Y">foo</span></ref>
29370 </references>
29371 !! wikitext/edited
29372 X <ref><span id="X">foo</span>bar</ref>
29373 Y <ref name="a" />
29374 <references>
29375 <ref name="a"><span id="Y">foo</span>baz</ref>
29376 </references>
29377 !! end
29378
29379 !! test
29380 2. DOMDiff: Changes to <ref> content should be looked up using id
29381 !! options
29382 parsoid={
29383 "modes": ["selser"],
29384 "changes": [
29385 ["#Z", "after", "bar"]
29386 ]
29387 }
29388 !! wikitext
29389 A <ref>foo bar for a</ref>
29390 B <ref group="X" name="b" />
29391
29392 <references />
29393
29394 <references group="X">
29395 <ref name="b"><span id="Z">foo</span></ref>
29396 </references>
29397 !! wikitext/edited
29398 A <ref>foo bar for a</ref>
29399 B <ref group="X" name="b" />
29400
29401 <references />
29402
29403 <references group="X">
29404 <ref name="b"><span id="Z">foo</span>bar</ref>
29405 </references>
29406 !! end
29407
29408 !! test
29409 DOMDiff: Edits to content nested in elements with templated attributes should not be lost (T139388)
29410 !! options
29411 parsoid={
29412 "modes": ["selser"],
29413 "changes": [
29414 [ "div:first-child", "text", "bar" ]
29415 ]
29416 }
29417 !! wikitext
29418 <div style="{{1x|color:red;}}%">foo</div>
29419 !! wikitext/edited
29420 <div style="{{1x|color:red;}}%">bar</div>
29421 !! end
29422
29423 !! test
29424 Empty LI (T49673)
29425 !! wikitext
29426 * a
29427 *
29428 *
29429 * b
29430 !! html/php+tidy
29431 <ul>
29432 <li>a</li>
29433 <li class="mw-empty-elt"></li>
29434 <li class="mw-empty-elt"></li>
29435 <li>b</li>
29436 </ul>
29437 !! end
29438
29439 !! test
29440 Thumbnail output
29441 !! wikitext
29442 [[File:Thumb.png|thumb]]
29443 !! html/php+tidy
29444 <div class="thumb tright">
29445 <div class="thumbinner" style="width:137px;"><a href="/wiki/File:Thumb.png" class="image"><img alt="Thumb.png" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>
29446 <div class="thumbcaption">
29447 <div class="magnify"><a href="/wiki/File:Thumb.png" class="internal" title="Enlarge"></a></div>
29448 </div>
29449 </div>
29450 </div>
29451 !! end
29452
29453 !! test
29454 unclosed internal link XSS (T137264)
29455 !! wikitext
29456 [[#%3Cscript%3Ealert(1)%3C/script%3E|
29457 !! html/php
29458 <p>[[#&lt;script&gt;alert(1)&lt;/script&gt;|
29459 </p>
29460 !! html/parsoid
29461 <p>[[#%3Cscript%3Ealert(1)%3C/script%3E|</p>
29462 !! end
29463
29464 # Use $wgRawHtml to inject a <style> tag, since you normally can't in wikitext
29465 # (Parsoid doesn't support $wgRawHtml==true)
29466 !! test
29467 Validating that <style> isn't eaten by tidy (T167349)
29468 !! options
29469 wgRawHtml=1
29470 !! wikitext
29471 <div class="foo">
29472 <html><style>.foo::before { content: "<foo>"; }</style></html>
29473 <html><style data-mw-foobar="baz">.foo::after { content: "<bar>"; }</style></html>
29474 </div>
29475 !! html/php+tidy
29476 <div class="foo">
29477 <style>.foo::before { content: "<foo>"; }</style>
29478 <style data-mw-foobar="baz">.foo::after { content: "<bar>"; }</style>
29479 </div>
29480 !! end
29481
29482 !! test
29483 Decoding of HTML entities in headings and links for IDs and link fragments (T103714)
29484 !! wikitext
29485 == A&B&amp;C&amp;amp;D&amp;amp;amp;E ==
29486 [[#A&B&amp;C&amp;amp;D&amp;amp;amp;E]]
29487 !! html/php
29488 <h2><span class="mw-headline" id="A.26B.26C.26amp.3BD.26amp.3Bamp.3BE">A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29489 <p><a href="#A.26B.26C.26amp.3BD.26amp.3Bamp.3BE">#A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E</a>
29490 </p>
29491 !! end
29492
29493 !! test
29494 Decoding of HTML entities in indicator names for IDs (T104196)
29495 !! options
29496 showindicators
29497 !! wikitext
29498 <indicator name="1&2&amp;3&amp;amp;4&amp;amp;amp;5">Indicator</indicator>
29499 !! html/php
29500 1&2&3&amp;4&amp;amp;5=Indicator
29501
29502 !! end
29503
29504 !! test
29505 HTML5 ids: fallback to legacy
29506 !! config
29507 wgFragmentMode=[ 'html5', 'legacy' ]
29508 !! wikitext
29509 == Foo bar ==
29510
29511 == foo Bar ==
29512
29513 == Тест ==
29514
29515 == Тест ==
29516
29517 == тест ==
29518
29519 == Hey < # " > % : ' ==
29520 [[#Foo bar]] [[#foo Bar]] [[#Тест]] [[#тест]] [[#Hey < # " > % : ']]
29521
29522 {{anchorencode:💩}} <span id="{{anchorencode:💩}}"></span>
29523
29524 <!-- These two links should produce identical HTML -->
29525 [[#啤酒]] [[#%E5%95%A4%E9%85%92]]
29526
29527 !! html/php
29528 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
29529 <ul>
29530 <li class="toclevel-1 tocsection-1"><a href="#Foo_bar"><span class="tocnumber">1</span> <span class="toctext">Foo bar</span></a></li>
29531 <li class="toclevel-1 tocsection-2"><a href="#foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext">foo Bar</span></a></li>
29532 <li class="toclevel-1 tocsection-3"><a href="#Тест"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
29533 <li class="toclevel-1 tocsection-4"><a href="#Тест_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
29534 <li class="toclevel-1 tocsection-5"><a href="#тест"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
29535 <li class="toclevel-1 tocsection-6"><a href="#Hey_&lt;_#_&quot;_&gt;_%_:_&#39;"><span class="tocnumber">6</span> <span class="toctext">Hey &lt; # " &gt;&#160;%&#160;: '</span></a></li>
29536 </ul>
29537 </div>
29538
29539 <h2><span class="mw-headline" id="Foo_bar">Foo bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29540 <h2><span class="mw-headline" id="foo_Bar_2">foo Bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29541 <h2><span id=".D0.A2.D0.B5.D1.81.D1.82"></span><span class="mw-headline" id="Тест">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29542 <h2><span id=".D0.A2.D0.B5.D1.81.D1.82_2"></span><span class="mw-headline" id="Тест_2">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29543 <h2><span id=".D1.82.D0.B5.D1.81.D1.82"></span><span class="mw-headline" id="тест">тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29544 <h2><span id="Hey_.3C_.23_.22_.3E_.25_:_.27"></span><span class="mw-headline" id="Hey_&lt;_#_&quot;_&gt;_%_:_'">Hey &lt; # " &gt;&#160;%&#160;: '</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Hey &lt; # &quot; &gt; % : &#039;">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29545 <p><a href="#Foo_bar">#Foo bar</a> <a href="#foo_Bar">#foo Bar</a> <a href="#Тест">#Тест</a> <a href="#тест">#тест</a> <a href="#Hey_&lt;_#_&quot;_&gt;_%_:_&#39;">#Hey &lt; # " &gt;&#160;%&#160;: '</a>
29546 </p><p>💩 <span id="💩"></span>
29547 </p><p><a href="#啤酒">#啤酒</a> <a href="#啤酒">#啤酒</a>
29548 </p>
29549 !! end
29550
29551 !! test
29552 HTML5 ids: legacy with a fallback to modern
29553 !! config
29554 wgFragmentMode=[ 'legacy', 'html5' ]
29555 !! wikitext
29556 == Foo bar ==
29557
29558 == foo Bar ==
29559
29560 == Тест ==
29561
29562 == Тест ==
29563
29564 == тест ==
29565
29566 == Hey < # " > % : ' ==
29567 [[#Foo bar]] [[#foo Bar]] [[#Тест]] [[#тест]] [[#Hey < # " > % : ']]
29568
29569 {{anchorencode:💩}} <span id="{{anchorencode:💩}}"></span>
29570
29571 <!-- These two links should produce identical HTML -->
29572 [[#啤酒]] [[#%E5%95%A4%E9%85%92]]
29573
29574 !! html/php
29575 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
29576 <ul>
29577 <li class="toclevel-1 tocsection-1"><a href="#Foo_bar"><span class="tocnumber">1</span> <span class="toctext">Foo bar</span></a></li>
29578 <li class="toclevel-1 tocsection-2"><a href="#foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext">foo Bar</span></a></li>
29579 <li class="toclevel-1 tocsection-3"><a href="#.D0.A2.D0.B5.D1.81.D1.82"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
29580 <li class="toclevel-1 tocsection-4"><a href="#.D0.A2.D0.B5.D1.81.D1.82_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
29581 <li class="toclevel-1 tocsection-5"><a href="#.D1.82.D0.B5.D1.81.D1.82"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
29582 <li class="toclevel-1 tocsection-6"><a href="#Hey_.3C_.23_.22_.3E_.25_:_.27"><span class="tocnumber">6</span> <span class="toctext">Hey &lt; # " &gt;&#160;%&#160;: '</span></a></li>
29583 </ul>
29584 </div>
29585
29586 <h2><span class="mw-headline" id="Foo_bar">Foo bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29587 <h2><span class="mw-headline" id="foo_Bar_2">foo Bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29588 <h2><span id="Тест"></span><span class="mw-headline" id=".D0.A2.D0.B5.D1.81.D1.82">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29589 <h2><span id="Тест_2"></span><span class="mw-headline" id=".D0.A2.D0.B5.D1.81.D1.82_2">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29590 <h2><span id="тест"></span><span class="mw-headline" id=".D1.82.D0.B5.D1.81.D1.82">тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29591 <h2><span id="Hey_&lt;_#_&quot;_&gt;_%_:_'"></span><span class="mw-headline" id="Hey_.3C_.23_.22_.3E_.25_:_.27">Hey &lt; # " &gt;&#160;%&#160;: '</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Hey &lt; # &quot; &gt; % : &#039;">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29592 <p><a href="#Foo_bar">#Foo bar</a> <a href="#foo_Bar">#foo Bar</a> <a href="#.D0.A2.D0.B5.D1.81.D1.82">#Тест</a> <a href="#.D1.82.D0.B5.D1.81.D1.82">#тест</a> <a href="#Hey_.3C_.23_.22_.3E_.25_:_.27">#Hey &lt; # " &gt;&#160;%&#160;: '</a>
29593 </p><p>.F0.9F.92.A9 <span id=".F0.9F.92.A9"></span>
29594 </p><p><a href="#.E5.95.A4.E9.85.92">#啤酒</a> <a href="#.E5.95.A4.E9.85.92">#啤酒</a>
29595 </p>
29596 !! end
29597
29598 !! test
29599 HTML5 ids: no legacy
29600 !! config
29601 wgFragmentMode=[ 'html5' ]
29602 !! wikitext
29603 == Foo bar ==
29604
29605 == foo Bar ==
29606
29607 == Тест ==
29608
29609 == Тест ==
29610
29611 == тест ==
29612
29613 == Hey < # " > % : ' ==
29614 [[#Foo bar]] [[#foo Bar]] [[#Тест]] [[#тест]] [[#Hey < # " > % : ']]
29615
29616 {{anchorencode:💩}} <span id="{{anchorencode:💩}}"></span>
29617
29618 <!-- These two links should produce identical HTML -->
29619 [[#啤酒]] [[#%E5%95%A4%E9%85%92]]
29620
29621 !! html/php
29622 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
29623 <ul>
29624 <li class="toclevel-1 tocsection-1"><a href="#Foo_bar"><span class="tocnumber">1</span> <span class="toctext">Foo bar</span></a></li>
29625 <li class="toclevel-1 tocsection-2"><a href="#foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext">foo Bar</span></a></li>
29626 <li class="toclevel-1 tocsection-3"><a href="#Тест"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
29627 <li class="toclevel-1 tocsection-4"><a href="#Тест_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
29628 <li class="toclevel-1 tocsection-5"><a href="#тест"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
29629 <li class="toclevel-1 tocsection-6"><a href="#Hey_&lt;_#_&quot;_&gt;_%_:_&#39;"><span class="tocnumber">6</span> <span class="toctext">Hey &lt; # " &gt;&#160;%&#160;: '</span></a></li>
29630 </ul>
29631 </div>
29632
29633 <h2><span class="mw-headline" id="Foo_bar">Foo bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29634 <h2><span class="mw-headline" id="foo_Bar_2">foo Bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29635 <h2><span class="mw-headline" id="Тест">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29636 <h2><span class="mw-headline" id="Тест_2">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29637 <h2><span class="mw-headline" id="тест">тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29638 <h2><span class="mw-headline" id="Hey_&lt;_#_&quot;_&gt;_%_:_'">Hey &lt; # " &gt;&#160;%&#160;: '</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Hey &lt; # &quot; &gt; % : &#039;">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29639 <p><a href="#Foo_bar">#Foo bar</a> <a href="#foo_Bar">#foo Bar</a> <a href="#Тест">#Тест</a> <a href="#тест">#тест</a> <a href="#Hey_&lt;_#_&quot;_&gt;_%_:_&#39;">#Hey &lt; # " &gt;&#160;%&#160;: '</a>
29640 </p><p>💩 <span id="💩"></span>
29641 </p><p><a href="#啤酒">#啤酒</a> <a href="#啤酒">#啤酒</a>
29642 </p>
29643 !! end
29644
29645 !! test
29646 T90902: Normalize weird characters in section IDs
29647 !! config
29648 wgFragmentMode=[ 'html5', 'legacy' ]
29649 !! wikitext
29650 == Foo&nbsp;bar ==
29651 [[#Foo&nbsp;bar]]
29652
29653 !! html/php
29654 <h2><span class="mw-headline" id="Foo_bar">Foo&#160;bar</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
29655 <p><a href="#Foo_bar">#Foo&#160;bar</a>
29656 </p>
29657 !! end