Fix LanguageSrTest for language converter
[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 Language converter glossary rules inside attributes (T119158)
18510 !! options
18511 language=sr variant=sr-el
18512 !! wikitext
18513 -{H|abc=>sr-el:" onload="alert(1)" data-foo="}-
18514
18515 [[File:Foobar.jpg|alt=-{}-abc-{}-]]
18516 !! html
18517 <p>
18518 </p><p><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="&quot; onload=&quot;alert(1)&quot; data-foo=&quot;" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220"></a>
18519 </p>
18520 !! end
18521
18522 !! test
18523 Language converter glossary rules inside attributes (T119158)
18524 !! options
18525 language=sr variant=sr-el
18526 !! wikitext
18527 -{H|foAjrjvi=>sr-el:" onload="alert(1)" data-foo="}-
18528
18529 [[File:Foobar.jpg|alt=-{}-foAjrjvi-{}-]]
18530 !! html
18531 <p>
18532 </p><p><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="&quot; onload=&quot;alert(1)&quot; data-foo=&quot;" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220"></a>
18533 </p>
18534 !! end
18535
18536 !! test
18537 Self closed html pairs (T7487)
18538 !! wikitext
18539 <center><font id="bug" />Centered text</center>
18540 <div><font id="bug2" />In div text</div>
18541 !! html+tidy
18542 <center><font id="bug"></font>Centered text</center>
18543 <div><font id="bug2"></font>In div text</div>
18544 !! end
18545
18546 #
18547 #
18548 #
18549
18550 !! test
18551 Punctuation: nbsp before exclamation
18552 !! wikitext
18553 C'est grave !
18554 !! html
18555 <p>C'est grave&#160;!
18556 </p>
18557 !! end
18558
18559 !! test
18560 Punctuation: CSS !important (T13874)
18561 !! wikitext
18562 <div style="width:50% !important">important</div>
18563 !! html
18564 <div style="width:50% !important">important</div>
18565
18566 !!end
18567
18568 !! test
18569 Punctuation: CSS ! important (T13874; with space after)
18570 !! wikitext
18571 <div style="width:50% ! important">important</div>
18572 !! html
18573 <div style="width:50% ! important">important</div>
18574
18575 !!end
18576
18577 !! test
18578 HTML bullet list, closed tags (T7497)
18579 !! wikitext
18580 <ul>
18581 <li>One</li>
18582 <li>Two</li>
18583 </ul>
18584 !! html/php
18585 <ul>
18586 <li>One</li>
18587 <li>Two</li>
18588 </ul>
18589
18590 !! html/parsoid
18591 <ul data-parsoid='{"stx":"html"}'>
18592 <li data-parsoid='{"stx":"html"}'>One</li>
18593 <li data-parsoid='{"stx":"html"}'>Two</li>
18594 </ul>
18595
18596 !! end
18597
18598 !! test
18599 HTML bullet list, unclosed tags (T7497)
18600 !! wikitext
18601 <ul>
18602 <li>One
18603 <li>Two
18604 </ul>
18605 !! html/php+tidy
18606 <ul>
18607 <li>One</li>
18608 <li>Two</li>
18609 </ul>
18610 !! html/parsoid
18611 <ul data-parsoid='{"stx":"html"}'>
18612 <li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
18613 <li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
18614 </ul>
18615
18616 !! end
18617
18618 !! test
18619 HTML ordered list, closed tags (T7497)
18620 !! wikitext
18621 <ol>
18622 <li>One</li>
18623 <li>Two</li>
18624 </ol>
18625 !! html/php
18626 <ol>
18627 <li>One</li>
18628 <li>Two</li>
18629 </ol>
18630
18631 !! html/parsoid
18632 <ol data-parsoid='{"stx":"html"}'>
18633 <li data-parsoid='{"stx":"html"}'>One</li>
18634 <li data-parsoid='{"stx":"html"}'>Two</li>
18635 </ol>
18636
18637 !! end
18638
18639 !! test
18640 HTML ordered list, unclosed tags (T7497)
18641 !! options
18642 !! wikitext
18643 <ol>
18644 <li>One
18645 <li>Two
18646 </ol>
18647 !! html/php+tidy
18648 <ol>
18649 <li>One</li>
18650 <li>Two</li>
18651 </ol>
18652 !! html/parsoid
18653 <ol data-parsoid='{"stx":"html"}'>
18654 <li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
18655 <li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
18656 </ol>
18657
18658 !! end
18659
18660 !! test
18661 HTML nested bullet list, closed tags (T7497)
18662 !! wikitext
18663 <ul>
18664 <li>One</li>
18665 <li>Two:
18666 <ul>
18667 <li>Sub-one</li>
18668 <li>Sub-two</li>
18669 </ul>
18670 </li>
18671 </ul>
18672 !! html/php
18673 <ul>
18674 <li>One</li>
18675 <li>Two:
18676 <ul>
18677 <li>Sub-one</li>
18678 <li>Sub-two</li>
18679 </ul>
18680 </li>
18681 </ul>
18682
18683 !! html/parsoid
18684 <ul data-parsoid='{"stx":"html"}'>
18685 <li data-parsoid='{"stx":"html"}'>One</li>
18686 <li data-parsoid='{"stx":"html"}'>Two:
18687 <ul data-parsoid='{"stx":"html"}'>
18688 <li data-parsoid='{"stx":"html"}'>Sub-one</li>
18689 <li data-parsoid='{"stx":"html"}'>Sub-two</li>
18690 </ul>
18691 </li>
18692 </ul>
18693 !! end
18694
18695 !! test
18696 HTML nested bullet list, open tags (T7497)
18697 !! wikitext
18698 <ul>
18699 <li>One
18700 <li>Two:
18701 <ul>
18702 <li>Sub-one
18703 <li>Sub-two
18704 </ul>
18705 </ul>
18706 !! html/php+tidy
18707 <ul>
18708 <li>One</li>
18709 <li>Two:
18710 <ul>
18711 <li>Sub-one</li>
18712 <li>Sub-two</li>
18713 </ul>
18714 </li>
18715 </ul>
18716 !! html/parsoid
18717 <ul>
18718 <li>One
18719 </li>
18720 <li>Two:
18721 <ul>
18722 <li>Sub-one
18723 </li>
18724 <li>Sub-two
18725 </li>
18726 </ul>
18727 </li>
18728 </ul>
18729
18730 !! end
18731
18732 !! test
18733 HTML nested ordered list, closed tags (T7497)
18734 !! wikitext
18735 <ol>
18736 <li>One</li>
18737 <li>Two:
18738 <ol>
18739 <li>Sub-one</li>
18740 <li>Sub-two</li>
18741 </ol>
18742 </li>
18743 </ol>
18744 !! html
18745 <ol>
18746 <li>One</li>
18747 <li>Two:
18748 <ol>
18749 <li>Sub-one</li>
18750 <li>Sub-two</li>
18751 </ol>
18752 </li>
18753 </ol>
18754
18755 !! end
18756
18757 !! test
18758 HTML nested ordered list, open tags (T7497)
18759 !! wikitext
18760 <ol>
18761 <li>One
18762 <li>Two:
18763 <ol>
18764 <li>Sub-one
18765 <li>Sub-two
18766 </ol>
18767 </ol>
18768 !! html/php
18769 <ol>
18770 <li>One
18771 <li>Two:
18772 <ol>
18773 <li>Sub-one
18774 <li>Sub-two
18775 </ol>
18776 </ol>
18777
18778 !! html/parsoid
18779 <ol>
18780 <li>One
18781 </li>
18782 <li>Two:
18783 <ol>
18784 <li>Sub-one
18785 </li>
18786 <li>Sub-two
18787 </li>
18788 </ol>
18789 </li>
18790 </ol>
18791
18792 !! end
18793
18794 !! test
18795 HTML ordered list item with parameters oddity
18796 !! wikitext
18797 <ol><li id="fragment">One</li>
18798 </ol>
18799 !! html
18800 <ol><li id="fragment">One</li>
18801 </ol>
18802
18803 !! end
18804
18805 # parsoid doesn't explicitly mark autonumbered links, see T55505
18806 !!test
18807 T7918: autonumbering
18808 !! wikitext
18809 [http://first/] [http://second] [ftp://ftp]
18810
18811 ftp://inlineftp
18812
18813 [mailto:enclosed@mail.tld With target]
18814
18815 [mailto:enclosed@mail.tld]
18816
18817 mailto:inline@mail.tld
18818 !! html/php
18819 <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>
18820 </p><p><a rel="nofollow" class="external free" href="ftp://inlineftp">ftp://inlineftp</a>
18821 </p><p><a rel="nofollow" class="external text" href="mailto:enclosed@mail.tld">With target</a>
18822 </p><p><a rel="nofollow" class="external autonumber" href="mailto:enclosed@mail.tld">[4]</a>
18823 </p><p><a rel="nofollow" class="external free" href="mailto:inline@mail.tld">mailto:inline@mail.tld</a>
18824 </p>
18825 !! html/parsoid
18826 <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>
18827 <p><a rel="mw:ExtLink" href="ftp://inlineftp">ftp://inlineftp</a></p>
18828 <p><a rel="mw:ExtLink" href="mailto:enclosed@mail.tld">With target</a></p>
18829 <p><a rel="mw:ExtLink" href="mailto:enclosed@mail.tld"></a></p>
18830 <p><a rel="mw:ExtLink" href="mailto:inline@mail.tld">mailto:inline@mail.tld</a></p>
18831 !! end
18832
18833
18834 #
18835 # Security and HTML correctness
18836 # From Nick Jenkins' fuzz testing
18837 #
18838
18839 !! test
18840 Fuzz testing: Parser13
18841 !! wikitext
18842 {|
18843 | http://a|
18844 !! html
18845 <table>
18846 <tr>
18847 <td>
18848 </td>
18849 </tr>
18850 </table>
18851
18852 !! end
18853
18854 !! test
18855 Fuzz testing: Parser14
18856 !! wikitext
18857 == onmouseover= ==
18858 http://__TOC__
18859 !! html
18860 <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>
18861 http://<div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
18862 <ul>
18863 <li class="toclevel-1 tocsection-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
18864 </ul>
18865 </div>
18866
18867
18868 !! html+tidy
18869 <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>
18870 <p>http://</p>
18871 <div id="toc" class="toc">
18872 <div class="toctitle">
18873 <h2>Contents</h2>
18874 </div>
18875 <ul>
18876 <li class="toclevel-1 tocsection-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
18877 </ul>
18878 </div>
18879 <p></p>
18880 !! end
18881
18882 !! test
18883 Fuzz testing: Parser14-table
18884 !! options
18885 parsoid=wt2html,html2html
18886 !! wikitext
18887 ==a==
18888 {| STYLE=__TOC__
18889 !! html
18890 <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>
18891 <table style="&#95;_TOC&#95;_">
18892 <tr><td></td></tr>
18893 </table>
18894
18895 !! html+tidy
18896 <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>
18897 <table style="__TOC__">
18898 <tr>
18899 <td></td>
18900 </tr>
18901 </table>
18902 !! html/parsoid
18903 <h2>a</h2>
18904 <table style="__TOC__"></table>
18905 !! end
18906
18907 # Known to produce bogus xml (extra </td>)
18908 !! test
18909 Fuzz testing: Parser16
18910 !! wikitext
18911 {|
18912 !https://||||||
18913 !! html
18914 <table>
18915 <tr>
18916 <th>https://</th>
18917 <th></th>
18918 <th></th>
18919 <th>
18920 </td>
18921 </tr>
18922 </table>
18923
18924 !! html+tidy
18925 <table>
18926 <tr>
18927 <th>https://</th>
18928 <th></th>
18929 <th></th>
18930 <th></th>
18931 </tr>
18932 </table>
18933 !! end
18934
18935 !! test
18936 Fuzz testing: Parser21
18937 !! wikitext
18938 {|
18939 ! irc://{{ftp://a" onmouseover="alert('hello world');"
18940 |
18941 !! html
18942 <table>
18943 <tr>
18944 <th> <a rel="nofollow" class="external free" href="irc://{{ftp://a">irc://{{ftp://a</a>" onmouseover="alert('hello world');"
18945 </th>
18946 <td>
18947 </td>
18948 </tr>
18949 </table>
18950
18951 !! end
18952
18953 !! test
18954 Fuzz testing: Parser22
18955 !! wikitext
18956 http://===r:::https://b
18957
18958 {|
18959 !! html
18960 <p><a rel="nofollow" class="external free" href="http://===r:::https://b">http://===r:::https://b</a>
18961 </p>
18962 <table>
18963 <tr><td></td></tr>
18964 </table>
18965
18966 !! end
18967
18968 # Known to produce bad XML for now
18969 !! test
18970 Fuzz testing: Parser24
18971 !! options
18972 parsoid=wt2html
18973 !! wikitext
18974 {|
18975 {{{|
18976 <u CLASS=
18977 | {{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--><noinclude>}}}} >
18978 <br style="onmouseover='alert(document.cookie);' " />
18979
18980 MOVE YOUR MOUSE CURSOR OVER THIS TEXT
18981 |
18982 !! html/php
18983 <table>
18984 {{{|
18985 <u class="&#124;">}}}} &gt;
18986 <br style="onmouseover=&#39;alert(document.cookie);&#39;" />
18987
18988 MOVE YOUR MOUSE CURSOR OVER THIS TEXT
18989 <tr>
18990 <td></u>
18991 </td>
18992 </tr>
18993 </table>
18994
18995 !! html/parsoid
18996 <p data-parsoid='{"fostered":true,"autoInsertedEnd":true}'>{{{|
18997 <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>"}'/>}}}} >
18998 <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}'>
18999
19000
19001
19002 <tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'></td></tr></tbody></table>
19003 !! end
19004
19005 # Note: the current result listed for this is not what the original one was,
19006 # but the original bug was JavaScript injection, which is fixed in any case.
19007 # It's not clear that the original result listed was any more correct than the
19008 # current one. Original result:
19009 # <p>{{{|
19010 # </p>
19011 # <li class="&#124;&#124;">
19012 # }}}blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
19013 !!test
19014 Fuzz testing: Parser25 (T8055)
19015 !! wikitext
19016 {{{
19017 |
19018 <LI CLASS=||
19019 >
19020 }}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE
19021 !! html/php
19022 <p>&lt;LI CLASS=blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
19023 </p>
19024 !! html/parsoid
19025 <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"]}'>
19026 </span><p about="#mwt1">&lt;LI CLASS=blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b></p>
19027 !! end
19028
19029 !!test
19030 Fuzz testing: URL adjacent extension (with space, clean)
19031 !! wikitext
19032 http://example.com <nowiki>junk</nowiki>
19033 !! html/php
19034 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> junk
19035 </p>
19036 !! html/parsoid
19037 <p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a> <span typeof="mw:Nowiki">junk</span></p>
19038 !! end
19039
19040 !!test
19041 Fuzz testing: URL adjacent extension (no space, dirty; nowiki)
19042 !! wikitext
19043 http://example.com<nowiki>junk</nowiki>
19044 !! html/php
19045 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>junk
19046 </p>
19047 !! html/parsoid
19048 <p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a><span typeof="mw:Nowiki">junk</span></p>
19049 !! end
19050
19051 !! test
19052 Fuzz testing: URL adjacent extension (no space, dirty; pre)
19053 !! wikitext
19054 http://example.com<pre>junk</pre>
19055 !! html/php
19056 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a><pre>junk</pre>
19057
19058 !! html/php+tidy
19059 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></p>
19060 <pre>
19061 junk
19062 </pre>
19063 !! html/parsoid
19064 <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>
19065 !! end
19066
19067 !! test
19068 Fuzz testing: image with bogus manual thumbnail
19069 !! wikitext
19070 [[Image:foobar.jpg|thumbnail= ]]
19071 !! html/php
19072 <div class="thumb tright"><div class="thumbinner" style="width:182px;">Error creating thumbnail: <div class="thumbcaption"></div></div></div>
19073
19074 !! html/parsoid
19075 <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>
19076 !! end
19077
19078 !! test
19079 Fuzz testing: encoded newline in generated HTML replacements (T8577)
19080 !! wikitext
19081 <pre dir="&#10;"></pre>
19082 !! html/php
19083 <pre dir="&#10;"></pre>
19084
19085 !! html/parsoid
19086 <pre typeof="mw:Extension/pre" about="#mwt2" dir="&amp;#10;" data-mw='{"name":"pre","attrs":{"dir":"&amp;#10;"},"body":{"extsrc":""}}'></pre>
19087 !! end
19088
19089 !! test
19090 Parsing optional HTML elements (T8171)
19091 !! options
19092 !! wikitext
19093 <table>
19094 <tr>
19095 <td> Some tabular data</td>
19096 <td> More tabular data ...
19097 <td> And yet som tabular data</td>
19098 </tr>
19099 </table>
19100 !! html
19101 <table>
19102 <tr>
19103 <td> Some tabular data</td>
19104 <td> More tabular data ...
19105 </td><td> And yet som tabular data</td>
19106 </tr>
19107 </table>
19108
19109 !! end
19110
19111 !! test
19112 Correct handling of <td>, <tr> (T8171)
19113 !! options
19114 !! wikitext
19115 <table>
19116 <tr>
19117 <td> Some tabular data</td>
19118 <td> More tabular data ...</td>
19119 <td> And yet som tabular data</td>
19120 </tr>
19121 </table>
19122 !! html
19123 <table>
19124 <tr>
19125 <td> Some tabular data</td>
19126 <td> More tabular data ...</td>
19127 <td> And yet som tabular data</td>
19128 </tr>
19129 </table>
19130
19131 !! end
19132
19133
19134 !! test
19135 Parsing crashing regression (fr:JavaScript)
19136 !! wikitext
19137 </body></x>
19138 !! html
19139 <p>&lt;/body&gt;&lt;/x&gt;
19140 </p>
19141 !! end
19142
19143 !! test
19144 Inline wiki vs wiki block nesting
19145 !! wikitext
19146 '''Bold paragraph
19147
19148 New wiki paragraph
19149 !! html
19150 <p><b>Bold paragraph</b>
19151 </p><p>New wiki paragraph
19152 </p>
19153 !! end
19154
19155 # FIXME: The current php output is documented
19156 # and desired output is the parsoid target.
19157 !! test
19158 Inline HTML vs wiki block nesting
19159 !! wikitext
19160 <b>Bold paragraph
19161
19162 New wiki paragraph
19163 !! html/php
19164 <p><b>Bold paragraph
19165 </p><p>New wiki paragraph</b>
19166 </p>
19167 !! html/parsoid
19168 <p><b>Bold paragraph</b>
19169 </p><p>New wiki paragraph
19170 </p>
19171 !! end
19172
19173 # Original result was this:
19174 # <p><b>bold</b><b>bold<i>bolditalics</i></b>
19175 # </p>
19176 # While that might be marginally more intuitive, maybe, the six-apostrophe
19177 # construct is clearly pathological and the result stated here (which is what
19178 # the parser actually does) is about as reasonable as anything.
19179 !!test
19180 Mixing markup for italics and bold
19181 !! options
19182 !! wikitext
19183 '''bold''''''bold''bolditalics'''''
19184 !! html
19185 <p>'<i>bold'</i><b>bold<i>bolditalics</i></b>
19186 </p>
19187 !! end
19188
19189
19190 !! article
19191 Xyzzyx
19192 !! text
19193 Article for special page transclusion test
19194 !! endarticle
19195
19196 !! test
19197 Special page transclusion
19198 !! options
19199 !! wikitext
19200 {{Special:Prefixindex/Xyzzyx}}
19201 !! html
19202 <ul class="mw-prefixindex-list"><li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
19203 </ul>
19204
19205 !! end
19206
19207 !! test
19208 Special page transclusion twice (T7021)
19209 !! options
19210 !! wikitext
19211 {{Special:Prefixindex/Xyzzyx}}
19212 {{Special:Prefixindex/Xyzzyx}}
19213 !! html
19214 <ul class="mw-prefixindex-list"><li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
19215 </ul>
19216 <ul class="mw-prefixindex-list"><li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
19217 </ul>
19218
19219 !! end
19220
19221 !! test
19222 Transclusion of default MediaWiki message
19223 !! wikitext
19224 {{MediaWiki:Mainpage}}
19225 !! html
19226 <p>Main Page
19227 </p>
19228 !! end
19229
19230 !! test
19231 Transclusion of nonexistent MediaWiki message
19232 !! wikitext
19233 {{MediaWiki:Mainpagexxx}}
19234 !! html
19235 <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>
19236 </p>
19237 !! end
19238
19239 !! test
19240 Transclusion of MediaWiki message with underscore
19241 !! wikitext
19242 {{MediaWiki:history_short}}
19243 !! html
19244 <p>History
19245 </p>
19246 !! end
19247
19248 !! test
19249 Transclusion of MediaWiki message with space
19250 !! wikitext
19251 {{MediaWiki:history short}}
19252 !! html
19253 <p>History
19254 </p>
19255 !! end
19256
19257 !! test
19258 Invalid header with following text
19259 !! wikitext
19260 = x = y
19261 !! html
19262 <p>= x = y
19263 </p>
19264 !! end
19265
19266
19267 !! test
19268 Section extraction test (section 0)
19269 !! options
19270 section=0
19271 !! wikitext
19272 start
19273 ==a==
19274 ===aa===
19275 ====aaa====
19276 ==b==
19277 ===ba===
19278 ===bb===
19279 ====bba====
19280 ===bc===
19281 ==c==
19282 ===ca===
19283 !! html/php
19284 start
19285 !! end
19286
19287 !! test
19288 Section extraction test (section 1)
19289 !! options
19290 section=1
19291 !! wikitext
19292 start
19293 ==a==
19294 ===aa===
19295 ====aaa====
19296 ==b==
19297 ===ba===
19298 ===bb===
19299 ====bba====
19300 ===bc===
19301 ==c==
19302 ===ca===
19303 !! html/php
19304 ==a==
19305 ===aa===
19306 ====aaa====
19307 !! end
19308
19309 !! test
19310 Section extraction test (section 2)
19311 !! options
19312 section=2
19313 !! wikitext
19314 start
19315 ==a==
19316 ===aa===
19317 ====aaa====
19318 ==b==
19319 ===ba===
19320 ===bb===
19321 ====bba====
19322 ===bc===
19323 ==c==
19324 ===ca===
19325 !! html/php
19326 ===aa===
19327 ====aaa====
19328 !! end
19329
19330 !! test
19331 Section extraction test (section 3)
19332 !! options
19333 section=3
19334 !! wikitext
19335 start
19336 ==a==
19337 ===aa===
19338 ====aaa====
19339 ==b==
19340 ===ba===
19341 ===bb===
19342 ====bba====
19343 ===bc===
19344 ==c==
19345 ===ca===
19346 !! html/php
19347 ====aaa====
19348 !! end
19349
19350 !! test
19351 Section extraction test (section 4)
19352 !! options
19353 section=4
19354 !! wikitext
19355 start
19356 ==a==
19357 ===aa===
19358 ====aaa====
19359 ==b==
19360 ===ba===
19361 ===bb===
19362 ====bba====
19363 ===bc===
19364 ==c==
19365 ===ca===
19366 !! html/php
19367 ==b==
19368 ===ba===
19369 ===bb===
19370 ====bba====
19371 ===bc===
19372 !! end
19373
19374 !! test
19375 Section extraction test (section 5)
19376 !! options
19377 section=5
19378 !! wikitext
19379 start
19380 ==a==
19381 ===aa===
19382 ====aaa====
19383 ==b==
19384 ===ba===
19385 ===bb===
19386 ====bba====
19387 ===bc===
19388 ==c==
19389 ===ca===
19390 !! html/php
19391 ===ba===
19392 !! end
19393
19394 !! test
19395 Section extraction test (section 6)
19396 !! options
19397 section=6
19398 !! wikitext
19399 start
19400 ==a==
19401 ===aa===
19402 ====aaa====
19403 ==b==
19404 ===ba===
19405 ===bb===
19406 ====bba====
19407 ===bc===
19408 ==c==
19409 ===ca===
19410 !! html/php
19411 ===bb===
19412 ====bba====
19413 !! end
19414
19415 !! test
19416 Section extraction test (section 7)
19417 !! options
19418 section=7
19419 !! wikitext
19420 start
19421 ==a==
19422 ===aa===
19423 ====aaa====
19424 ==b==
19425 ===ba===
19426 ===bb===
19427 ====bba====
19428 ===bc===
19429 ==c==
19430 ===ca===
19431 !! html/php
19432 ====bba====
19433 !! end
19434
19435 !! test
19436 Section extraction test (section 8)
19437 !! options
19438 section=8
19439 !! wikitext
19440 start
19441 ==a==
19442 ===aa===
19443 ====aaa====
19444 ==b==
19445 ===ba===
19446 ===bb===
19447 ====bba====
19448 ===bc===
19449 ==c==
19450 ===ca===
19451 !! html/php
19452 ===bc===
19453 !! end
19454
19455 !! test
19456 Section extraction test (section 9)
19457 !! options
19458 section=9
19459 !! wikitext
19460 start
19461 ==a==
19462 ===aa===
19463 ====aaa====
19464 ==b==
19465 ===ba===
19466 ===bb===
19467 ====bba====
19468 ===bc===
19469 ==c==
19470 ===ca===
19471 !! html/php
19472 ==c==
19473 ===ca===
19474 !! end
19475
19476 !! test
19477 Section extraction test (section 10)
19478 !! options
19479 section=10
19480 !! wikitext
19481 start
19482 ==a==
19483 ===aa===
19484 ====aaa====
19485 ==b==
19486 ===ba===
19487 ===bb===
19488 ====bba====
19489 ===bc===
19490 ==c==
19491 ===ca===
19492 !! html/php
19493 ===ca===
19494 !! end
19495
19496 !! test
19497 Section extraction test (nonexistent section 11)
19498 !! options
19499 section=11
19500 !! wikitext
19501 start
19502 ==a==
19503 ===aa===
19504 ====aaa====
19505 ==b==
19506 ===ba===
19507 ===bb===
19508 ====bba====
19509 ===bc===
19510 ==c==
19511 ===ca===
19512 !! html/php
19513 !! end
19514
19515 !! test
19516 Section extraction test with bogus heading (section 1)
19517 !! options
19518 section=1
19519 !! wikitext
19520 ==a==
19521 ==bogus== not a legal section
19522 ==b==
19523 !! html/php
19524 ==a==
19525 ==bogus== not a legal section
19526 !! end
19527
19528 !! test
19529 Section extraction test with bogus heading (section 2)
19530 !! options
19531 section=2
19532 !! wikitext
19533 ==a==
19534 ==bogus== not a legal section
19535 ==b==
19536 !! html/php
19537 ==b==
19538 !! end
19539
19540 !! test
19541 Section extraction test with comment after heading (section 1)
19542 !! options
19543 section=1
19544 !! wikitext
19545 ==a==
19546 ==b== <!-- -->
19547 ==c==
19548 !! html/php
19549 ==a==
19550 !! end
19551
19552 !! test
19553 Section extraction test with comment after heading (section 2)
19554 !! options
19555 section=2
19556 !! wikitext
19557 ==a==
19558 ==b== <!-- -->
19559 ==c==
19560 !! html/php
19561 ==b== <!-- -->
19562 !! end
19563
19564 !! test
19565 Section extraction test with bogus <nowiki> heading (section 1)
19566 !! options
19567 section=1
19568 !! wikitext
19569 ==a==
19570 ==bogus== <nowiki>not a legal section</nowiki>
19571 ==b==
19572 !! html/php
19573 ==a==
19574 ==bogus== <nowiki>not a legal section</nowiki>
19575 !! end
19576
19577 !! test
19578 Section extraction test with bogus <nowiki> heading (section 2)
19579 !! options
19580 section=2
19581 !! wikitext
19582 ==a==
19583 ==bogus== <nowiki>not a legal section</nowiki>
19584 ==b==
19585 !! html/php
19586 ==b==
19587 !! end
19588
19589 # Formerly testing for T4587, now resolved by the use of unmarked sections
19590 # instead of respecting commented sections
19591 !! test
19592 Section extraction prefixed by comment (section 1)
19593 !! options
19594 section=1
19595 !! wikitext
19596 <!-- -->==sec1==
19597 ==sec2==
19598 !! html/php
19599 ==sec2==
19600 !!end
19601
19602 !! test
19603 Section extraction prefixed by comment (section 2)
19604 !! options
19605 section=2
19606 !! wikitext
19607 <!-- -->==sec1==
19608 ==sec2==
19609 !! html/php
19610
19611 !!end
19612
19613 # Formerly testing for T4607, now resolved by the use of unmarked sections
19614 # instead of respecting HTML-style headings
19615 !! test
19616 Section extraction, mixed wiki and html (section 1)
19617 !! options
19618 section=1
19619 !! wikitext
19620 <h2>unmarked</h2>
19621 unmarked
19622 ==1==
19623 one
19624 ==2==
19625 two
19626 !! html/php
19627 ==1==
19628 one
19629 !! end
19630
19631 !! test
19632 Section extraction, mixed wiki and html (section 2)
19633 !! options
19634 section=2
19635 !! wikitext
19636 <h2>unmarked</h2>
19637 unmarked
19638 ==1==
19639 one
19640 ==2==
19641 two
19642 !! html/php
19643 ==2==
19644 two
19645 !! end
19646
19647
19648 # Formerly testing for T5342
19649 !! test
19650 Section extraction, heading surrounded by <noinclude>
19651 !! options
19652 section=1
19653 !! wikitext
19654 <noinclude>==unmarked==</noinclude>
19655 ==marked==
19656 !! html/php
19657 ==marked==
19658 !!end
19659
19660 # Test behavior of T21910
19661 !! test
19662 Sectiion with all-equals
19663 !! options
19664 section=2
19665 !! wikitext
19666 ===
19667 The line above must have a trailing space
19668 === <!--
19669 --> <!-- -->
19670 But just in case it doesn't...
19671 !! html/php
19672 === <!--
19673 --> <!-- -->
19674 But just in case it doesn't...
19675 !! end
19676
19677 !! test
19678 Section replacement test (section 0)
19679 !! options
19680 replace=0,"xxx"
19681 !! wikitext
19682 start
19683 ==a==
19684 ===aa===
19685 ====aaa====
19686 ==b==
19687 ===ba===
19688 ===bb===
19689 ====bba====
19690 ===bc===
19691 ==c==
19692 ===ca===
19693 !! html/php
19694 xxx
19695
19696 ==a==
19697 ===aa===
19698 ====aaa====
19699 ==b==
19700 ===ba===
19701 ===bb===
19702 ====bba====
19703 ===bc===
19704 ==c==
19705 ===ca===
19706 !! end
19707
19708 !! test
19709 Section replacement test (section 1)
19710 !! options
19711 replace=1,"xxx"
19712 !! wikitext
19713 start
19714 ==a==
19715 ===aa===
19716 ====aaa====
19717 ==b==
19718 ===ba===
19719 ===bb===
19720 ====bba====
19721 ===bc===
19722 ==c==
19723 ===ca===
19724 !! html/php
19725 start
19726 xxx
19727
19728 ==b==
19729 ===ba===
19730 ===bb===
19731 ====bba====
19732 ===bc===
19733 ==c==
19734 ===ca===
19735 !! end
19736
19737 !! test
19738 Section replacement test (section 2)
19739 !! options
19740 replace=2,"xxx"
19741 !! wikitext
19742 start
19743 ==a==
19744 ===aa===
19745 ====aaa====
19746 ==b==
19747 ===ba===
19748 ===bb===
19749 ====bba====
19750 ===bc===
19751 ==c==
19752 ===ca===
19753 !! html/php
19754 start
19755 ==a==
19756 xxx
19757
19758 ==b==
19759 ===ba===
19760 ===bb===
19761 ====bba====
19762 ===bc===
19763 ==c==
19764 ===ca===
19765 !! end
19766
19767 !! test
19768 Section replacement test (section 3)
19769 !! options
19770 replace=3,"xxx"
19771 !! wikitext
19772 start
19773 ==a==
19774 ===aa===
19775 ====aaa====
19776 ==b==
19777 ===ba===
19778 ===bb===
19779 ====bba====
19780 ===bc===
19781 ==c==
19782 ===ca===
19783 !! html/php
19784 start
19785 ==a==
19786 ===aa===
19787 xxx
19788
19789 ==b==
19790 ===ba===
19791 ===bb===
19792 ====bba====
19793 ===bc===
19794 ==c==
19795 ===ca===
19796 !! end
19797
19798 !! test
19799 Section replacement test (section 4)
19800 !! options
19801 replace=4,"xxx"
19802 !! wikitext
19803 start
19804 ==a==
19805 ===aa===
19806 ====aaa====
19807 ==b==
19808 ===ba===
19809 ===bb===
19810 ====bba====
19811 ===bc===
19812 ==c==
19813 ===ca===
19814 !! html/php
19815 start
19816 ==a==
19817 ===aa===
19818 ====aaa====
19819 xxx
19820
19821 ==c==
19822 ===ca===
19823 !! end
19824
19825 !! test
19826 Section replacement test (section 5)
19827 !! options
19828 replace=5,"xxx"
19829 !! wikitext
19830 start
19831 ==a==
19832 ===aa===
19833 ====aaa====
19834 ==b==
19835 ===ba===
19836 ===bb===
19837 ====bba====
19838 ===bc===
19839 ==c==
19840 ===ca===
19841 !! html/php
19842 start
19843 ==a==
19844 ===aa===
19845 ====aaa====
19846 ==b==
19847 xxx
19848
19849 ===bb===
19850 ====bba====
19851 ===bc===
19852 ==c==
19853 ===ca===
19854 !! end
19855
19856 !! test
19857 Section replacement test (section 6)
19858 !! options
19859 replace=6,"xxx"
19860 !! wikitext
19861 start
19862 ==a==
19863 ===aa===
19864 ====aaa====
19865 ==b==
19866 ===ba===
19867 ===bb===
19868 ====bba====
19869 ===bc===
19870 ==c==
19871 ===ca===
19872 !! html/php
19873 start
19874 ==a==
19875 ===aa===
19876 ====aaa====
19877 ==b==
19878 ===ba===
19879 xxx
19880
19881 ===bc===
19882 ==c==
19883 ===ca===
19884 !! end
19885
19886 !! test
19887 Section replacement test (section 7)
19888 !! options
19889 replace=7,"xxx"
19890 !! wikitext
19891 start
19892 ==a==
19893 ===aa===
19894 ====aaa====
19895 ==b==
19896 ===ba===
19897 ===bb===
19898 ====bba====
19899 ===bc===
19900 ==c==
19901 ===ca===
19902 !! html/php
19903 start
19904 ==a==
19905 ===aa===
19906 ====aaa====
19907 ==b==
19908 ===ba===
19909 ===bb===
19910 xxx
19911
19912 ===bc===
19913 ==c==
19914 ===ca===
19915 !! end
19916
19917 !! test
19918 Section replacement test (section 8)
19919 !! options
19920 replace=8,"xxx"
19921 !! wikitext
19922 start
19923 ==a==
19924 ===aa===
19925 ====aaa====
19926 ==b==
19927 ===ba===
19928 ===bb===
19929 ====bba====
19930 ===bc===
19931 ==c==
19932 ===ca===
19933 !! html/php
19934 start
19935 ==a==
19936 ===aa===
19937 ====aaa====
19938 ==b==
19939 ===ba===
19940 ===bb===
19941 ====bba====
19942 xxx
19943
19944 ==c==
19945 ===ca===
19946 !!end
19947
19948 !! test
19949 Section replacement test (section 9)
19950 !! options
19951 replace=9,"xxx"
19952 !! wikitext
19953 start
19954 ==a==
19955 ===aa===
19956 ====aaa====
19957 ==b==
19958 ===ba===
19959 ===bb===
19960 ====bba====
19961 ===bc===
19962 ==c==
19963 ===ca===
19964 !! html/php
19965 start
19966 ==a==
19967 ===aa===
19968 ====aaa====
19969 ==b==
19970 ===ba===
19971 ===bb===
19972 ====bba====
19973 ===bc===
19974 xxx
19975 !! end
19976
19977 !! test
19978 Section replacement test (section 10)
19979 !! options
19980 replace=10,"xxx"
19981 !! wikitext
19982 start
19983 ==a==
19984 ===aa===
19985 ====aaa====
19986 ==b==
19987 ===ba===
19988 ===bb===
19989 ====bba====
19990 ===bc===
19991 ==c==
19992 ===ca===
19993 !! html/php
19994 start
19995 ==a==
19996 ===aa===
19997 ====aaa====
19998 ==b==
19999 ===ba===
20000 ===bb===
20001 ====bba====
20002 ===bc===
20003 ==c==
20004 xxx
20005 !! end
20006
20007 !! test
20008 Section replacement test with initial whitespace (T15728)
20009 !! options
20010 replace=2,"xxx"
20011 !! wikitext
20012 Preformatted initial line
20013 ==a==
20014 ===a===
20015 !! html/php
20016 Preformatted initial line
20017 ==a==
20018 xxx
20019 !! end
20020
20021
20022 !! test
20023 Section extraction, heading followed by pre with 20 spaces (T8398)
20024 !! options
20025 section=1
20026 !! wikitext
20027 ==a==
20028 a
20029 !! html/php
20030 ==a==
20031 a
20032 !! end
20033
20034 !! test
20035 Section extraction, heading followed by pre with 19 spaces (T8398 sanity check)
20036 !! options
20037 section=1
20038 !! wikitext
20039 ==a==
20040 a
20041 !! html/php
20042 ==a==
20043 a
20044 !! end
20045
20046
20047 !! test
20048 Section extraction, <pre> around bogus header (T12309)
20049 !! options
20050 section=2
20051 !! wikitext
20052 == Section One ==
20053 <pre>
20054 =======
20055 </pre>
20056
20057 == Section Two ==
20058 stuff
20059 !! html/php
20060 == Section Two ==
20061 stuff
20062 !! end
20063
20064 !! test
20065 Section replacement, <pre> around bogus header (T12309)
20066 !! options
20067 replace=2,"xxx"
20068 !! wikitext
20069 == Section One ==
20070 <pre>
20071 =======
20072 </pre>
20073
20074 == Section Two ==
20075 stuff
20076 !! html/php
20077 == Section One ==
20078 <pre>
20079 =======
20080 </pre>
20081
20082 xxx
20083 !! end
20084
20085 !! test
20086 Handling of &#x0A; in URLs
20087 !! wikitext
20088 ** irc://&#x0A;a
20089 !! html/php
20090 <ul><li><ul><li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
20091
20092 !! html/parsoid
20093 <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>
20094 !! end
20095
20096 !! test
20097 Handling of %0A in URLs
20098 !! wikitext
20099 ** irc://%0Aa
20100 !! html/php
20101 <ul><li><ul><li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
20102
20103 !! html/parsoid
20104 <ul><li><ul><li> <a rel="mw:ExtLink" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
20105 !! end
20106
20107 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
20108 !! test
20109 5 quotes, code coverage +1 line
20110 !! options
20111 parsoid=wt2html
20112 !! wikitext
20113 '''''
20114 !! html/php
20115 !! html/parsoid
20116 <b><i></i></b>
20117 !! end
20118
20119 # same html as previous, but wikitext adjusted to match parsoid html2wt
20120 # note that wt2html and html2html will put the <i> before the <b>
20121 !! test
20122 5 quotes, code coverage +1 line w/ nowiki (1)
20123 !! options
20124 parsoid=wt2wt,html2wt
20125 !! wikitext
20126 '''''<nowiki/>'''''
20127 !! html/php
20128 <p><i></i>
20129 </p>
20130 !! html/parsoid
20131 <p><b><i></i></b></p>
20132 !! end
20133
20134 # same as previous, just swapping the <i> and <b>
20135 !! test
20136 5 quotes, code coverage +1 line w/ nowiki (2)
20137 !! wikitext
20138 '''''<nowiki/>'''''
20139 !! html/php
20140 <p><i></i>
20141 </p>
20142 !! html/parsoid
20143 <p><i><b></b></i></p>
20144 !! end
20145
20146 !! test
20147 Special:Search page linking.
20148 !! wikitext
20149 {{Special:search}}
20150 !! html
20151 <p><a href="/wiki/Special:Search" title="Special:Search">Special:Search</a>
20152 </p>
20153 !! end
20154
20155 !! test
20156 {{!}} is a magic word
20157 !! wikitext
20158 {{!}} is a magic word there and {{!}} is still a magic word here
20159 | is not a magic word here but {{!}} is still a magic word here
20160 !! html/php
20161 <p>| is a magic word there and | is still a magic word here
20162 | is not a magic word here but | is still a magic word here
20163 </p>
20164 !! html/parsoid
20165 <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
20166 | 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>
20167 !! end
20168
20169 !! test
20170 Say the magic word
20171 !! options
20172 title=[[Parser test]]
20173 !! wikitext
20174 * {{PAGENAME}}
20175 * {{PAGENAMEE}}
20176 * {{FULLPAGENAME}}
20177 * {{FULLPAGENAMEE}}
20178 * {{BASEPAGENAME}}
20179 * {{BASEPAGENAMEE}}
20180 * {{SUBPAGENAME}}
20181 * {{SUBPAGENAMEE}}
20182 * {{ROOTPAGENAME}}
20183 * {{ROOTPAGENAMEE}}
20184 * {{TALKPAGENAME}}
20185 * {{TALKPAGENAMEE}}
20186 * {{SUBJECTPAGENAME}}
20187 * {{SUBJECTPAGENAMEE}}
20188 * {{NAMESPACEE}}
20189 * {{NAMESPACE}}
20190 * {{NAMESPACENUMBER}}
20191 * {{TALKSPACE}}
20192 * {{TALKSPACEE}}
20193 * {{SUBJECTSPACE}}
20194 * {{SUBJECTSPACEE}}
20195 * {{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}
20196 !! html
20197 <ul><li> Parser test</li>
20198 <li> Parser_test</li>
20199 <li> Parser test</li>
20200 <li> Parser_test</li>
20201 <li> Parser test</li>
20202 <li> Parser_test</li>
20203 <li> Parser test</li>
20204 <li> Parser_test</li>
20205 <li> Parser test</li>
20206 <li> Parser_test</li>
20207 <li> Talk:Parser test</li>
20208 <li> Talk:Parser_test</li>
20209 <li> Parser test</li>
20210 <li> Parser_test</li>
20211 <li> </li>
20212 <li> </li>
20213 <li> 0</li>
20214 <li> Talk</li>
20215 <li> Talk</li>
20216 <li> </li>
20217 <li> </li>
20218 <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>
20219
20220 !! end
20221 ### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included.
20222
20223 !! test
20224 Gallery with valid attributes
20225 !! wikitext
20226 <gallery type="123" summary="345">
20227 File:File:Foobar.jpg
20228 </gallery>
20229 !! html/php
20230 <ul class="gallery mw-gallery-traditional" type="123">
20231 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20232 <div class="thumb" style="height: 150px;">File:Foobar.jpg</div>
20233 <div class="gallerytext">
20234 </div>
20235 </div></li>
20236 </ul>
20237
20238 !! html/parsoid
20239 <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"}}'>
20240 <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>
20241 </ul>
20242 !! end
20243
20244 ## Parsoid thinks the "centre" here is a property, not a caption.
20245 !! test
20246 Gallery
20247 !! options
20248 parsoid={
20249 "modes": ["wt2html"],
20250 "nativeGallery": true
20251 }
20252 !! wikitext
20253 <gallery>
20254 image1.png |
20255 image2.gif|||||
20256
20257 image3|
20258 image4 |300px| centre
20259 image5.svg| http://///////
20260 [[x|xx]]]]
20261 * image6
20262 </gallery>
20263 !! html/php
20264 <ul class="gallery mw-gallery-traditional">
20265 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20266 <div class="thumb" style="height: 150px;">Image1.png</div>
20267 <div class="gallerytext">
20268 </div>
20269 </div></li>
20270 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20271 <div class="thumb" style="height: 150px;">Image2.gif</div>
20272 <div class="gallerytext">
20273 </div>
20274 </div></li>
20275 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20276 <div class="thumb" style="height: 150px;">Image3</div>
20277 <div class="gallerytext">
20278 </div>
20279 </div></li>
20280 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20281 <div class="thumb" style="height: 150px;">Image4</div>
20282 <div class="gallerytext">
20283 <pre>centre
20284 </pre>
20285 </div>
20286 </div></li>
20287 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20288 <div class="thumb" style="height: 150px;">Image5.svg</div>
20289 <div class="gallerytext">
20290 <p><a rel="nofollow" class="external free" href="http://///////">http://///////</a>
20291 </p>
20292 </div>
20293 </div></li>
20294 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20295 <div class="thumb" style="height: 150px;">* image6</div>
20296 <div class="gallerytext">
20297 </div>
20298 </div></li>
20299 </ul>
20300
20301 !! html/parsoid
20302 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt3" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20303 <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>
20304 <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>
20305 <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>
20306 <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>
20307 <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>
20308 <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>
20309 </ul>
20310 !! end
20311
20312 !! test
20313 Gallery (with options, html)
20314 !! options
20315 parsoid={
20316 "modes": ["wt2html", "html2html"],
20317 "nativeGallery": true
20318 }
20319 !! wikitext
20320 <gallery widths="70px" heights="40px" perrow="2" caption="Foo [[Main Page]]">
20321 File:Nonexistent.jpg|caption
20322 File:Nonexistent.jpg
20323 image:foobar.jpg|some '''caption''' [[Main Page]]
20324 image:foobar.jpg
20325 image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
20326 </gallery>
20327 !! html/php
20328 <ul class="gallery mw-gallery-traditional" style="max-width: 226px;_width: 226px;">
20329 <li class='gallerycaption'>Foo <a href="/wiki/Main_Page" title="Main Page">Main Page</a></li>
20330 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20331 <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
20332 <div class="gallerytext">
20333 <p>caption
20334 </p>
20335 </div>
20336 </div></li>
20337 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20338 <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
20339 <div class="gallerytext">
20340 </div>
20341 </div></li>
20342 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20343 <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>
20344 <div class="gallerytext">
20345 <p>some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
20346 </p>
20347 </div>
20348 </div></li>
20349 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20350 <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>
20351 <div class="gallerytext">
20352 </div>
20353 </div></li>
20354 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20355 <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>
20356 <div class="gallerytext">
20357 <p>blabla.
20358 </p>
20359 </div>
20360 </div></li>
20361 </ul>
20362
20363 !! html/parsoid
20364 <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":{}}'>
20365 <li class="gallerycaption">Foo <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></li>
20366 <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>
20367 <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>
20368 <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>
20369 <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>
20370 <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>
20371 </ul>
20372 !! end
20373
20374 !! test
20375 Gallery (with options, extsrc)
20376 !! options
20377 parsoid={
20378 "nativeGallery": false
20379 }
20380 !! wikitext
20381 <gallery widths="70px" heights="40px" perrow="2" caption="Foo [[Main Page]]">
20382 File:Nonexistent.jpg|caption
20383 File:Nonexistent.jpg
20384 image:foobar.jpg|some '''caption''' [[Main Page]]
20385 image:foobar.jpg
20386 image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
20387 </gallery>
20388 !! html/php
20389 <ul class="gallery mw-gallery-traditional" style="max-width: 226px;_width: 226px;">
20390 <li class='gallerycaption'>Foo <a href="/wiki/Main_Page" title="Main Page">Main Page</a></li>
20391 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20392 <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
20393 <div class="gallerytext">
20394 <p>caption
20395 </p>
20396 </div>
20397 </div></li>
20398 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20399 <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
20400 <div class="gallerytext">
20401 </div>
20402 </div></li>
20403 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20404 <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>
20405 <div class="gallerytext">
20406 <p>some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
20407 </p>
20408 </div>
20409 </div></li>
20410 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20411 <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>
20412 <div class="gallerytext">
20413 </div>
20414 </div></li>
20415 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20416 <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>
20417 <div class="gallerytext">
20418 <p>blabla.
20419 </p>
20420 </div>
20421 </div></li>
20422 </ul>
20423
20424 !! html/parsoid
20425 <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"}}'>
20426 <li class="gallerycaption">Foo <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></li>
20427 <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>
20428 <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>
20429 <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>
20430 <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>
20431 <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>
20432 </ul>
20433 !! end
20434
20435 !! test
20436 Gallery with link that has fragment
20437 !! options
20438 parsoid={
20439 "modes": ["wt2html", "html2html"],
20440 "nativeGallery": true
20441 }
20442 !! wikitext
20443 <gallery>
20444 image:foobar.jpg|link=Main_Page
20445 image:foobar.jpg|link=Main_Page#section
20446 image:foobar.jpg|link=Main Page#section|caption
20447 </gallery>
20448 !! html/php
20449 <ul class="gallery mw-gallery-traditional">
20450 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20451 <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>
20452 <div class="gallerytext">
20453 </div>
20454 </div></li>
20455 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20456 <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>
20457 <div class="gallerytext">
20458 </div>
20459 </div></li>
20460 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20461 <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>
20462 <div class="gallerytext">
20463 <p>caption
20464 </p>
20465 </div>
20466 </div></li>
20467 </ul>
20468
20469 !! html/parsoid
20470 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20471 <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>
20472 <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>
20473 <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>
20474 </ul>
20475 !! end
20476
20477 ## Whoops, Parsoid shouldn't be parsing templates in the attribute caption!
20478 !! test
20479 Gallery with template inside caption
20480 !! options
20481 parsoid={
20482 "nativeGallery": true
20483 }
20484 !! wikitext
20485 <gallery caption="{{echo|hi}}">
20486 File:Foobar.jpg|{{echo|ho}}
20487 </gallery>
20488 !! html/php
20489 <ul class="gallery mw-gallery-traditional">
20490 <li class='gallerycaption'>{{echo|hi}}</li>
20491 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20492 <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>
20493 <div class="gallerytext">
20494 <p>ho
20495 </p>
20496 </div>
20497 </div></li>
20498 </ul>
20499
20500 !! html/parsoid
20501 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt6" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20502 <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>
20503 <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>
20504 </ul>
20505 !! end
20506
20507 !! test
20508 Gallery with wikitext inside caption
20509 !! options
20510 parsoid={
20511 "nativeGallery": true
20512 }
20513 !! wikitext
20514 <gallery>
20515 File:Foobar.jpg|alt=galleryalt|[[File:Foobar.jpg|alt=inneralt|20x20px|desc]]
20516 File:Foobar.jpg|alt=galleryalt|{{Test|unamedParam|alt=param}}
20517 </gallery>
20518 !! html/php
20519 <ul class="gallery mw-gallery-traditional">
20520 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20521 <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>
20522 <div class="gallerytext">
20523 <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>
20524 </p>
20525 </div>
20526 </div></li>
20527 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20528 <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>
20529 <div class="gallerytext">
20530 <p>This is a test template
20531 </p>
20532 </div>
20533 </div></li>
20534 </ul>
20535
20536 !! html/parsoid
20537 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt6" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20538 <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>
20539 <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>
20540 </ul>
20541 !! end
20542
20543 !! test
20544 Gallery (with showfilename option)
20545 !! options
20546 parsoid={
20547 "nativeGallery": true
20548 }
20549 !! wikitext
20550 <gallery showfilename="">
20551 File:Nonexistent.jpg|caption
20552 File:Nonexistent.jpg
20553 File:Foobar.jpg|some '''caption''' [[Main Page]]
20554 File:Foobar.jpg
20555 </gallery>
20556 !! html/php
20557 <ul class="gallery mw-gallery-traditional">
20558 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20559 <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
20560 <div class="gallerytext">
20561 <p><a href="/wiki/File:Nonexistent.jpg" class="galleryfilename galleryfilename-truncate" title="File:Nonexistent.jpg">Nonexistent.jpg</a>
20562 caption
20563 </p>
20564 </div>
20565 </div></li>
20566 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20567 <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
20568 <div class="gallerytext">
20569 <p><a href="/wiki/File:Nonexistent.jpg" class="galleryfilename galleryfilename-truncate" title="File:Nonexistent.jpg">Nonexistent.jpg</a>
20570 </p>
20571 </div>
20572 </div></li>
20573 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20574 <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>
20575 <div class="gallerytext">
20576 <p><a href="/wiki/File:Foobar.jpg" class="galleryfilename galleryfilename-truncate" title="File:Foobar.jpg">Foobar.jpg</a>
20577 some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
20578 </p>
20579 </div>
20580 </div></li>
20581 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20582 <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>
20583 <div class="gallerytext">
20584 <p><a href="/wiki/File:Foobar.jpg" class="galleryfilename galleryfilename-truncate" title="File:Foobar.jpg">Foobar.jpg</a>
20585 </p>
20586 </div>
20587 </div></li>
20588 </ul>
20589
20590 !! html/parsoid
20591 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt3" data-mw='{"name":"gallery","attrs":{"showfilename":""},"body":{}}'>
20592 <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>
20593 <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>
20594 <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>
20595 <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>
20596 </ul>
20597 !! end
20598
20599 ## Should Parsoid be preserving these variations? See T151367
20600 !! test
20601 Gallery (with namespace-less filenames)
20602 !! options
20603 parsoid={
20604 "modes": ["wt2html", "html2html"],
20605 "nativeGallery": true
20606 }
20607 !! wikitext
20608 <gallery>
20609 File:Nonexistent.jpg
20610 Nonexistent.jpg
20611 image:foobar.jpg
20612 foobar.jpg
20613 </gallery>
20614 !! html/php
20615 <ul class="gallery mw-gallery-traditional">
20616 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20617 <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
20618 <div class="gallerytext">
20619 </div>
20620 </div></li>
20621 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20622 <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
20623 <div class="gallerytext">
20624 </div>
20625 </div></li>
20626 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20627 <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>
20628 <div class="gallerytext">
20629 </div>
20630 </div></li>
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/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>
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-mw='{"name":"gallery","attrs":{},"body":{}}'>
20640 <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>
20641 <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>
20642 <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>
20643 <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>
20644 </ul>
20645 !! end
20646
20647 !! test
20648 Gallery override link with WikiLink (T36852)
20649 !! options
20650 parsoid={
20651 "nativeGallery": true
20652 }
20653 !! wikitext
20654 <gallery>
20655 File:Foobar.jpg|alt=galleryalt|link=InterWikiLink
20656 </gallery>
20657 !! html/php
20658 <ul class="gallery mw-gallery-traditional">
20659 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20660 <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>
20661 <div class="gallerytext">
20662 </div>
20663 </div></li>
20664 </ul>
20665
20666 !! html/parsoid
20667 <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":{}}'>
20668 <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>
20669 </ul>
20670 !! end
20671
20672 !! test
20673 Gallery override link with absolute external link (T36852)
20674 !! options
20675 parsoid={
20676 "nativeGallery": true
20677 }
20678 !! wikitext
20679 <gallery>
20680 File:Foobar.jpg|alt=galleryalt|link=http://www.example.org
20681 </gallery>
20682 !! html/php
20683 <ul class="gallery mw-gallery-traditional">
20684 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20685 <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>
20686 <div class="gallerytext">
20687 </div>
20688 </div></li>
20689 </ul>
20690
20691 !! html/parsoid
20692 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20693 <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>
20694 </ul>
20695 !! end
20696
20697 !! test
20698 Gallery override link with absolute external link with LanguageConverter
20699 !! options
20700 language=zh
20701 !! input
20702 <gallery>
20703 File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
20704 </gallery>
20705 !! result
20706 <ul class="gallery mw-gallery-traditional">
20707 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20708 <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>
20709 <div class="gallerytext">
20710 <p>caption
20711 </p>
20712 </div>
20713 </div></li>
20714 </ul>
20715
20716 !! end
20717
20718 !! test
20719 Gallery override link with malicious javascript (T36852)
20720 !! options
20721 parsoid={
20722 "modes": ["wt2html", "html2html"],
20723 "nativeGallery": true
20724 }
20725 !! wikitext
20726 <gallery>
20727 File:Foobar.jpg|alt=galleryalt|link=" onclick="alert('malicious javascript code!');
20728 </gallery>
20729 !! html/php
20730 <ul class="gallery mw-gallery-traditional">
20731 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20732 <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>
20733 <div class="gallerytext">
20734 </div>
20735 </div></li>
20736 </ul>
20737
20738 !! html/parsoid
20739 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20740 <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>
20741 </ul>
20742 !! end
20743
20744 # Note that parsoid uses the invalid link as a caption, PHP does not.
20745 !! test
20746 Gallery with invalid title as link (T45964)
20747 !! options
20748 parsoid={
20749 "modes": ["wt2html", "html2html"],
20750 "nativeGallery": true
20751 }
20752 !! wikitext
20753 <gallery>
20754 File:Foobar.jpg|link=<
20755 </gallery>
20756 !! html/php
20757 <ul class="gallery mw-gallery-traditional">
20758 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20759 <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>
20760 <div class="gallerytext">
20761 </div>
20762 </div></li>
20763 </ul>
20764
20765 !! html/parsoid
20766 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20767 <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>
20768 </ul>
20769 !! end
20770
20771 !! test
20772 Serialize gallery without attrs in data-mw
20773 !! options
20774 parsoid={
20775 "modes": ["html2wt"],
20776 "nativeGallery": true
20777 }
20778 !! html/parsoid
20779 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","body":{}}'>
20780 <li class="gallerycaption">123</li>
20781 <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>
20782 </ul>
20783 !! wikitext
20784 <gallery caption="123">
20785 File:Test.png
20786 </gallery>
20787 !! end
20788
20789 !! test
20790 Gallery with class and style attributes
20791 !! options
20792 parsoid={
20793 "nativeGallery": true
20794 }
20795 !! wikitext
20796 <gallery class="center" style="text-align: center;">
20797 File:Foobar.jpg
20798 </gallery>
20799 !! html/php
20800 <ul class="gallery mw-gallery-traditional center" style="text-align: center;">
20801 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20802 <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>
20803 <div class="gallerytext">
20804 </div>
20805 </div></li>
20806 </ul>
20807
20808 !! html/parsoid
20809 <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":{}}'>
20810 <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>
20811 </ul>
20812 !! end
20813
20814 !! test
20815 Gallery in slideshow mode
20816 !! options
20817 parsoid={
20818 "nativeGallery": true
20819 }
20820 !! wikitext
20821 <gallery mode="slideshow" showthumbnails="">
20822 File:Foobar.jpg
20823 </gallery>
20824 !! html/php
20825 <ul class="gallery mw-gallery-slideshow" data-showthumbnails="1">
20826 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20827 <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>
20828 <div class="gallerytext">
20829 </div>
20830 </div></li>
20831 </ul>
20832
20833 !! html/parsoid
20834 <ul class="gallery mw-gallery-slideshow" data-showthumbnails="1" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"mode":"slideshow","showthumbnails":""},"body":{}}'>
20835 <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>
20836 </ul>
20837 !! end
20838
20839 !! test
20840 HTML Hex character encoding (spells the word "JavaScript")
20841 !! options
20842 parsoid=wt2html,wt2wt,html2html
20843 !! wikitext
20844 &#x4A;&#x061;&#x0076;&#x00061;&#x000053;&#x0000063;&#114;&#x0000069;&#00000112;&#x0000000074;
20845 !! html/php
20846 <p>&#x4a;&#x61;&#x76;&#x61;&#x53;&#x63;&#114;&#x69;&#112;&#x74;
20847 </p>
20848 !! html/php+tidy
20849 <p>JavaScript</p>
20850 !! html/parsoid
20851 <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>
20852 !! end
20853
20854 !! test
20855 HTML Hex character encoding bogus encoding (T28437 regression check)
20856 !! wikitext
20857 &#xsee;&#XSEE;
20858 !! html/php
20859 <p>&amp;#xsee;&amp;#XSEE;
20860 </p>
20861 !! html/parsoid
20862 <p>&amp;#xsee;&amp;#XSEE;</p>
20863 !! end
20864
20865 !! test
20866 HTML Hex character encoding mixed case
20867 !! options
20868 parsoid=wt2html,wt2wt,html2html
20869 !! wikitext
20870 &#xEE;&#Xee;
20871 !! html/php
20872 <p>&#xee;&#xee;
20873 </p>
20874 !! html/php+tidy
20875 <p>îî</p>
20876 !! html/parsoid
20877 <p><span typeof="mw:Entity">î</span><span typeof="mw:Entity">î</span></p>
20878 !! end
20879
20880 # See: https://www.w3.org/TR/html5/syntax.html#character-references
20881 # Note that U+000C (form feed) is not a valid XML character, so
20882 # it is banned even though allowed in HTML5.
20883 !! test
20884 Illegal character references (T106578)
20885 !! wikitext
20886 ; Null: &#00;
20887 ; FF: &#xC;
20888 ; CR: &#xD;
20889 ; Control (low): &#8;
20890 ; Control (high): &#x7F; &#x9F;
20891 ; Surrogate: &#xD83D;&#xDCA9;
20892 ; This is an okay astral character: &#x1F4A9;
20893 !! html+tidy
20894 <dl>
20895 <dt>Null</dt>
20896 <dd>&amp;#00;</dd>
20897 <dt>FF</dt>
20898 <dd>&amp;#xC;</dd>
20899 <dt>CR</dt>
20900 <dd>&amp;#xD;</dd>
20901 <dt>Control (low)</dt>
20902 <dd>&amp;#8;</dd>
20903 <dt>Control (high)</dt>
20904 <dd>&amp;#x7F; &amp;#x9F;</dd>
20905 <dt>Surrogate</dt>
20906 <dd>&amp;#xD83D;&amp;#xDCA9;</dd>
20907 <dt>This is an okay astral character</dt>
20908 <dd>💩</dd>
20909 </dl>
20910 !! end
20911
20912 !! test
20913 __FORCETOC__ override
20914 !! wikitext
20915 __NEWSECTIONLINK__
20916 __FORCETOC__
20917 !! html/php
20918 <p><br />
20919 </p>
20920 !! end
20921
20922 !! test
20923 ISBN code coverage
20924 !! wikitext
20925 ISBN 978-0-1234-56&#x20;789
20926 !! html
20927 <p><a href="/wiki/Special:BookSources/9780123456" class="internal mw-magiclink-isbn">ISBN 978-0-1234-56</a>&#x20;789
20928 </p>
20929 !! html+tidy
20930 <p><a href="/wiki/Special:BookSources/9780123456" class="internal mw-magiclink-isbn">ISBN 978-0-1234-56</a> 789</p>
20931 !! html/parsoid
20932 <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>
20933 !! end
20934
20935 !! test
20936 ISBN followed by 5 spaces
20937 !! wikitext
20938 ISBN
20939 !! html
20940 <p>ISBN
20941 </p>
20942 !! end
20943
20944 !! test
20945 Double ISBN
20946 !! wikitext
20947 ISBN ISBN 1234567890
20948 !! html/php
20949 <p>ISBN <a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
20950 </p>
20951 !! html/parsoid
20952 <p>ISBN <a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a></p>
20953 !! end
20954
20955 # Uppercase X and lowercase x as well
20956 !! test
20957 ISBN with an X
20958 !! wikitext
20959 ISBN 3-462-04561-X
20960 ISBN 3-462-04561-x
20961 ISBN 080442957X
20962 ISBN 080442957x
20963 ISBN 978080442957X
20964 ISBN 978080442957x
20965 !! html/php
20966 <p><a href="/wiki/Special:BookSources/346204561X" class="internal mw-magiclink-isbn">ISBN 3-462-04561-X</a>
20967 <a href="/wiki/Special:BookSources/346204561X" class="internal mw-magiclink-isbn">ISBN 3-462-04561-x</a>
20968 <a href="/wiki/Special:BookSources/080442957X" class="internal mw-magiclink-isbn">ISBN 080442957X</a>
20969 <a href="/wiki/Special:BookSources/080442957X" class="internal mw-magiclink-isbn">ISBN 080442957x</a>
20970 <a href="/wiki/Special:BookSources/978080442957X" class="internal mw-magiclink-isbn">ISBN 978080442957X</a>
20971 <a href="/wiki/Special:BookSources/978080442957X" class="internal mw-magiclink-isbn">ISBN 978080442957x</a>
20972 </p>
20973 !! html/parsoid
20974 <p><a href="./Special:BookSources/346204561X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-X</a>
20975 <a href="./Special:BookSources/346204561X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-x</a>
20976 <a href="./Special:BookSources/080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957X</a>
20977 <a href="./Special:BookSources/080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957x</a>
20978 <a href="./Special:BookSources/978080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957X</a>
20979 <a href="./Special:BookSources/978080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957x</a></p>
20980 !! end
20981
20982 !! test
20983 ISBN with empty prefix (parsoid test)
20984 !! wikitext
20985 ISBN 1234567890
20986 !! html/php
20987 <p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
20988 </p>
20989 !! html/parsoid
20990 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink">ISBN 1234567890</a></p>
20991 !! end
20992
20993 !! test
20994 T24905: <abbr> followed by ISBN followed by </a>
20995 !! wikitext
20996 <abbr>(fr)</abbr> ISBN 2753300917 [http://www.example.com example.com]
20997 !! html/php
20998 <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>
20999 </p>
21000 !! html/parsoid
21001 <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>
21002 !! end
21003
21004 !! test
21005 Double RFC
21006 !! wikitext
21007 RFC RFC 1234
21008 !! html
21009 <p>RFC <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc1234">RFC 1234</a>
21010 </p>
21011 !! end
21012
21013 !! test
21014 Double RFC with a wiki link
21015 !! wikitext
21016 RFC [[RFC 1234]]
21017 !! html
21018 <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>
21019 </p>
21020 !! end
21021
21022 !! test
21023 RFC code coverage
21024 !! wikitext
21025 RFC 983&#x20;987
21026 !! html
21027 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
21028 </p>
21029 !! html+tidy
21030 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc983">RFC 983</a> 987</p>
21031 !! end
21032
21033 !! test
21034 Centre-aligned image
21035 !! wikitext
21036 [[Image:foobar.jpg|centre]]
21037 !! html
21038 <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>
21039
21040 !!end
21041
21042 !! test
21043 None-aligned image
21044 !! wikitext
21045 [[Image:foobar.jpg|none]]
21046 !! html
21047 <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>
21048
21049 !!end
21050
21051 !! test
21052 Width + Height sized image (using px) (height is ignored)
21053 !! wikitext
21054 [[Image:foobar.jpg|640x480px]]
21055 !! html
21056 <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>
21057 </p>
21058 !!end
21059
21060 !! test
21061 Width-sized image (using px, no following whitespace)
21062 !! wikitext
21063 [[Image:foobar.jpg|640px]]
21064 !! html
21065 <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>
21066 </p>
21067 !!end
21068
21069 !! test
21070 Width-sized image (using px, with following whitespace - test regression from r39467)
21071 !! wikitext
21072 [[Image:foobar.jpg|640px ]]
21073 !! html
21074 <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>
21075 </p>
21076 !!end
21077
21078 !! test
21079 Width-sized image (using px, with preceding whitespace - test regression from r39467)
21080 !! wikitext
21081 [[Image:foobar.jpg| 640px]]
21082 !! html
21083 <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>
21084 </p>
21085 !!end
21086
21087 !! test
21088 Image with page parameter
21089 !! options
21090 djvu
21091 !! wikitext
21092 [[File:LoremIpsum.djvu|page=2]]
21093 !! html/php
21094 <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>
21095 </p>
21096 !! html/parsoid
21097 <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>
21098 !! end
21099
21100 !! test
21101 Another italics / bold test
21102 !! wikitext
21103 ''' ''x'
21104 !! html
21105 <pre>'<i> </i>x'
21106 </pre>
21107 !!end
21108
21109 # FIXME: The php output seems broken. It's interleaving some open/close tags.
21110 !! test
21111 dt/dd/dl test
21112 !! wikitext
21113 :;;;::
21114 !! html/php
21115 <dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dt></dl></dd></dl></dd></dl></dd></dl></dd></dl></dd></dl>
21116
21117 !! html/parsoid
21118 <dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dd></dl></dd></dl></dt></dl></dt></dl></dt></dl></dd></dl>
21119
21120 !!end
21121
21122 # Images with the "|" character in external URLs in comment tags; Eats half the comment, leaves unmatched "</a>" tag.
21123 !! test
21124 Images with the "|" character in the comment
21125 !! wikitext
21126 [[File:Foobar.jpg|thumb|An [http://test/?param1=|left|&param2=|x external] URL]]
21127 !! html/php
21128 <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>
21129
21130 !! html/parsoid
21131 <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>
21132 !! end
21133
21134 !! test
21135 [Before] HTML without raw HTML enabled ($wgRawHtml==false)
21136 !! wikitext
21137 <html><script>alert(1);</script></html>
21138 !! html
21139 <p>&lt;html&gt;&lt;script&gt;alert(1);&lt;/script&gt;&lt;/html&gt;
21140 </p>
21141 !! end
21142
21143 !! test
21144 HTML with raw HTML ($wgRawHtml==true)
21145 !! options
21146 wgRawHtml=1
21147 !! wikitext
21148 <html><script>alert(1);</script></html>
21149 !! html/php
21150 <p><script>alert(1);</script>
21151 </p>
21152 !! end
21153
21154 !! test
21155 Parents of subpages, one level up
21156 !! options
21157 subpage title=[[Subpage test/L1/L2/L3]]
21158 !! wikitext
21159 [[../|L2]]
21160 !! html
21161 <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>
21162 </p>
21163 !! end
21164
21165
21166 !! test
21167 Parents of subpages, one level up, not named
21168 !! options
21169 subpage title=[[Subpage test/L1/L2/L3]]
21170 !! wikitext
21171 [[../]]
21172 !! html
21173 <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>
21174 </p>
21175 !! end
21176
21177
21178
21179 !! test
21180 Parents of subpages, two levels up
21181 !! options
21182 subpage title=[[Subpage test/L1/L2/L3]]
21183 !! wikitext
21184 [[../../|L1]]2
21185
21186 [[../../|L1]]l
21187 !! html
21188 <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
21189 </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>
21190 </p>
21191 !! end
21192
21193 !! test
21194 Parents of subpages, two levels up, without trailing slash or name.
21195 !! options
21196 subpage title=[[Subpage test/L1/L2/L3]]
21197 !! wikitext
21198 [[../..]]
21199 !! html
21200 <p>[[../..]]
21201 </p>
21202 !! end
21203
21204 !! test
21205 Parents of subpages, two levels up, with lots of extra trailing slashes.
21206 !! options
21207 subpage title=[[Subpage test/L1/L2/L3]]
21208 !! wikitext
21209 [[../../////]]
21210 !! html
21211 <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>
21212 </p>
21213 !! end
21214
21215 !! article
21216 Subpage test/L1/L2/L3Sibling
21217 !! text
21218 Sibling article
21219 !! endarticle
21220
21221 !! test
21222 Transclusion of a sibling page (one level up)
21223 !! options
21224 subpage title=[[Subpage test/L1/L2/L3]]
21225 !! wikitext
21226 {{../L3Sibling}}
21227 !! html
21228 <p>Sibling article
21229 </p>
21230 !! end
21231
21232 !! test
21233 Transclusion of a child page
21234 !! options
21235 subpage title=[[Subpage test/L1/L2]]
21236 !! wikitext
21237 {{/L3Sibling}}
21238 !! html
21239 <p>Sibling article
21240 </p>
21241 !! end
21242
21243 # This is wt2html only in Parsoid because we add <nowiki>
21244 # because of {{..}} and we don't expect to fix that to
21245 # eliminate the nowikis selective for {{..}} markup.
21246 !! test
21247 Non-transclusion because of too many up levels
21248 !! options
21249 subpage title=[[Subpage test/L1/L2/L3]]
21250 parsoid=wt2html
21251 !! wikitext
21252 {{../../../../More than parent}}
21253 !! html/php
21254 <p>{{../../../../More than parent}}
21255 </p>
21256 !! html/parsoid
21257 <p>{{../../../../More than parent}}</p>
21258 !! end
21259
21260 !! test
21261 Definition list code coverage
21262 !! wikitext
21263 ; title : def
21264 ; title : def
21265 ;title: def
21266 !! html/php
21267 <dl><dt> title &#160;</dt>
21268 <dd> def</dd>
21269 <dt> title&#160;</dt>
21270 <dd> def</dd>
21271 <dt>title</dt>
21272 <dd> def</dd></dl>
21273
21274 !! html/parsoid
21275 <dl><dt> title <span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
21276 <dt> title<span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
21277 <dt>title</dt><dd> def</dd></dl>
21278 !! end
21279
21280 !! test
21281 Don't fall for the self-closing div
21282 !! wikitext
21283 <div>hello world</div/>
21284 !! html
21285 <div>hello world</div>
21286
21287 !! end
21288
21289 !! test
21290 MSGNW magic word
21291 !! wikitext
21292 {{MSGNW:msg}}
21293 !! html/php
21294 <p>&#91;&#91;:Template:Msg&#93;&#93;
21295 </p>
21296 !! end
21297
21298 !! test
21299 RAW magic word
21300 !! wikitext
21301 {{RAW:QUERTY}}
21302 !! html
21303 <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>
21304 </p>
21305 !! end
21306
21307 # This isn't needed for XHTML conformance, but would be handy as a fallback security measure
21308 !! test
21309 Always escape literal '>' in output, not just after '<'
21310 !! wikitext
21311 ><>
21312 !! html
21313 <p>&gt;&lt;&gt;
21314 </p>
21315 !! end
21316
21317 !! test
21318 Template caching
21319 !! wikitext
21320 {{Test}}
21321 {{Test}}
21322 !! html
21323 <p>This is a test template
21324 This is a test template
21325 </p>
21326 !! end
21327
21328
21329 !! article
21330 MediaWiki:Fake
21331 !! text
21332 ==header==
21333 !! endarticle
21334
21335 !! test
21336 Inclusion of !userCanEdit() content
21337 !! wikitext
21338 {{MediaWiki:Fake}}
21339 !! html
21340 <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>
21341
21342 !! end
21343
21344
21345 !! test
21346 Out-of-order TOC heading levels
21347 !! wikitext
21348 ==2==
21349 ======6======
21350 ===3===
21351 =1=
21352 =====5=====
21353 ==2==
21354 !! html
21355 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
21356 <ul>
21357 <li class="toclevel-1 tocsection-1"><a href="#2"><span class="tocnumber">1</span> <span class="toctext">2</span></a>
21358 <ul>
21359 <li class="toclevel-2 tocsection-2"><a href="#6"><span class="tocnumber">1.1</span> <span class="toctext">6</span></a></li>
21360 <li class="toclevel-2 tocsection-3"><a href="#3"><span class="tocnumber">1.2</span> <span class="toctext">3</span></a></li>
21361 </ul>
21362 </li>
21363 <li class="toclevel-1 tocsection-4"><a href="#1"><span class="tocnumber">2</span> <span class="toctext">1</span></a>
21364 <ul>
21365 <li class="toclevel-2 tocsection-5"><a href="#5"><span class="tocnumber">2.1</span> <span class="toctext">5</span></a></li>
21366 <li class="toclevel-2 tocsection-6"><a href="#2_2"><span class="tocnumber">2.2</span> <span class="toctext">2</span></a></li>
21367 </ul>
21368 </li>
21369 </ul>
21370 </div>
21371
21372 <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>
21373 <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>
21374 <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>
21375 <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>
21376 <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>
21377 <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>
21378
21379 !! end
21380
21381
21382 !! test
21383 ISBN with a dummy number
21384 !! wikitext
21385 ISBN ---
21386 !! html
21387 <p>ISBN ---
21388 </p>
21389 !! end
21390
21391
21392 !! test
21393 ISBN with space-delimited number
21394 !! wikitext
21395 ISBN 92 9017 032 8
21396 !! html/php
21397 <p><a href="/wiki/Special:BookSources/9290170328" class="internal mw-magiclink-isbn">ISBN 92 9017 032 8</a>
21398 </p>
21399 !! html/parsoid
21400 <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>
21401 !! end
21402
21403
21404 !! test
21405 ISBN with multiple spaces, no number
21406 !! wikitext
21407 ISBN foo
21408 !! html
21409 <p>ISBN foo
21410 </p>
21411 !! end
21412
21413
21414 !! test
21415 ISBN length
21416 !! wikitext
21417 ISBN 123456789
21418
21419 ISBN 1234567890
21420
21421 ISBN 12345678901
21422 !! html/php
21423 <p>ISBN 123456789
21424 </p><p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
21425 </p><p>ISBN 12345678901
21426 </p>
21427 !! html/parsoid
21428 <p>ISBN 123456789</p>
21429
21430 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a></p>
21431
21432 <p>ISBN 12345678901</p>
21433 !! end
21434
21435
21436 !! test
21437 ISBN with trailing year (T9110)
21438 !! wikitext
21439 ISBN 1-234-56789-0 - 2006
21440
21441 ISBN 1 234 56789 0 - 2006
21442 !! html/php
21443 <p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1-234-56789-0</a> - 2006
21444 </p><p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1 234 56789 0</a> - 2006
21445 </p>
21446 !! html/parsoid
21447 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1-234-56789-0</a> - 2006</p>
21448
21449 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1 234 56789 0</a> - 2006</p>
21450 !! end
21451
21452
21453 !! test
21454 anchorencode
21455 !! wikitext
21456 {{anchorencode:foo bar©#%n}}
21457 !! html
21458 <p>foo_bar.C2.A9.23.25n
21459 </p>
21460 !! end
21461
21462 !! test
21463 anchorencode trims spaces
21464 !! wikitext
21465 {{anchorencode: __pretty__please__}}
21466 !! html
21467 <p>pretty_please
21468 </p>
21469 !! end
21470
21471 !! test
21472 anchorencode deals with links
21473 !! wikitext
21474 {{anchorencode: [[hello|world]] [[hi]]}}
21475 !! html
21476 <p>world_hi
21477 </p>
21478 !! end
21479
21480 !! test
21481 anchorencode deals with templates
21482 !! wikitext
21483 {{anchorencode: {{Foo}} }}
21484 !! html
21485 <p>FOO
21486 </p>
21487 !! end
21488
21489 !! test
21490 anchorencode encodes like the TOC generator: (T20431)
21491 !! wikitext
21492 === _ +:.3A%3A&&amp;]] ===
21493 {{anchorencode: _ +:.3A%3A&&amp;]] }}
21494 __NOEDITSECTION__
21495 !! html
21496 <h3><span class="mw-headline" id=".2B:.3A.253A.26.26.5D.5D">_ +:.3A%3A&amp;&amp;]]</span></h3>
21497 <p>.2B:.3A.253A.26.26.5D.5D
21498 </p>
21499 !! end
21500
21501 !! test
21502 T8200: blockquotes and paragraph formatting
21503 !! wikitext
21504 <blockquote>
21505 foo
21506 </blockquote>
21507
21508 bar
21509
21510 baz
21511 !! html
21512 <blockquote>
21513 <p>foo
21514 </p>
21515 </blockquote>
21516 <p>bar
21517 </p>
21518 <pre>baz
21519 </pre>
21520 !! end
21521
21522 !! test
21523 T10293: Use of center tag ruins paragraph formatting
21524 !! wikitext
21525 <center>
21526 foo
21527 </center>
21528
21529 bar
21530
21531 baz
21532 !! html
21533 <center>
21534 <p>foo
21535 </p>
21536 </center>
21537 <p>bar
21538 </p>
21539 <pre>baz
21540 </pre>
21541 !! end
21542
21543 !!test
21544 Parsing of overlapping (improperly nested) inline html tags
21545 !! wikitext
21546 <span><s>x</span></s>
21547 !! html/php
21548 <p><span><s>x&lt;/span&gt;</s></span>
21549 </p>
21550 !! html/parsoid
21551 <p><span><s>x</s></span>
21552 </p>
21553 !!end
21554
21555 ###
21556 ### Language variants related tests
21557 ###
21558
21559 # Parsoid does not mark self-links.
21560 # Parsoid does not convert links; PHP will do any necessary redirects.
21561
21562 !! test
21563 Self-link in language variants
21564 !! options
21565 title=[[Dunav]] language=sr
21566 !! wikitext
21567 Both [[Dunav]] and [[Дунав]] are names for this river.
21568 !! html/php
21569 <p>Both <a class="mw-selflink selflink">Dunav</a> and <a class="mw-selflink selflink">Дунав</a> are names for this river.
21570 </p>
21571 !! html/parsoid
21572 <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>
21573 !! end
21574
21575 !! article
21576 Дуна
21577 !! text
21578 content
21579 !! endarticle
21580
21581 !! test
21582 Link to another existing title shouldn't be parsed as self-link even if it's a variant of this title
21583 !! options
21584 title=[[Duna]] language=sr
21585 !! wikitext
21586 [[Дуна]] is not a self-link while [[Duna]] and [[Dуна]] are still self-links.
21587 !! html/php
21588 <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.
21589 </p>
21590 !! html/parsoid
21591 <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>
21592 !! end
21593
21594 !! test
21595 Link to a section of a variant of this title shouldn't be parsed as self-link
21596 !! options
21597 title=[[Duna]] language=sr
21598 !! wikitext
21599 [[Dуна]] is a self-link while [[Dunа#Foo]] and [[Dуна#Foo]] are not self-links.
21600 !! html/php
21601 <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.
21602 </p>
21603 !! html/parsoid
21604 <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>
21605 !! end
21606
21607 !! test
21608 Link to pages in language variants
21609 !! options
21610 language=sr
21611 !! wikitext
21612 Main Page can be written as [[Маин Паге]]
21613 !! html/php
21614 <p>Main Page can be written as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a>
21615 </p>
21616 !! html/parsoid
21617 <p>Main Page can be written as <a rel="mw:WikiLink" href="./Маин_Паге" title="Маин Паге">Маин Паге</a></p>
21618 !! end
21619
21620
21621 !! test
21622 Multiple links to pages in language variants
21623 !! options
21624 language=sr
21625 !! wikitext
21626 [[Main Page]] can be written as [[Маин Паге]] same as [[Маин Паге]].
21627 !! html/php
21628 <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>.
21629 </p>
21630 !! html/parsoid
21631 <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>
21632 !! end
21633
21634
21635 !! test
21636 Simple template in language variants
21637 !! options
21638 language=sr
21639 !! wikitext
21640 {{тест}}
21641 !! html/php
21642 <p>This is a test template
21643 </p>
21644 !! end
21645
21646
21647 !! test
21648 Template with explicit namespace in language variants
21649 !! options
21650 language=sr
21651 !! wikitext
21652 {{Template:тест}}
21653 !! html/php
21654 <p>This is a test template
21655 </p>
21656 !! end
21657
21658
21659 !! test
21660 Basic test for template parameter in language variants
21661 !! options
21662 language=sr
21663 !! wikitext
21664 {{парамтест|param=foo}}
21665 !! html/php
21666 <p>This is a test template with parameter foo
21667 </p>
21668 !! end
21669
21670 !! test
21671 Simple category in language variants
21672 !! options
21673 language=sr cat
21674 !! wikitext
21675 [[Category:МедиаWики Усер'с Гуиде]]
21676 !! html/php
21677 cat=МедиаWики_Усер'с_Гуиде sort=
21678 !! html/parsoid
21679 <link rel="mw:PageProp/Category" href="./Категорија:МедиаWики_Усер'с_Гуиде" data-parsoid='{"stx":"simple","a":{"href":"./Категорија:МедиаWики_Усер&#39;с_Гуиде"},"sa":{"href":"Category:МедиаWики Усер&#39;с Гуиде"}}'/>
21680 !! end
21681
21682 !! article
21683 Category:分类
21684 !! text
21685 blah
21686 !! endarticle
21687
21688 !! article
21689 Category:分類
21690 !! text
21691 blah
21692 !! endarticle
21693
21694 ## We used to, but no longer wt2wt this test since the default serializer
21695 ## will normalize all categories to serialize on their own line.
21696 ## This wikitext usage is going to be fairly uncommon in production and
21697 ## selser will take care of preserving formatting in those scenarios.
21698 !! test
21699 Don't convert blue categorylinks to another variant (T35210)
21700 !! options
21701 cat
21702 language=zh
21703 parsoid=wt2html
21704 !! wikitext
21705 [[A]][[Category:分类]]
21706 !! html/php
21707 cat=分类 sort=
21708 !! html/parsoid
21709 <p><a rel="mw:WikiLink" href="./A" title="A">A</a></p>
21710 <link rel="mw:PageProp/Category" href="./Category:分类"/>
21711 !! end
21712
21713 !! test
21714 Stripping -{}- tags (language variants)
21715 !! options
21716 language=sr
21717 !! wikitext
21718 Latin proverb: -{Ne nuntium necare}-
21719 !! html/php
21720 <p>Latin proverb: Ne nuntium necare
21721 </p>
21722 !! html/parsoid
21723 <p>Latin proverb: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Ne nuntium necare"}}'></span></p>
21724 !! end
21725
21726
21727 !! test
21728 Prevent conversion with -{}- tags (language variants)
21729 !! options
21730 language=sr variant=sr-ec
21731 !! wikitext
21732 Latinski: -{Ne nuntium necare}-
21733 !! html/php
21734 <p>Латински: Ne nuntium necare
21735 </p>
21736 !! html/parsoid
21737 <p>Latinski: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Ne nuntium necare"}}'></span></p>
21738 !! end
21739
21740
21741 !! test
21742 Prevent conversion of text with -{}- tags (language variants)
21743 !! options
21744 language=sr variant=sr-ec
21745 !! wikitext
21746 Latinski: -{Ne nuntium necare}-
21747 !! html/php
21748 <p>Латински: Ne nuntium necare
21749 </p>
21750 !! html/parsoid
21751 <p>Latinski: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Ne nuntium necare"}}'></span></p>
21752 !! end
21753
21754
21755 !! test
21756 Prevent conversion of links with -{}- tags (language variants)
21757 !! options
21758 language=sr variant=sr-ec
21759 !! wikitext
21760 -{[[Main Page]]}-
21761 !! html/php
21762 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
21763 </p>
21764 !! html/parsoid
21765 <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>
21766 !! end
21767
21768
21769 !! test
21770 -{}- tags within headlines (within html for parserConvert())
21771 !! options
21772 language=sr variant=sr-ec
21773 !! wikitext
21774 == -{Naslov}- ==
21775
21776 Note that even an unprotected headline ID is not affected by language
21777 conversion:
21778
21779 == Latinski ==
21780 !! html/php
21781 <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>
21782 <p>Ноте тхат евен ан унпротецтед хеадлине ИД ис нот аффецтед бy лангуаге
21783 цонверсион:
21784 </p>
21785 <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>
21786
21787 !! html/parsoid
21788 <h2 id="-.7BNaslov.7D-"><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Naslov"}}'></span></h2>
21789
21790 <p>Note that even an unprotected headline ID is not affected by language
21791 conversion:</p>
21792
21793 <h2 id="Latinski">Latinski</h2>
21794 !! end
21795
21796 !! test
21797 Explicit definition of language variant alternatives
21798 !! options
21799 language=zh variant=zh-tw
21800 !! wikitext
21801 -{zh:China;zh-tw:Taiwan}-, not China
21802 !! html/php
21803 <p>Taiwan, not China
21804 </p>
21805 !! html/parsoid
21806 <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>
21807 !! end
21808
21809 !! test
21810 Filter syntax for language variants
21811 !! options
21812 language=zh variant=zh-tw
21813 !! wikitext
21814 foo-{zh;zh-hans;zh-hant|blog, WEBJOURNAL, WEBLOG}-quux
21815 !! html/php
21816 <p>fooblog, WEBJOURNAL, WEBLOGquux
21817 </p>
21818 !! html/parsoid
21819 <p>foo<span typeof="mw:LanguageVariant" data-mw-variant='{"filter":{"l":["zh","zh-hans","zh-hant"],"t":"blog, WEBJOURNAL, WEBLOG"}}'></span>quux</p>
21820 !! end
21821
21822 # Note that Parsoid post-processing for language variants needs to
21823 # update the `title` attribute here, based on the mw:ExpandedAttrs property
21824 !! test
21825 Conversion around HTML tags
21826 !! options
21827 language=sr variant=sr-ec
21828 !! wikitext
21829 -{H|span=>sr-ec:script;title=>sr-ec:src}-
21830 <span title="La-{sr-el:L;sr-ec:C}-tin">ski</span>
21831 !! html/php
21832 <p>
21833 <span title="ЛаCтин">ски</span>
21834 </p>
21835 !! html/parsoid
21836 <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"}]}'/>
21837 <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>
21838 !! end
21839
21840 !! test
21841 Explicit session-wise two-way language variant mapping (A flag and - flag)
21842 !! options
21843 language=zh variant=zh-tw
21844 !! wikitext
21845 This is -{zh:China; zh-tw:Taiwan}-, but we'll forget that now.
21846
21847 Taiwan is not China.
21848
21849 But -{A|zh:China; zh-tw:Taiwan}- is China,
21850
21851 (This-{-|zh:China; zh-tw:Taiwan}- should be stripped!)
21852
21853 and -{China}- is China.
21854 !! html/php
21855 <p>This is Taiwan, but we'll forget that now.
21856 </p><p>Taiwan is not China.
21857 </p><p>But Taiwan is Taiwan,
21858 </p><p>(This should be stripped!)
21859 </p><p>and China is China.
21860 </p>
21861 !! html/parsoid
21862 <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>
21863 <p>Taiwan is not China.</p>
21864 <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>
21865 <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>
21866 <p>and <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"China"}}'></span> is China.</p>
21867 !! end
21868
21869 !! test
21870 Explicit session-wise one-way language variant mapping (A flag and - flag)
21871 !! options
21872 language=zh variant=zh-tw
21873 !! wikitext
21874 This is -{COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}-, but we'll forget that now.
21875
21876 COUNTRY is China or Taiwan.
21877
21878 But -{A|COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}- is COUNTRY,
21879
21880 (This-{-|COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}- should be stripped!)
21881
21882 and -{COUNTRY}- is COUNTRY.
21883 !! html/php
21884 <p>This is Taiwan, but we'll forget that now.
21885 </p><p>COUNTRY is China or Taiwan.
21886 </p><p>But Taiwan is Taiwan,
21887 </p><p>(This should be stripped!)
21888 </p><p>and COUNTRY is COUNTRY.
21889 </p>
21890 !! html/parsoid
21891 <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>
21892 <p>COUNTRY is China or Taiwan.</p>
21893 <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>
21894 <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>
21895 <p>and <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"COUNTRY"}}'></span> is COUNTRY.</p>
21896 !! end
21897
21898 !! test
21899 Explicit session-wise two-way language variant mapping (H flag for hide)
21900 !! options
21901 language=zh variant=zh-tw
21902 !! wikitext
21903 (This-{H|zh:China;zh-tw:Taiwan}- should be stripped!)
21904
21905 Taiwan is China.
21906 !! html/php
21907 <p>(This should be stripped!)
21908 </p><p>Taiwan is Taiwan.
21909 </p>
21910 !! html/parsoid
21911 <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>
21912 <p>Taiwan is China.</p>
21913 !! end
21914
21915 !! test
21916 Explicit session-wise one-way language variant mapping (H flag for hide)
21917 !! options
21918 language=zh variant=zh-tw
21919 !! wikitext
21920 (This-{H|COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}- should be stripped!)
21921
21922 COUNTRY is Taiwan or China.
21923 !! html/php
21924 <p>(This should be stripped!)
21925 </p><p>Taiwan is Taiwan or China.
21926 </p>
21927 !! html/parsoid
21928 <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>
21929 <p>COUNTRY is Taiwan or China.</p>
21930 !! end
21931
21932 ## Note that parsoid test runner does not support 'showtitle' option.
21933 !! test
21934 Adding explicit conversion rule for title (T flag)
21935 !! options
21936 language=zh variant=zh-tw showtitle
21937 !! wikitext
21938 Should be stripped-{T|zh:China;zh-tw:Taiwan}-!
21939
21940 Taiwan is China.
21941 !! html/php
21942 Taiwan
21943 <p>Should be stripped!
21944 </p><p>Taiwan is China.
21945 </p>
21946 !! html/parsoid
21947 <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>
21948 <p>Taiwan is China.</p>
21949 !! end
21950
21951 !! test
21952 Code coverage: T combined with H flag
21953 !! options
21954 language=zh variant=zh-tw showtitle
21955 !! wikitext
21956 Should be stripped-{T;H|zh:China; zh-tw:Taiwan}-!
21957
21958 Taiwan is China.
21959 !! html/php
21960 Taiwan
21961 <p>Should be stripped!
21962 </p><p>Taiwan is Taiwan.
21963 </p>
21964 !! html/parsoid
21965 <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>
21966 <p>Taiwan is China.</p>
21967 !! end
21968
21969 !! test
21970 Code coverage: T with no variants
21971 !! options
21972 language=zh variant=zh-tw showtitle
21973 !! wikitext
21974 -{H|zh:China; zh-tw:Taiwan}-
21975 Taiwan is China.-{T|Taiwan is China}-
21976 !! html/php
21977 Taiwan is China
21978 <p>
21979 Taiwan is Taiwan.
21980 </p>
21981 !! html/parsoid
21982 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/>
21983 Taiwan is China.<meta typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Taiwan is China"},"title":true}'/></p>
21984 !! end
21985
21986 !! test
21987 Code coverage: rules with no variants
21988 !! options
21989 language=zh variant=zh-tw
21990 !! wikitext
21991 -{H|zh:China; zh-tw:Taiwan}-
21992 Taiwan is China.
21993 -{H|China}-
21994 Taiwan is China.
21995 !! html/php
21996 <p>
21997 Taiwan is Taiwan.
21998
21999 Taiwan is China.
22000 </p>
22001 !! html/parsoid
22002 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/>
22003 Taiwan is China.
22004 <meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"*","t":"China"}]}'/>
22005 Taiwan is China.</p>
22006 !! end
22007
22008
22009 !! test
22010 Code coverage: D flag for conversion rule
22011 !! options
22012 language=zh variant=zh-tw
22013 !! wikitext
22014 -{D|zh-cn:XA; zh-tw:YA}-
22015 -{A;D|zh-cn:XB; zh-tw:YB}-
22016 -{D;H|zh-cn:XC; zh-tw:YC}-
22017
22018 -{D;H|FOO=>zh-tw:BAR;FOO=>zh-cn:BAT}-
22019
22020 -{D|0=>zh-tw:1}-
22021 -{A;D|2=>zh-tw:3}-
22022 -{D;H|4=>zh-tw:5}-
22023
22024 XA XB XC YA YB YC FOO BAR BAT 012345
22025 !! html/php
22026 <p>大陆:XA;台灣:YA;
22027
22028 大陆:XC;台灣:YC;
22029 </p><p>FOO⇒台灣:BAR;FOO⇒大陆:BAT;
22030 </p><p>0⇒台灣:1;
22031
22032 4⇒台灣:5;
22033 </p><p>XA YB YC YA YB YC BAR BAR BAT 013355
22034 </p>
22035 !! html/parsoid
22036 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"describe":true,"twoway":[{"l":"zh-cn","t":"XA"},{"l":"zh-tw","t":"YA"}]}'></span>
22037 <meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"twoway":[{"l":"zh-cn","t":"XB"},{"l":"zh-tw","t":"YB"}]}'/>
22038 <span typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"twoway":[{"l":"zh-cn","t":"XC"},{"l":"zh-tw","t":"YC"}]}'></span></p>
22039 <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>
22040 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"describe":true,"oneway":[{"f":"0","l":"zh-tw","t":"1"}]}'></span>
22041 <meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"oneway":[{"f":"2","l":"zh-tw","t":"3"}]}'/>
22042 <span typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"oneway":[{"f":"4","l":"zh-tw","t":"5"}]}'></span></p>
22043 <p>XA XB XC YA YB YC FOO BAR BAT 012345</p>
22044 !! end
22045
22046 !! test
22047 Code coverage: N flag for conversion rule
22048 !! options
22049 language=zh variant=zh-cn
22050 !! wikitext
22051 -{N|zh-cn}-
22052
22053 -{N|zh-tw}-
22054
22055 -{N|sr-ec}-
22056 !! html/php
22057 <p>大陆
22058 </p><p>台灣
22059 </p><p>српски (ћирилица)‎
22060 </p>
22061 !! html/parsoid
22062 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"name":{"t":"zh-cn"}}'></span></p>
22063 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"name":{"t":"zh-tw"}}'></span></p>
22064 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"name":{"t":"sr-ec"}}'></span></p>
22065 !! end
22066
22067 # html2wt suppresses the bogus 'D' flag, so this is wt2html only
22068 !! test
22069 Code coverage: N flag for conversion rule (wt2html only)
22070 !! options
22071 language=zh variant=zh-cn
22072 parsoid=wt2html,html2html
22073 !! wikitext
22074 -{D;N|en}-
22075 !! html/php
22076 <p>English
22077 </p>
22078 !! html/parsoid
22079 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"name":{"t":"en"}}' data-parsoid='{"fl":["D","N"]}'></span></p>
22080 !! end
22081
22082 !! test
22083 Testing that changing the language variant here in the tests actually works
22084 !! options
22085 language=zh variant=zh showtitle
22086 !! wikitext
22087 Should be stripped-{T|zh:China; zh-tw:Taiwan}-!
22088 !! html/php
22089 China
22090 <p>Should be stripped!
22091 </p>
22092 !! html/parsoid
22093 <p>Should be stripped<meta typeof="mw:LanguageVariant" data-mw-variant='{"title":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/>!</p>
22094 !! end
22095
22096 !! test
22097 Recursive conversion of alt and title attrs shouldn't clear converter state
22098 !! options
22099 language=zh variant=zh-cn
22100 showtitle
22101 !! wikitext
22102 -{H|zh-cn:Exclamation; zh-tw:exclamation}-
22103 Should be stripped-{T|zh-cn:China; zh-tw:Taiwan}-<span title="exclamation">!</span>
22104 !! html/php
22105 China
22106 <p>
22107 Should be stripped<span title="Exclamation">!</span>
22108 </p>
22109 !! html/parsoid
22110 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"zh-cn","t":"Exclamation"},{"l":"zh-tw","t":"exclamation"}]}'/>
22111 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>
22112 !! end
22113
22114 !! test
22115 T26072: more test on conversion rule for title
22116 !! options
22117 language=zh variant=zh-tw showtitle
22118 !! wikitext
22119 This should be stripped-{T|zh:China; zh-tw:Taiwan}-!
22120
22121 This won't take interferes with the title rule-{H|zh:Beijing; zh-tw:Taipei}-.
22122 !! html/php
22123 Taiwan
22124 <p>This should be stripped!
22125 </p><p>This won't take interferes with the title rule.
22126 </p>
22127 !! html/parsoid
22128 <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>
22129 <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>
22130 !! end
22131
22132 !! test
22133 Partly disable title conversion if variant == main language code
22134 !! options
22135 language=zh variant=zh title=[[ZH]] showtitle
22136 !! wikitext
22137 -{T|zh-cn:CN;zh-tw:TW}-
22138 !! html/php
22139 ZH
22140 <p>
22141 </p>
22142 !! html/parsoid
22143 <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>
22144 !! end
22145
22146 !! test
22147 Partly disable title conversion if variant == main language code, more
22148 !! options
22149 language=zh variant=zh title=[[ZH]] showtitle
22150 !! wikitext
22151 -{T|TW}-
22152 !! html/php
22153 ZH
22154 <p>
22155 </p>
22156 !! html/parsoid
22157 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"TW"},"title":true}'/></p>
22158 !! end
22159
22160 !! test
22161 Raw output of variant escape tags (R flag)
22162 !! options
22163 language=zh variant=zh-tw
22164 !! wikitext
22165 Raw: -{R|zh:China;zh-tw:Taiwan}-
22166 !! html/php
22167 <p>Raw: zh:China;zh-tw:Taiwan
22168 </p>
22169 !! html/parsoid
22170 <p>Raw: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"zh:China;zh-tw:Taiwan"}}'></span></p>
22171 !! end
22172
22173 # html2wt suppresses the bogus 'D' flags, so this is wt2html only
22174 !! test
22175 Raw output of variant escape tags (R flag) (wt2html only)
22176 !! options
22177 language=zh variant=zh-tw
22178 parsoid=wt2html,html2html
22179 !! wikitext
22180 -{Variant}- -{D|syntax}- -{D;R|options}-
22181 !! html/php
22182 <p>Variant syntax options
22183 </p>
22184 !! html/parsoid
22185 <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>
22186 !! end
22187
22188 !! test
22189 Nested markup inside raw output of variant escape tags (R flag)
22190 !! options
22191 language=zh variant=zh-tw
22192 !! wikitext
22193 Nested raw: -{R|nested -{zh:China;zh-tw:Taiwan}- nested}-
22194 !! html/php
22195 <p>Nested raw: nested Taiwan nested
22196 </p>
22197 !! html/parsoid
22198 <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>
22199 !! end
22200
22201 !! test
22202 Nested markup and spaces inside raw output of variant escape tags (R flag)
22203 !! options
22204 language=zh variant=zh-tw
22205 !! wikitext
22206 X-{ outer -{ inner }- outer }-X
22207 !! html/php
22208 <p>X outer inner outer X
22209 </p>
22210 !! html/parsoid
22211 <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>
22212 !! end
22213
22214 !! test
22215 Templates inside raw output of variant escape tags (R flag)
22216 !! options
22217 language=zh variant=zh-tw
22218 !! wikitext
22219 Nested raw: -{R|nested {{echo|hi}} templates}-
22220 !! html/php
22221 <p>Nested raw: nested hi templates
22222 </p>
22223 !! html/parsoid
22224 <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>
22225 !! end
22226
22227 !! test
22228 Strings evaluating false shouldn't be ignored by Language converter (T51072)
22229 !! options
22230 language=zh variant=zh-cn
22231 !! input
22232 -{zh-cn:0;zh-sg:1;zh-tw:2;zh-hk:3}-
22233 !! html/php
22234 <p>0
22235 </p>
22236 !! html/parsoid
22237 <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>
22238 !! end
22239
22240 !! test
22241 Conversion rules from [numeric-only string] to [something else] (T48634)
22242 !! options
22243 language=zh variant=zh-cn
22244 !! input
22245 -{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
22246 !! html/php
22247 <p>D12345EE12345
22248 </p>
22249 !! html/parsoid
22250 <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>
22251 !! end
22252
22253 !! test
22254 Two-way converter rule entries with an empty value should be ignored (T53551)
22255 !! options
22256 language=zh variant=zh-cn
22257 !! input
22258 -{H|zh-cn:foo;zh-tw:;}-foobar
22259 !! html/php
22260 <p>foobar
22261 </p>
22262 !! html/parsoid
22263 <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>
22264 !! end
22265
22266 !! test
22267 One-way converter rule entries with an empty "from" string should be ignored (T53551)
22268 !! options
22269 language=zh variant=zh-cn
22270 !! input
22271 -{H|=>zh-cn:foo;}-foobar
22272 !! html/php
22273 <p>foobar
22274 </p>
22275 !! html/parsoid
22276 <p><meta typeof="mw:LanguageVariant" data-parsoid='{"tSp":[5]}' data-mw-variant='{"add":true,"oneway":[{"f":"","l":"zh-cn","t":"foo"}]}'/>foobar</p>
22277 !! end
22278
22279 !! test
22280 Empty converter rule entries shouldn't be inserted into the conversion table (T53551)
22281 !! options
22282 language=zh variant=zh-cn
22283 !! input
22284 -{H|}-foobar
22285 !! html/php
22286 <p>foobar
22287 </p>
22288 !! html/parsoid
22289 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"*","t":""}]}'/>foobar</p>
22290 !! end
22291
22292 !! test
22293 Nested using of manual convert syntax
22294 !! options
22295 language=zh variant=zh-hk
22296 !! wikitext
22297 Nested: -{zh-hans:Hi -{zh-cn:China;zh-sg:Singapore;}-;zh-hant:Hello -{zh-tw:Taiwan;zh-hk:H-{ong}- K-{}-ong;}-;}-!
22298 !! html/php
22299 <p>Nested: Hello Hong Kong!
22300 </p>
22301 !! html/parsoid
22302 <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>
22303 !! end
22304
22305 !! test
22306 HTML markups with conversion syntax in attribs, nested in other conversion blocks
22307 !! options
22308 language=zh variant=zh-cn
22309 !! wikitext
22310 -{zh;zh-hans;zh-hant|<span title="-{X}-">A</span>}-
22311 !! html/php
22312 <p><span title="X">A</span>
22313 </p>
22314 !! html/parsoid
22315 <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>
22316 !! end
22317
22318 !! test
22319 HTML markups with conversion syntax in attribs, nested in other conversion blocks (not working yet in PHP parser)
22320 !! options
22321 language=zh variant=zh-cn
22322 !! wikitext
22323 -{<span title="-{X}-">A</span>}-
22324 !! html/php+disabled
22325 <p><span title="X">A</span>
22326 </p>
22327 !! html/parsoid
22328 <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>
22329 !! end
22330
22331 # Parsoid and PHP disagree on how to parse this example: Parsoid
22332 # insists that the content of a language converter element be a valid
22333 # DOM fragment or attribute string
22334 !! test
22335 Language converter markup with block content
22336 !! options
22337 language=zh variant=zh-cn
22338 !! wikitext
22339 <span>a-{b<div>c}-d
22340
22341 <span>a-{zh;zh-hans;zh-hant|b<div>c}-d
22342
22343 <span>a-{H|0=>zh-cn:x<span>y;0=>zh-tw:b<div>c}-d
22344 !! html/php+tidy
22345 <p><span>ab</span></p>
22346 <div><span>cd <span>ab</span></span>
22347 <div><span>cd <span>ad</span></span></div>
22348 </div>
22349 !! html/parsoid
22350 <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>
22351
22352 <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>
22353
22354 <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>
22355 !! end
22356
22357 !! test
22358 LanguageConverter selser (1)
22359 !! options
22360 language=zh variant=zh-cn
22361 parsoid={
22362 "modes": ["wt2wt", "selser"],
22363 "changes": [
22364 ["span[typeof]", "attr", "data-mw-variant", "{\"disabled\":{\"t\":\"edited\"}}"]
22365 ]
22366 }
22367 !! wikitext
22368 -{raw}-
22369 !! wikitext/edited
22370 -{edited}-
22371 !! end
22372
22373 !! test
22374 LanguageConverter selser (2)
22375 !! options
22376 language=zh variant=zh-cn
22377 parsoid={
22378 "modes": ["wt2wt", "selser"],
22379 "changes": [
22380 ["span[class='x']", "contents", "text", "-{foo}-"],
22381 ["a", "contents", "text", "-{"],
22382 ["span[typeof]", "attr", "data-mw", "{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"-{\"}},\"i\":0}}]}"]
22383 ]
22384 }
22385 !! wikitext
22386 <span class="x">TEXT1</span>
22387 [http://example.com TEXT2]
22388 [[Foo|TEXT3]]
22389 {{echo|TEXT4}}
22390 !! wikitext/edited
22391 <span class="x"><nowiki>-{foo}-</nowiki></span>
22392 [http://example.com -{]
22393 [[Foo|<nowiki>-{</nowiki>]]
22394 {{1x|<nowiki>-{</nowiki>}}
22395 !! end
22396
22397 # Tests LanguageVariantText in ConstrainedText
22398 !! test
22399 LanguageConverter selser (3)
22400 !! options
22401 language=zh variant=zh-cn
22402 parsoid={
22403 "modes": ["wt2wt", "selser"],
22404 "changes": [
22405 ["td > span", "attr", "typeof", "mw:LanguageVariant"],
22406 ["td > span", "attr", "data-mw-variant", "{\"disabled\":{\"t\":\"edited\"}}"]
22407 ]
22408 }
22409 !! wikitext
22410 {|
22411 |-
22412 |<span>Foo</span>
22413 |}
22414 !! wikitext/edited
22415 {|
22416 |-
22417 |<nowiki/>-{edited}-
22418 |}
22419 !! end
22420
22421 # Tests LanguageVariantText._fromSelSer
22422 !! test
22423 LanguageConverter selser (4)
22424 !! options
22425 language=zh variant=zh-cn
22426 parsoid={
22427 "modes": ["wt2wt", "selser"],
22428 "changes": [
22429 ["td > span.x", "remove"]
22430 ]
22431 }
22432 !! wikitext
22433 {|
22434 |-
22435 |<span class="x">Foo</span>-{Bar}-
22436 ||<span class="x">Foo</span>-{Bar}-
22437 |}
22438 !! wikitext/edited
22439 {|
22440 |-
22441 |<nowiki/>-{Bar}-
22442 ||-{Bar}-
22443 |}
22444 !! end
22445
22446 # Since Parsoid is starting to emit canonical wikitext for links,
22447 # [http://example.com http://example.com] will not RT back to that
22448 # form anymore.
22449 # Parsoid does not language-convert links (it is done in a
22450 # post-processing step)
22451 !! test
22452 Proper conversion of text in external links
22453 !! options
22454 language=sr variant=sr-ec
22455 parsoid=wt2html
22456 !! wikitext
22457 http://www.google.com
22458 gopher://www.google.com
22459 [http://www.google.com http://www.google.com]
22460 [gopher://www.google.com gopher://www.google.com]
22461 [https://www.google.com irc://www.google.com]
22462 [ftp://www.google.com www.google.com/ftp://dir]
22463 [//www.google.com www.google.com]
22464 !! html/php
22465 <p><a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
22466 <a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
22467 <a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
22468 <a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
22469 <a rel="nofollow" class="external text" href="https://www.google.com">irc://www.google.com</a>
22470 <a rel="nofollow" class="external text" href="ftp://www.google.com">www.гоогле.цом/фтп://дир</a>
22471 <a rel="nofollow" class="external text" href="//www.google.com">www.гоогле.цом</a>
22472 </p>
22473 !! html/parsoid
22474 <p><a rel="mw:ExtLink" href="http://www.google.com">http://www.google.com</a>
22475 <a rel="mw:ExtLink" href="gopher://www.google.com">gopher://www.google.com</a>
22476 <a rel="mw:ExtLink" href="http://www.google.com">http://www.google.com</a>
22477 <a rel="mw:ExtLink" href="gopher://www.google.com">gopher://www.google.com</a>
22478 <a rel="mw:ExtLink" href="https://www.google.com">irc://www.google.com</a>
22479 <a rel="mw:ExtLink" href="ftp://www.google.com">www.google.com/ftp://dir</a>
22480 <a rel="mw:ExtLink" href="//www.google.com">www.google.com</a></p>
22481 !! end
22482
22483 !! test
22484 Do not convert roman numbers to language variants
22485 !! options
22486 language=sr variant=sr-ec
22487 !! wikitext
22488 Fridrih IV je car.
22489 !! html/php
22490 <p>Фридрих IV је цар.
22491 </p>
22492 !! html/parsoid
22493 <p>Fridrih IV je car.</p>
22494 !! end
22495
22496 !! test
22497 Unclosed language converter markup "-{"
22498 !! options
22499 language=sr
22500 !! wikitext
22501 -{T|hello
22502 !! html
22503 <p>-{T|hello
22504 </p>
22505 !! end
22506
22507 !! test
22508 Don't convert raw rule "-{R|=&gt;}-" to "=>"
22509 !! options
22510 language=sr
22511 !! wikitext
22512 -{R|=&gt;}-
22513 !! html/php
22514 <p>=&gt;
22515 </p>
22516 !! html/parsoid
22517 <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>
22518 !!end
22519
22520 !! test
22521 Don't break link parsing if language converter markup is in the caption.
22522 !! options
22523 language=sr variant=sr-ec
22524 !! wikitext
22525 [[Main Page|-{R|main page}-]]
22526 !! html/php
22527 <p><a href="/wiki/Main_Page" title="Маин Паге">main page</a>
22528 </p>
22529 !! html/parsoid
22530 <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>
22531 !! end
22532
22533 !! test
22534 T146304: Don't break template parsing if language converter markup is in the parameter.
22535 !! options
22536 language=sr variant=sr-ec
22537 !! wikitext
22538 {{echo|-{R|foo}-}}
22539 !! html/php
22540 <p>foo
22541 </p>
22542 !! html/parsoid
22543 <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>
22544 !! end
22545
22546 !! test
22547 T146305: Don't break image parsing if language converter markup is in the caption.
22548 !! options
22549 language=sr
22550 !! wikitext
22551 [[Датотека:Foobar.jpg|thumb|-{R|caption:}-]]
22552 !! html/php
22553 <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>
22554
22555 !! html/parsoid
22556 <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>
22557 !! end
22558
22559 !! test
22560 T146305: Don't break image parsing if nested language converter markup is in the caption.
22561 !! options
22562 language=zh variant=zh-cn
22563 !! wikitext
22564 [[File:Foobar.jpg|thumb|-{|zh-cn:blog (hk: -{zh-hans|WEBJOURNAL}-, tw: -{zh-hans|WEBLOG}-)}-]]
22565 !! html/php
22566 <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>
22567
22568 !! html/parsoid
22569 <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>
22570 !! end
22571
22572 # XXX html2wt disabled because rich markup in alt is not preserved.
22573 !! test
22574 Don't break gallery if language converter markup is inside.
22575 !! options
22576 language=zh
22577 !! wikitext
22578 <gallery>
22579 File:foobar.jpg|[[File:foobar.jpg|20px|desc|alt=-{R|foo}-|-{R|bar}-]]|alt=-{R|bat}-
22580 File:foobar.jpg|{{Test|unamedParam|alt=-{R|param}-}}|alt=galleryalt
22581 </gallery>
22582 !! html/php
22583 <ul class="gallery mw-gallery-traditional">
22584 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
22585 <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>
22586 <div class="gallerytext">
22587 <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>
22588 </p>
22589 </div>
22590 </div></li>
22591 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
22592 <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>
22593 <div class="gallerytext">
22594 <p>This is a test template
22595 </p>
22596 </div>
22597 </div></li>
22598 </ul>
22599
22600 !! html/parsoid
22601 <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"}}'>
22602 <li class="gallerybox">
22603 <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>
22604 <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>
22605 </li>
22606 <li class="gallerybox">
22607 <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>
22608 <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>
22609 </li>
22610 </ul>
22611 !! end
22612
22613 !! test
22614 T153135: Don't break list handling if language converter markup is in the item.
22615 !! options
22616 language=zh variant=zh-cn
22617 !! wikitext
22618 ;-{zh-cn:AAA;zh-tw:BBB}-
22619 ;-{R|foo:bar}-
22620 !! html/php
22621 <dl><dt>AAA</dt>
22622 <dt>foo:bar</dt></dl>
22623
22624 !! html/parsoid
22625 <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>
22626 <dt data-parsoid='{"dsr":[25,39,1,0]}'><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"foo:bar"}}'></span></dt>
22627 </dl>
22628 !! end
22629
22630 // Note that parsoid does not protect colons unless language converter
22631 // markup is properly nested, because it is a backtracking parser.
22632 !! test
22633 T153135: Unclosed markup in definition list (code coverage)
22634 !! options
22635 language=zh variant=zh-cn
22636 !! wikitext
22637 ;<b>foo:bar
22638 ;-{zh-cn:AAA
22639 !! html/php+tidy
22640 <dl>
22641 <dt><b>foo:bar</b></dt>
22642 <dt><b>-{zh-cn:AAA</b></dt>
22643 </dl>
22644 !! html/parsoid
22645 <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}'>
22646 <dt data-parsoid='{"dsr":[12,20,1,0]}'>-{zh-cn</dt>
22647 <dd data-parsoid='{"stx":"row","dsr":[20,24,1,0]}'>AAA</dd>
22648 </b></dl>
22649 !! end
22650
22651 !! test
22652 T153135: Nested language converter markup in definition list (code coverage)
22653 !! options
22654 language=zh variant=zh-cn
22655 !! wikitext
22656 ;-{|zh-cn:AAA -{zh-hans|foo:bar}- -{R|bat:baz}-}-:def
22657 !! html/php
22658 <dl><dt>AAA foo:bar bat:baz</dt>
22659 <dd>def</dd></dl>
22660
22661 !! html/parsoid
22662 <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>
22663 <dd data-parsoid='{"stx":"row","dsr":[49,53,1,0]}'>def</dd>
22664 </dl>
22665 !! end
22666
22667 # html2wt mode disabled due to <nowiki> insertion.
22668 !! test
22669 T153140: Don't break table handling if language converter markup is in the cell.
22670 !! options
22671 language=sr variant=sr-ec
22672 parsoid=wt2html,wt2wt,html2html
22673 !! wikitext
22674 {|
22675 |-
22676 | -{R|B}-
22677 |}
22678 !! html/php
22679 <table>
22680
22681 <tr>
22682 <td> B
22683 </td></tr></table>
22684
22685 !! html/parsoid
22686 <table>
22687 <tbody>
22688 <tr>
22689 <td><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"B"}}'></span></td>
22690 </tr>
22691 </tbody>
22692 </table>
22693 !! end
22694
22695 !! test
22696 Language converter tricky html2wt cases (1)
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 !! wikitext
22703 -{<nowiki>}-</nowiki>}-
22704 !! html/php
22705 <p>&#125;-
22706 </p>
22707 !! end
22708
22709 !! test
22710 Language converter tricky html2wt cases (2)
22711 !! options
22712 language=sr
22713 parsoid=html2wt,wt2wt
22714 !! html/parsoid
22715 <p>-{foo}-</p>
22716 !! wikitext
22717 <nowiki>-{foo}-</nowiki>
22718 !! html/php
22719 <p>-&#123;foo&#125;-
22720 </p>
22721 !! end
22722
22723 !! test
22724 Language converter tricky html2wt cases (3)
22725 !! options
22726 language=sr
22727 parsoid=html2wt,wt2wt
22728 !! html/parsoid
22729 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"|"}}'></span></p>
22730 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"R|raw"}}'></span></p>
22731 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"-{foo}-"}}'></span></p>
22732 !! wikitext
22733 -{R||}-
22734
22735 -{R|R|raw}-
22736
22737 -{<nowiki>-{foo}-</nowiki>}-
22738 !! html/php
22739 <p>|
22740 </p><p>R|raw
22741 </p><p>-&#123;foo&#125;-
22742 </p>
22743 !! end
22744
22745 !! test
22746 Language converter tricky html2wt cases (4)
22747 !! options
22748 language=sr
22749 parsoid=html2wt,wt2wt
22750 !! html/parsoid
22751 <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>
22752 !! wikitext
22753 -{R|{{echo|hey}}}-
22754 !! html/php
22755 <p>hey
22756 </p>
22757 !! end
22758
22759 # Note that the <nowiki> escaping added by parsoid for source text,
22760 # destination text, and language names only works on the PHP side
22761 # for *destination text*. (HTML entity escaping wouldn't work
22762 # any better.) This is probably a bug, at least for source texts.
22763 # (For language names PHP uses a precise regexp based on the languages
22764 # it currently knows have variants, which is fragile since this set
22765 # can grow/shrink over time.)
22766 !! test
22767 Language converter tricky html2wt cases (5)
22768 !! options
22769 language=zh variant=zh-cn
22770 !! html/parsoid
22771 <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>
22772 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"oneway":[{"f":"A","l":"bo:g;us","t":"B"}]}'/></p>
22773 <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>
22774 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"twoway":[{"l":"bo:g;us","t":"xyz"},{"l":"zh-cn","t":"abc"}]}'></span></p>
22775 <p>a:b=>c xyz</p>
22776 !! wikitext
22777 -{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
22778
22779 -{H|A=><nowiki>bo:g;us</nowiki>:B}-
22780
22781 -{A|zh-tw:xyz; zh-cn:<nowiki>0;zh-tw:bar</nowiki>}-
22782
22783 -{<nowiki>bo:g;us</nowiki>:xyz; zh-cn:abc}-
22784
22785 a:b=>c xyz
22786 !! html/php+disabled
22787 <p>foobat;xyz=&gt;zh-cn:abc
22788 </p><p>A
22789 </p><p>0;zh-tw:bar
22790 </p><p>abc
22791 </p><p>a:b=&gt;c 0;zh-tw:bar
22792 </p>
22793 !! end
22794
22795 !! test
22796 T179579: Nowiki and lc interaction
22797 !! options
22798 parsoid=wt2html
22799 language=sr
22800 !! wikitext
22801 -{</nowiki>123}-
22802
22803 -{123<nowiki>|</nowiki>456}-
22804 !! html/parsoid
22805 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"&amp;lt;/nowiki>123"}}' data-parsoid='{"fl":[],"src":"-{&lt;/nowiki>123}-"}'></span></p>
22806
22807 <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>
22808 !! end
22809
22810 !! test
22811 T2529: Uncovered bullet
22812 !! wikitext
22813 * Foo {{bullet}}
22814 !! html
22815 <ul><li> Foo </li>
22816 <li> Bar</li></ul>
22817
22818 !! end
22819
22820 # Plain MediaWiki does not remove empty lists, but tidy actually does.
22821 # Templates in Wikipedia rely on this behavior, as tidy has always been
22822 # enabled there. These tests are normally run *without* tidy, so specify the
22823 # full output here.
22824 # To test realistic parsing behavior, apply a tidy-like transformation to both
22825 # the expected output and your parser's output.
22826 !! test
22827 T2529: Uncovered bullet leaving empty list, normally removed by tidy
22828 !! wikitext
22829 ******* Foo {{bullet}}
22830 !! html
22831 <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>
22832 <li> Bar</li></ul>
22833
22834 !! end
22835
22836 !! test
22837 T2529: Uncovered table already at line-start
22838 !! wikitext
22839 x
22840
22841 {{table}}
22842 y
22843 !! html
22844 <p>x
22845 </p>
22846 <table>
22847 <tr>
22848 <td> 1 </td>
22849 <td> 2
22850 </td></tr>
22851 <tr>
22852 <td> 3 </td>
22853 <td> 4
22854 </td></tr></table>
22855 <p>y
22856 </p>
22857 !! end
22858
22859 !! test
22860 T2529: Uncovered bullet in parser function result
22861 !! wikitext
22862 * Foo {{lc:{{bullet}} }}
22863 !! html
22864 <ul><li> Foo </li>
22865 <li> bar</li></ul>
22866
22867 !! end
22868
22869 !! test
22870 T7678: Double-parsed template argument
22871 !! wikitext
22872 {{lc:{{{1}}}|hello}}
22873 !! html
22874 <p>{{{1}}}
22875 </p>
22876 !! end
22877
22878 !! test
22879 T7678: Double-parsed template invocation
22880 !! wikitext
22881 {{lc:{{paramtest {{!}} param = hello }} }}
22882 !! html
22883 <p>{{paramtest | param = hello }}
22884 </p>
22885 !! end
22886
22887 !! test
22888 Case insensitivity of parser functions for non-ASCII characters (T10143)
22889 !! options
22890 language=cs
22891 title=[[Main Page]]
22892 !! wikitext
22893 {{PRVNÍVELKÉ:ěščř}}
22894 {{prvnívelké:ěščř}}
22895 {{PRVNÍMALÉ:ěščř}}
22896 {{prvnímalé:ěščř}}
22897 {{MALÁ:ěščř}}
22898 {{malá:ěščř}}
22899 {{VELKÁ:ěščř}}
22900 {{velká:ěščř}}
22901 !! html
22902 <p>Ěščř
22903 Ěščř
22904 ěščř
22905 ěščř
22906 ěščř
22907 ěščř
22908 ĚŠČŘ
22909 ĚŠČŘ
22910 </p>
22911 !! end
22912
22913 !! test
22914 Morwen/13: Unclosed link followed by heading
22915 !! wikitext
22916 [[link
22917 ==heading==
22918 !! html
22919 <p>[[link
22920 </p>
22921 <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>
22922
22923 !! end
22924
22925 !! test
22926 HHP2.1: Heuristics for headings in preprocessor parenthetical structures
22927 !! wikitext
22928 {{foo|
22929 =heading=
22930 !! html
22931 <p>{{foo|
22932 </p>
22933 <h1><span class="mw-headline" id="heading">heading</span></h1>
22934
22935 !! end
22936
22937 !! test
22938 HHP2.2: Heuristics for headings in preprocessor parenthetical structures
22939 !! wikitext
22940 {{foo|
22941 ==heading==
22942 !! html
22943 <p>{{foo|
22944 </p>
22945 <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>
22946
22947 !! end
22948
22949 !! test
22950 Tildes in comments
22951 !! options
22952 pst
22953 !! wikitext
22954 <!-- ~~~~ -->
22955 !! html/php
22956 <!-- ~~~~ -->
22957 !! end
22958
22959 !! test
22960 Paragraphs inside divs (no extra line breaks)
22961 !! wikitext
22962 <div>Line one
22963
22964 Line two</div>
22965 !! html
22966 <div>Line one
22967 Line two</div>
22968
22969 !! end
22970
22971 !! test
22972 Paragraphs inside divs (extra line break on open)
22973 !! wikitext
22974 <div>
22975 Line one
22976
22977 Line two</div>
22978 !! html
22979 <div>
22980 <p>Line one
22981 </p>
22982 Line two</div>
22983
22984 !! end
22985
22986 !! test
22987 Paragraphs inside divs (extra line break on close)
22988 !! wikitext
22989 <div>Line one
22990
22991 Line two
22992 </div>
22993 !! html
22994 <div>Line one
22995 <p>Line two
22996 </p>
22997 </div>
22998
22999 !! end
23000
23001 !! test
23002 Paragraphs inside divs (extra line break on open and close)
23003 !! wikitext
23004 <div>
23005 Line one
23006
23007 Line two
23008 </div>
23009 !! html
23010 <div>
23011 <p>Line one
23012 </p><p>Line two
23013 </p>
23014 </div>
23015
23016 !! end
23017
23018 !! test
23019 Nesting tags, paragraphs on lines which begin with <div>
23020 !! wikitext
23021 <div></div><strong>A
23022 B</strong>
23023 !! html/php+tidy
23024 <p><strong>A</strong></p>
23025 <p><strong>B</strong></p>
23026 !! html/parsoid
23027 <div></div>
23028 <p><strong>A
23029 B</strong>
23030 </p>
23031 !! end
23032
23033 # T8200: <blockquote> should behave like <div> with respect to line breaks
23034 !! test
23035 T8200: paragraphs inside blockquotes (no extra line breaks)
23036 !! wikitext
23037 <blockquote>Line one
23038
23039 Line two</blockquote>
23040 !! html
23041 <blockquote>Line one
23042 Line two</blockquote>
23043
23044 !! html+tidy
23045 <blockquote>
23046 <p>Line one Line two</p>
23047 </blockquote>
23048 !! end
23049
23050 !! test
23051 T8200: paragraphs inside blockquotes (extra line break on open)
23052 !! wikitext
23053 <blockquote>
23054 Line one
23055
23056 Line two</blockquote>
23057 !! html
23058 <blockquote>
23059 <p>Line one
23060 </p>
23061 Line two</blockquote>
23062
23063 !! html+tidy
23064 <blockquote>
23065 <p>Line one</p>
23066 Line two</blockquote>
23067 !! end
23068
23069 !! test
23070 T8200: paragraphs inside blockquotes (extra line break on close)
23071 !! wikitext
23072 <blockquote>Line one
23073
23074 Line two
23075 </blockquote>
23076 !! html
23077 <blockquote>Line one
23078 <p>Line two
23079 </p>
23080 </blockquote>
23081
23082 !! html+tidy
23083 <blockquote>
23084 <p>Line one</p>
23085 <p>Line two</p>
23086 </blockquote>
23087 !! end
23088
23089 !! test
23090 T8200: paragraphs inside blockquotes (extra line break on open and close)
23091 !! wikitext
23092 <blockquote>
23093 Line one
23094
23095 Line two
23096 </blockquote>
23097 !! html
23098 <blockquote>
23099 <p>Line one
23100 </p><p>Line two
23101 </p>
23102 </blockquote>
23103
23104 !! html+tidy
23105 <blockquote>
23106 <p>Line one</p>
23107 <p>Line two</p>
23108 </blockquote>
23109 !! end
23110
23111 !! test
23112 Paragraphs inside blockquotes/divs (no extra line breaks)
23113 !! wikitext
23114 <blockquote><div>Line one
23115
23116 Line two</div></blockquote>
23117 !! html
23118 <blockquote><div>Line one
23119 Line two</div></blockquote>
23120
23121 !! end
23122
23123 !! test
23124 Paragraphs inside blockquotes/divs (extra line break on open)
23125 !! wikitext
23126 <blockquote><div>
23127 Line one
23128
23129 Line two</div></blockquote>
23130 !! html
23131 <blockquote><div>
23132 <p>Line one
23133 </p>
23134 Line two</div></blockquote>
23135
23136 !! end
23137
23138 !! test
23139 Paragraphs inside blockquotes/divs (extra line break on close)
23140 !! wikitext
23141 <blockquote><div>Line one
23142
23143 Line two
23144 </div></blockquote>
23145 !! html
23146 <blockquote><div>Line one
23147 <p>Line two
23148 </p>
23149 </div></blockquote>
23150
23151 !! end
23152
23153 !! test
23154 Paragraphs inside blockquotes/divs (extra line break on open and close)
23155 !! wikitext
23156 <blockquote><div>
23157 Line one
23158
23159 Line two
23160 </div></blockquote>
23161 !! html
23162 <blockquote><div>
23163 <p>Line one
23164 </p><p>Line two
23165 </p>
23166 </div></blockquote>
23167
23168 !! end
23169
23170 !! test
23171 Interwiki links trounced by replaceExternalLinks after early LinkHolderArray expansion
23172 !! options
23173 wgLinkHolderBatchSize=0
23174 !! wikitext
23175 [[meatball:1]]
23176 [[meatball:2]]
23177 [[meatball:3]]
23178 !! html
23179 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?1" class="extiw" title="meatball:1">meatball:1</a>
23180 <a href="http://www.usemod.com/cgi-bin/mb.pl?2" class="extiw" title="meatball:2">meatball:2</a>
23181 <a href="http://www.usemod.com/cgi-bin/mb.pl?3" class="extiw" title="meatball:3">meatball:3</a>
23182 </p>
23183 !! end
23184
23185 !! test
23186 Free external link invading image caption
23187 !! wikitext
23188 [[Image:Foobar.jpg|thumb|http://x|hello]]
23189 !! html
23190 <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>
23191
23192 !! end
23193
23194 !! test
23195 T17196: localised external link numbers
23196 !! options
23197 language=fa
23198 !! wikitext
23199 [http://en.wikipedia.org/]
23200 !! html/php
23201 <p><a rel="nofollow" class="external autonumber" href="http://en.wikipedia.org/">[۱]</a>
23202 </p>
23203 !! html/parsoid
23204 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/"></a></p>
23205 !! end
23206
23207 !! test
23208 Multibyte character in padleft
23209 !! wikitext
23210 {{padleft:-Hello|7|Æ}}
23211 !! html
23212 <p>Æ-Hello
23213 </p>
23214 !! end
23215
23216 !! test
23217 Multibyte character in padright
23218 !! wikitext
23219 {{padright:Hello-|7|Æ}}
23220 !! html
23221 <p>Hello-Æ
23222 </p>
23223 !! end
23224
23225 !!test
23226 formatdate parser function
23227 !! wikitext
23228 {{#formatdate:2009-03-24}}
23229 !! html
23230 <p><span class="mw-formatted-date" title="2009-03-24">2009-03-24</span>
23231 </p>
23232 !! end
23233
23234 !!test
23235 formatdate parser function, with default format
23236 !! wikitext
23237 {{#formatdate:2009-03-24|mdy}}
23238 !! html
23239 <p><span class="mw-formatted-date" title="2009-03-24">March 24, 2009</span>
23240 </p>
23241 !! end
23242
23243 !! test
23244 Spacing of numbers in formatted dates
23245 !! wikitext
23246 {{#formatdate:January 15}}
23247 !! html
23248 <p><span class="mw-formatted-date" title="01-15">January 15</span>
23249 </p>
23250 !! end
23251
23252 !! test
23253 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
23254 !! options
23255 language=nl title=[[MediaWiki:Common.css]]
23256 !! wikitext
23257 {{#formatdate:2009-03-24|dmy}}
23258 !! html
23259 <p><span class="mw-formatted-date" title="2009-03-24">24 March 2009</span>
23260 </p>
23261 !! end
23262
23263 #
23264 #
23265 #
23266
23267 #
23268 # Edit comments
23269 #
23270
23271 !! test
23272 Edit comment with link
23273 !! options
23274 comment
23275 !! wikitext
23276 I like the [[Main Page]] a lot
23277 !! html/php
23278 I like the <a href="/wiki/Main_Page" title="Main Page">Main Page</a> a lot
23279 !!end
23280
23281 !! test
23282 Edit comment with link and link text
23283 !! options
23284 comment
23285 !! wikitext
23286 I like the [[Main Page|best pages]] a lot
23287 !! html/php
23288 I like the <a href="/wiki/Main_Page" title="Main Page">best pages</a> a lot
23289 !!end
23290
23291 !! test
23292 Edit comment with link and link text with suffix
23293 !! options
23294 comment
23295 !! wikitext
23296 I like the [[Main Page|best page]]s a lot
23297 !! html/php
23298 I like the <a href="/wiki/Main_Page" title="Main Page">best pages</a> a lot
23299 !!end
23300
23301 !! test
23302 Edit comment with section link (non-local, eg in history list)
23303 !! options
23304 comment title=[[Main Page]]
23305 !! wikitext
23306 /* External links */ removed bogus entries
23307 !! html/php
23308 <a href="/wiki/Main_Page#External_links" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
23309 !!end
23310
23311 !! test
23312 Edit comment with section link and text before it (non-local, eg in history list)
23313 !! options
23314 comment title=[[Main Page]]
23315 !! wikitext
23316 pre-comment text /* External links */ removed bogus entries
23317 !! html/php
23318 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>
23319 !!end
23320
23321 !! test
23322 Edit comment with section link (local, eg in diff view)
23323 !! options
23324 comment local title=[[Main Page]]
23325 !! wikitext
23326 /* External links */ removed bogus entries
23327 !! html/php
23328 <a href="#External_links">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
23329 !!end
23330
23331 !! test
23332 Edit comment with subpage link (T16080)
23333 !! options
23334 comment
23335 subpage
23336 title=[[Subpage test]]
23337 !! wikitext
23338 Poked at a [[/subpage]] here...
23339 !! html/php
23340 Poked at a <a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">/subpage</a> here...
23341 !!end
23342
23343 !! test
23344 Edit comment with subpage link and link text (T16080)
23345 !! options
23346 comment
23347 subpage
23348 title=[[Subpage test]]
23349 !! wikitext
23350 Poked at a [[/subpage|neat little page]] here...
23351 !! html/php
23352 Poked at a <a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">neat little page</a> here...
23353 !!end
23354
23355 !! test
23356 Edit comment with bogus subpage link in non-subpage NS (T16080)
23357 !! options
23358 comment
23359 title=[[Subpage test]]
23360 !! wikitext
23361 Poked at a [[/subpage]] here...
23362 !! html/php
23363 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...
23364 !!end
23365
23366 !! test
23367 Edit comment with bare anchor link (local, as on diff)
23368 !! options
23369 comment
23370 local
23371 title=[[Main Page]]
23372 !! wikitext
23373 [[#section]]
23374 !! html/php
23375 <a href="#section">#section</a>
23376 !! end
23377
23378 !! test
23379 Edit comment with bare anchor link (non-local, as on history)
23380 !! options
23381 comment
23382 title=[[Main Page]]
23383 !! wikitext
23384 [[#section]]
23385 !! html/php
23386 <a href="/wiki/Main_Page#section" title="Main Page">#section</a>
23387 !! end
23388
23389 !! test
23390 Anchor starting with underscore
23391 !! options
23392 title=[[Foo]]
23393 !! wikitext
23394 [[#_ref|One]]
23395 !! html/php
23396 <p><a href="#_ref">One</a>
23397 </p>
23398 !! html/parsoid
23399 <p><a rel="mw:WikiLink" href="./Foo#_ref" data-parsoid='{"stx":"piped","a":{"href":"./Foo#_ref"},"sa":{"href":"#_ref"}}'>One</a></p>
23400 !! end
23401
23402 !! test
23403 Id starting with underscore
23404 !! wikitext
23405 <div id="_ref"></div>
23406 !! html/*
23407 <div id="_ref"></div>
23408
23409 !! end
23410
23411 !! test
23412 Edit comment with link with more than one pipe (T99346)
23413 !! options
23414 comment
23415 !! wikitext
23416 [[Main Page|Many|pipes]]
23417 !! html/php
23418 <a href="/wiki/Main_Page" title="Main Page">Many|pipes</a>
23419 !! end
23420
23421 !! test
23422 Complex edit comment with link with more than one pipe (T99346)
23423 !! options
23424 comment
23425 !! wikitext
23426 Created page with "<noinclude>[[Category:Requests for permissions/Bot|{{subst:#titleparts:{{subst:PAGENAME}}|1|3}}]]</noinclude> === [[User:MineoBot|]] 8=== {{Request for permissions/links|Mineo..."
23427 !! html/php
23428 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;
23429 !! end
23430
23431 !! test
23432 Space normalisation on autocomment (T24784)
23433 !! options
23434 comment
23435 title=[[Main Page]]
23436 !! wikitext
23437 /* __hello__world__ */
23438 !! html/php
23439 <a href="/wiki/Main_Page#hello_world" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">__hello__world__</span></span>
23440 !! end
23441
23442 !! test
23443 percent-encoding and + signs in comments (T28410)
23444 !! options
23445 comment
23446 !! wikitext
23447 [[ABC%33D% ++]] [[ABC%33D% ++|+%20]]
23448 !! html/php
23449 <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>
23450 !! end
23451
23452 # Parsoid doesn't support this yet: see T75581
23453 # but it *should* omit the 'src' attribute if the image is bad.
23454 # PHP side of tests was disabled in
23455 # mediawiki/core:6bd31e7d95161a6e88fa86df60871051da997c3c
23456 # because of issues in the PHP parserTests infrastructure
23457 # (but the output below is indeed what the PHP side emits)
23458 !! test
23459 Bad images - basic functionality
23460 !! wikitext
23461 [[File:Bad.jpg]]
23462 !! DISABLED/html/php
23463 !! html/parsoid
23464 <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>
23465 !! end
23466
23467 !! test
23468 Bad images - T18039: text after bad image disappears
23469 !! wikitext
23470 Foo bar
23471 [[File:Bad.jpg]]
23472 Bar foo
23473 !! DISABLED/html/php
23474 <p>Foo bar
23475 </p><p>Bar foo
23476 </p>
23477 !! html/parsoid
23478 <p>Foo bar
23479 <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>
23480 Bar foo</p>
23481 !! end
23482
23483 !! test
23484 Verify that displaytitle works (T24501) no displaytitle
23485 !! options
23486 showtitle
23487 !! config
23488 wgAllowDisplayTitle=true
23489 wgRestrictDisplayTitle=false
23490 !! wikitext
23491 this is not the the title
23492 !! html/php
23493 Parser test
23494 <p>this is not the the title
23495 </p>
23496 !! end
23497
23498 !! test
23499 Verify that displaytitle works (T24501) RestrictDisplayTitle=false
23500 !! options
23501 showtitle
23502 title=[[Screen]]
23503 !! config
23504 wgAllowDisplayTitle=true
23505 wgRestrictDisplayTitle=false
23506 !! wikitext
23507 this is not the the title
23508 {{DISPLAYTITLE:whatever}}
23509 !! html/php
23510 whatever
23511 <p>this is not the the title
23512 </p>
23513 !! end
23514
23515 !! test
23516 Verify that displaytitle works (T24501) RestrictDisplayTitle=true mismatch
23517 !! options
23518 showtitle
23519 title=[[Screen]]
23520 !! config
23521 wgAllowDisplayTitle=true
23522 wgRestrictDisplayTitle=true
23523 !! wikitext
23524 this is not the the title
23525 {{DISPLAYTITLE:whatever}}
23526 !! html/php
23527 Screen
23528 <p>this is not the the title
23529 </p>
23530 !! end
23531
23532 !! test
23533 Verify that displaytitle works (T24501) RestrictDisplayTitle=true matching
23534 !! options
23535 showtitle
23536 title=[[Screen]]
23537 !! config
23538 wgAllowDisplayTitle=true
23539 wgRestrictDisplayTitle=true
23540 !! wikitext
23541 this is not the the title
23542 {{DISPLAYTITLE:screen}}
23543 !! html/php
23544 screen
23545 <p>this is not the the title
23546 </p>
23547 !! end
23548
23549 !! test
23550 Verify that displaytitle works (T24501) AllowDisplayTitle=false
23551 !! options
23552 showtitle
23553 title=[[Screen]]
23554 !! config
23555 wgAllowDisplayTitle=false
23556 !! wikitext
23557 this is not the the title
23558 {{DISPLAYTITLE:screen}}
23559 !! html/php
23560 Screen
23561 <p>this is not the the title
23562 <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>
23563 </p>
23564 !! end
23565
23566 !! test
23567 Verify that displaytitle works (T24501) AllowDisplayTitle=false no DISPLAYTITLE
23568 !! options
23569 showtitle
23570 title=[[Screen]]
23571 !! config
23572 wgAllowDisplayTitle=false
23573 !! wikitext
23574 this is not the the title
23575 !! html/php
23576 Screen
23577 <p>this is not the the title
23578 </p>
23579 !! end
23580
23581 !! test
23582 Verify that displaytitle handles inline CSS styles (T28547) - rejected value
23583 !! options
23584 showtitle
23585 title=[[Screen]]
23586 !! config
23587 wgAllowDisplayTitle=true
23588 wgRestrictDisplayTitle=true
23589 !! wikitext
23590 this is not the the title
23591 {{DISPLAYTITLE:<span style="display: none;">s</span>creen}}
23592 !! html/php
23593 <span style="/* attempt to bypass $wgRestrictDisplayTitle */">s</span>creen
23594 <p>this is not the the title
23595 </p>
23596 !! end
23597
23598 !! test
23599 Verify that displaytitle handles inline CSS styles (T28547) - accepted value
23600 !! options
23601 showtitle
23602 title=[[Screen]]
23603 !! config
23604 wgAllowDisplayTitle=true
23605 wgRestrictDisplayTitle=true
23606 !! wikitext
23607 this is not the the title
23608 {{DISPLAYTITLE:<span style="color: red;">s</span>creen}}
23609 !! html/php
23610 <span style="color: red;">s</span>creen
23611 <p>this is not the the title
23612 </p>
23613 !! end
23614
23615 !! test
23616 Page status indicators: Empty name is invalid
23617 !! options
23618 showindicators
23619 !! wikitext
23620 <indicator name=" "></indicator>
23621 <indicator></indicator>
23622 !! html/php
23623 <p><span class="error"><strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.</span>
23624 <span class="error"><strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.</span>
23625 </p>
23626 !! end
23627
23628 !! test
23629 Page status indicators: Weird syntaxes that are okay
23630 !! options
23631 showindicators
23632 !! wikitext
23633 <indicator name="empty" />
23634 <indicator name="name"></indicator>
23635 !! html/php
23636 empty=
23637 name=
23638 <p><br />
23639 </p>
23640 !! end
23641
23642 !! test
23643 Page status indicators: Torture test
23644 !! options
23645 showindicators
23646 !! wikitext
23647 <indicator name="01">hello world</indicator>
23648 <indicator name="02">[[Main Page]]</indicator>
23649 <indicator name="03">[[File:Foobar.jpg|25px|link=]]</indicator>
23650 <indicator name="04">[[File:Foobar.jpg|25px]]</indicator>
23651 <indicator name="05">* foo
23652 * bar</indicator>
23653 <indicator name="06"><nowiki>foo</nowiki></indicator>
23654 <indicator name="07"> Preformatted</indicator>
23655 <indicator name="08"><div>Broken tag</indicator>
23656 <indicator name="09">{| class=wikitable
23657 | cell
23658 |}</indicator>
23659 <indicator name="10">Two
23660
23661 paragraphs</indicator>
23662 !! html/php
23663 01=hello world
23664 02=<a href="/wiki/Main_Page" title="Main Page">Main Page</a>
23665 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" />
23666 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>
23667 05=<ul><li> foo</li>
23668 <li> bar</li></ul>
23669
23670 06=foo
23671 07=<pre>Preformatted
23672 </pre>
23673 08=<div>Broken tag</div>
23674
23675 09=<table class="wikitable">
23676 <tr>
23677 <td> cell
23678 </td></tr></table>
23679
23680 10=<p>Two
23681 </p><p>paragraphs
23682 </p>
23683 <p><br />
23684 </p><p><br />
23685 </p><p><br />
23686 </p><p><br />
23687 </p><p><br />
23688 </p>
23689 !! end
23690
23691 !! test
23692 preload: check <noinclude> and <includeonly>
23693 !! options
23694 preload
23695 !! wikitext
23696 Hello <noinclude>cruel</noinclude><includeonly>kind</includeonly> world.
23697 !! html/php
23698 Hello kind world.
23699 !! end
23700
23701 !! test
23702 preload: check <onlyinclude>
23703 !! options
23704 preload
23705 !! wikitext
23706 Goodbye <onlyinclude>Hello world</onlyinclude>
23707 !! html/php
23708 Hello world
23709 !! end
23710
23711 !! test
23712 preload: can pass tags through if we want to
23713 !! options
23714 preload
23715 !! wikitext
23716 <includeonly><</includeonly>includeonly>Hello world<includeonly><</includeonly>/includeonly>
23717 !! html/php
23718 <includeonly>Hello world</includeonly>
23719 !! end
23720
23721 !! test
23722 preload: check that it doesn't try to do tricks
23723 !! options
23724 preload
23725 !! wikitext
23726 * <!-- Hello --> ''{{world}}'' {{<includeonly>subst:</includeonly>How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
23727 !! html/php
23728 * <!-- Hello --> ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
23729 !! end
23730
23731 !! test
23732 Play a bit with r67090 and T5158
23733 !! wikitext
23734 <div style="width:50% !important">&nbsp;</div>
23735 <div style="width:50%&nbsp;!important">&nbsp;</div>
23736 <div style="width:50%&#160;!important">&nbsp;</div>
23737 <div style="border : solid;">&nbsp;</div>
23738 !! html/php
23739 <div style="width:50% !important">&#160;</div>
23740 <div style="width:50% !important">&#160;</div>
23741 <div style="width:50% !important">&#160;</div>
23742 <div style="border&#160;: solid;">&#160;</div>
23743
23744 !! html/parsoid
23745 <div style="width:50% !important" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
23746 <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>
23747 <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>
23748 <div style="border : solid;" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
23749
23750 !! end
23751
23752 !! test
23753 HTML5 data attributes
23754 !! wikitext
23755 <span data-foo="bar">Baz</span>
23756 <p data-abc-def_hij="">Quuz</p>
23757 !! html/php
23758 <p><span data-foo="bar">Baz</span>
23759 </p>
23760 <p data-abc-def_hij="">Quuz</p>
23761
23762 !! html/parsoid
23763 <p><span data-foo="bar" data-parsoid='{"stx":"html"}'>Baz</span></p>
23764 <p data-abc-def_hij="" data-parsoid='{"stx":"html"}'>Quuz</p>
23765 !! end
23766
23767 !! test
23768 Strip reserved data attributes
23769 !! wikitext
23770 <div data-mw="foo" data-parsoid="bar" data-mw-someext="baz" data-ok="fred" data-ooui="xyzzy" data-bad:ns="ns">d</div>
23771 !! html/php
23772 <div data-ok="fred">d</div>
23773
23774 !! html/parsoid
23775 <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>
23776 !! end
23777
23778 !! test
23779 percent-encoding and + signs in internal links (T28410)
23780 !! wikitext
23781 [[User:+%]] [[Page+title%]]
23782 [[%+]] [[%+|%20]] [[%+ ]] [[%+r]]
23783 [[%]] [[+]] [[File:%+abc%39|foo|[[bar]]]]
23784 [[%33%45]] [[%33%45+]]
23785 !! html/php
23786 <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>
23787 <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>
23788 <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>
23789 <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>
23790 </p>
23791 !! html/parsoid
23792 <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>
23793 <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>
23794 <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>
23795 <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>
23796 !! end
23797
23798 !! test
23799 Special characters in embedded file links (T29679)
23800 !! wikitext
23801 [[File:Contains & ampersand.jpg]]
23802 [[File:Does not exist.jpg|Title with & ampersand]]
23803 !! html/php
23804 <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>
23805 <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>
23806 </p>
23807 !! html/parsoid
23808 <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>
23809 <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>
23810 !! end
23811
23812 !! test
23813 Confirm that 'apos' named character reference doesn't make it to output (not legal in HTML 4)
23814 !! wikitext
23815 Text&apos;s been normalized?
23816 !! html
23817 <p>Text&#39;s been normalized?
23818 </p>
23819 !! end
23820
23821 !! test
23822 T21052 U+3000 IDEOGRAPHIC SPACE should terminate free external links
23823 !! wikitext
23824 http://www.example.org/ <-- U+3000 (vim: ^Vu3000)
23825 !! html
23826 <p><a rel="nofollow" class="external free" href="http://www.example.org/">http://www.example.org/</a> &lt;-- U+3000 (vim: ^Vu3000)
23827 </p>
23828 !! end
23829
23830 !! test
23831 T21052 U+3000 IDEOGRAPHIC SPACE should terminate bracketed external links
23832 !! wikitext
23833 [http://www.example.org/ ideograms]
23834 !! html
23835 <p><a rel="nofollow" class="external text" href="http://www.example.org/">ideograms</a>
23836 </p>
23837 !! end
23838
23839 !! test
23840 T21052 U+3000 IDEOGRAPHIC SPACE should terminate external images links
23841 !! wikitext
23842 http://www.example.org/pic.png <-- U+3000 (vim: ^Vu3000)
23843 !! html
23844 <p><img src="http://www.example.org/pic.png" alt="pic.png"/> &lt;-- U+3000 (vim: ^Vu3000)
23845 </p>
23846 !! end
23847
23848 !! article
23849 Mediawiki:loop1
23850 !! text
23851 {{Identical|A}}
23852 !! endarticle
23853
23854 !! article
23855 Mediawiki:loop2
23856 !! text
23857 {{Identical|B}}
23858 !! endarticle
23859
23860 !! article
23861 Template:Identical
23862 !! text
23863 {{int:loop1}}
23864 {{int:loop2}}
23865 !! endarticle
23866
23867 !! test
23868 T33098 Template which includes system messages which includes the template
23869 !! wikitext
23870 {{Identical}}
23871 !! html
23872 <p><span class="error">Template loop detected: <a href="/wiki/Template:Identical" title="Template:Identical">Template:Identical</a></span>
23873 <span class="error">Template loop detected: <a href="/wiki/Template:Identical" title="Template:Identical">Template:Identical</a></span>
23874 </p>
23875 !! end
23876
23877 !! test
23878 T33490 Turkish: ucfirst 'blah'
23879 !! options
23880 language=tr
23881 !! wikitext
23882 {{ucfirst:blah}}
23883 !! html
23884 <p>Blah
23885 </p>
23886 !! end
23887
23888 !! test
23889 T33490 Turkish: ucfirst 'ix'
23890 !! options
23891 language=tr
23892 !! wikitext
23893 {{ucfirst:ix}}
23894 !! html
23895 <p>İx
23896 </p>
23897 !! end
23898
23899 !! test
23900 T33490 Turkish: lcfirst 'BLAH'
23901 !! options
23902 language=tr
23903 !! wikitext
23904 {{lcfirst:BLAH}}
23905 !! html
23906 <p>bLAH
23907 </p>
23908 !! end
23909
23910 !! test
23911 T33490 Turkish: ucfırst (with a dotless i)
23912 !! options
23913 language=tr
23914 !! wikitext
23915 {{ucfırst:blah}}
23916 !! html
23917 <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>
23918 </p>
23919 !! end
23920
23921 !! test
23922 T33490 ucfırst (with a dotless i) with English language
23923 !! options
23924 language=en
23925 !! wikitext
23926 {{ucfırst:blah}}
23927 !! html
23928 <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>
23929 </p>
23930 !! end
23931
23932 # Note that Parsoid doesn't emit an explicit TOC.
23933 # Note also that the html2wt direction tends to emit an extra newline
23934 # between the __TOC__ magicword and the first heading unless *both*
23935 # the <meta> and the <h2> have a data-parsoid attribute set (even if
23936 # it's "{}").
23937
23938 !! test
23939 T28375: TOC with italics
23940 !! options
23941 title=[[Main Page]]
23942 !! wikitext
23943 __TOC__
23944 == ''Lost'' episodes ==
23945 !! html/php
23946 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
23947 <ul>
23948 <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>
23949 </ul>
23950 </div>
23951
23952 <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>
23953
23954 !! html/parsoid
23955 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
23956 <h2 data-parsoid='{}'> <i>Lost</i> episodes </h2>
23957 !! end
23958
23959 !! test
23960 T28375: TOC with bold
23961 !! options
23962 title=[[Main Page]]
23963 !! wikitext
23964 __TOC__
23965 == '''should be bold''' then normal text ==
23966 !! html/php
23967 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
23968 <ul>
23969 <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>
23970 </ul>
23971 </div>
23972
23973 <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>
23974
23975 !! html/parsoid
23976 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
23977 <h2 data-parsoid='{}'> <b>should be bold</b> then normal text </h2>
23978 !! end
23979
23980 !! test
23981 T35845: Headings become cursive in TOC when they contain an image
23982 !! options
23983 title=[[Main Page]]
23984 !! wikitext
23985 __TOC__
23986 == Image [[Image:foobar.jpg]] ==
23987 !! html/php
23988 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
23989 <ul>
23990 <li class="toclevel-1 tocsection-1"><a href="#Image"><span class="tocnumber">1</span> <span class="toctext">Image</span></a></li>
23991 </ul>
23992 </div>
23993
23994 <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>
23995
23996 !! html/parsoid
23997 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
23998 <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>
23999 !! end
24000
24001 !! test
24002 T35845 (2): Headings become bold in TOC when they contain a blockquote
24003 !! options
24004 title=[[Main Page]]
24005 !! wikitext
24006 __TOC__
24007 == <blockquote>Quote</blockquote> ==
24008 !! html/php
24009 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24010 <ul>
24011 <li class="toclevel-1 tocsection-1"><a href="#Quote"><span class="tocnumber">1</span> <span class="toctext">Quote</span></a></li>
24012 </ul>
24013 </div>
24014
24015 <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>
24016
24017 !! html/php+tidy
24018 <p></p>
24019 <div id="toc" class="toc">
24020 <div class="toctitle">
24021 <h2>Contents</h2>
24022 </div>
24023 <ul>
24024 <li class="toclevel-1 tocsection-1"><a href="#Quote"><span class="tocnumber">1</span> <span class="toctext">Quote</span></a></li>
24025 </ul>
24026 </div>
24027 <p></p>
24028 <h2><span class="mw-headline" id="Quote"></span></h2>
24029 <blockquote>
24030 <p><span class="mw-headline" id="Quote">Quote</span></p>
24031 </blockquote>
24032 <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>
24033 !! html/parsoid
24034 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24035 <h2 data-parsoid='{}'> <blockquote>Quote</blockquote> </h2>
24036 !! end
24037
24038 !! test
24039 Unclosed tags in TOC
24040 !! options
24041 title=[[Main Page]]
24042 !! wikitext
24043 __TOC__
24044 == Proof: 2 < 3 ==
24045 <small>Hanc marginis exiguitas non caperet.</small>
24046 QED
24047 !! html/php
24048 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24049 <ul>
24050 <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>
24051 </ul>
24052 </div>
24053
24054 <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>
24055 <p><small>Hanc marginis exiguitas non caperet.</small>
24056 QED
24057 </p>
24058 !! html/parsoid
24059 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24060 <h2 data-parsoid='{}'> Proof: 2 &lt; 3 </h2>
24061 <p><small>Hanc marginis exiguitas non caperet.</small>
24062 QED</p>
24063 !! end
24064
24065 !! test
24066 Multiple tags in TOC
24067 !! wikitext
24068 __TOC__
24069 == <i>Foo</i> <b>Bar</b> ==
24070
24071 == <i>Foo</i> <blockquote>Bar</blockquote> ==
24072 !! html/php
24073 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24074 <ul>
24075 <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>
24076 <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>
24077 </ul>
24078 </div>
24079
24080 <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>
24081 <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>
24082
24083 !! html/php+tidy
24084 <p></p>
24085 <div id="toc" class="toc">
24086 <div class="toctitle">
24087 <h2>Contents</h2>
24088 </div>
24089 <ul>
24090 <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>
24091 <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>
24092 </ul>
24093 </div>
24094 <p></p>
24095 <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>
24096 <h2><span class="mw-headline" id="Foo_Bar_2"><i>Foo</i></span></h2>
24097 <blockquote>
24098 <p><span class="mw-headline" id="Foo_Bar_2">Bar</span></p>
24099 </blockquote>
24100 <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>
24101 !! html/parsoid
24102 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24103 <h2 data-parsoid='{}'> <i data-parsoid='{"stx":"html"}'>Foo</i> <b data-parsoid='{"stx":"html"}'>Bar</b> </h2>
24104 <h2> <i data-parsoid='{"stx":"html"}'>Foo</i> <blockquote>Bar</blockquote> </h2>
24105 !! end
24106
24107 # Don't expect Parsoid to roundtrip this until the php parser comes closer to
24108 # html5 tag parsing.
24109 !! test
24110 Tags with parameters in TOC
24111 !! options
24112 parsoid=wt2html
24113 !! wikitext
24114 __TOC__
24115 == <sup class="in-h2">Hello</sup> ==
24116
24117 == <sup class="a > b">Evilbye</sup> ==
24118 !! html/php
24119 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24120 <ul>
24121 <li class="toclevel-1 tocsection-1"><a href="#Hello"><span class="tocnumber">1</span> <span class="toctext"><sup>Hello</sup></span></a></li>
24122 <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>
24123 </ul>
24124 </div>
24125
24126 <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>
24127 <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>
24128
24129 !! html/parsoid
24130 <meta property="mw:PageProp/toc" />
24131 <h2> <sup class="in-h2" data-parsoid='{"stx":"html"}'>Hello</sup> </h2>
24132
24133 <h2> <sup class="a " data-parsoid='{"stx":"html"}'> b">Evilbye</sup> </h2>
24134 !! end
24135
24136 !! test
24137 span tags with directionality in TOC
24138 !! wikitext
24139 __TOC__
24140 == <span dir="ltr">C++</span> ==
24141
24142 == <span dir="rtl">זבנג!</span> ==
24143
24144 == <span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span> ==
24145
24146 == <span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span> ==
24147
24148 == <span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span> ==
24149 !! html/php
24150 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24151 <ul>
24152 <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>
24153 <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>
24154 <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>
24155 <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>
24156 <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>
24157 </ul>
24158 </div>
24159
24160 <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>
24161 <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>
24162 <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>
24163 <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>
24164 <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>
24165
24166 !! html/parsoid
24167 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24168 <h2 data-parsoid='{}'> <span dir="ltr">C++</span> </h2>
24169 <h2> <span dir="rtl">זבנג!</span> </h2>
24170 <h2> <span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span> </h2>
24171 <h2> <span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span> </h2>
24172 <h2> <span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span> </h2>
24173 !! end
24174
24175 !! test
24176 T74884: bdi element in ToC
24177 !! wikitext
24178 __TOC__
24179 == <bdi>test</bdi> ==
24180 !! html/php
24181 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24182 <ul>
24183 <li class="toclevel-1 tocsection-1"><a href="#test"><span class="tocnumber">1</span> <span class="toctext"><bdi>test</bdi></span></a></li>
24184 </ul>
24185 </div>
24186
24187 <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>
24188
24189 !! html/parsoid
24190 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24191 <h2 data-parsoid='{}'> <bdi>test</bdi> </h2>
24192 !! end
24193
24194 !! test
24195 T35715: s/strike element in ToC
24196 !! wikitext
24197 __TOC__
24198 == <s>test</s> test <strike>test</strike> ==
24199 !! html/php
24200 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24201 <ul>
24202 <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>
24203 </ul>
24204 </div>
24205
24206 <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>
24207
24208 !! html/parsoid
24209 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24210 <h2 data-parsoid='{}'> <s>test</s> test <strike>test</strike> </h2>
24211 !! end
24212
24213 # Note that the html output does not have the <p></p>, but the
24214 # html+tidy output *does*. This is because the empty <p></p> is
24215 # removed by the sanitizer, but only when tidy is *not* enabled (!).
24216 !! test
24217 Empty <p> tag in TOC, removed by Sanitizer (T92892)
24218 !! wikitext
24219 __TOC__
24220 == x ==
24221 !! html/php
24222 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24223 <ul>
24224 <li class="toclevel-1 tocsection-1"><a href="#x"><span class="tocnumber">1</span> <span class="toctext">x</span></a></li>
24225 </ul>
24226 </div>
24227
24228 <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>
24229
24230 !! html/php+tidy
24231 <p></p>
24232 <div id="toc" class="toc">
24233 <div class="toctitle">
24234 <h2>Contents</h2>
24235 </div>
24236 <ul>
24237 <li class="toclevel-1 tocsection-1"><a href="#x"><span class="tocnumber">1</span> <span class="toctext">x</span></a></li>
24238 </ul>
24239 </div>
24240 <p></p>
24241 <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>
24242 !! html/parsoid
24243 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24244 <h2 data-parsoid='{}'> x </h2>
24245 !! end
24246
24247 !! article
24248 MediaWiki:T34057
24249 !! text
24250 == {{int:headline_sample}} ==
24251 !! endarticle
24252
24253 !! test
24254 T34057: Title needed when expanding <h> nodes.
24255 !! options
24256 title=[[Main Page]]
24257 !! wikitext
24258 {{int:T34057}}
24259 !! html
24260 <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>
24261
24262 !! end
24263
24264 !! test
24265 Strip marker in urlencode
24266 !! wikitext
24267 {{urlencode:x<nowiki/>y}}
24268 {{urlencode:x<nowiki/>y|wiki}}
24269 {{urlencode:x<nowiki/>y|path}}
24270 {{urlencode:x<pre id="one">two</pre>y}}
24271 !! html/php
24272 <p>xy
24273 xy
24274 xy
24275 xy
24276 </p>
24277 !! end
24278
24279 !! test
24280 Strip marker in lc
24281 !! wikitext
24282 {{lc:x<nowiki/>y}}
24283 !! html
24284 <p>xy
24285 </p>
24286 !! end
24287
24288 !! test
24289 Strip marker in uc
24290 !! wikitext
24291 {{uc:x<nowiki/>y}}
24292 !! html
24293 <p>XY
24294 </p>
24295 !! end
24296
24297 !! test
24298 Strip marker in formatNum
24299 !! wikitext
24300 {{formatnum:1<nowiki/>2}}
24301 {{formatnum:1<nowiki/>2|R}}
24302 !! html
24303 <p>12
24304 12
24305 </p>
24306 !! end
24307
24308 !! test
24309 Check noCommafy in formatNum
24310 !! options
24311 language=be-tarask
24312 !! wikitext
24313 {{formatnum:123456.78}}
24314 {{formatnum:123456.78|NOSEP}}
24315 !! html
24316 <p>123 456,78
24317 123456.78
24318 </p>
24319 !! end
24320
24321 !! test
24322 Wrong option for formatNum (T58199)
24323 !! wikitext
24324 {{formatnum:1,234.56|Random}}
24325 {{formatnum:1,234.56|EVERYTHING}}
24326 {{formatnum:1234.56|any argument that has the string 'NOSEP'}}
24327 !! html
24328 <p>1,234.56
24329 1,234.56
24330 1,234.56
24331 </p>
24332 !! end
24333
24334 !! test
24335 Strip marker in grammar
24336 !! options
24337 language=fi
24338 !! wikitext
24339 {{grammar:elative|foo<nowiki/>bar}}
24340 !! html
24341 <p>foobarista
24342 </p>
24343 !! end
24344
24345 !! test
24346 Strip marker in padleft
24347 !! wikitext
24348 {{padleft:|2|x<nowiki/>y}}
24349 !! html
24350 <p>xy
24351 </p>
24352 !! end
24353
24354 !! test
24355 Strip marker in padright
24356 !! wikitext
24357 {{padright:|2|x<nowiki/>y}}
24358 !! html
24359 <p>xy
24360 </p>
24361 !! end
24362
24363 !! test
24364 Strip marker in anchorencode
24365 !! wikitext
24366 {{anchorencode:x<nowiki/>y}}
24367 !! html
24368 <p>xy
24369 </p>
24370 !! end
24371
24372 !! test
24373 nowiki inside link inside heading (T20295)
24374 !! wikitext
24375 ==[[foo|x<nowiki>y</nowiki>z]]==
24376 !! html
24377 <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>
24378
24379 !! end
24380
24381 !! test
24382 new support for bdi element (T33817)
24383 !! wikitext
24384 <p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>
24385 !! html
24386 <p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>
24387
24388 !!end
24389
24390 !! test
24391 Ignore pipe between table row attributes
24392 !! wikitext
24393 {|
24394 | quux
24395 |- id=foo | style='color: red'
24396 | bar
24397 |}
24398 !! html
24399 <table>
24400 <tr>
24401 <td> quux
24402 </td></tr>
24403 <tr id="foo" style="color: red">
24404 <td> bar
24405 </td></tr></table>
24406
24407 !! end
24408
24409 !!test
24410 Language parser function
24411 !! wikitext
24412 {{#language:ar}}
24413 !! html
24414 <p>العربية
24415 </p>
24416 !! end
24417
24418 !!test
24419 Padleft and padright as substr
24420 !! wikitext
24421 {{padleft:|3|abcde}}
24422 {{padright:|3|abcde}}
24423 !! html
24424 <p>abc
24425 abc
24426 </p>
24427 !! end
24428
24429 !!test
24430 Special parser function
24431 !! wikitext
24432 {{#special:RandomPage}}
24433 {{#special:BaDtItLe}}
24434 {{#special:Foobar}}
24435 !! html
24436 <p>Special:Random
24437 Special:Badtitle
24438 Special:Foobar
24439 </p>
24440 !! end
24441
24442 !!test
24443 T36939 - Case insensitive link parsing ([HttP://])
24444 !! wikitext
24445 [HttP://MediaWiki.Org/]
24446 !! html/php
24447 <p><a rel="nofollow" class="external autonumber" href="HttP://MediaWiki.Org/">[1]</a>
24448 </p>
24449 !! html/parsoid
24450 <p><a rel="mw:ExtLink" href="HttP://MediaWiki.Org/"></a></p>
24451 !! end
24452
24453 !!test
24454 T36939 - Case insensitive link parsing ([HttP:// title])
24455 !! wikitext
24456 [HttP://MediaWiki.Org/ MediaWiki]
24457 !! html
24458 <p><a rel="nofollow" class="external text" href="HttP://MediaWiki.Org/">MediaWiki</a>
24459 </p>
24460 !! end
24461
24462 !!test
24463 T36939 - Case insensitive link parsing (HttP://)
24464 !! wikitext
24465 HttP://MediaWiki.Org/
24466 !! html/php
24467 <p><a rel="nofollow" class="external free" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a>
24468 </p>
24469 !! html/parsoid
24470 <p><a rel="mw:ExtLink" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a></p>
24471 !! end
24472
24473 !!test
24474 Disable TOC
24475 !! options
24476 notoc
24477 !! wikitext
24478 Lead
24479 == Section 1 ==
24480 == Section 2 ==
24481 == Section 3 ==
24482 == Section 4 ==
24483 == Section 5 ==
24484 !! html
24485 <p>Lead
24486 </p>
24487
24488 <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>
24489 <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>
24490 <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>
24491 <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>
24492 <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>
24493
24494 !! end
24495
24496
24497 ###
24498 ### Parsoid-specific tests
24499 ### Parsoid-PHP parser incompatibilities
24500 ###
24501 !!test
24502 1. SOL-sensitive wikitext tokens as template-args
24503 !!options
24504 parsoid=wt2html,wt2wt
24505 !! wikitext
24506 {{echo|*a}}
24507 {{echo|#a}}
24508 {{echo|:a}}
24509 !! html
24510 <span about="#mwt1" typeof="mw:Transclusion">
24511 </span><ul about="#mwt1"><li>a</li>
24512 </ul>
24513 <span about="#mwt2" typeof="mw:Transclusion">
24514 </span><ol about="#mwt2"><li>a</li>
24515 </ol>
24516 <span about="#mwt3" typeof="mw:Transclusion">
24517 </span><dl about="#mwt3"><dd>a</dd>
24518 </dl>
24519 !!end
24520
24521 #### -----------------------------------------------------------------
24522 #### Parsoid-specific functionality tests
24523 #### -----------------------------------------------------------------
24524
24525 # T65642/T68749: Formatting elt fixup around images is cleaned up.
24526 # We know wt2wt will fail, but we expect selser to pass.
24527 # Due to the nature of our testing, wt2wt and selser tests will enter the
24528 # blacklist and we'll catch selser regressions based on changes to the
24529 # blacklist entries for selser tests.
24530 !! test
24531 1. Bad treebuilder fixup of formatting elt is cleaned up
24532 !! options
24533 parsoid=wt2html,wt2wt
24534 !! wikitext
24535 {|
24536 |
24537 <small>
24538 [[Image:Foobar.jpg|right|Test]]
24539 </small>
24540 |}
24541 !! html/parsoid
24542 <table>
24543 <tbody><tr><td>
24544 <small>
24545 <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>
24546 </small>
24547 </td></tr>
24548 </tbody></table>
24549 !! end
24550
24551 !! test
24552 2. Bad treebuilder fixup of formatting elt is cleaned up
24553 !! options
24554 parsoid=wt2html,wt2wt
24555 !! wikitext
24556 '''foo[[File:Foobar.jpg|thumb|caption]]bar'''
24557
24558 <small>[[Image:Foobar.jpg|right|300px]]</small>
24559 !! html/parsoid
24560
24561 <p><b>foo</b></p>
24562 <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>
24563 <p><b>bar</b></p>
24564 <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>
24565 !! end
24566
24567 !! test
24568 3. Bad treebuilder fixup of formatting elt is cleaned up
24569 !! options
24570 parsoid=wt2html,wt2wt
24571 !! wikitext
24572 <small>'''foo[[File:Foobar.jpg|thumb|caption]]bar'''</small>
24573 !! html/parsoid
24574 <p><small><b>foo</b></small></p>
24575 <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>
24576 <p><small><b>bar</b></small></p>
24577 !! end
24578
24579 !! test
24580 4. Bad treebuilder fixup of formatting elt is cleaned up: formatting tags around captionless images are ignored
24581 !! options
24582 parsoid=wt2html,wt2wt
24583 !! wikitext
24584 '''<small>[[Image:Foobar.jpg|right|300px]]</small>'''
24585 !! html/parsoid
24586 <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>
24587 !! end
24588
24589 #### ----------------------------------------------------------------
24590 #### Parsoid-only testing of Parsoid's impl of LST
24591 #### Not implemented yet, see
24592 #### https://www.mediawiki.org/wiki/Parsoid/HTML_based_LST
24593 #### ----------------------------------------------------------------
24594
24595 ## We still need to support serializing the older format while content is stored.
24596 !! test
24597 LST Sections: Backwards compatibility
24598 !! options
24599 parsoid={
24600 "suppressErrors": true,
24601 "modes": ["html2wt"]
24602 }
24603 !! wikitext
24604 <section begin="2011-05-16" />
24605 <section end="2014-04-10 (MW 1.23wmf22)" />
24606 !! html/parsoid
24607 <p><meta typeof="mw:Extension/LabeledSectionTransclusion/begin" content="2011-05-16"/>
24608 <meta typeof="mw:Extension/LabeledSectionTransclusion/end" content="2014-04-10 (MW 1.23wmf22)"/></p>
24609 !! end
24610
24611 !! test
24612 LST Sections: Newfangled approach
24613 !! wikitext
24614 <section begin="2011-05-16" />
24615 <section end="2014-04-10 (MW 1.23wmf22)" />
24616 !! html/parsoid
24617 <p><span typeof="mw:Extension/section" about="#mwt4" data-mw='{"name":"section","attrs":{"begin":"2011-05-16"},"body":null}'>
24618 </span>
24619 <span typeof="mw:Extension/section" about="#mwt6" data-mw='{"name":"section","attrs":{"end":"2014-04-10 (MW 1.23wmf22)"},"body":null}'>
24620 </span></p>
24621 !! end
24622
24623 #--------- Test stripping of empty nodes in template content ----------
24624
24625 !! test
24626 Empty LI and TR nodes should be stripped from template content
24627 !! wikitext
24628 {{EmptyLITest}}
24629 {{EmptyTRTest}}
24630 !! html/parsoid
24631 <ul about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyLITest","href":"./Template:EmptyLITest"},"params":{},"i":0}}]}'>
24632 <li>a</li>
24633 <li>b</li>
24634 </ul>
24635 <table about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRTest","href":"./Template:EmptyTRTest"},"params":{},"i":0}}]}'>
24636 <tbody>
24637 <tr>
24638 <td>foo</td>
24639 </tr>
24640 <tr>
24641 <td>bar</td>
24642 </tr>
24643 </tbody>
24644 </table>
24645 !! end
24646
24647 !! test
24648 Empty LI and TR nodes should not be stripped from top-level content
24649 !! wikitext
24650 * a
24651 *
24652 * b
24653 {|
24654 |-
24655 |-
24656 |foo
24657 |}
24658 !! html/parsoid
24659 <ul>
24660 <li> a</li>
24661 <li class='mw-empty-elt'></li>
24662 <li> b</li>
24663 </ul>
24664 <table>
24665 <tbody>
24666 <tr class='mw-empty-elt'></tr>
24667 <tr>
24668 <td>foo</td>
24669 </tr>
24670 </tbody>
24671 </table>
24672 !! end
24673
24674 !! test
24675 Empty TR nodes should not be stripped if they have any attributes set
24676 !! wikitext
24677 {{EmptyTRWithHTMLAttrTest}}
24678 !! html/parsoid
24679 <table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRWithHTMLAttrTest","href":"./Template:EmptyTRWithHTMLAttrTest"},"params":{},"i":0}}]}'>
24680 <tr align='center'></tr>
24681 <tr><td>foo</td></tr>
24682 <tr align='center'></tr>
24683 <tr><td>bar</td></tr>
24684 </table>
24685 !! end
24686
24687 #### ----------------------------------------------------------------
24688 #### The following section of tests are primarily to test
24689 #### wikitext escaping capabilities of Parsoid. Given that
24690 #### escaping can be done any number of ways, the wikitext (input)
24691 #### is always adjusted to reflect how Parsoid adds nowiki
24692 #### escape tags.
24693 ####
24694 #### We are marking several tests as parsoid-only since the
24695 #### HTML in the result section is different from what the
24696 #### PHP parser generates for it.
24697 #### ----------------------------------------------------------------
24698
24699
24700 #### --------------- Headings ---------------
24701 #### 0. Unnested
24702 #### 1. Nested inside html <h1>=foo=</h1>
24703 #### 2. Outside heading nest on a single line <h1>foo</h1>*bar
24704 #### 3. Nested inside html with wikitext split by html tags
24705 #### 4. No escape needed
24706 #### 5. Empty headings <h1></h1>
24707 #### 6. Heading chars in SOL context
24708 #### ----------------------------------------
24709 !! test
24710 Headings: 0. Unnested
24711 !! options
24712 parsoid=html2wt
24713 !! html/parsoid
24714 <p>=foo=</p>
24715
24716 <p> =foo=
24717 <!--cmt-->
24718 =foo=</p>
24719
24720 <p>=foo<i>a</i>=</p>
24721 !! wikitext
24722 <nowiki>=foo=</nowiki>
24723
24724 <nowiki> </nowiki>=foo=
24725 <!--cmt-->
24726 <nowiki>=foo=</nowiki>
24727
24728 =foo''a''<nowiki>=</nowiki>
24729 !!end
24730
24731 # New headings and existing headings are handled differently
24732 !! test
24733 Headings: 1. Nested inside html
24734 !! options
24735 parsoid=html2wt
24736 !! html/parsoid
24737 <h1>=foo=</h1>
24738 <h2>=foo=</h2>
24739 <h3>=foo=</h3>
24740
24741 <h1 data-parsoid=''>=foo=</h1>
24742 <h2 data-parsoid=''>=foo=</h2>
24743 <h3 data-parsoid=''>=foo=</h3>
24744 <h4 data-parsoid=''>=foo=</h4>
24745 <h5 data-parsoid=''>=foo=</h5>
24746 <h6 data-parsoid=''>=foo=</h6>
24747 !! wikitext
24748 = =foo= =
24749
24750 == =foo= ==
24751
24752 === =foo= ===
24753
24754 =<nowiki>=foo=</nowiki>=
24755 ==<nowiki>=foo=</nowiki>==
24756 ===<nowiki>=foo=</nowiki>===
24757 ====<nowiki>=foo=</nowiki>====
24758 =====<nowiki>=foo=</nowiki>=====
24759 ======<nowiki>=foo=</nowiki>======
24760
24761 !!end
24762
24763 !! test
24764 Headings: 2. Outside heading nest on a single line <h1>foo</h1>*bar
24765 !! options
24766 parsoid=html2wt
24767 !! html/parsoid
24768 <h1>foo</h1>*bar
24769 <h1>foo</h1>=bar
24770 <h1>foo</h1>=bar=
24771 !! wikitext
24772 = foo =
24773 <nowiki>*</nowiki>bar
24774
24775 = foo =
24776 =bar
24777
24778 = foo =
24779 <nowiki>=bar=</nowiki>
24780 !!end
24781
24782 !! test
24783 Headings: 3. Nested inside html with wikitext split by html tags
24784 !! options
24785 parsoid=html2wt
24786 !! html/parsoid
24787 <h1>=<b>bold</b>foo=</h1>
24788 !! wikitext
24789 = ='''bold'''foo= =
24790 !!end
24791
24792 !! test
24793 Headings: 4a. No escaping needed (testing just h1 and h2)
24794 !! options
24795 parsoid=html2wt
24796 !! html/parsoid
24797 <h1>=foo</h1>
24798 <h1>foo=</h1>
24799 <h1> =foo= </h1>
24800 <h1>=foo= bar</h1>
24801 <h2>=foo</h2>
24802 <h2>foo=</h2>
24803 <h1>=</h1>
24804 <h1><i>=</i>foo=</h1>
24805 !! wikitext
24806 = =foo =
24807
24808 = foo= =
24809
24810 = =foo= =
24811
24812 = =foo= bar =
24813
24814 == =foo ==
24815
24816 == foo= ==
24817
24818 = = =
24819
24820 = ''=''foo= =
24821 !!end
24822
24823 !! test
24824 Headings: 4b. No escaping needed (inside p-tags)
24825 !! options
24826 parsoid=html2wt
24827 !! html/parsoid
24828 <p>===
24829 =foo= x
24830 =foo= <s></s>
24831 </p>
24832 !! wikitext
24833 ===
24834 =foo= x
24835 =foo= <s></s>
24836 !!end
24837
24838 !! test
24839 Headings: 5. Empty headings
24840 !! options
24841 parsoid=html2wt
24842 !! html/parsoid
24843 <h1 data-parsoid='{}'></h1>
24844
24845 <h2 data-parsoid='{}'></h2>
24846
24847 <h3 data-parsoid='{}'></h3>
24848
24849 <h4 data-parsoid='{}'></h4>
24850
24851 <h5 data-parsoid='{}'></h5>
24852
24853 <h6 data-parsoid='{}'></h6>
24854 !! wikitext
24855 =<nowiki/>=
24856
24857 ==<nowiki/>==
24858
24859 ===<nowiki/>===
24860
24861 ====<nowiki/>====
24862
24863 =====<nowiki/>=====
24864
24865 ======<nowiki/>======
24866 !!end
24867
24868 !! test
24869 Headings: 6a. Heading chars in SOL context (with trailing spaces)
24870 !! options
24871 parsoid=html2wt
24872 !! html/parsoid
24873 <p>=a=</p>
24874
24875 <p>=a=</p>
24876
24877 <p>=a=</p>
24878 !! wikitext
24879 <nowiki>=a=</nowiki>
24880
24881 <nowiki>=a=</nowiki>
24882
24883 <nowiki>=a=</nowiki>
24884 !!end
24885
24886 !! test
24887 Headings: 6b. Heading chars in SOL context (with trailing newlines)
24888 !! options
24889 parsoid=html2wt
24890 !! html/parsoid
24891 <p>=a=
24892 b</p>
24893
24894 <p>=a=
24895 b</p>
24896
24897 <p>=a=
24898 b</p>
24899 !! wikitext
24900 <nowiki>=a=</nowiki>
24901 b
24902
24903 <nowiki>=a=</nowiki>
24904 b
24905
24906 <nowiki>=a=</nowiki>
24907 b
24908 !!end
24909
24910 !! test
24911 Headings: 6c. Heading chars in SOL context (leading newline break)
24912 !! options
24913 parsoid=html2wt
24914 !! html/parsoid
24915 <p>a
24916 =b=</p>
24917 !! wikitext
24918 a
24919 <nowiki>=b=</nowiki>
24920 !!end
24921
24922 !! test
24923 Headings: 6d. Heading chars in SOL context (with interspersed comments)
24924 !! options
24925 parsoid=html2wt
24926 !! html/parsoid
24927 <!--c0--><p>=a=</p>
24928
24929 <!--c1--><p>=a=</p> <!--c2--> <!--c3-->
24930 !! wikitext
24931 <!--c0--><nowiki>=a=</nowiki>
24932
24933 <!--c1--><nowiki>=a=</nowiki> <!--c2--> <!--c3-->
24934 !!end
24935
24936 !! test
24937 Headings: 6d. Heading chars in SOL context (No escaping needed)
24938 !! options
24939 parsoid=html2wt
24940 !! html/parsoid
24941 =a=<div>b</div>
24942 !! wikitext
24943 =a=<div>b</div>
24944 !!end
24945
24946 !! test
24947 Headings: 7. Insert a newline between new content and headings
24948 !! options
24949 parsoid=html2wt
24950 !! html/parsoid
24951 <h2>NEW</h2>
24952 <p>new</p>
24953 <h2 data-parsoid='{}'>A</h2>
24954 <p data-parsoid='{}'>a</p>
24955 !! wikitext
24956 == NEW ==
24957 new
24958
24959 ==A==
24960 a
24961
24962 !! end
24963
24964 #### --------------- Lists ---------------
24965 #### 0. Outside nests (*foo, etc.)
24966 #### 1. Nested inside html <ul><li>*foo</li></ul>
24967 #### 2. Inside definition lists
24968 #### 3. Only bullets at start should be escaped
24969 #### 4. No escapes needed
24970 #### 5. No unnecessary escapes
24971 #### 6. Escape bullets in SOL position
24972 #### 7. Escape bullets in a multi-line context
24973 #### ----------------------------------------
24974
24975 !! test
24976 Lists: 0. Outside nests
24977 !! options
24978 parsoid=html2wt
24979 !! html/parsoid
24980 <p>*foo</p>
24981
24982 <p>#foo</p>
24983
24984 <p>;Foo:bar</p>
24985 !! wikitext
24986 <nowiki>*</nowiki>foo
24987
24988 <nowiki>#</nowiki>foo
24989
24990 <nowiki>;</nowiki>Foo<nowiki>:</nowiki>bar
24991 !!end
24992
24993 ## Making these next 3 tests Parsoid-only since they are html2wt tests
24994 ## to test wikitext escaping, and insignificant whitespace diffs
24995 ## cause PHP parser tests to barf
24996 !! test
24997 Lists: 1. Nested inside html (No unnecessary escapes)
24998 !! options
24999 parsoid=html2wt
25000 !! html/parsoid
25001 <ul>
25002 <li>*foo</li>
25003 <li>#foo</li>
25004 <li>:foo</li>
25005 <li>;foo</li>
25006 <li data-parsoid='{}'>*foo</li>
25007 <li data-parsoid='{}'>#foo</li>
25008 <li data-parsoid='{}'>:foo</li>
25009 <li data-parsoid='{}'>;foo</li>
25010 </ul>
25011
25012 <ol>
25013 <li>*foo</li>
25014 <li>#foo</li>
25015 <li>:foo</li>
25016 <li>;foo</li>
25017 <li data-parsoid='{}'>*foo</li>
25018 <li data-parsoid='{}'>#foo</li>
25019 <li data-parsoid='{}'>:foo</li>
25020 <li data-parsoid='{}'>;foo</li>
25021 </ol>
25022 !! wikitext
25023 * *foo
25024 * #foo
25025 * :foo
25026 * ;foo
25027 *<nowiki>*foo</nowiki>
25028 *<nowiki>#foo</nowiki>
25029 *<nowiki>:foo</nowiki>
25030 *<nowiki>;foo</nowiki>
25031
25032 # *foo
25033 # #foo
25034 # :foo
25035 # ;foo
25036 #<nowiki>*foo</nowiki>
25037 #<nowiki>#foo</nowiki>
25038 #<nowiki>:foo</nowiki>
25039 #<nowiki>;foo</nowiki>
25040 !!end
25041
25042 !! test
25043 Lists: 2. Inside definition lists
25044 !! options
25045 parsoid=html2wt
25046 !! html/parsoid
25047 <dl><dt>;foo</dt></dl>
25048 <dl><dt>:foo</dt></dl>
25049 <dl><dt>:foo</dt>
25050 <dd>bar</dd></dl>
25051 <dl><dd>:foo</dd></dl>
25052 !! wikitext
25053 ; ;foo
25054
25055 ; <nowiki>:foo</nowiki>
25056
25057 ; <nowiki>:foo</nowiki>
25058 : bar
25059
25060 : :foo
25061 !!end
25062
25063 !! test
25064 Lists: 3. Only bullets at start of text in wikitext-generated HTML should be escaped
25065 !! options
25066 parsoid=html2wt
25067 !! html/parsoid
25068 <ul>
25069 <li>*foo*bar</li>
25070 <li data-parsoid='{}'>*foo<i>it</i>*bar</li>
25071 </ul>
25072 !! wikitext
25073 * *foo*bar
25074 *<nowiki>*foo</nowiki>''it''*bar
25075 !!end
25076
25077 !! test
25078 Lists: 4. No escapes needed
25079 !! options
25080 parsoid=html2wt
25081 !! html/parsoid
25082 <ul>
25083 <li>foo*bar
25084 </li>
25085 </ul>
25086 <ul>
25087 <li><i>foo</i>*bar
25088 </li>
25089 </ul>
25090 <ul>
25091 <li><a rel="mw:WikiLink" href="Foo" title="Foo">Foo</a>: bar
25092 </li>
25093 </ul>
25094 <ul>
25095 <li><a rel="mw:WikiLink" href="Foo" title="Foo">Foo</a>*bar
25096 </li>
25097 </ul>
25098 !! wikitext
25099 *foo*bar
25100
25101 *''foo''*bar
25102
25103 *[[Foo]]: bar
25104
25105 *[[Foo]]*bar
25106 !!end
25107
25108 !! test
25109 Lists: 5. No unnecessary escapes
25110 !! options
25111 parsoid=html2wt
25112 !! html/parsoid
25113 <ul><li> bar <span>[[foo]]</span></li></ul>
25114 <ul><li> =bar <span>[[foo]]</span></li></ul>
25115 <ul><li> [[bar <span>[[foo]]</span></li></ul>
25116 <ul><li> ]]bar <span>[[foo]]</span></li></ul>
25117 <ul><li> =bar <span>foo]]</span>=</li></ul>
25118 <ul><li> <s></s>: a</li></ul>
25119 <ul><li> <i>* foo</i></li></ul>
25120
25121 !! wikitext
25122 * bar <span><nowiki>[[foo]]</nowiki></span>
25123
25124 * =bar <span><nowiki>[[foo]]</nowiki></span>
25125
25126 * [[bar <span><nowiki>[[foo]]</nowiki></span>
25127
25128 * ]]bar <span><nowiki>[[foo]]</nowiki></span>
25129
25130 * =bar <span>foo]]</span>=
25131
25132 * <s></s>: a
25133
25134 * ''* foo''
25135 !!end
25136
25137 !! test
25138 Lists: 6. Escape bullets in SOL position
25139 !! options
25140 parsoid=html2wt
25141 !! html/parsoid
25142 <p><!--cmt-->*foo</p>
25143 !! wikitext
25144 <!--cmt--><nowiki>*</nowiki>foo
25145 !!end
25146
25147 !! test
25148 Lists: 7. Escape bullets in a multi-line context
25149 !! options
25150 parsoid=html2wt
25151 !! html/parsoid
25152 <p>a
25153 *b
25154 </p>
25155 !! wikitext
25156 a
25157 <nowiki>*</nowiki>b
25158 !!end
25159
25160 !! test
25161 Lists: 8. Escape colons only if not present in tags
25162 !! options
25163 parsoid=html2wt
25164 !! html/parsoid
25165 <dl><dt>a:b<i>c:d</i></dt></dl>
25166 !! wikitext
25167 ; <nowiki>a:b</nowiki>''c:d''
25168 !! end
25169
25170 #### --------------- HRs ---------------
25171 #### 1. Single line
25172 #### -----------------------------------
25173
25174 !! test
25175 HRs: 1. Single line
25176 !! options
25177 parsoid=html2wt
25178 !! html/parsoid
25179 <hr />----
25180 <hr />=foo=
25181 <hr />*foo
25182 !! wikitext
25183 ----<nowiki>----</nowiki>
25184 ----=foo=
25185 ----*foo
25186 !! end
25187
25188 #### --------------- Tables ---------------
25189 #### 1a. Simple example
25190 #### 1b. No escaping needed (!foo)
25191 #### 1c. No escaping needed (|foo)
25192 #### 1d. No escaping needed (|}foo)
25193 ####
25194 #### 2a. Nested in td (<td>foo|bar</td>)
25195 #### 2b. Nested in td (<td>foo||bar</td>)
25196 #### 2c. Nested in td -- no escaping needed(<td>foo!!bar</td>)
25197 ####
25198 #### 3a. Nested in th (<th>foo!bar</th>)
25199 #### 3b. Nested in th (<th>foo!!bar</th>)
25200 #### 3c. Nested in th -- no escaping needed(<th>foo||bar</th>)
25201 ####
25202 #### 4a. Escape -
25203 #### 4b. Escape +
25204 #### 4c. No escaping needed
25205 #### --------------------------------------
25206
25207 !! test
25208 Tables: 1a. Simple example
25209 !! options
25210 parsoid=html2wt
25211 !! html/parsoid
25212 <p>{|
25213 |}
25214 </p>
25215 !! wikitext
25216 <nowiki>{|</nowiki>
25217 |}
25218 !! end
25219
25220 !! test
25221 Tables: 1b. No escaping needed
25222 !! options
25223 parsoid=html2wt
25224 !! html/parsoid
25225 <p>!foo
25226 </p>
25227 !! wikitext
25228 !foo
25229 !! end
25230
25231 !! test
25232 Tables: 1c. No escaping needed
25233 !! options
25234 parsoid=html2wt
25235 !! html/parsoid
25236 <p>|foo
25237 </p>
25238 !! wikitext
25239 |foo
25240 !! end
25241
25242 !! test
25243 Tables: 1d. No escaping needed
25244 !! options
25245 parsoid=html2wt
25246 !! html/parsoid
25247 <p>|}foo
25248 </p>
25249 !! wikitext
25250 |}foo
25251 !! end
25252
25253 !! test
25254 Tables: 2a. Nested in td
25255 !! options
25256 parsoid=html2wt
25257 !! html/parsoid
25258 <table><tbody><tr>
25259 <td>foo|bar</td></tr>
25260 <tr><td>x<div>a|b</div></td>
25261 </tbody></table>
25262 !! wikitext
25263 {|
25264 |<nowiki>foo|bar</nowiki>
25265 |-
25266 |x<div><nowiki>a|b</nowiki></div>
25267 |}
25268 !! html/php+tidy
25269 <table>
25270 <tr>
25271 <td>foo|bar</td>
25272 </tr>
25273 <tr>
25274 <td>x
25275 <div>a|b</div>
25276 </td>
25277 </tr>
25278 </table>
25279 !! end
25280
25281 !! test
25282 Tables: 2b. Nested in td
25283 !! options
25284 parsoid=html2wt
25285 !! html/parsoid
25286 <table><tbody><tr>
25287 <td>foo||bar</td>
25288 <td>a<i>b||c</i></td>
25289 <td>a<i><div>b||c</div></i></td>
25290 </tr></tbody></table>
25291 !! wikitext
25292 {|
25293 |<nowiki>foo||bar</nowiki>
25294 |a''<nowiki>b||c</nowiki>''
25295 |a''<div><nowiki>b||c</nowiki></div>''
25296 |}
25297 !! html/php
25298 <table>
25299 <tr>
25300 <td>foo||bar
25301 </td>
25302 <td>a<i>b||c</i>
25303 </td>
25304 <td>a<i><div>b||c</div></i>
25305 </td></tr></table>
25306
25307 !! end
25308
25309 !! test
25310 Tables: 2c. Nested in td -- no escaping needed
25311 !! options
25312 parsoid=html2wt
25313 !! html/*
25314 <table>
25315 <tr>
25316 <td>foo!!bar
25317 </td></tr></table>
25318
25319 !! wikitext
25320 {|
25321 |foo!!bar
25322 |}
25323 !! end
25324
25325 !! test
25326 Tables: 3a. Nested in th
25327 !! options
25328 parsoid=html2wt
25329 !! html/*
25330 <table>
25331 <tr>
25332 <th>foo!bar
25333 </th></tr></table>
25334
25335 !! wikitext
25336 {|
25337 !foo!bar
25338 |}
25339 !! end
25340
25341 !! test
25342 Tables: 3b. Nested in th
25343 !! options
25344 parsoid=html2wt
25345 !! html/parsoid
25346 <table><tbody>
25347 <tr><th>foo!!bar</th>
25348 <th><i>foo|bar</i></th>
25349 <th><i>foo!!bar</i></th>
25350 <th><i><span>foo!!bar</span></i></th>
25351 </tr></tbody></table>
25352 !! wikitext
25353 {|
25354 !<nowiki>foo!!bar</nowiki>
25355 !''<nowiki>foo|bar</nowiki>''
25356 !''<nowiki>foo!!bar</nowiki>''
25357 !''<span><nowiki>foo!!bar</nowiki></span>''
25358 |}
25359 !! html/php
25360 <table>
25361 <tr>
25362 <th>foo!!bar
25363 </th>
25364 <th><i>foo|bar</i>
25365 </th>
25366 <th><i>foo!!bar</i>
25367 </th>
25368 <th><i><span>foo!!bar</span></i>
25369 </th></tr></table>
25370
25371 !! end
25372
25373 !! test
25374 Tables: 3c. Nested in th
25375 !! options
25376 parsoid=html2wt
25377 !! html/parsoid
25378 <table><tbody>
25379 <tr><th>foo||bar</th>
25380 <th><span typeof="mw:Nowiki">foo||bar</span></th>
25381 </tr></tbody></table>
25382 !! wikitext
25383 {|
25384 !<nowiki>foo||bar</nowiki>
25385 !<nowiki>foo||bar</nowiki>
25386 |}
25387 !! html/php
25388 <table>
25389 <tr>
25390 <th>foo||bar
25391 </th>
25392 <th>foo||bar
25393 </th></tr></table>
25394
25395 !! end
25396
25397 !! test
25398 Tables: 4a. Escape -
25399 !! options
25400 parsoid=html2wt
25401 !! html/*
25402 <table>
25403 <tr>
25404 <th>-bar
25405 </th></tr>
25406 <tr>
25407 <td>-bar
25408 </td></tr></table>
25409
25410 !! wikitext
25411 {|
25412 !-bar
25413 |-
25414 |<nowiki>-bar</nowiki>
25415 |}
25416 !! end
25417
25418 !! test
25419 Tables: 4b. Escape +
25420 !! options
25421 parsoid=html2wt
25422 !! html/*
25423 <table>
25424 <tr>
25425 <th>+bar
25426 </th></tr>
25427 <tr>
25428 <td>+bar
25429 </td></tr></table>
25430
25431 !! wikitext
25432 {|
25433 !+bar
25434 |-
25435 |<nowiki>+bar</nowiki>
25436 |}
25437 !! end
25438
25439 !! test
25440 Tables: 4c. No escaping needed
25441 !! options
25442 parsoid=html2wt
25443 !! html/parsoid
25444 <table><tbody>
25445 <tr><td>foo-bar</td><td>foo+bar</td></tr>
25446 <tr><td><i>foo</i>-bar</td><td><i>foo</i>+bar</td></tr>
25447 <tr><td>foo
25448 <p>bar|baz
25449 +bar
25450 -bar</p></td></tr>
25451 <tr><td>x
25452 <div>a|b</div></td>
25453 </tbody></table>
25454 !! wikitext
25455 {|
25456 |foo-bar
25457 |foo+bar
25458 |-
25459 |''foo''-bar
25460 |''foo''+bar
25461 |-
25462 |foo
25463 bar|baz
25464 +bar
25465 -bar
25466 |-
25467 |x
25468 <div>a|b</div>
25469 |}
25470 !! html/php
25471 <table>
25472 <tr>
25473 <td>foo-bar
25474 </td>
25475 <td>foo+bar
25476 </td></tr>
25477 <tr>
25478 <td><i>foo</i>-bar
25479 </td>
25480 <td><i>foo</i>+bar
25481 </td></tr>
25482 <tr>
25483 <td>foo
25484 <p>bar|baz
25485 +bar
25486 -bar
25487 </p>
25488 </td></tr>
25489 <tr>
25490 <td>x
25491 <div>a|b</div>
25492 </td></tr></table>
25493
25494 !! end
25495
25496 !! test
25497 Tables: 4d. No escaping needed
25498 !! options
25499 parsoid=html2wt
25500 !! html/parsoid
25501 <table>
25502 <tbody><tr><td><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>-bar</td>
25503 <td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>+1</td>
25504 <td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>-2</td></tr>
25505 </tbody></table>
25506 !! wikitext
25507 {|
25508 |[[Foo]]-bar
25509 ||+1
25510 ||-2
25511 |}
25512 !! html/php
25513 <table>
25514 <tr>
25515 <td><a href="/wiki/Foo" title="Foo">Foo</a>-bar
25516 </td>
25517 <td>+1
25518 </td>
25519 <td>-2
25520 </td></tr></table>
25521
25522 !! end
25523
25524 !! test
25525 T97430: Don't emit empty nowiki pairs around marker meta tags
25526 !! options
25527 parsoid=html2wt
25528 !! html/parsoid
25529 <p>*This is a long sentence here that will make the nowiki algo split up the nowikis into multiple pairs
25530 |** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.</p>
25531 !! wikitext
25532 <nowiki>*</nowiki>This is a long sentence here that will make the nowiki algo split up the nowikis into multiple pairs
25533 |** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.
25534 !! end
25535
25536 !! test
25537 Unclosed xmlish element in table line shouldn't eat end delimiters
25538 !! options
25539 parsoid=html2wt
25540 !! html/parsoid
25541 <table>
25542 <tbody><tr><td> &lt;foo</td>
25543 <td> bar></td></tr>
25544 </tbody></table>
25545 !! wikitext
25546 {|
25547 | <foo
25548 | bar>
25549 |}
25550 !! html/php
25551 <table>
25552 <tr>
25553 <td> &lt;foo
25554 </td>
25555 <td> bar&gt;
25556 </td></tr></table>
25557
25558 !! end
25559
25560 #### --------------- Links ----------------
25561 #### 1. Quote marks in link text
25562 #### 2. Wikilinks: Escapes needed
25563 #### 3. Wikilinks: No escapes needed
25564 #### 4. Extlinks: Escapes needed
25565 #### 5. Extlinks: No escapes needed
25566 #### --------------------------------------
25567 !! test
25568 Links 1. WikiLinks: No escapes needed
25569 !! options
25570 parsoid=html2wt
25571 !! html/parsoid
25572 <p><a rel="mw:WikiLink" href="Foo" title="Foo">Foo<i>boo</i></a>
25573 <a rel="mw:WikiLink" href="Foo" title="Foo">[Foobar]</a>
25574 <a rel="mw:WikiLink" href="Foo" title="Foo">x [Foobar] x</a></p>
25575 !! wikitext
25576 [[Foo|Foo''boo'']]
25577 [[Foo|[Foobar]]]
25578 [[Foo|x [Foobar] x]]
25579 !! html/php
25580 <p><a href="/wiki/Foo" title="Foo">Foo<i>boo</i></a>
25581 <a href="/wiki/Foo" title="Foo">[Foobar]</a>
25582 <a href="/wiki/Foo" title="Foo">x [Foobar] x</a>
25583 </p>
25584 !! end
25585
25586 !! test
25587 Links 2. WikiLinks: Escapes needed
25588 !! options
25589 parsoid=html2wt
25590 !! html/parsoid
25591 <a href="Foo" rel="mw:WikiLink">Foobar]</a>
25592 <a href="Foo" rel="mw:WikiLink">x [http://google.com g] x</a>
25593 <a href="Foo" rel="mw:WikiLink">[[Bar]]</a>
25594 <a href="Foo" rel="mw:WikiLink">x [[Bar]] x</a>
25595 <a href="Foo" rel="mw:WikiLink">|Bar</a>
25596 <a href="Foo" rel="mw:WikiLink">]]bar</a>
25597 <a href="Foo" rel="mw:WikiLink">[[bar</a>
25598 <a href="Foo" rel="mw:WikiLink">x [[ y</a>
25599 <a href="Foo" rel="mw:WikiLink">x ]] y</a>
25600 <a href="Foo" rel="mw:WikiLink">x ]] y [[ z</a>
25601 !! wikitext
25602 [[Foo|<nowiki>Foobar]</nowiki>]]
25603 [[Foo|x <nowiki>[http://google.com g]</nowiki> x]]
25604 [[Foo|<nowiki>[[Bar]]</nowiki>]]
25605 [[Foo|<nowiki>x [[Bar]] x</nowiki>]]
25606 [[Foo|<nowiki>|Bar</nowiki>]]
25607 [[Foo|<nowiki>]]bar</nowiki>]]
25608 [[Foo|<nowiki>[[bar</nowiki>]]
25609 [[Foo|<nowiki>x [[ y</nowiki>]]
25610 [[Foo|<nowiki>x ]] y</nowiki>]]
25611 [[Foo|<nowiki>x ]] y [[ z</nowiki>]]
25612 !! html/php
25613 <p><a href="/wiki/Foo" title="Foo">Foobar]</a>
25614 <a href="/wiki/Foo" title="Foo">x [http://google.com g] x</a>
25615 <a href="/wiki/Foo" title="Foo">[[Bar]]</a>
25616 <a href="/wiki/Foo" title="Foo">x [[Bar]] x</a>
25617 <a href="/wiki/Foo" title="Foo">|Bar</a>
25618 <a href="/wiki/Foo" title="Foo">]]bar</a>
25619 <a href="/wiki/Foo" title="Foo">[[bar</a>
25620 <a href="/wiki/Foo" title="Foo">x [[ y</a>
25621 <a href="/wiki/Foo" title="Foo">x ]] y</a>
25622 <a href="/wiki/Foo" title="Foo">x ]] y [[ z</a>
25623 </p>
25624 !! end
25625
25626 !! test
25627 Links 3. WikiLinks: No escapes needed
25628 !! options
25629 parsoid=html2wt
25630 !! html/parsoid
25631 <p><a rel="mw:WikiLink" href="Foo">[Foobar</a>
25632 <a rel="mw:WikiLink" href="Foo" title="Foo">foo|bar</a></p>
25633 !! wikitext
25634 [[Foo|[Foobar]]
25635 [[Foo|foo|bar]]
25636 !! html/php
25637 <p><a href="/wiki/Foo" title="Foo">[Foobar</a>
25638 <a href="/wiki/Foo" title="Foo">foo|bar</a>
25639 </p>
25640 !! end
25641
25642 !! test
25643 Links 4. ExtLinks: Escapes needed
25644 !! options
25645 parsoid=html2wt
25646 !! html/parsoid
25647 <p><a rel="mw:ExtLink" href="http://google.com">[google]</a>
25648 <a rel="mw:ExtLink" href="http://google.com">google]</a>
25649 <a rel="mw:ExtLink" href="http://google.com">goog] le</a></p>
25650 <p>[http://google.com]</p>
25651 <p>[http://google.com google]</p>
25652 <p>[<a rel="mw:ExtLink" href="http://google.com">http://google.com</a>]</p>
25653 <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>
25654 !! wikitext
25655 [http://google.com <nowiki>[google]</nowiki>]
25656 [http://google.com <nowiki>google]</nowiki>]
25657 [http://google.com <nowiki>goog] le</nowiki>]
25658
25659 <nowiki>[http://google.com]</nowiki>
25660
25661 <nowiki>[http://google.com google]</nowiki>
25662
25663 [http://google.com<nowiki>]</nowiki>
25664
25665 [{{echo|http://google.com}}<nowiki>]</nowiki>
25666 !! html/php
25667 <p><a rel="nofollow" class="external text" href="http://google.com">[google]</a>
25668 <a rel="nofollow" class="external text" href="http://google.com">google]</a>
25669 <a rel="nofollow" class="external text" href="http://google.com">goog] le</a>
25670 </p><p>[http://google.com]
25671 </p><p>[http://google.com google]
25672 </p><p>[<a rel="nofollow" class="external free" href="http://google.com">http://google.com</a>]
25673 </p><p>[<a rel="nofollow" class="external free" href="http://google.com">http://google.com</a>]
25674 </p>
25675 !! end
25676
25677 !! test
25678 Links 5. ExtLinks: No escapes needed
25679 !! options
25680 parsoid=html2wt
25681 !! html/parsoid
25682 <p><a rel="mw:ExtLink" href="http://google.com">[google</a></p>
25683 <p>[<a ref="mw:ExtLink" href="http://google.com"></a>]</p>
25684 !! wikitext
25685 [http://google.com [google]
25686
25687 [[http://google.com]]
25688 !! html/php
25689 <p><a rel="nofollow" class="external text" href="http://google.com">[google</a>
25690 </p><p>[<a rel="nofollow" class="external autonumber" href="http://google.com">[1]</a>]
25691 </p>
25692 !! end
25693
25694 !! test
25695 Links 6. Add <nowiki/>s between text-nodes and url-links when required (T66300)
25696 !! options
25697 parsoid=html2wt
25698 !! html/parsoid
25699 <p>x<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>y
25700 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>?x
25701 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>&amp;x
25702 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>'x
25703 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>,x
25704 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>.x
25705 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>;x
25706 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>:x
25707 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>;x
25708 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>!x
25709 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>=x
25710 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>(x)
25711 <a rel="mw:ExtLink" href="http://example.com(x" data-parsoid='{"stx":"url"}'>http://example.com(x</a>)
25712 </p>
25713 !! wikitext
25714 x<nowiki/>http://example.com<nowiki/>y
25715 http://example.com<nowiki/>?x
25716 http://example.com<nowiki/>&x
25717 http://example.com<nowiki/>'x
25718 http://example.com<nowiki/>,x
25719 http://example.com<nowiki/>.x
25720 http://example.com<nowiki/>;x
25721 http://example.com<nowiki/>:x
25722 http://example.com<nowiki/>;x
25723 http://example.com<nowiki/>!x
25724 http://example.com<nowiki/>=x
25725 http://example.com<nowiki/>(x)
25726 http://example.com(x<nowiki/>)
25727 !! end
25728
25729 !! test
25730 Links 7a. Don't add spurious <nowiki/>s between text-nodes and url-links (T66300)
25731 !! options
25732 parsoid=html2wt
25733 !! html/parsoid
25734 <p>x
25735 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>
25736 y
25737 "<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>"
25738 (<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>)
25739 (<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>) foo
25740 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>,
25741 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>, foo
25742 </p>
25743 !! wikitext
25744 x
25745 http://example.com
25746 y
25747 "http://example.com"
25748 (http://example.com)
25749 (http://example.com) foo
25750 http://example.com,
25751 http://example.com, foo
25752 !! html/php
25753 <p>x
25754 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
25755 y
25756 "<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>"
25757 (<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
25758 (<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>) foo
25759 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>,
25760 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>, foo
25761 </p>
25762 !! end
25763
25764 !! test
25765 Links 7b. Don't add spurious <nowiki/>s between text-nodes and url-links (T66300)
25766 !! options
25767 parsoid=html2wt
25768 !! html/parsoid
25769 <p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>.,;:!?\
25770 -<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>:</p>
25771 !! wikitext
25772 http://example.com.,;:!?\
25773 -http://example.com:
25774 !! html/php
25775 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>.,;:!?\
25776 -<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>:
25777 </p>
25778 !! end
25779
25780 !! test
25781 Links 8. Add <nowiki/>s between text-nodes and RFC-links when required (T66300)
25782 !! options
25783 parsoid=html2wt
25784 !! html/parsoid
25785 <p><a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>4
25786 <a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y
25787 X<a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y</p>
25788 !! wikitext
25789 RFC 123<nowiki/>4
25790 RFC 123<nowiki/>y
25791 X<nowiki/>RFC 123<nowiki/>y
25792 !! end
25793
25794 !! test
25795 Links 9. Don't add spurious <nowiki/>s between text-nodes and RFC-links (T66300)
25796 !! options
25797 parsoid=html2wt
25798 !! html/parsoid
25799 <p><a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>?foo
25800 <a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>&amp;foo
25801 -<a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>-
25802 </p>
25803 !! wikitext
25804 RFC 123?foo
25805 RFC 123&foo
25806 -RFC 123-
25807 !! html/php
25808 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc123">RFC 123</a>?foo
25809 <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc123">RFC 123</a>&amp;foo
25810 -<a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc123">RFC 123</a>-
25811 </p>
25812 !! end
25813
25814 !! test
25815 Links 10. Add <nowiki/>s between text-nodes and PMID-links when required (T66300)
25816 !! options
25817 parsoid=html2wt
25818 !! html/parsoid
25819 <p><a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>4
25820 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
25821 X<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
25822 !! wikitext
25823 PMID 123<nowiki/>4
25824 PMID 123<nowiki/>y
25825 X<nowiki/>PMID 123<nowiki/>y
25826 !! end
25827
25828 !! test
25829 Links 11. Don't add spurious <nowiki/>s between text-nodes and PMID-links (T66300)
25830 !! options
25831 parsoid=html2wt
25832 !! html/parsoid
25833 <p><a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>?foo
25834 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>&foo
25835 -<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>-
25836 </p>
25837 !! wikitext
25838 PMID 123?foo
25839 PMID 123&foo
25840 -PMID 123-
25841 !! html/php
25842 <p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract">PMID 123</a>?foo
25843 <a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract">PMID 123</a>&amp;foo
25844 -<a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract">PMID 123</a>-
25845 </p>
25846 !! end
25847
25848 !! test
25849 Links 12. Add <nowiki/>s between text-nodes and ISBN-links when required (T66300)
25850 !! options
25851 parsoid=html2wt
25852 !! html/parsoid
25853 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>1
25854 <a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>x
25855 a<a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>b
25856 </p>
25857 !! wikitext
25858 ISBN 1234567890<nowiki/>1
25859 ISBN 1234567890<nowiki/>x
25860 a<nowiki/>ISBN 1234567890<nowiki/>b
25861 !! end
25862
25863 !! test
25864 Links 13. Don't add spurious <nowiki/>s between text-nodes and ISBN-links (T66300)
25865 !! options
25866 parsoid=html2wt
25867 !! html/parsoid
25868 <p>-<a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>'s
25869 !! wikitext
25870 -ISBN 1234567890's
25871 !! html/php
25872 <p>-<a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>'s
25873 </p>
25874 !! end
25875
25876 !! test
25877 Links 14. Protect link-like plain text. (Parsoid bug T78425)
25878 !! options
25879 parsoid=html2wt
25880 !! html/*
25881 <p>this is not a link: http://example.com
25882 </p>
25883 !! wikitext
25884 this is not a link: <nowiki>http://example.com</nowiki>
25885 !! end
25886
25887 !! test
25888 Links 15. Link trails can't become link prefixes.
25889 !! options
25890 language=is
25891 parsoid=html2wt
25892 !! html/parsoid
25893 <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>
25894 !! wikitext
25895 [[Söfnuður]]-[[00]]
25896 !! html/php
25897 <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>
25898 </p>
25899 !! end
25900
25901 #### --------------- Quotes ---------------
25902 #### 1. Quotes inside <b> and <i>
25903 #### 2. Link fragments separated by <i> and <b> tags
25904 #### 3. Link fragments inside <i> and <b>
25905 #### 4. No escaping needed
25906 #### --------------------------------------
25907 !! test
25908 1a. Quotes inside <b> and <i>
25909 !! options
25910 parsoid=html2wt
25911 !! html/*
25912 <p><i>'foo'</i>
25913 <i>''foo''</i>
25914 <i>'''foo'''</i>
25915 <i>foo</i>'s
25916 <b>'foo'</b>
25917 <b>''foo''</b>
25918 <b>'''foo'''</b>
25919 <b>foo'<i>bar'</i>baz</b>
25920 <b>foo</b>'s
25921 '<i>foo</i>
25922 <i>foo</i>'
25923 <i>foo'</i>'
25924 '<i>foo</i>'
25925 '<b>foo</b>
25926 <b>foo</b>'
25927 '<b>foo</b>'
25928 <i>fools'<span> errand</span></i>
25929 <i><span>fool</span>'s errand</i>
25930 '<i>foo</i> bar '<i>baz</i>
25931 a|!*#-:;+-~[]{}b'<i>x</i>
25932 </p>
25933 !! wikitext
25934 ''<nowiki/>'foo'''
25935 ''<nowiki>''foo''</nowiki>''
25936 ''<nowiki>'''foo'''</nowiki>''
25937 ''foo''<nowiki/>'s
25938 '''<nowiki/>'foo''''
25939 '''<nowiki>''foo''</nowiki>'''
25940 '''<nowiki>'''foo'''</nowiki>'''
25941 '''foo'<nowiki/>''bar'<nowiki/>''baz'''
25942 '''foo'''<nowiki/>'s
25943 '''foo''
25944 ''foo''<nowiki/>'
25945 ''foo'''<nowiki/>'
25946 '''foo''<nowiki/>'
25947 ''''foo'''
25948 '''foo'''<nowiki/>'
25949 ''''foo'''<nowiki/>'
25950 ''fools'<span> errand</span>''
25951 ''<span>fool</span>'s errand''
25952 '<nowiki/>''foo'' bar '''baz''
25953 a|!*#-:;+-~[]{}b'''x''
25954 !! end
25955
25956 !! test
25957 1b. Quotes inside <b> and <i> with other tags on same line
25958 !! options
25959 parsoid=html2wt
25960 !! html/parsoid
25961 '<i>a</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
25962 <i>a'</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
25963 <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>
25964 <a rel="mw:WikiLink" href="Foo" title="Foo">foo</a> x'<i><a href="Bar" rel="mw:WikiLink" title="Bar">bar</a></i>
25965 '<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>
25966 '<i>foo</i> <div title="name">test</div>
25967 '<i>foo</i> and <br data-parsoid='{"stx":"html","noClose":true}'/> bar
25968 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
25969 <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>
25970 </ol>
25971 !! wikitext
25972 '''a'' foo ''[[bar]]''
25973 ''a''' foo ''[[bar]]''
25974 ''a''' foo '''{{echo|[[bar]]}}'''
25975 [[foo]] x'''[[bar]]''
25976 '''foo'' <ref>test</ref>
25977 '''foo'' <div title="name">test</div>
25978 '''foo'' and <br> bar
25979 <references />
25980 !! end
25981
25982 !! test
25983 2. Link fragments separated by <i> and <b> tags
25984 !! options
25985 parsoid=html2wt
25986 !! html/parsoid
25987 <p>[[<i>foo</i>hello]]</p>
25988 <p>[[<b>foo</b>hello]]</p>
25989 !! wikitext
25990 [[''foo''<nowiki>hello]]</nowiki>
25991
25992 [['''foo'''<nowiki>hello]]</nowiki>
25993 !! end
25994
25995 # FIXME: Escaping one or both of [[ and ]] is also acceptable --
25996 # this is one of the shortcomings of this format
25997 !! test
25998 3. Link fragments inside <i> and <b>
25999 !! options
26000 parsoid=html2wt
26001 !! html/parsoid
26002 <p><i>[[foo</i>]]</p>
26003 <p><b>[[foo</b>]]</p>
26004 !! wikitext
26005 ''[[foo''<nowiki>]]</nowiki>
26006
26007 '''[[foo'''<nowiki>]]</nowiki>
26008 !! end
26009
26010 !! test
26011 4. No escaping needed
26012 !! options
26013 parsoid=html2wt
26014 !! html/parsoid
26015 <p>'<span><i>bar</i></span>'
26016 '<span><b>bar</b></span>'
26017 'a:b'foo
26018 </p>
26019 !! wikitext
26020 '<span>''bar''</span>'
26021 '<span>'''bar'''</span>'
26022 'a:b'foo
26023 !! end
26024
26025 #### ----------- Paragraphs ---------------
26026 #### 1. No unnecessary escapes
26027 #### --------------------------------------
26028
26029 !! test
26030 1. No unnecessary escapes
26031 !! options
26032 parsoid=html2wt
26033 !! html/parsoid
26034 <p>bar <span>[[foo]]</span>
26035 </p><p>=bar <span>[[foo]]</span>
26036 </p><p>[[bar <span>[[foo]]</span>
26037 </p><p>]]bar <span>[[foo]]</span>
26038 </p><p>=bar <span>foo]]</span>=
26039 </p>
26040 !! wikitext
26041 bar <span><nowiki>[[foo]]</nowiki></span>
26042
26043 =bar <span><nowiki>[[foo]]</nowiki></span>
26044
26045 [[bar <span><nowiki>[[foo]]</nowiki></span>
26046
26047 ]]bar <span><nowiki>[[foo]]</nowiki></span>
26048
26049 =bar <span>foo]]</span><nowiki>=</nowiki>
26050 !!end
26051
26052 #### ----------------------- PRE --------------------------
26053 #### 1. Leading whitespace in SOL context should be escaped
26054 #### ------------------------------------------------------
26055 !! test
26056 1. Leading whitespace in SOL context should be escaped
26057 !! options
26058 parsoid=html2wt
26059 !! html/parsoid
26060 <p> a</p>
26061
26062 <p> a</p>
26063
26064 <p> a(tab)</p>
26065
26066 <p> a
26067 <!--cmt-->
26068 a</p>
26069
26070 <p>a
26071 b</p>
26072
26073 <p>a
26074 b</p>
26075
26076 <p>a
26077 b</p>
26078 !! wikitext
26079 <nowiki> </nowiki>a
26080
26081 <nowiki> </nowiki> a
26082
26083 a(tab)
26084
26085 <nowiki> </nowiki> a
26086 <!--cmt-->
26087 <nowiki> </nowiki>a
26088
26089 a
26090 <nowiki> </nowiki>b
26091
26092 a
26093 b
26094
26095 a
26096 b
26097 !! html/php
26098 <p> a
26099 </p><p> a
26100 </p><p> a(tab)
26101 </p><p> a
26102 a
26103 </p><p>a
26104 b
26105 </p><p>a
26106 b
26107 </p><p>a
26108 b
26109 </p>
26110 !! end
26111
26112 !! test
26113 2. Leading whitespace in non-indent-pre contexts should not be escaped
26114 !! options
26115 parsoid=html2wt
26116 !! html/parsoid
26117 <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>
26118 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
26119 <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>
26120 b</span></li>
26121 </ol>
26122 !! wikitext
26123 foo <ref>''a''
26124 b</ref>
26125 <references />
26126 !! end
26127
26128 !! test
26129 3. Leading whitespace in indent-pre suppressing contexts should not be escaped
26130 !! options
26131 parsoid=html2wt
26132 !! html/parsoid
26133 <blockquote>
26134 <p>
26135 a
26136 <span>b</span>
26137 c</p>
26138 </blockquote>
26139 !! wikitext
26140 <blockquote>
26141 a
26142 <span>b</span>
26143 c
26144 </blockquote>
26145 !! end
26146
26147 !! test
26148 4. Leading whitespace in indent-pre suppressing contexts should not be escaped
26149 !! options
26150 parsoid=html2wt
26151 !! html/parsoid
26152 <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>
26153 !! wikitext
26154 [[File:Foobar.jpg|thumb|caption]]
26155 !! end
26156
26157 !! test
26158 5. Nowiki escaping should account for indent-pres
26159 !! options
26160 parsoid=html2wt
26161 !! html/parsoid
26162 <pre>==foo==</pre>
26163 !! wikitext
26164 ==foo==
26165 !! end
26166
26167 !!test
26168 T95794: nowiki escaping should account for leading space at start-of-line in an indent-pre block
26169 !! options
26170 parsoid=html2wt
26171 !! html/parsoid
26172 <pre>
26173 * foo
26174 * bar
26175 </pre>
26176 !! wikitext
26177 * foo
26178 * bar
26179 !! end
26180
26181 #### --------------- Behavior Switches --------------------
26182
26183 !! test
26184 1. Valid behavior switches should be escaped
26185 !! options
26186 parsoid=html2wt
26187 !! html/parsoid
26188 __TOC__
26189 <i>__TOC__</i>
26190 !! wikitext
26191 <nowiki>__TOC__</nowiki>
26192 ''<nowiki>__TOC__</nowiki>''
26193 !! end
26194
26195 !! test
26196 2. Invalid behavior switches should not be escaped
26197 !! options
26198 parsoid=html2wt
26199 !! html/parsoid
26200 __TOO__
26201 __|__
26202 !! wikitext
26203 __TOO__
26204 __|__
26205 !! end
26206
26207 # We use indent-pre as an indirect way to test for sol-transparent behavior.
26208 !! test
26209 Behavior switches should be SOL-transparent
26210 !! options
26211 parsoid=html2wt
26212 !! html/parsoid
26213 <meta property="mw:PageProp/toc" />
26214
26215 <!-- this one's bogus -->
26216 <pre>__TOO__</pre>
26217
26218 <pre data-parsoid='{}'><meta property="mw:PageProp/toc" data-parsoid='{"src":"__TOC__","magicSrc":"__TOC__"}'/> foo</pre>
26219
26220 <meta property="mw:PageProp/toc" data-parsoid='{"src":"__TOC__","magicSrc":"__TOC__"}'/><pre data-parsoid='{}'>bar</pre>
26221 !! wikitext
26222 __TOC__
26223
26224 <!-- this one's bogus -->
26225 __TOO__
26226
26227 __TOC__ foo
26228
26229 __TOC__
26230 bar
26231 !! end
26232
26233 #### --------------- HTML tags ---------------
26234 #### 1. a tags
26235 #### 2. other tags
26236 #### 3. multi-line html tag
26237 #### 4. extension tags
26238 #### -----------------------------------------
26239 !! test
26240 1. a tags
26241 !! options
26242 parsoid=html2wt
26243 !! html/parsoid
26244 &lt;a href=&quot;http://google.com&quot;&gt;google&lt;/a&gt;
26245 !! wikitext
26246 <a href="http://google.com">google</a>
26247 !! end
26248
26249 !! test
26250 2. other tags
26251 !! options
26252 parsoid=html2wt
26253 !! html/parsoid
26254 <ul><li> &lt;div&gt;foo&lt;/div&gt;</li>
26255 <li> &lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;</li>
26256 <li> &lt;td&gt;</li></ul>
26257
26258 !! wikitext
26259 * <nowiki><div>foo</div></nowiki>
26260 * <nowiki><div style="color:red">foo</div></nowiki>
26261 * <nowiki><td></nowiki>
26262 !! end
26263
26264 !! test
26265 3. multi-line html tag
26266 !! options
26267 parsoid=html2wt
26268 !! html/parsoid
26269 <p>&lt;div
26270 &gt;foo&lt;/div
26271 &gt;
26272 </p>
26273 !! wikitext
26274 <nowiki><div
26275 >foo</div
26276 ></nowiki>
26277 !! end
26278
26279 !! test
26280 4. extension tags
26281 !! options
26282 parsoid=html2wt
26283 !! html/parsoid
26284 <p>&lt;ref&gt;foo&lt;/ref&gt;
26285 </p><p>&lt;ref&gt;bar
26286 </p><p>baz&lt;/ref&gt;
26287 </p>
26288 !! wikitext
26289 <nowiki><ref>foo</ref></nowiki>
26290
26291 <nowiki><ref>bar</nowiki>
26292
26293 baz<nowiki></ref></nowiki>
26294 !! end
26295
26296 #### --------------- Others ---------------
26297 !! test
26298 Escaping nowikis
26299 !! options
26300 parsoid=html2wt
26301 !! html/parsoid
26302 <p>&lt;nowiki&gt;foo&lt;/nowiki&gt;
26303 </p>
26304 !! wikitext
26305 &lt;nowiki&gt;foo&lt;/nowiki&gt;
26306 !! end
26307
26308 ## The quote-char in the input is necessary for triggering the bug
26309 !! test
26310 (T54035) Nowiki-escaping should not get tripped by " :" in text
26311 !! options
26312 parsoid=html2wt
26313 !! html/parsoid
26314 <p>foo's bar :</p>
26315 !! wikitext
26316 foo's bar :
26317 !! end
26318
26319 #----------- End of wikitext escaping tests --------------
26320
26321 !! test
26322
26323 Tag-like HTML structures are passed through as text
26324 !! wikitext
26325 <x y>
26326
26327 <x.y>
26328
26329 <x-y>
26330
26331 1>2
26332
26333 x<y
26334
26335 a>b
26336
26337 1<d e>f
26338 !! html
26339 <p>&lt;x y&gt;
26340 </p><p>&lt;x.y&gt;
26341 </p><p>&lt;x-y&gt;
26342 </p><p>1&gt;2
26343 </p><p>x&lt;y
26344 </p><p>a&gt;b
26345 </p><p>1&lt;d e&gt;f
26346 </p>
26347 !! end
26348
26349 !! test
26350 HTML tag with necessary entities in attributes
26351 !! wikitext
26352 <span title="&amp;amp;">foo</span>
26353 !! html
26354 <p><span title="&amp;amp;">foo</span>
26355 </p>
26356 !! end
26357
26358 !! test
26359 HTML tag with 'unnecessary' entity encoding in attributes
26360 !! wikitext
26361 <span title="&amp;">foo</span>
26362 !! html
26363 <p><span title="&amp;">foo</span>
26364 </p>
26365 !! end
26366
26367 !! test
26368 HTML tag with broken attribute value quoting
26369 !! options
26370 parsoid=wt2html,html2html
26371 !! wikitext
26372 <span title="Hello world>Foo</span>
26373 !! html/php
26374 <p><span title="Hello world">Foo</span>
26375 </p>
26376 !! html/parsoid
26377 <p><span title="Hello world">Foo</span></p>
26378 !! end
26379
26380 !! test
26381 Self-closed tag with broken attribute value quoting
26382 !! options
26383 parsoid=wt2html,html2html
26384 !! wikitext
26385 <div title="Hello world />Foo
26386 !! html/php+tidy
26387 <div title="Hello world"></div>
26388 <p>Foo</p>
26389 !! html/parsoid
26390 <div title="Hello world " data-parsoid='{"stx":"html","selfClose":true}'></div><p>Foo</p>
26391 !! end
26392
26393 !! test
26394 Table with broken attribute value quoting
26395 !! options
26396 parsoid=wt2html,html2html
26397 !! wikitext
26398 {|
26399 | title="Hello world|Foo
26400 |}
26401 !! html/php
26402 <table>
26403 <tr>
26404 <td title="Hello world">Foo
26405 </td></tr></table>
26406
26407 !! html/parsoid
26408 <table>
26409 <tr>
26410 <td title="Hello world">Foo
26411 </td></tr></table>
26412
26413 !! end
26414
26415 !! test
26416 Table with broken attribute value quoting on consecutive lines
26417 !! options
26418 parsoid=wt2html,html2html
26419 !! wikitext
26420 {|
26421 | title="Hello world|Foo
26422 | style="color:red|Bar
26423 |}
26424 !! html/php
26425 <table>
26426 <tr>
26427 <td title="Hello world">Foo
26428 </td>
26429 <td style="color:red">Bar
26430 </td></tr></table>
26431
26432 !! html/parsoid
26433 <table><tbody>
26434 <tr>
26435 <td title="Hello world">Foo
26436 </td><td style="color: red">Bar
26437 </td></tr></tbody></table>
26438
26439 !! end
26440
26441 !!test
26442 Accept empty td cell attribute
26443 !! wikitext
26444 {|
26445 | align="center" | foo || |
26446 |}
26447 !! html
26448 <table>
26449 <tr>
26450 <td align="center"> foo </td>
26451 <td>
26452 </td></tr></table>
26453
26454 !!end
26455
26456 !!test
26457 Non-empty attributes in th-cells
26458 !! wikitext
26459 {|
26460 ! Foo !! style="color: red" | Bar
26461 |}
26462 !! html
26463 <table>
26464 <tr>
26465 <th> Foo </th>
26466 <th style="color: red"> Bar
26467 </th></tr></table>
26468
26469 !!end
26470
26471 !!test
26472 Accept empty attributes in th-cells
26473 !! wikitext
26474 {|
26475 !| foo !!| bar
26476 |}
26477 !! html
26478 <table>
26479 <tr>
26480 <th> foo </th>
26481 <th> bar
26482 </th></tr></table>
26483
26484 !!end
26485
26486 !!test
26487 Empty table rows go away
26488 !! wikitext
26489 {|
26490 | Hello
26491 | there
26492 |- class="foo"
26493 |-
26494 |}
26495 !! html
26496 <table>
26497 <tr>
26498 <td> Hello
26499 </td>
26500 <td> there
26501 </td></tr>
26502
26503 </table>
26504
26505 !! end
26506
26507 ###
26508 ### Parsoid-centric tests for testing RTing of inter-element separators
26509 ### Edge cases not tested by existing parser tests and specific to
26510 ### Parsoid-specific serialization strategies.
26511 ###
26512
26513 !!test
26514 RT-ed inter-element separators should be valid separators
26515 !! wikitext
26516 {|
26517 |- [[foo]]
26518 |}
26519 !! html/php
26520 <table>
26521
26522 </table>
26523
26524 !! html/parsoid
26525 <table>
26526 <tbody><tr class='mw-empty-elt' data-parsoid='{"startTagSrc":"|-","a":{"[[foo]]":null},"sa":{"[[foo]]":""},"autoInsertedEnd":true}'></tr>
26527 </tbody></table>
26528 !!end
26529
26530 # Parsoid-only since PHP parser relies on Tidy for correct output
26531 !!test
26532 Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out
26533 !!options
26534 parsoid
26535 !! wikitext
26536 {|
26537 |<small>foo
26538 bar
26539 |}
26540
26541 {|
26542 |<small>foo<small>
26543 |}
26544 !! html
26545 <table>
26546 <tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo
26547 <p>bar</p></small></td></tr>
26548 </tbody></table>
26549
26550 <table>
26551 <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>
26552 </tbody></table>
26553 !!end
26554
26555 # Note that the "style" attribute is really a template parameter here.
26556 # The = would have to be {{=}} if you wanted the literal.
26557 !!test
26558 Empty TD followed by TD with tpl-generated attribute
26559 !! wikitext
26560 {|
26561 |-
26562 |
26563 |{{echo|style='color:red'}}|foo
26564 |}
26565 !! html
26566 <table>
26567
26568 <tr>
26569 <td>
26570 </td>
26571 <td>foo
26572 </td></tr></table>
26573
26574 !!end
26575
26576 !!test
26577 Indented table with an empty td
26578 !! wikitext
26579 {|
26580 |-
26581 |
26582 |foo
26583 |}
26584 !! html
26585 <table>
26586
26587 <tr>
26588 <td>
26589 </td>
26590 <td>foo
26591 </td></tr></table>
26592
26593 !!end
26594
26595 ## We have some newline diffs RT-ing this edge case
26596 ## and it is not important enough -- we seem to be emitting
26597 ## at most 2 newlines after a </tr> and this is unrelated to
26598 ## the issue from T85627 that this is testing.
26599 !!test
26600 Indented table with blank lines in between (T85627)
26601 !! options
26602 parsoid=wt2html
26603 !! wikitext
26604 {|
26605 |foo
26606
26607
26608 |}
26609 !! html
26610 <table>
26611
26612 <tr>
26613 <td>foo
26614 </td></tr></table>
26615
26616 !!end
26617
26618 !!test
26619 Indented block & table
26620 !! wikitext
26621 <div>foo</div>
26622 {|
26623 |foo
26624 |}
26625 !! html/php
26626 <div>foo</div>
26627 <table>
26628 <tr>
26629 <td>foo
26630 </td></tr></table>
26631
26632 !! html/parsoid
26633 <div data-parsoid='{"stx":"html"}'>foo</div>
26634 <table><tbody>
26635 <tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'>foo</td></tr>
26636 </tbody></table>
26637 !!end
26638
26639 !! test
26640 Indent and comment before table row
26641 !! wikitext
26642 {|
26643 <!--hi-->|-
26644 | there
26645 |}
26646 !! html/php
26647 <table>
26648
26649 <tr>
26650 <td> there
26651 </td></tr></table>
26652
26653 !! html/parsoid
26654 <table>
26655 <!--hi--><tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
26656 <td data-parsoid='{"autoInsertedEnd":true}'> there</td></tr>
26657 </tbody></table>
26658 !! end
26659
26660 # Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext
26661 !!test
26662 Empty TR followed by a template-generated TR
26663 !!options
26664 parsoid
26665 !! wikitext
26666 {|
26667 |-
26668 {{echo|<tr><td>foo</td></tr>}}
26669 |}
26670 !! html
26671 <table>
26672 <tbody>
26673 <tr class='mw-empty-elt'></tr>
26674 <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}}]}'>
26675 <td>foo</td></tr>
26676 </tbody></table>
26677 !!end
26678
26679 ## PHP and parsoid output differ for this, and since this is primarily
26680 ## for testing Parsoid's serializer, marking this Parsoid only
26681 !!test
26682 Empty TR followed by mixed-ws-comment line should RT correctly
26683 !!options
26684 parsoid
26685 !! wikitext
26686 {|
26687 |-
26688 <!--c-->
26689 |-
26690 <!--c--> <!--d-->
26691 |}
26692 !! html
26693 <table>
26694 <tbody>
26695 <tr class='mw-empty-elt'></tr>
26696 <!--c-->
26697 <tr>
26698 <!--c--> </tr><!--d-->
26699 </tbody></table>
26700
26701 !!end
26702
26703 !!test
26704 Multi-line image caption generated by templates with/without trailing newlines
26705 !! wikitext
26706 [[File:Foobar.jpg|thumb|300x300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}]]
26707 [[File:Foobar.jpg|thumb|300x300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}\n\n]]
26708 !! html/parsoid
26709 <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>
26710 <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>
26711 !!end
26712
26713 !! test
26714 New element inserted (without intervening newlines) after an old sol-transparent node should serialize correctly
26715 !! options
26716 parsoid=html2wt
26717 !! html/parsoid
26718 <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>
26719
26720 <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{}'/><h1>new heading</h1>
26721 !! wikitext
26722 <includeonly>foo</includeonly>
26723 new para
26724
26725 [[Category:Foo]]
26726
26727 = new heading =
26728 !! end
26729
26730 ## PHP emits broken html for this, and since this is primarily
26731 ## a Parsoid serializer test, marking this Parsoid only
26732 !!test
26733 Improperly nested inline or quotes tags with whitespace in between
26734 !! wikitext
26735 <span> <s>x</span> </s>
26736 ''' ''x''' ''
26737 !! html/parsoid
26738 <p><span> <s>x</s></span><s> </s>
26739 <b> <i>x</i></b><i> </i>
26740 </p>
26741 !!end
26742
26743 !!test
26744 Encapsulate protected attributes from wt
26745 !! wikitext
26746 <div typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true">foo</div>
26747
26748 {| typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true"
26749 | ok
26750 |}
26751 !! html/parsoid
26752 <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>
26753
26754 <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">
26755 <tbody><tr><td data-parsoid='{"autoInsertedEnd":true}'> ok</td></tr>
26756 </tbody></table>
26757 !!end
26758
26759 ## Currently the p-wrapper is fragile in how it adds / removes transformations.
26760 ## Having nested or stray pre tags results in the attempt to add duplicates,
26761 ## causing an assertion fail. This test tries to prevent that situation.
26762 !!test
26763 Ensure ParagraphWrapper can deal with stray closing pre tags
26764 !!options
26765 parsoid=wt2html
26766 !! wikitext
26767 plain text</pre>
26768 !! html/parsoid
26769 plain text
26770 !!end
26771
26772 !!test
26773 1. Ensure fostered text content is wrapped in element nodes
26774 !!options
26775 parsoid=wt2html
26776 !! wikitext
26777 <table>hi</table><table>ho</table>
26778 !! html/parsoid
26779 <p>hi</p>
26780 <table></table>
26781 <p>ho</p>
26782 <table></table>
26783 !!end
26784
26785 !!test
26786 2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost)
26787 !!options
26788 parsoid=wt2html,wt2wt
26789 !! wikitext
26790 <table>
26791 <tr> || ||
26792 <td> a
26793 </table>
26794 !! html/parsoid
26795 <p> || ||
26796 </p><table>
26797 <tbody><tr><td> a</td></tr>
26798 </tbody></table>
26799 !!end
26800
26801 !!test
26802 Encapsulation properly handles null DSR information from foster box
26803 !!options
26804 parsoid=wt2html,wt2wt
26805 !! wikitext
26806 {{echo|<table>foo<tr><td>bar</td></tr></table>}}
26807 !! html/parsoid
26808 <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>
26809 !!end
26810
26811 !!test
26812 1. Encapsulate foster-parented transclusion content
26813 !!options
26814 parsoid=wt2wt,wt2html
26815 !! wikitext
26816 <table>{{echo|foo<tr><td>bar</td></tr>}}</table>
26817 !! html/parsoid
26818 <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>
26819 <tbody>
26820 <tr>
26821 <td>bar</td>
26822 </tr>
26823 </tbody>
26824 </table>
26825 !!end
26826
26827 !!test
26828 2. Encapsulate foster-parented transclusion content
26829 !!options
26830 parsoid=wt2wt,wt2html
26831 !! wikitext
26832 <table><div>{{echo|foo}}</div><tr><td>bar</td></tr></table>
26833 !! html/parsoid
26834 <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>
26835 <table>
26836 <tbody>
26837 <tr>
26838 <td>bar</td>
26839 </tr>
26840 </tbody>
26841 </table>
26842 !!end
26843
26844 !!test
26845 3. Encapsulate foster-parented transclusion content
26846 !!options
26847 parsoid=wt2wt,wt2html
26848 !! wikitext
26849 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
26850 !! html/parsoid
26851 <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;]}">
26852 <p>foo</p>
26853 </div>
26854 <table>
26855 <tbody>
26856 <tr>
26857 <td>bar</td>
26858 </tr>
26859 </tbody>
26860 </table>
26861 !!end
26862
26863 !!test
26864 4. Encapsulate foster-parented transclusion content
26865 !!options
26866 parsoid=wt2wt,wt2html
26867 !! wikitext
26868 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
26869 !! html/parsoid
26870 <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;]}">
26871 <p>foo</p>
26872 </div>
26873 <table>
26874 <tbody>
26875 <tr>
26876 <td>bar</td>
26877 </tr>
26878 </tbody>
26879 </table>
26880 !!end
26881
26882 !!test
26883 5. Encapsulate foster-parented transclusion content
26884 !!options
26885 parsoid=wt2wt,wt2html
26886 !! wikitext
26887 <table><tr><td><div><p>{{echo|foo</p></div></td>foo}}</tr></table>
26888 !! html/parsoid
26889 <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>
26890 <table>
26891 <tbody>
26892 <tr>
26893 <td>
26894 <div>
26895 <p>foo</p>
26896 </div>
26897 </td>
26898 </tr>
26899 </tbody>
26900 </table>
26901 !!end
26902
26903 !!test
26904 6. Encapsulate foster-parented transclusion content
26905 !!options
26906 parsoid=wt2wt,wt2html
26907 !! wikitext
26908 <table><tr><td><div><p>{{echo|foo</p></div></td>foo</tr></table>}}<p>ok</p>
26909 !! html/parsoid
26910 <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>
26911 <table>
26912 <tbody>
26913 <tr>
26914 <td>
26915 <div>
26916 <p>foo</p>
26917 </div>
26918 </td>
26919 </tr>
26920 </tbody>
26921 </table>
26922 <p>ok</p>
26923 !!end
26924
26925 !!test
26926 7. Encapsulate foster-parented transclusion content
26927 !!options
26928 parsoid=wt2wt,wt2html
26929 !! wikitext
26930 <table>{{echo|<p>foo</p>}}<td>bar</td></table>
26931 !! html/parsoid
26932 <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>
26933 <table>
26934 <tbody>
26935 <tr>
26936 <td>bar</td>
26937 </tr>
26938 </tbody>
26939 </table>
26940 !!end
26941
26942 # Note that the wt is broken on purpose: the = should be {{=}} if you
26943 # don't want it to be a template parameter key.
26944 !!test
26945 8. Encapsulate foster-parented transclusion content
26946 !!options
26947 parsoid=wt2wt,wt2html
26948 !! wikitext
26949 {{echo|a
26950 }}{|{{echo|style='color:red'}}
26951 |-
26952 |b
26953 |}
26954 !! html/parsoid
26955 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n"}},"i":0}}]}'>a</p>
26956 <span> </span>
26957 <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>
26958 <table>
26959 <tbody>
26960 <tr>
26961 <td>b</td>
26962 </tr>
26963 </tbody>
26964 </table>
26965 !!end
26966
26967 !!test
26968 9. Encapsulate foster-parented transclusion content
26969 !!options
26970 parsoid=wt2wt,wt2html
26971 !! wikitext
26972 <table>{{echo|hi</table>hello}}
26973 !! html/parsoid
26974 <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>
26975 !!end
26976
26977 !!test
26978 Table in fosterable position
26979 !!options
26980 parsoid=wt2html
26981 !! wikitext
26982 {{OpenTable}}
26983 <div>
26984 {|
26985 |}
26986 </div>
26987 |}
26988 !! html/parsoid
26989 <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">
26990 </span>
26991 <table about="#mwt1" data-parsoid='{"autoInsertedEnd":true}'></table>
26992
26993 <table>
26994 </table>
26995 !!end
26996
26997 # Parsoid only for T66747
26998 !! test
26999 Properly encapsulate empty-content transclusions in fosterable positions
27000 !! wikitext
27001 <table>
27002 {{#if:|
27003 <td>foo</td>
27004 }}
27005 </table>
27006 !! html/parsoid
27007 <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"}]]}'>
27008
27009 </table>
27010 !! end
27011
27012 !! test
27013 Always encapsulate foster box when template range is expanded to table
27014 !! options
27015 parsoid=wt2wt
27016 !! wikitext
27017 {|
27018 hello
27019 {{OpenTable}}
27020 |}
27021 !! html/parsoid
27022
27023 !! end
27024
27025 !! test
27026 T115289: Unclosed table
27027 !! wikitext
27028 {{echo|<table>}}<!--c-->[[Category:Two]]
27029 !! html/parsoid
27030 <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>
27031 !! end
27032
27033 !! test
27034 T115289: Don't migrate newlines out of tables with fostered content
27035 !! wikitext
27036 <table><td></td>{{echo|<tr>[[Category:One]]}}<!--c-->[[Category:Two]]
27037 !! html/parsoid
27038 <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>
27039 !! end
27040
27041 !! test
27042 T73074: More fostering fun
27043 !! wikitext
27044 <table><td></td>{{echo|<tr>}}<!--c-->[[Category:Two]]
27045 !! html/parsoid
27046 <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>
27047 !! end
27048
27049 !!test
27050 Support <object> element with .data attribute
27051 !!options
27052 parsoid=html2wt
27053 !! html/parsoid
27054 <object data="test.swf"></object>
27055 !! wikitext
27056 <object data="test.swf"></object>
27057 !!end
27058
27059 !! test
27060 Don't block XML namespace declaration
27061 !! wikitext
27062 <span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">MediaWiki</span>
27063 !! html/php
27064 <p><span xmlns:dct="http&#58;//purl.org/dc/terms/" property="dct:title">MediaWiki</span>
27065 </p>
27066 !! html/parsoid
27067 <p><span xmlns:dct="http://purl.org/dc/terms/" data-x-property="dct:title" data-parsoid='{"stx":"html"}'>MediaWiki</span></p>
27068 !! end
27069
27070 # -----------------------------------------------------------------
27071 # The following section of tests are primarily to spec requirements
27072 # around Parsoid's serialization (old, new, edited content)
27073 #
27074 # All these tests are marked Parsoid html2wt and html2html only
27075 # ----------------------------------------------------------------
27076
27077 !! test
27078 Ignore rel attribute in a-tags during serialization to url-links
27079 !! options
27080 parsoid=html2wt
27081 !! html/parsoid
27082 <a href='http://en.wikipedia.org/wiki/Foobar'>http://en.wikipedia.org/wiki/Foobar</a>
27083 <a href='http://en.wikipedia.org/wiki/Foobar' rel='mw:ExtLink'>http://en.wikipedia.org/wiki/Foobar</a>
27084 <a href='http://en.wikipedia.org/wiki/Foobar' rel='mw:WikiLink'>http://en.wikipedia.org/wiki/Foobar</a>
27085 !! wikitext
27086 http://en.wikipedia.org/wiki/Foobar
27087 http://en.wikipedia.org/wiki/Foobar
27088 http://en.wikipedia.org/wiki/Foobar
27089 !! end
27090
27091 # 'mi' is a localinterwiki prefix as well as a language
27092 !! test
27093 Serialize interwiki links pointing to the current wiki as plain wiki links (T67869)
27094 !! options
27095 parsoid=html2wt
27096 !! html/parsoid
27097 <p><a rel="mw:ExtLink" href="http://mi.wikipedia.org/wiki/Foo">Foo</a></p>
27098 !! wikitext
27099 [[Foo]]
27100 !! end
27101
27102 !! test
27103 Parsoid should accept interwiki shortcuts
27104 !! options
27105 parsoid=html2wt
27106 !! html/parsoid
27107 <p><a rel='mw:WikiLink' href='./fr:Foo'>Foo</a>
27108 <a rel='mw:ExtLink' href='./fr:Foo'>Foo</a>
27109 <a href='./fr:Foo'>Foo</a></p>
27110 <p><a rel='mw:WikiLink' href='fr%3AFoo'>Foo</a>
27111 <a rel='mw:ExtLink' href='fr%3AFoo'>Foo</a>
27112 <a href='fr%3AFoo'>Foo</a></p>
27113 <p><a href='FR%3AFoo'>Foo</a>
27114 <a href='./FR:Foo'>Foo</a></p>
27115 !! wikitext
27116 [[:fr:Foo|Foo]]
27117 [[:fr:Foo|Foo]]
27118 [[:fr:Foo|Foo]]
27119
27120 [[:fr:Foo|Foo]]
27121 [[:fr:Foo|Foo]]
27122 [[:fr:Foo|Foo]]
27123
27124 [[:fr:Foo|Foo]]
27125 [[:fr:Foo|Foo]]
27126 !! end
27127
27128 !! test
27129 Parsoid should not accept invalid interwiki shortcuts
27130 !! options
27131 parsoid=html2wt
27132 !! html/parsoid
27133 <p><a rel='mw:WikiLink' href='news:Foo'>Foo</a>
27134 <a rel='mw:ExtLink' href='news:Foo'>Foo</a>
27135 <a href='news:Foo'>Foo</a></p>
27136 !! wikitext
27137 [news:Foo Foo]
27138 [news:Foo Foo]
27139 [news:Foo Foo]
27140 !! end
27141
27142 # See T93839
27143 !! test
27144 New wikilinks should be serialized properly
27145 !! options
27146 parsoid=html2wt
27147 !! html/parsoid
27148 <a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{}'>Foo</a>
27149 <a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>
27150 <a href="//en.wikipedia.org/wiki/Foo">//en.wikipedia.org/wiki/Foo</a>
27151 <a href="http://en.wikipedia.org/wiki/Foo">http://en.wikipedia.org/wiki/Foo</a>
27152 <a href="//en.wikipedia.org/wiki/Foo_bar">//en.wikipedia.org/wiki/Foo bar</a>
27153 !! wikitext
27154 [[Foo]]
27155 [[Foo]]
27156 [[:en:Foo|//en.wikipedia.org/wiki/Foo]]
27157 http://en.wikipedia.org/wiki/Foo
27158 [[:en:Foo_bar|//en.wikipedia.org/wiki/Foo bar]]
27159 !! end
27160
27161 !! test
27162 New wiki links (href variations)
27163 !! options
27164 parsoid=html2wt
27165 !! html/parsoid
27166 <a rel="mw:WikiLink" href="./Foo_bar">Foo_bar</a>
27167 <a rel="mw:WikiLink" href="Foo_bar">Foo_bar</a>
27168 <a rel="mw:WikiLink" href="Foo bar">Foo_bar</a>
27169 <a rel="mw:WikiLink" href="./Toxine_bact%C3%A9rienne">Toxine bactérienne</a>
27170 !! wikitext
27171 [[Foo_bar]]
27172 [[Foo_bar]]
27173 [[Foo_bar]]
27174 [[Toxine bactérienne]]
27175 !! end
27176
27177 !! test
27178 New wiki links (content string variations)
27179 !! options
27180 parsoid=html2wt
27181 !! html/parsoid
27182 <a rel="mw:WikiLink" href="./Foo_bar">Foo_bar</a>
27183 <a rel="mw:WikiLink" href="./Foo_bar">Foo bar</a>
27184 <a rel="mw:WikiLink" href="./Foo_bar">./Foo_bar</a>
27185 !! wikitext
27186 [[Foo_bar]]
27187 [[Foo bar]]
27188 [[Foo_bar|./Foo_bar]]
27189 !! end
27190
27191 !! test
27192 New category links (href variations)
27193 !! options
27194 parsoid=html2wt
27195 !! html/parsoid
27196 <link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne" />
27197 <link rel="mw:PageProp/Category" href="./Category:Toxine_bact%C3%A9rienne" />
27198 <link rel="mw:PageProp/Category" href="Category:Toxine_bact%C3%A9rienne" />
27199 !! wikitext
27200 [[Category:Toxine bactérienne]]
27201 [[Category:Toxine bactérienne]]
27202 [[Category:Toxine bactérienne]]
27203 !! end
27204
27205 !! test
27206 New sol transparent links don't need indent-pre nowiki protection
27207 !! options
27208 parsoid=html2wt
27209 language=de
27210 !! html/parsoid
27211 <link rel="mw:PageProp/redirect" href="./Main_Page">
27212 <!-- this is good --> <link rel="mw:PageProp/Category" href="./Category:Good" />
27213 <!-- this is great --> <link rel="mw:PageProp/Category" href="./Kategorie:Great" />
27214 !! wikitext
27215 #WEITERLEITUNG [[Main Page]]
27216 <!-- this is good --> [[Category:Good]]
27217 <!-- this is great --> [[Kategorie:Great]]
27218 !! end
27219
27220 !! test
27221 New interlanguage links (href variations)
27222 !! options
27223 parsoid=html2wt
27224 !! html/parsoid
27225 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine bactérienne" />
27226 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine_bactérienne" />
27227 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine_bact%C3%A9rienne" />
27228 !! wikitext
27229 [[es:Toxine bactérienne]]
27230 [[es:Toxine_bactérienne]]
27231 [[es:Toxine_bactérienne]]
27232 !! end
27233
27234 !! test
27235 Image: Modifying size of an image (1)
27236 !! options
27237 parsoid={
27238 "modes": ["wt2wt"],
27239 "changes": [
27240 ["img[height]", "attr", "height", "22"],
27241 ["img[width]", "attr", "width", "200"]
27242 ]
27243 }
27244 !! wikitext
27245 [[Image:Foobar.jpg|230x230px]]
27246 !! wikitext/edited
27247 [[Image:Foobar.jpg|200x200px]]
27248 !!end
27249
27250 !! test
27251 Image: Modifying size of an image (2)
27252 !! options
27253 parsoid={
27254 "modes": ["wt2wt"],
27255 "changes": [
27256 ["img[height]", "attr", "height", "100"],
27257 ["img[width]", "attr", "width", "500"]
27258 ]
27259 }
27260 !! wikitext
27261 [[Image:Foobar.jpg|230x230px]]
27262 !! wikitext/edited
27263 [[Image:Foobar.jpg|500x500px]]
27264 !!end
27265
27266 # Change in size is ignored so long as class='mw-default-size'
27267 !! test
27268 Image: Modifying size of an image (3)
27269 !! options
27270 parsoid={
27271 "modes": ["wt2wt"],
27272 "changes": [
27273 ["figure[class]", "removeClass", "mw-default-size"],
27274 ["figure img", "attr", "height", "19"],
27275 ["figure img", "attr", "width", "170"]
27276 ]
27277 }
27278 !! wikitext
27279 [[Image:Foobar.jpg|thumb]]
27280 !! wikitext/edited
27281 [[Image:Foobar.jpg|thumb|170x170px]]
27282 !!end
27283
27284 !! test
27285 Image: Modifying alignment of an image (T50665)
27286 !! options
27287 parsoid={
27288 "modes": ["wt2wt"],
27289 "changes": [
27290 ["figure[class]", "removeClass", "mw-halign-right"],
27291 ["figure[class]", "addClass", "mw-halign-left"]
27292 ]
27293 }
27294 !! wikitext
27295 [[Image:Foobar.jpg|thumb|caption|right]]
27296 !! wikitext/edited
27297 [[Image:Foobar.jpg|thumb|caption|left]]
27298 !! end
27299
27300 !! test
27301 Image: Modifying mw-default-size of an frameless image (T64805)
27302 !! options
27303 parsoid={
27304 "modes": ["wt2wt"],
27305 "changes": [
27306 ["figure.mw-default-size", "removeClass", "mw-default-size"]
27307 ]
27308 }
27309 !! wikitext
27310 [[Image:Foobar.jpg|frameless|right]]
27311 !! wikitext/edited
27312 [[Image:Foobar.jpg|frameless|right|220x220px]]
27313 !! end
27314
27315 !! test
27316 Image: Modifying valign of an image (T51221)
27317 !! options
27318 parsoid={
27319 "modes": ["wt2wt"],
27320 "changes": [
27321 ["*[typeof=\"mw:Image\"]", "removeClass", "mw-valign-middle"],
27322 ["*[typeof=\"mw:Image\"]", "addClass", "mw-valign-text-top"]
27323 ]
27324 }
27325 !! wikitext
27326 [[File:Foobar.jpg|20px|middle]]
27327 !! wikitext/edited
27328 [[File:Foobar.jpg|20px|text-top]]
27329 !! end
27330
27331 !! test
27332 Image: Modifying alt attribute of an image (T58400)
27333 !! options
27334 parsoid={
27335 "modes": ["wt2wt"],
27336 "changes": [
27337 ["img[alt]", "attr", "alt", "some alternate edited text"]
27338 ]
27339 }
27340 !! wikitext
27341 [[File:Foobar.jpg|thumb|some caption|alt=some alternate text]]
27342 !! wikitext/edited
27343 [[File:Foobar.jpg|thumb|some caption|alt=some alternate edited text]]
27344 !!end
27345
27346 !! test
27347 Image: Modifying caption of an image
27348 !! options
27349 parsoid={
27350 "modes": ["wt2wt"],
27351 "changes": [
27352 ["figcaption", "text", "new caption"]
27353 ]
27354 }
27355 !! wikitext
27356 [[Image:Foobar.jpg|thumb|original caption]]
27357 !! wikitext/edited
27358 [[Image:Foobar.jpg|thumb|new caption]]
27359 !!end
27360
27361 !! test
27362 Image: empty alt attribute (T50924)
27363 !! options
27364 parsoid
27365 !! wikitext
27366 [[File:Foobar.jpg|thumb|alt=|bar]]
27367 !! html
27368 <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>
27369 !! end
27370
27371 !! test
27372 Image: new attributes should be serialized in wiki's language for RTL languages (T53852)
27373 !! options
27374 parsoid=html2wt
27375 language=ar
27376 disabled
27377 !! html/parsoid
27378 <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>
27379 !! wikitext
27380 [[Imagen:Foobar.jpg|derecha|miniaturadeimagen]]
27381 !! end
27382
27383 !! test
27384 Image: Block level image should have \n before and after
27385 !! wikitext
27386 123
27387 [[File:Foobar.jpg|right|thumb|150x150px]]
27388 456
27389 !! html/parsoid
27390 <p>123</p>
27391 <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>
27392 <p>456</p>
27393 !! end
27394
27395 !! test
27396 Image: New block level image should have \n before and after (existing content)
27397 !! wikitext
27398 123
27399 [[File:Foobar.jpg|right|thumb|150x150px]]
27400 456
27401 !! html/parsoid
27402 <p>123</p>
27403 <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>
27404 <p>456</p>
27405 !! end
27406
27407 !! test
27408 Image: upright option (parsoid)
27409 !! wikitext
27410 [[File:Foobar.jpg|thumb|upright|caption]]
27411 [[File:Foobar.jpg|thumb|upright=0.5|caption]]
27412 [[File:Foobar.jpg|thumb|500x500px|upright=0.5|caption]]
27413 !! html/parsoid
27414 <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>
27415 <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>
27416 <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>
27417 !! end
27418
27419 !! test
27420 Image: upright option is ignored on inline and frame images (parsoid)
27421 !! wikitext
27422 [[File:Foobar.jpg|500x500px|upright=0.5|caption]]
27423 !! html/parsoid
27424 <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>
27425 !! end
27426
27427 !! test
27428 Image: in template parameter with empty parameter
27429 !! wikitext
27430 {{echo|[[File:Foobar.jpg|link=]]}}
27431 !! html/parsoid
27432 <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>
27433 !! end
27434
27435 !! test
27436 Image: from basic HTML (1)
27437 !! options
27438 parsoid=html2wt
27439 !! html/parsoid
27440 <span typeof="mw:Image">
27441 <img src="./File:Foobar.jpg" width=100 height=100 alt="Alt">
27442 </span>
27443 !! wikitext
27444 [[File:Foobar.jpg|link=|alt=Alt|100x100px]]
27445 !! end
27446
27447 !! test
27448 Image: from basic HTML (2)
27449 !! options
27450 parsoid=html2wt
27451 !! html/parsoid
27452 <img src="./File:Foobar.jpg" width=100 height=100 alt="Alt">
27453 !! wikitext
27454 [[File:Foobar.jpg|link=|alt=Alt|100x100px]]
27455 !! end
27456
27457 !! test
27458 Image: from basic HTML (3)
27459 !! options
27460 parsoid=html2wt
27461 !! html/parsoid
27462 <a href="Main"><img src="./File:Foobar.jpg" width=100 height=100 alt="Alt"></a>
27463 !! wikitext
27464 [[File:Foobar.jpg|link=Main|alt=Alt|100x100px]]
27465 !! end
27466
27467 !! test
27468 Image: from basic HTML (4)
27469 !! options
27470 parsoid=html2wt
27471 !! html/parsoid
27472 <img src="./File:Foobar.jpg">
27473 !! wikitext
27474 [[File:Foobar.jpg|link=]]
27475 !! end
27476
27477 !! test
27478 Image: Invalid title as link
27479 !! wikitext
27480 [[File:Foobar.jpg|link=<]]
27481 !! html/php
27482 <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>
27483 </p>
27484 !! html/parsoid
27485 <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>
27486 !! end
27487
27488 !! test
27489 Lists: Serialize correctly even when list content is wrapped in p-tags (like VE does)
27490 !! options
27491 parsoid=html2wt
27492 !! html/parsoid
27493 <ul>
27494 <li><p>foo</p></li>
27495 </ul>
27496 !! wikitext
27497 * foo
27498 !! end
27499
27500 !! test
27501 Lists: Serialize correctly even when list tags has unneeded whitespace between tags
27502 !! options
27503 parsoid=html2wt
27504 !! html/parsoid
27505 <ul> <li>foo</li></ul>
27506 !! wikitext
27507 * foo
27508 !! end
27509
27510 !! test
27511 Don't strip leading whitespace when handling indent-pre suppressing tags
27512 !! options
27513 parsoid=html2wt
27514 !! html/parsoid
27515 <table>
27516 <tr><td> indented row</td></tr>
27517 </table>
27518 <blockquote><p>
27519 <b>This is very bold of you!</b>
27520 </p>
27521 <table><tr><td>
27522 indented cell (no pre-wrapping!)
27523 </td></tr></table>
27524 </blockquote>
27525 <p>foo</p>
27526 <div>bar</div>
27527 !! wikitext
27528 {|
27529 | indented row
27530 |}
27531 <blockquote>
27532 '''This is very bold of you!'''
27533
27534 {|
27535 |
27536 indented cell (no pre-wrapping!)
27537 |}
27538 </blockquote>
27539 foo
27540 <div>bar</div>
27541 !! end
27542
27543 !! test
27544 Nowiki-wrap leading whitespace when handling indent-pre inducing tags
27545 !! options
27546 parsoid=html2wt
27547 !! html/parsoid
27548 <p>foo</p>
27549 <span>bar</span>
27550
27551 <span>foo2
27552 </span>bar2
27553
27554 <div>foo</div>
27555 <span>bar</span>
27556
27557 <div>
27558 <span>foo</span>
27559 </div>
27560 !! wikitext
27561 foo
27562
27563 <span>bar</span>
27564
27565 <span>foo2
27566 <nowiki> </nowiki></span>bar2
27567
27568 <div>foo</div>
27569 <nowiki> </nowiki><span>bar</span>
27570
27571 <div>
27572 <nowiki> </nowiki><span>foo</span>
27573 </div>
27574 !! end
27575
27576 !! test
27577 Lists: Dont insert newlines in a serialized list item.
27578 !! options
27579 parsoid=html2wt
27580 !! html/parsoid
27581 <ul><li>a<br>b</li><li>c</li></ul>
27582 !! wikitext
27583 * a<br>b
27584 * c
27585 !! end
27586
27587 !! test
27588 1. Headings: Force sol-transparent links and behavior switches to serialize before/after
27589 !! options
27590 parsoid={
27591 "modes": ["html2wt"],
27592 "scrubWikitext": false
27593 }
27594 !! html/parsoid
27595 <h2>hello there<link href="./Category:A1" rel="mw:PageProp/Category" /></h2>
27596 <h2><link href="./Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
27597
27598 <h2><!--foo--> <link href="./Category:A3" rel="mw:PageProp/Category" /> how goes it</h2>
27599 <h2>it goes well <link href="./Category:A4" rel="mw:PageProp/Category" /> <!--bar--></h2>
27600
27601 <h2 data-parsoid='{}'>howdy<link href="./Category:A5" rel="mw:PageProp/Category" /></h2>
27602
27603 <h2><meta property="mw:PageProp/toc" /> ok</h2>
27604 !! wikitext
27605 == hello there [[Category:A1]] ==
27606
27607 == [[Category:A2]] hi pal ==
27608
27609 == <!--foo--> [[Category:A3]] how goes it ==
27610
27611 == it goes well [[Category:A4]] <!--bar--> ==
27612
27613 ==howdy [[Category:A5]]==
27614
27615 == __TOC__ ok ==
27616 !! end
27617
27618 !! test
27619 2. Headings: Force sol-transparent links and behavior switches to serialize before/after
27620 !! options
27621 parsoid={
27622 "modes": ["html2wt"],
27623 "scrubWikitext": true
27624 }
27625 !! html/parsoid
27626 <h2>hello there<link href="./Category:A1" rel="mw:PageProp/Category" /></h2>
27627 <h2><link href="./Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
27628
27629 <h2><!--foo--> <link href="./Category:A3" rel="mw:PageProp/Category" /> how goes it</h2>
27630 <h2>it goes well <link href="./Category:A4" rel="mw:PageProp/Category" /> <!--bar--></h2>
27631
27632 <h2><meta property="mw:PageProp/toc" /> ok</h2>
27633 !! wikitext
27634 == hello there ==
27635 [[Category:A1]]
27636 [[Category:A2]]
27637
27638 == hi pal ==
27639
27640 <!--foo--> [[Category:A3]]
27641
27642 == how goes it ==
27643
27644 == it goes well ==
27645 [[Category:A4]] <!--bar-->
27646
27647 __TOC__
27648
27649 == ok ==
27650 !! end
27651
27652 !! test
27653 Headings: Don't hoist metas that come from templates
27654 !! options
27655 parsoid={
27656 "modes": ["html2wt"],
27657 "scrubWikitext": true
27658 }
27659 !! html/parsoid
27660 <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>
27661 !! wikitext
27662 == {{echo|foo [[Category:Foo]]}} ==
27663 !! end
27664
27665 !! test
27666 Headings: Category in ref isn't hoisted
27667 !! options
27668 parsoid={
27669 "modes": ["html2wt"],
27670 "scrubWikitext": true
27671 }
27672 !! html/parsoid
27673 <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>
27674
27675 <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>
27676 !! wikitext
27677 == foo <ref>bar
27678 [[Category:Baz]] </ref> ==
27679
27680 <references />
27681 !! end
27682
27683 !! test
27684 Parsoid: Serialize positional parameters with = in them as named parameter
27685 !! options
27686 parsoid=html2wt
27687 !! html/parsoid
27688 <p about="#mwt1" typeof="mw:Transclusion"
27689 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}},"i":0}}]}'>foo</p>
27690
27691 <p about="#mwt1" typeof="mw:Transclusion"
27692 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}, "2":{"wt":"bar"}},"i":0}}]}'>foo</p>
27693
27694 <!--Orig params with data-parsoid has heuristics for handling = chars-->
27695 <!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
27696 <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>
27697 !! wikitext
27698 {{echo|1=f=oo}}
27699
27700 {{echo|1=f=oo|2=bar}}
27701
27702 <!--Orig params with data-parsoid has heuristics for handling = chars-->
27703 <!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
27704 {{echo|<nowiki>f=oo</nowiki>|bar}}
27705 !! end
27706
27707 !! test
27708 Parsoid: Serialize positional parameters with = in extlink as named parameter
27709 !! options
27710 parsoid=html2wt
27711 !! html/parsoid
27712 <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>
27713 !! wikitext
27714 {{echo|1=http://stuff?is=ok}}
27715 !! end
27716
27717 !! test
27718 Parsoid: Correctly serialize block-node children when they are a combination of text and p-nodes
27719 !! options
27720 parsoid=html2wt
27721 !! html/parsoid
27722 <div>a<p>b</p></div>
27723 <div>a
27724 <p>b</p></div>
27725 <div>
27726 a
27727 <p>b</p></div>
27728 !! wikitext
27729 <div>a
27730 b
27731 </div>
27732 <div>a
27733 b
27734 </div>
27735 <div>
27736 a
27737
27738 b
27739 </div>
27740 !! end
27741
27742 !! test
27743 Substrings resembling wikitext in hrefs should not get nowiki escapes
27744 !! options
27745 parsoid=html2wt
27746 !! html/parsoid
27747 <a rel="mw:WikiLink" href="./Foo''bar''baz">Foo''bar''baz</a>
27748 !! wikitext
27749 [[Foo''bar''baz]]
27750 !! end
27751
27752 !! test
27753 Enforce single-line context in the serializer
27754 !! options
27755 parsoid=html2wt
27756 !! html/parsoid
27757 <h2>testing
27758 123</h2>
27759
27760 <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">
27761 </span><span about="#mwt1">you</span> </h2>
27762
27763 <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>
27764
27765 <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
27766 there</span></li></ol>
27767
27768 <ul><li>asd
27769 sdf</li></ul>
27770
27771 <ul><li>foo
27772 bar
27773 baz</li>
27774 <li>foo <b>bar</b>
27775 baz</li></ul>
27776
27777 <dl><dt>hi
27778 ho </dt><dd data-parsoid='{"stx":"row"}'> hi
27779 ho</dd></dl>
27780
27781 <dl><dd> <table>
27782 <tbody><tr><td> ha
27783 ha
27784 ha</td></tr>
27785 </tbody></table></dd></dl>
27786 !! wikitext
27787 == testing 123 ==
27788
27789 == hi {{bogus|there
27790 you}} ==
27791
27792 == foo <ref>hello
27793 there</ref> ==
27794
27795 <references />
27796
27797 * asd sdf
27798
27799 * foo bar baz
27800 * foo '''bar''' baz
27801
27802 ; hi ho : hi ho
27803
27804 : {|
27805 | ha
27806 ha
27807 ha
27808 |}
27809 !! end
27810
27811 !! test
27812 Serialize new placeholder space without spans
27813 !! options
27814 parsoid=html2wt
27815 !! html/parsoid
27816 <p>foo<span typeof="mw:Placeholder"> </span>: bar</p>
27817
27818 <p>foo<span typeof="mw:DisplaySpace mw:Placeholder" data-parsoid='{"src":" ","isDisplayHack":true}'> </span>: bar</p>
27819
27820 <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>
27821 !! wikitext
27822 foo : bar
27823
27824 foo : bar
27825
27826 <ref>foo : bar</ref>ok
27827 !! end
27828
27829
27830 #-----------------------
27831 # Tag minimization tests
27832 #-----------------------
27833
27834 !! test
27835 1. I/B quote minimization: wikitext-only tags should be combined
27836 !! options
27837 parsoid=html2wt
27838 !! html/parsoid
27839 <p><i>A</i><i>B</i></p>
27840 <p><b>A</b><b>B</b></p>
27841 <p><i>A</i><b><i>B</i></b></p>
27842 <p><b>A</b><i><b>B</b></i></p>
27843 <p><b>A</b><i><b>B</b><b>C</b></i><b>D</b></p>
27844 <p><i><b>A</b></i><i><b>B</b></i></p>
27845 <p><i><b>A</b></i><b><i>B</i></b></p>
27846 <p><b><i>A</i></b><i><b>B</b></i></p>
27847 !! wikitext
27848 ''AB''
27849
27850 '''AB'''
27851
27852 ''A'''B'''''
27853
27854 '''A''B'''''
27855
27856 '''A''BC''D'''
27857
27858 '''''AB'''''
27859
27860 '''''AB'''''
27861
27862 '''''AB'''''
27863 !! end
27864
27865 !! test
27866 2. I/B quote minimization: wikitext and html tags should not be combined
27867 !! options
27868 parsoid=html2wt
27869 !! html/parsoid
27870 <p><i>A</i><i data-parsoid='{"stx":"html"}'>B</i></p>
27871 <p><i>A</i><b><i data-parsoid='{"stx":"html"}'>B</i></b></p>
27872 !! wikitext
27873 ''A''<i>B</i>
27874
27875 ''A''<nowiki/>'''<i>B</i>'''
27876 !! end
27877
27878 !! test
27879 3. I/B quote minimization: templated content stops minimization
27880 !! options
27881 parsoid=html2wt
27882 !! html/parsoid
27883 <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>
27884 <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>
27885 !! wikitext
27886 ''A''{{echo|''B''}}
27887
27888 ''A''{{echo|'''''B'''''}}
27889 !! end
27890
27891 !! test
27892 4. I/B quote minimization: new content should be mimimized with adjacent old content
27893 !! options
27894 parsoid=html2wt
27895 !! html/parsoid
27896 <p><i>A</i><i>B</i></p>
27897 <p><b>A</b><b>B</b></p>
27898 <p><i>A</i><b><i>B</i></b></p>
27899 !! wikitext
27900 ''AB''
27901
27902 '''AB'''
27903
27904 ''A'''B'''''
27905 !! end
27906
27907 !! test
27908 5a. Merge adjacent quote nodes if they've been edited
27909 !! options
27910 parsoid={
27911 "modes": ["wt2wt", "selser"],
27912 "changes": [
27913 ["p", "contents", "remove", ":contains('b')"]
27914 ]
27915 }
27916 !! wikitext
27917 ''a''b''c''
27918 !! wikitext/edited
27919 ''ac''
27920 !! end
27921
27922 !! test
27923 5b. Merge adjacent quote nodes if they've been edited
27924 !! options
27925 parsoid={
27926 "modes": ["wt2wt", "selser"],
27927 "changes": [
27928 ["#x", "remove"]
27929 ]
27930 }
27931 !! wikitext
27932 ''a''<span id="x">b</span>''c''
27933 !! wikitext/edited
27934 ''ac''
27935 !! end
27936
27937 !! test
27938 1. Merge adjacent link nodes as long as at least one element is new
27939 !! options
27940 parsoid={
27941 "modes": ["html2wt"],
27942 "scrubWikitext": true
27943 }
27944 !! html/parsoid
27945 <a rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
27946 <a data-parsoid="{}" rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
27947 <a data-parsoid="{}" rel="mw:WikiLink" href="./Football">Foot</a><a data-parsoid="{}" rel="mw:WikiLink" href="./Football">ball</a>
27948 !! wikitext
27949 [[Football]]
27950 [[Football]]
27951 [[Football|Foot]][[Football|ball]]
27952 !! end
27953
27954 !! test
27955 2. Merge adjacent link nodes and enable additional normalizations
27956 !! options
27957 parsoid={
27958 "modes": ["html2wt"],
27959 "scrubWikitext": true
27960 }
27961 !! html/parsoid
27962 <a rel="mw:WikiLink" href="./Football"><i>Foot</i></a><a rel="mw:WikiLink" href="./Football"><i>ball</i></a>
27963 !! wikitext
27964 [[Football|''Football'']]
27965 !! end
27966
27967 !! test
27968 3. Don't merge adjacent link nodes if scrubWikitext is false
27969 !! options
27970 parsoid={
27971 "modes": ["html2wt"],
27972 "scrubWikitext": false
27973 }
27974 !! html/parsoid
27975 <a rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
27976 !! wikitext
27977 [[Football|Foot]][[Football|ball]]
27978 !! end
27979
27980 #------------------------------
27981 # End of tag minimization tests
27982 #------------------------------
27983
27984 !!test
27985 T56262: New entities
27986 !! options
27987 parsoid=html2wt
27988 !! html/parsoid
27989 <span typeof="mw:Entity">&nbsp;</span>
27990 !! wikitext
27991 &nbsp;
27992 !! end
27993
27994 ## Note that there is no wikitext output for 'unknownproperty' ##
27995 ## Unknown magic words are silently dropped ##
27996
27997 !! test
27998 Magic words
27999 !! options
28000 parsoid=html2wt
28001 !! html/parsoid
28002 <meta property='mw:PageProp/toc' />
28003 <meta property='mw:PageProp/notoc' />
28004 <meta property='mw:PageProp/forcetoc' />
28005 <meta property='mw:PageProp/index' />
28006 <meta property='mw:PageProp/noindex' />
28007 <meta property='mw:PageProp/nogallery' />
28008 <meta property='mw:PageProp/noeditsection' />
28009 <meta property='mw:PageProp/notitleconvert' />
28010 <meta property='mw:PageProp/nocontentconvert' />
28011 <meta property='mw:PageProp/unknownproperty' />
28012 !! wikitext
28013 __TOC__
28014 __NOTOC__
28015 __FORCETOC__
28016 __INDEX__
28017 __NOINDEX__
28018 __NOGALLERY__
28019 __NOEDITSECTION__
28020 __NOTITLECONVERT__
28021 __NOCONTENTCONVERT__
28022 !! end
28023
28024 !! test
28025 Consecutive <pre>s should not get merged
28026 !! options
28027 parsoid=html2wt,html2html
28028 !! html/parsoid
28029 <pre>a</pre><pre>b</pre>
28030
28031 <pre>c
28032 </pre><pre>
28033 d</pre>
28034
28035 <pre>e
28036
28037 </pre><pre>
28038
28039 f</pre>
28040 !! wikitext
28041 a
28042
28043 b
28044
28045 c
28046
28047 d
28048
28049 e
28050
28051
28052
28053 f
28054 !! end
28055
28056 !! test
28057 Edited ISBN links not serializable as ISBN links should serialize as wikilinks
28058 !! options
28059 parsoid=html2wt
28060 !! html/parsoid
28061 <a href="./Special:BookSources/1234567890" rel="mw:ExtLink">ISBN 1234567895</a>
28062 !! wikitext
28063 [[Special:BookSources/1234567890|ISBN 1234567895]]
28064 !! end
28065
28066 !! test
28067 Edited RFC links not serializable as RFC links should serialize as extlinks
28068 !! options
28069 parsoid=html2wt
28070 !! html/parsoid
28071 <a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink">New RFC</a>
28072 !! wikitext
28073 [https://tools.ietf.org/html/rfc123 New RFC]
28074 !! end
28075
28076 !! test
28077 Edited PMID links not serializable as PMID links should serialize as extlinks
28078 !! options
28079 parsoid=html2wt
28080 !! html/parsoid
28081 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink">New PMID</a>
28082 !! wikitext
28083 [//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract New PMID]
28084 !! end
28085
28086 !! test
28087 WTS of autolinks with trailing/surrounding context
28088 !! options
28089 parsoid=html2wt
28090 !! html/parsoid
28091 <p><a href="http://cscott.net">http://cscott.net</a><b>foo</b></p>
28092 <p><a href="http://cscott.net">http://cscott.net</a><b data-parsoid='{"stx":"html"}'>foo</b></p>
28093 <p><b><a href="http://cscott.net">http://cscott.net</a></b></p>
28094 <p><b><a href="http://cscott.net">http://cscott.net</a> </b></p>
28095 <p><b><a href="http://cscott.net">http://cscott.net</a>x</b></p>
28096 <p><a href="http://cscott.net">http://cscott.net</a>x</p>
28097 !! wikitext
28098 http://cscott.net'''foo'''
28099
28100 http://cscott.net<b>foo</b>
28101
28102 '''http://cscott.net'''
28103
28104 '''http://cscott.net '''
28105
28106 '''http://cscott.net<nowiki/>x'''
28107
28108 http://cscott.net<nowiki/>x
28109 !! end
28110
28111 !! test
28112 WTS of autolinks with nowikis (round-trip)
28113 !! wikitext
28114 x<nowiki/>http://cscott.net<nowiki/>x
28115 !! html/parsoid
28116 <p>x<a rel="mw:ExtLink" href="http://cscott.net">http://cscott.net</a>x</p>
28117 !! end
28118
28119 # this is the "easy" test because it leaves in place all the
28120 # data-parsoid information indicating this is an autolink
28121 !! test
28122 WTS of autolinks with escapes (editing)
28123 !! options
28124 parsoid={
28125 "modes": ["wt2wt"],
28126 "changes": [
28127 [ "span", "remove" ]
28128 ]
28129 }
28130 !! wikitext
28131 x<nowiki/>http://cscott.net<nowiki/>x
28132 !! wikitext/edited
28133 x<nowiki/>http://cscott.net<nowiki/>x
28134 !! end
28135
28136 !! test
28137 WTS of edited autolink-like text (T103364)
28138 !! options
28139 parsoid={
28140 "modes": ["wt2wt"],
28141 "changes": [
28142 [ "span[typeof]", "removeAttr", "typeof" ]
28143 ]
28144 }
28145 !! wikitext
28146 Not a link: <nowiki>http://example.com</nowiki>.
28147 !! wikitext/edited
28148 Not a link: <span><nowiki>http://example.com</nowiki></span>.
28149 !! end
28150
28151 !! test
28152 WTS of newly-authored autolink-like text (T103364)
28153 !! options
28154 parsoid=html2wt
28155 !! html/parsoid
28156 <p>http://example.com is not a link.</p>
28157 !! wikitext
28158 <nowiki>http://example.com</nowiki> is not a link.
28159 !! end
28160
28161 !! test
28162 WTS of autolink-like text after an autolink (T108563)
28163 !! options
28164 parsoid=html2wt
28165 !! html/parsoid
28166 <p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a> http://example.com is not a link.</p>
28167 !! wikitext
28168 http://example.com <nowiki>http://example.com</nowiki> is not a link.
28169 !! end
28170
28171 !! test
28172 Magic links inside links (not autolinked)
28173 !! wikitext
28174 [[Foo|http://example.com]]
28175 [[Foo|RFC 1234]]
28176 [[Foo|PMID 1234]]
28177 [[Foo|ISBN 123456789x]]
28178
28179 [http://foo.com http://example.com]
28180 [http://foo.com RFC 1234]
28181 [http://foo.com PMID 1234]
28182 [http://foo.com ISBN 123456789x]
28183 !! html+tidy
28184 <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>
28185 <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>
28186 !! html/parsoid
28187 <p><a rel="mw:WikiLink" href="./Foo" title="Foo">http://example.com</a>
28188 <a rel="mw:WikiLink" href="./Foo" title="Foo">RFC 1234</a>
28189 <a rel="mw:WikiLink" href="./Foo" title="Foo">PMID 1234</a>
28190 <a rel="mw:WikiLink" href="./Foo" title="Foo">ISBN 123456789x</a></p>
28191
28192 <p><a rel="mw:ExtLink" href="http://foo.com">http://example.com</a>
28193 <a rel="mw:ExtLink" href="http://foo.com">RFC 1234</a>
28194 <a rel="mw:ExtLink" href="http://foo.com">PMID 1234</a>
28195 <a rel="mw:ExtLink" href="http://foo.com">ISBN 123456789x</a></p>
28196 !! end
28197
28198 !! test
28199 Magic links inside image captions (autolinked)
28200 !! wikitext
28201 [[File:Foobar.jpg|thumb|http://example.com]]
28202 [[File:Foobar.jpg|thumb|RFC 1234]]
28203 [[File:Foobar.jpg|thumb|PMID 1234]]
28204 [[File:Foobar.jpg|thumb|ISBN 123456789x]]
28205 !! html+tidy
28206 <div class="thumb tright">
28207 <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>
28208 <div class="thumbcaption">
28209 <div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
28210 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div>
28211 </div>
28212 </div>
28213 <div class="thumb tright">
28214 <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>
28215 <div class="thumbcaption">
28216 <div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
28217 <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc1234">RFC 1234</a></div>
28218 </div>
28219 </div>
28220 <div class="thumb tright">
28221 <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>
28222 <div class="thumbcaption">
28223 <div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
28224 <a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a></div>
28225 </div>
28226 </div>
28227 <div class="thumb tright">
28228 <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>
28229 <div class="thumbcaption">
28230 <div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
28231 <a href="/wiki/Special:BookSources/123456789X" class="internal mw-magiclink-isbn">ISBN 123456789x</a></div>
28232 </div>
28233 </div>
28234 !! html/parsoid
28235 <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>
28236 <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>
28237 <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>
28238 <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>
28239 !! end
28240
28241 !! test
28242 WTS of magic word text (T109371)
28243 !! options
28244 parsoid=html2wt
28245 !! html/parsoid
28246 <p>RFC 1234</p>
28247 <p><a href="http://foo.com" rel="mw:ExtLink">RFC 1234</a></p>
28248 <p><a href="./Foo" rel="mw:WikiLink">RFC 1234</a></p>
28249 !! wikitext
28250 <nowiki>RFC 1234</nowiki>
28251
28252 [http://foo.com RFC 1234]
28253
28254 [[Foo|RFC 1234]]
28255 !! end
28256
28257 !! test
28258 Edited Redirect link should emit a non-piped wikitext link
28259 !! options
28260 parsoid=html2wt
28261 !! html/parsoid
28262 <link rel="mw:PageProp/redirect" href="Bar" data-parsoid='{"a":{"href":"./Foo"},"sa":{"href":"Foo"}}'>
28263 !! wikitext
28264 #REDIRECT [[Bar]]
28265 !! end
28266
28267 !! test
28268 T75121: Infer extension name from typeOf if data-mw is not present
28269 !! options
28270 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
28271 !! html/parsoid
28272 <div typeOf="mw:Extension/foo"></div>
28273 !! wikitext
28274 <foo />
28275 !! end
28276
28277 # Note that the <p> wrapping isn't present in PHP parser output
28278 # The important thing for this test is that P-wrapping doesn't
28279 # interfere with the <nowiki> protection for leading - in <td>
28280 # (which isn't necessary for <th>).
28281 !! test
28282 T88318: p-wrapped dash in table.
28283 !! options
28284 parsoid=html2wt,wt2wt
28285 !! html/parsoid
28286 <table><tbody>
28287 <tr><th><p>-</p></th><th><p>- </p></th></tr>
28288 <tr><td><p>-</p></td><td><p>- </p></td></tr>
28289 <tr><td><small>-</small></td><td><br/><p>-</p></td><td><br/>-</td></tr>
28290 </tbody></table>
28291 !! wikitext
28292 {|
28293 !-
28294 !-
28295 |-
28296 |<nowiki>-</nowiki>
28297 |<nowiki>- </nowiki>
28298 |-
28299 |<small>-</small>
28300 |<br>
28301 -
28302 |<br>
28303 -
28304 |}
28305 !! html/php+tidy
28306 <table>
28307 <tr>
28308 <th>-</th>
28309 <th>-</th>
28310 </tr>
28311 <tr>
28312 <td>-</td>
28313 <td>-</td>
28314 </tr>
28315 <tr>
28316 <td><small>-</small></td>
28317 <td><br />
28318 <p>-</p>
28319 </td>
28320 <td><br />
28321 <p>-</p>
28322 </td>
28323 </tr>
28324 </table>
28325 !! end
28326
28327 !! test
28328 T149209: WTS: Handle newlines in table cells properly
28329 !! options
28330 parsoid=html2wt
28331 !! html/parsoid
28332 <table>
28333 <tbody>
28334 <tr><td>a
28335 b
28336 </td><td data-parsoid='{"stx_v":"row"}'>c</td></tr>
28337 <tr><td><p>x</p>
28338 </td><td data-parsoid='{"stx_v":"row", "startTagSrc": "{{!}}{{!}}"}'>y</td></tr>
28339 </tbody></table>
28340 <table>
28341 <tbody>
28342 <tr><th>a
28343 b
28344 </th><th data-parsoid='{"stx_v":"row"}'>c</th></tr>
28345 <tr><th><p>x</h>
28346 </th><th data-parsoid='{"stx_v":"row"}'>y</th></tr>
28347 </tbody></table>
28348 !! wikitext
28349 {|
28350 |a
28351 b
28352 |c
28353 |-
28354 |x
28355 {{!}}y
28356 |}
28357 {|
28358 !a
28359 b
28360 !c
28361 |-
28362 !x
28363 !y
28364 |}
28365 !! end
28366
28367 !! test
28368 T149209: Selser: Handle newlines in table cells properly
28369 !! options
28370 parsoid={
28371 "modes": ["selser"],
28372 "changes": [
28373 [ "#h1", "html", "a\nb\n" ],
28374 [ "#h2", "html", "a\nb\n" ],
28375 [ "#c1", "html", "a\nb\n" ],
28376 [ "#c2", "html", "<p>a</p>" ],
28377 [ "#c3", "html", "<p>a</p>" ],
28378 [ "#c4", "html", "edit-me<p>a</p>" ]
28379 ]
28380 }
28381 !! wikitext
28382 {|
28383 ! id="h1" |edit-me!!1
28384 |-
28385 ! id="h2" |edit-me||2
28386 |-
28387 | id="c1" |edit-me||3
28388 |-
28389 | id="c2" |edit-me||4
28390 |-
28391 | id="c3" |edit-me||p||q||r
28392 |-
28393 | id="c4" |edit-me||p||q||r
28394 |}
28395 !! wikitext/edited
28396 {|
28397 ! id="h1" |a
28398 b
28399 !1
28400 |-
28401 ! id="h2" |a
28402 b
28403 !2
28404 |-
28405 | id="c1" |a
28406 b
28407 |3
28408 |-
28409 | id="c2" |a
28410 |4
28411 |-
28412 | id="c3" |a
28413 |p||q||r
28414 |-
28415 | id="c4" |edit-me
28416 a
28417 |p||q||r
28418 |}
28419 !! end
28420
28421 !! test
28422 HTML id attribute with Parsoid-like element ids should not be serialized to wikitext
28423 !! options
28424 parsoid=html2wt
28425 !! html/parsoid
28426 <table id='mwAb'>
28427 <td id='mwAc'>foo</td>
28428 <td id='serialize-this'>bar</td>
28429 </table>
28430 !! wikitext
28431 {|
28432 |foo
28433 | id="serialize-this" |bar
28434 |}
28435 !! end
28436
28437 !! test
28438 Parsoid-like element ids should not be serialized to wikitext unless shadowed
28439 !! options
28440 parsoid=html2wt
28441 !! html/parsoid
28442 <div id="mwAQ" data-parsoid='{"stx":"html","a":{"id":"mwAQ"},"sa":{"id":"hello"}}'>ok</div>
28443 !! wikitext
28444 <div id="hello">ok</div>
28445 !! end
28446
28447 !! test
28448 WTS change modes
28449 !! options
28450 parsoid={
28451 "modes": ["wt2wt"],
28452 "changes": [
28453 [ "#xyz", "before", "<b>before</b> stuff " ],
28454 [ "#xyz", "after", " stuff <i>after</i>" ],
28455 [ "#xyz", "html", "x <b>y</b> z" ]
28456 ]
28457 }
28458 !! wikitext
28459 <span id="xyz">hello</span>
28460 !! wikitext/edited
28461 '''before''' stuff <span id="xyz">x '''y''' z</span> stuff ''after''
28462 !! end
28463
28464 !! test
28465 Never serialize a-tag as html, regardless of what data-parsoid has to say
28466 !! options
28467 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
28468 !! html/parsoid
28469 <a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"html"}'>Foo</a>
28470 !! wikitext
28471 [[Foo]]
28472 !! end
28473
28474 ## SSS FIXME: This is broken output nevertheless.
28475 ## What might be a reasonable non-broken output for this?
28476 ## This is an edge case unlikely to be seen in production
28477 ## that I am not wasting more time on this right now.
28478 !! test
28479 Never serialize a-tag as html, no matter what attributes it has
28480 !! options
28481 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
28482 !! html/parsoid
28483 <a bad='true' href='http://boo.org'><img src='http://boohoo.org' /></a>
28484 !! wikitext
28485 [http://boo.org http://boohoo.org]
28486 !! end
28487
28488 # Misnested is an indication that selser can reuse the source but these have
28489 # shown to sneak through on occasion. See T101768.
28490 # The original wikitext here is: [http://test.com [[one]] two three]
28491 !! test
28492 Strip span tags added to mark misnested links
28493 !! options
28494 parsoid=html2wt
28495 !! html/parsoid
28496 <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>
28497 !! wikitext
28498 [http://test.com][[one]] two three
28499 !! end
28500
28501 !! test
28502 Catch regression when unpacking misnested links
28503 !! options
28504 parsoid=wt2html
28505 !! wikitext
28506 {{echo|hi}}[http://example.com [[ho]]]
28507 !! html/parsoid
28508 <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>
28509 !! end
28510
28511 !! test
28512 Use data-parsoid.firstWikitextNode to compute newline constraints for template content
28513 !! options
28514 parsoid=html2wt
28515 !! html/parsoid
28516 <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|}"]}'>
28517 <tbody><tr><td>d
28518 </td></tr>
28519 </tbody></table>
28520 !! wikitext
28521 {{echo|a}}
28522 {|{{echo|c
28523 {{!}}d
28524 }}
28525 |}
28526 !! end
28527
28528 ## This test verifies the presence and computation of this attribute indirectly
28529 ## by making an edit and ensuring that the serialization is correct (which it would be
28530 ## only if firstWikitextNode is properly set).
28531 !! test
28532 data-parsoid.firstWikitextNode should be computed properly in the presence of fostered content
28533 !! options
28534 parsoid= {
28535 "modes": ["wt2wt"],
28536 "changes": [
28537 [ "div#x", "remove" ],
28538 [ "div", "before", "<div>new</div>" ]
28539 ]
28540 }
28541 !! wikitext
28542 <div id="x">foo</div>
28543 {|
28544 {{echo|<div>boo</div>
28545 {{!}}b}}
28546 |c
28547 |}
28548 !! wikitext/edited
28549
28550 <div>new</div>
28551 {|
28552 {{echo|<div>boo</div>
28553 {{!}}b}}
28554 |c
28555 |}
28556 !! end
28557
28558 # --------------------------------------------
28559 # Tests spec'ing wikitext serialization norms |
28560 # --------------------------------------------
28561
28562 !! test
28563 Serialize multi-line indent-pre starting with wikitext syntax
28564 !! options
28565 parsoid=html2wt
28566 !! html/parsoid
28567 <pre>* 1
28568 ** 2
28569 * 3</pre>
28570 !! wikitext
28571 * 1
28572 ** 2
28573 * 3
28574 !! end
28575
28576 !! test
28577 1. Categories should always be serialized on their own line
28578 !! options
28579 parsoid=html2wt
28580 !! html/parsoid
28581 foo<link rel="mw:PageProp/Category" href="./Category:Foo">bar
28582 !! wikitext
28583 foo
28584 [[Category:Foo]]
28585 bar
28586 !! end
28587
28588 !! test
28589 2. Categories that are part of templates should not introduce a line break
28590 !! wikitext
28591 foo {{echo|<span>bar</span> [[Category:baz]]}} bar
28592 !! html/parsoid
28593 <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>
28594 !! end
28595
28596 # Careful while editing these next 2 tests. There are \u200f characters
28597 # before and after the <link> tags in the HTML and following some
28598 # of the categories in wikitext
28599 # Do not remove these characters in edits.
28600 #
28601 # As part of the serialization, these bidi characters will get stripped.
28602 !! test
28603 RTL (\u200f) and LTR (\u200e) markers around category tags should be stripped
28604 !! options
28605 parsoid={
28606 "modes": ["html2wt"],
28607 "scrubWikitext": true
28608 }
28609 !! html/parsoid
28610 <p>‏<link rel="mw:PageProp/Category" href="./קטגוריה:טקסים" />‏
28611 ‏<link rel="mw:PageProp/Category" href="./קטגוריה:_שיטות_משפט" />‏</p>
28612 !! wikitext
28613 [[קטגוריה:טקסים]]
28614 [[קטגוריה: שיטות משפט]]
28615 !! end
28616
28617 !! test
28618 RTL (\u200f) and LTR (\u200e) markers should not be stripped if followed by a text node
28619 !! options
28620 parsoid={
28621 "modes": ["html2wt"],
28622 "scrubWikitext": true
28623 }
28624 !! html/parsoid
28625 <p>‏<link rel="mw:PageProp/Category" href="./קטגוריה:טקסים" />‏y</p>
28626 !! wikitext
28627 [[קטגוריה:טקסים]]
28628 ‏y
28629 !! end
28630
28631 !! test
28632 Lists: Add space after bullets
28633 !! options
28634 parsoid=html2wt
28635 !! html/parsoid
28636 <ul>
28637 <li>foo</li>
28638 <li> bar</li>
28639 <li><span> baz</span></li>
28640 </ul>
28641 !! wikitext
28642 * foo
28643 * bar
28644 * <span> baz</span>
28645 !! end
28646
28647 !! test
28648 1. Headings: Add space before/after == (T53744)
28649 !! options
28650 parsoid=html2wt
28651 !! html/parsoid
28652 <h2>foo</h2>
28653 <h2> bar</h2>
28654 <h2>baz </h2>
28655 <h2><span> baz</span></h2>
28656 !! wikitext
28657 == foo ==
28658
28659 == bar ==
28660
28661 == baz ==
28662
28663 == <span> baz</span> ==
28664 !! end
28665
28666 !! test
28667 2. Headings: Add space before/after == even after hoisted content
28668 !! options
28669 parsoid={
28670 "modes": ["html2wt"],
28671 "scrubWikitext": true
28672 }
28673 !! html/parsoid
28674 <h2> <link href="./Category:A2" rel="mw:PageProp/Category" />ok</h2>
28675 !! wikitext
28676 [[Category:A2]]
28677
28678 == ok ==
28679 !! end
28680
28681 !! test
28682 1. Headings: suppress newly created empty headings
28683 !! options
28684 parsoid={
28685 "modes": ["html2wt"],
28686 "scrubWikitext": true
28687 }
28688 !! html/parsoid
28689 <h2></h2>
28690 !! wikitext
28691 !! end
28692
28693 !! test
28694 2. Headings: don't suppress empty headings if scrubWikitext is false
28695 !! options
28696 parsoid=html2wt
28697 !! html/parsoid
28698 <h2></h2>
28699 !! wikitext
28700 ==<nowiki/>==
28701 !! end
28702
28703 !! test
28704 3. Headings: suppress empty headings on edits
28705 !! options
28706 parsoid={
28707 "modes": ["selser"],
28708 "scrubWikitext": true,
28709 "changes": [
28710 [ "#x", "remove"]
28711 ]
28712 }
28713 !! wikitext
28714 ==<span id="x">foo</span>==
28715 !! wikitext/edited
28716 !! end
28717
28718 !! test
28719 Headings: Replace <br/> with a single whitespace char (when scrubWikitext = true)
28720 !! options
28721 parsoid={
28722 "modes": ["html2wt"],
28723 "scrubWikitext": true
28724 }
28725 !! html/parsoid
28726 <h2>foo<br/>bar</h2>
28727 <h2>foo <span><br/>bar</span> baz</h2>
28728 !! wikitext
28729 == foo bar ==
28730
28731 == foo <span> bar</span> baz ==
28732 !! end
28733
28734 !! test
28735 Headings: Replace <br/> with a single whitespace char (when scrubWikitext = false)
28736 !! options
28737 parsoid={
28738 "modes": ["html2wt"],
28739 "scrubWikitext": false
28740 }
28741 !! html/parsoid
28742 <h2>foo<br/>bar</h2>
28743 !! wikitext
28744 == foo<br> bar ==
28745 !! end
28746
28747 !! test
28748 1. WT Quote Tags: suppress newly created empty style tags
28749 !! options
28750 parsoid={
28751 "modes": ["html2wt"],
28752 "scrubWikitext": true
28753 }
28754 !! html/parsoid
28755 <i></i><b></b>
28756 !! wikitext
28757 !! end
28758
28759 !! test
28760 2. WT Quote Tags: don't suppress empty style tags if scrubWikitext is false
28761 !! options
28762 parsoid=html2wt
28763 !! html/parsoid
28764 <i></i><b></b>
28765 !! wikitext
28766 ''<nowiki/>'''''<nowiki/>'''
28767 !! end
28768
28769 !! test
28770 3. WT Quote Tags: suppress empty style tags on edits
28771 !! options
28772 parsoid={
28773 "modes": ["selser"],
28774 "scrubWikitext": true,
28775 "changes": [
28776 [ "#x", "remove"]
28777 ]
28778 }
28779 !! wikitext
28780 '''<span id="x">foo</span>'''
28781 !! wikitext/edited
28782 !! end
28783
28784 !! test
28785 1. Anchors: suppress newly created empty anchors
28786 !! options
28787 parsoid={
28788 "modes": ["html2wt"],
28789 "scrubWikitext": true
28790 }
28791 !! html/parsoid
28792 <a rel="mw:WikiLink" href="./Test" title="Test"></a>
28793 !! wikitext
28794 !! end
28795
28796 !! test
28797 2. Anchors: don't suppress empty anchors if scrubWikitext is false
28798 !! options
28799 parsoid={
28800 "modes": ["html2wt"],
28801 "scrubWikitext": false
28802 }
28803 !! html/parsoid
28804 <a rel="mw:WikiLink" href="./Test" title="Test"></a>
28805 !! wikitext
28806 [[Test|<nowiki/>]]
28807 !! end
28808
28809 !! test
28810 3. Anchors: suppress empty anchors on edits
28811 !! options
28812 parsoid={
28813 "modes": ["selser"],
28814 "scrubWikitext": true,
28815 "changes": [
28816 [ "#x", "remove"]
28817 ]
28818 }
28819 !! wikitext
28820 [[Test|<span id="x">foo</span>]]
28821 !! wikitext/edited
28822 !! end
28823
28824 !! test
28825 3a. Anchors: do not suppress numbered extlinks
28826 !! options
28827 parsoid={
28828 "modes": ["wt2wt"],
28829 "scrubWikitext": true
28830 }
28831 !! wikitext
28832 [http://foo.com]
28833 !! html/parsoid
28834 <a rel="mw:ExtLink" href="http://foo.com"></a>
28835 !! end
28836
28837 !! test
28838 3b. Anchors: do not suppress numbered extlinks
28839 !! options
28840 parsoid={
28841 "modes": ["wt2wt"],
28842 "scrubWikitext": true,
28843 "changes": [
28844 [ "#x", "remove"]
28845 ]
28846 }
28847 !! wikitext
28848 [http://foo.com <span id="x">foo</span>]
28849 !! wikitext/edited
28850 [http://foo.com]
28851 !! end
28852
28853 !!test
28854 Normalizations should be restricted to edited content
28855 !!options
28856 parsoid={
28857 "modes": ["selser"],
28858 "scrubWikitext": true,
28859 "changes": [
28860 [ "h1", "before", "<i></i>"]
28861 ]
28862 }
28863 !!wikitext
28864 a
28865 = =
28866 b
28867 !!wikitext/edited
28868 a
28869 = =
28870 b
28871 !!end
28872
28873 !! test
28874 1. Multiple normalizations (html2wt)
28875 !! options
28876 parsoid={
28877 "modes": ["html2wt"],
28878 "scrubWikitext": true
28879 }
28880 !! html
28881 <h2><i></i></h2>
28882 <p><a href='Foo' rel='mw:WikiLink'>foo<i></i>
28883 </a><b><i></i></b>x</p>
28884 !! wikitext
28885
28886 [[foo]]
28887 x
28888
28889 !! end
28890
28891 !! test
28892 2. Multiple normalizations (selser)
28893 !! options
28894 parsoid={
28895 "modes": ["selser"],
28896 "scrubWikitext": true,
28897 "changes": [
28898 [ "#x", "after", "<h1><i></i></h1>\n<p> x<b></b></p>"]
28899 ]
28900 }
28901 !! wikitext
28902 <span id="x">foo</span>
28903 !! wikitext/edited
28904 <span id="x">foo</span>
28905
28906 x
28907 !! end
28908
28909 !! test
28910 1. Indent Pre Nowiki: suppress whitespace at the start of new paragraph
28911 !! options
28912 parsoid={
28913 "modes": ["html2wt"],
28914 "scrubWikitext": true
28915 }
28916 !! html/parsoid
28917 <p> hi</p>
28918 <p> hello</p>
28919 !! wikitext
28920 hi
28921
28922 hello
28923 !! end
28924
28925 !! test
28926 2. Indent Pre Nowiki: don't suppress whitespace at the start of new paragraph if scrubWikitext is false
28927 !! options
28928 parsoid=html2wt
28929 !! html/parsoid
28930 <p> hi</p>
28931 <p> hello</p>
28932 !! wikitext
28933 <nowiki> </nowiki>hi
28934
28935 <nowiki> </nowiki> hello
28936 !! end
28937
28938 !! test
28939 3. Indent Pre Nowiki: suppress whitespace after newlines in new paragraph or table cell
28940 !! options
28941 parsoid={
28942 "modes": ["html2wt"],
28943 "scrubWikitext": true
28944 }
28945 !! html/parsoid
28946 <p>Foo
28947 bar
28948 baz</p>
28949
28950 <table><tr><td>Foo
28951 bar
28952 baz bang</td></tr></table>
28953
28954 <p><!--boo--> foo
28955 bar</p>
28956
28957 <p> foo
28958 bar<span>boo</span></p>
28959 !! wikitext
28960 Foo
28961 bar
28962 baz
28963
28964 {|
28965 |Foo
28966 bar
28967 baz bang
28968 |}
28969
28970 <!--boo-->foo
28971 bar
28972
28973 foo
28974 bar<span>boo</span>
28975 !! end
28976
28977 !! test
28978 4. Indent Pre Nowiki: suppress leading whitespace in edited paragraphs
28979 !! options
28980 parsoid={
28981 "modes": ["selser"],
28982 "scrubWikitext": true,
28983 "changes": [
28984 [ "p", "html", " a\n b" ]
28985 ]
28986 }
28987 !! wikitext
28988 xyz
28989 !! wikitext/edited
28990 a
28991 b
28992 !! end
28993
28994 !! test
28995 1. New links that end in spaces
28996 !! options
28997 parsoid={
28998 "modes": ["html2wt"],
28999 "scrubWikitext": false
29000 }
29001 !! html/parsoid
29002 <p><a rel="mw:WikiLink" href="./Berlin" title="Berlin">Berlin </a>is the capital of Germany.</p>
29003 <p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo </a><b>bar</b></p>
29004 <p><a rel="mw:WikiLink" href="./Boston" title="Boston">Boston </a> is a city.</p>
29005 !! wikitext
29006 [[Berlin ]]<nowiki/>is the capital of Germany.
29007
29008 [[Foo ]]'''bar'''
29009
29010 [[Boston ]] is a city.
29011 !! end
29012
29013 !! test
29014 2. New links that end in spaces
29015 !! options
29016 parsoid={
29017 "modes": ["html2wt"],
29018 "scrubWikitext": true
29019 }
29020 !! html/parsoid
29021 <p><a rel="mw:WikiLink" href="./Berlin" title="Berlin">Berlin </a>is the capital of Germany.</p>
29022 <p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo </a><b>bar</b></p>
29023 <p><a rel="mw:WikiLink" href="./Boston" title="Boston">Boston </a> is a city.</p>
29024 !! wikitext
29025 [[Berlin]] is the capital of Germany.
29026
29027 [[Foo]] '''bar'''
29028
29029 [[Boston]] is a city.
29030 !! end
29031
29032 !! test
29033 1. Table cells with escapable prefixes
29034 !! options
29035 parsoid={
29036 "modes": ["html2wt"],
29037 "scrubWikitext": false
29038 }
29039 !! html
29040 <table>
29041 <tr><td>a</td></tr>
29042 <tr><td>-</td></tr>
29043 <tr><td>+</td></tr>
29044 </table>
29045 !! wikitext
29046 {|
29047 |a
29048 |-
29049 |<nowiki>-</nowiki>
29050 |-
29051 |<nowiki>+</nowiki>
29052 |}
29053 !! end
29054
29055 !! test
29056 2. Table cells with escapable prefixes
29057 !! options
29058 parsoid={
29059 "modes": ["html2wt"],
29060 "scrubWikitext": true
29061 }
29062 !! html
29063 <table>
29064 <tr><td>a</td></tr>
29065 <tr><td>-</td></tr>
29066 <tr><td>+</td></tr>
29067 </table>
29068 !! wikitext
29069 {|
29070 |a
29071 |-
29072 | -
29073 |-
29074 | +
29075 |}
29076 !! end
29077
29078 !! test
29079 3a. Table cells with escapable prefixes after edits
29080 !! options
29081 parsoid={
29082 "modes": ["selser"],
29083 "scrubWikitext": true,
29084 "changes": [
29085 [ "table tbody tr:first-child td:first-child", "remove"]
29086 ]
29087 }
29088 !! wikitext
29089 {|
29090 |a||-
29091 |}
29092 !! wikitext/edited
29093 {|
29094 | -
29095 |}
29096 !! end
29097
29098 !! test
29099 3b. Table cells with escapable prefixes after edits
29100 !! options
29101 parsoid={
29102 "modes": ["selser"],
29103 "scrubWikitext": true,
29104 "changes": [
29105 [ "table tbody tr:first-child td:first-child", "html", "-" ],
29106 [ "#x", "remove" ]
29107 ]
29108 }
29109 !! wikitext
29110 {|
29111 |pqr
29112 |<span id="x">foo</span>+
29113 |}
29114 !! wikitext/edited
29115 {|
29116 | -
29117 | +
29118 |}
29119 !! end
29120
29121 # FIXME: This test will fail because
29122 # normalization doesn't realize that the id attribute
29123 # will eliminate the escapable scenario
29124 !! test
29125 4a. Table cells without escapable prefixes after edits
29126 !! options
29127 parsoid={
29128 "modes": ["selser"],
29129 "scrubWikitext": true,
29130 "changes": [
29131 [ "#x", "html", "-" ]
29132 ]
29133 }
29134 !! wikitext
29135 {|
29136 | id="x" |abcd
29137 |}
29138 !! wikitext/edited
29139 {|
29140 | id="x" |-
29141 |}
29142 !! end
29143
29144 ## This tests normalizer's ability to discriminate between
29145 ## cells having identical content.
29146 !! test
29147 4b. Table cells without escapable prefixes after edits
29148 !! options
29149 parsoid={
29150 "modes": ["selser"],
29151 "scrubWikitext": true,
29152 "changes": [
29153 [ "td", "html", "-" ]
29154 ]
29155 }
29156 !! wikitext
29157 {|
29158 |a||b
29159 |}
29160 !! wikitext/edited
29161 {|
29162 | -||-
29163 |}
29164 !! end
29165
29166 ## This tests normalizer's ability to not be tripped by
29167 ## comments (and whitespace)
29168 !! test
29169 4c. Table cells without escapable prefixes after edits
29170 !! options
29171 parsoid={
29172 "modes": ["selser"],
29173 "scrubWikitext": true,
29174 "changes": [
29175 [ "table tbody tr td:first-child", "remove" ]
29176 ]
29177 }
29178 !! wikitext
29179 {|
29180 |-
29181 <!--foo--> |a||-
29182 |}
29183 !! wikitext/edited
29184 {|
29185 |-
29186 <!--foo--> | -
29187 |}
29188 !! end
29189
29190 ## This tests normalizer's ability to handle HTML cells
29191 !! test
29192 4d. Table cells without escapable prefixes after edits
29193 !! options
29194 parsoid={
29195 "modes": ["selser"],
29196 "scrubWikitext": true,
29197 "changes": [
29198 [ "td", "html", "-" ]
29199 ]
29200 }
29201 !! wikitext
29202 <table>
29203 <tr><td>a</td></tr>
29204 </table>
29205 !! wikitext/edited
29206 <table>
29207 <tr><td>-</td></tr>
29208 </table>
29209 !! end
29210
29211 ## T111151 Remove font elements without attributes
29212 !! test
29213 5a. font tags without attributes should be dropped in scrubWikitext mode
29214 !! options
29215 parsoid={
29216 "modes": ["html2wt"],
29217 "scrubWikitext": true
29218 }
29219 !! html
29220 <font>foo</font>
29221 <font><font>bar</font></font>
29222 <font class="x">boo</font>
29223 !! wikitext
29224 foo
29225 bar
29226 <font class="x">boo</font>
29227 !! end
29228
29229 !! test
29230 5b. font tags should not be dropped without scrubWikitext being enabled
29231 !! options
29232 parsoid={
29233 "modes": ["html2wt"],
29234 "scrubWikitext": false
29235 }
29236 !! html
29237 <font>foo</font>
29238 !! wikitext
29239 <font>foo</font>
29240 !! end
29241
29242 !! test
29243 Escape nowiki DOM elements
29244 !! options
29245 parsoid=html2wt
29246 !! html/parsoid
29247 <nowiki><i>foo</i></nowiki>
29248 !! wikitext
29249 &lt;nowiki&gt;''foo''&lt;/nowiki&gt;
29250 !! end
29251
29252 # This is meant to be an interim fix while we go about figuring out
29253 # how to not introduce these trailing <nowiki/>s in the first place.
29254 !! test
29255 T115717: Strip trailing <nowiki/>s (without affecting valid uses)
29256 !! options
29257 parsoid=html2wt
29258 !! html/parsoid
29259 <p>x<meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/>
29260 y</p>
29261 <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>
29262 <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>
29263 !! wikitext
29264 x
29265 y
29266
29267 {{echo|
29268 1 = <nowiki/>}}
29269
29270 {{echo|
29271 1 = <nowiki/>
29272 }}
29273 !! end
29274
29275 # ---------------------------------------------------
29276 # End of tests spec'ing wikitext serialization norms |
29277 # ---------------------------------------------------
29278
29279 # T104032
29280 !! test
29281 Bare inline nodes not wrapped inside p-tags should be treated as p-wrapped
29282 !! options
29283 parsoid=html2wt
29284 !! html/parsoid
29285 a<p>b</p>
29286 <b>c</b><p>d</p>
29287 <table><tr>
29288 <td>a<p>b</p></td>
29289 <td><b>c</b><p>d</p></td>
29290 </tr></table>
29291 !! wikitext
29292 a
29293
29294 b
29295
29296 '''c'''
29297
29298 d
29299 {|
29300 |a
29301 b
29302 |'''c'''
29303 d
29304 |}
29305 !! end
29306
29307 !! test
29308 Anchor without href scenarios
29309 !! options
29310 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
29311 !! html/parsoid
29312 <a class="bc"></a>
29313 <a class="no">dice</a>
29314 <a name="foo"></a>
29315 !! wikitext
29316
29317 dice
29318 <span name="foo"></span>
29319 !! end
29320
29321 !! test
29322 New transclusion added after a list should be serialized after the list
29323 !! options
29324 parsoid=html2wt
29325 !! html/parsoid
29326 <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>
29327 !! wikitext
29328 * a
29329 {{echo|foo}}
29330 !! end
29331
29332 # -----------------------------------------------------------------
29333 # End of section for Parsoid-only html2wt tests for serialization
29334 # of new content
29335 # -----------------------------------------------------------------
29336
29337 # -----------------------------------------------------------------
29338 # The following section of tests are primarily to spec behavior of
29339 # the selective serializer. All these tests have manual selser
29340 # changes. The automated selser changes for all tests handle the
29341 # wide variation of changes, but these tests here capture specs
29342 # deterministically.
29343 # ----------------------------------------------------------------
29344
29345 ## T90517
29346 !! test
29347 Selser: New comments should not be lost
29348 !! options
29349 parsoid={
29350 "modes": ["selser"],
29351 "changes": [
29352 [ "#a", "after", "<!--c1-->" ],
29353 [ "#b", "before", "<!--c2-->" ]
29354 ]
29355 }
29356 !! wikitext
29357 <span id="a">a</span>
29358
29359 <span id="b">b</span>
29360 !! wikitext/edited
29361 <span id="a">a</span><!--c1-->
29362
29363 <!--c2--><span id="b">b</span>
29364 !! end
29365
29366 ## T89383
29367 !! test
29368 Selser: Check for validity of DSR before using it
29369 !! options
29370 parsoid={
29371 "modes": ["selser"],
29372 "changes": [
29373 [ "#a", "before", "<meta property='mw:PageProp/displaytitle' content='foo'>" ]
29374 ]
29375 }
29376 !! wikitext
29377 <span id="a">a</span>
29378 !! wikitext/edited
29379 {{DISPLAYTITLE:foo}}
29380 <span id="a">a</span>
29381 !! end
29382
29383 !! test
29384 1. DOMDiff: Changes to <ref> content should be looked up using id
29385 !! options
29386 parsoid={
29387 "modes": ["selser"],
29388 "changes": [
29389 ["#X", "after", "bar"],
29390 ["#Y", "after", "baz"]
29391 ]
29392 }
29393 !! wikitext
29394 X <ref><span id="X">foo</span></ref>
29395 Y <ref name="a" />
29396 <references>
29397 <ref name="a"><span id="Y">foo</span></ref>
29398 </references>
29399 !! wikitext/edited
29400 X <ref><span id="X">foo</span>bar</ref>
29401 Y <ref name="a" />
29402 <references>
29403 <ref name="a"><span id="Y">foo</span>baz</ref>
29404 </references>
29405 !! end
29406
29407 !! test
29408 2. DOMDiff: Changes to <ref> content should be looked up using id
29409 !! options
29410 parsoid={
29411 "modes": ["selser"],
29412 "changes": [
29413 ["#Z", "after", "bar"]
29414 ]
29415 }
29416 !! wikitext
29417 A <ref>foo bar for a</ref>
29418 B <ref group="X" name="b" />
29419
29420 <references />
29421
29422 <references group="X">
29423 <ref name="b"><span id="Z">foo</span></ref>
29424 </references>
29425 !! wikitext/edited
29426 A <ref>foo bar for a</ref>
29427 B <ref group="X" name="b" />
29428
29429 <references />
29430
29431 <references group="X">
29432 <ref name="b"><span id="Z">foo</span>bar</ref>
29433 </references>
29434 !! end
29435
29436 !! test
29437 DOMDiff: Edits to content nested in elements with templated attributes should not be lost (T139388)
29438 !! options
29439 parsoid={
29440 "modes": ["selser"],
29441 "changes": [
29442 [ "div:first-child", "text", "bar" ]
29443 ]
29444 }
29445 !! wikitext
29446 <div style="{{1x|color:red;}}%">foo</div>
29447 !! wikitext/edited
29448 <div style="{{1x|color:red;}}%">bar</div>
29449 !! end
29450
29451 !! test
29452 Empty LI (T49673)
29453 !! wikitext
29454 * a
29455 *
29456 *
29457 * b
29458 !! html/php+tidy
29459 <ul>
29460 <li>a</li>
29461 <li class="mw-empty-elt"></li>
29462 <li class="mw-empty-elt"></li>
29463 <li>b</li>
29464 </ul>
29465 !! end
29466
29467 !! test
29468 Thumbnail output
29469 !! wikitext
29470 [[File:Thumb.png|thumb]]
29471 !! html/php+tidy
29472 <div class="thumb tright">
29473 <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>
29474 <div class="thumbcaption">
29475 <div class="magnify"><a href="/wiki/File:Thumb.png" class="internal" title="Enlarge"></a></div>
29476 </div>
29477 </div>
29478 </div>
29479 !! end
29480
29481 !! test
29482 unclosed internal link XSS (T137264)
29483 !! wikitext
29484 [[#%3Cscript%3Ealert(1)%3C/script%3E|
29485 !! html/php
29486 <p>[[#&lt;script&gt;alert(1)&lt;/script&gt;|
29487 </p>
29488 !! html/parsoid
29489 <p>[[#%3Cscript%3Ealert(1)%3C/script%3E|</p>
29490 !! end
29491
29492 # Use $wgRawHtml to inject a <style> tag, since you normally can't in wikitext
29493 # (Parsoid doesn't support $wgRawHtml==true)
29494 !! test
29495 Validating that <style> isn't eaten by tidy (T167349)
29496 !! options
29497 wgRawHtml=1
29498 !! wikitext
29499 <div class="foo">
29500 <html><style>.foo::before { content: "<foo>"; }</style></html>
29501 <html><style data-mw-foobar="baz">.foo::after { content: "<bar>"; }</style></html>
29502 </div>
29503 !! html/php+tidy
29504 <div class="foo">
29505 <style>.foo::before { content: "<foo>"; }</style>
29506 <style data-mw-foobar="baz">.foo::after { content: "<bar>"; }</style>
29507 </div>
29508 !! end
29509
29510 !! test
29511 Decoding of HTML entities in headings and links for IDs and link fragments (T103714)
29512 !! wikitext
29513 == A&B&amp;C&amp;amp;D&amp;amp;amp;E ==
29514 [[#A&B&amp;C&amp;amp;D&amp;amp;amp;E]]
29515 !! html/php
29516 <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>
29517 <p><a href="#A.26B.26C.26amp.3BD.26amp.3Bamp.3BE">#A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E</a>
29518 </p>
29519 !! end
29520
29521 !! test
29522 Decoding of HTML entities in indicator names for IDs (T104196)
29523 !! options
29524 showindicators
29525 !! wikitext
29526 <indicator name="1&2&amp;3&amp;amp;4&amp;amp;amp;5">Indicator</indicator>
29527 !! html/php
29528 1&2&3&amp;4&amp;amp;5=Indicator
29529
29530 !! end
29531
29532 !! test
29533 HTML5 ids: fallback to legacy
29534 !! config
29535 wgFragmentMode=[ 'html5', 'legacy' ]
29536 !! wikitext
29537 == Foo bar ==
29538
29539 == foo Bar ==
29540
29541 == Тест ==
29542
29543 == Тест ==
29544
29545 == тест ==
29546
29547 == Hey < # " > % : ' ==
29548 [[#Foo bar]] [[#foo Bar]] [[#Тест]] [[#тест]] [[#Hey < # " > % : ']]
29549
29550 {{anchorencode:💩}} <span id="{{anchorencode:💩}}"></span>
29551
29552 <!-- These two links should produce identical HTML -->
29553 [[#啤酒]] [[#%E5%95%A4%E9%85%92]]
29554
29555 !! html/php
29556 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
29557 <ul>
29558 <li class="toclevel-1 tocsection-1"><a href="#Foo_bar"><span class="tocnumber">1</span> <span class="toctext">Foo bar</span></a></li>
29559 <li class="toclevel-1 tocsection-2"><a href="#foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext">foo Bar</span></a></li>
29560 <li class="toclevel-1 tocsection-3"><a href="#Тест"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
29561 <li class="toclevel-1 tocsection-4"><a href="#Тест_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
29562 <li class="toclevel-1 tocsection-5"><a href="#тест"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
29563 <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>
29564 </ul>
29565 </div>
29566
29567 <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>
29568 <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>
29569 <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>
29570 <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>
29571 <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>
29572 <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>
29573 <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>
29574 </p><p>💩 <span id="💩"></span>
29575 </p><p><a href="#啤酒">#啤酒</a> <a href="#啤酒">#啤酒</a>
29576 </p>
29577 !! end
29578
29579 !! test
29580 HTML5 ids: legacy with a fallback to modern
29581 !! config
29582 wgFragmentMode=[ 'legacy', 'html5' ]
29583 !! wikitext
29584 == Foo bar ==
29585
29586 == foo Bar ==
29587
29588 == Тест ==
29589
29590 == Тест ==
29591
29592 == тест ==
29593
29594 == Hey < # " > % : ' ==
29595 [[#Foo bar]] [[#foo Bar]] [[#Тест]] [[#тест]] [[#Hey < # " > % : ']]
29596
29597 {{anchorencode:💩}} <span id="{{anchorencode:💩}}"></span>
29598
29599 <!-- These two links should produce identical HTML -->
29600 [[#啤酒]] [[#%E5%95%A4%E9%85%92]]
29601
29602 !! html/php
29603 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
29604 <ul>
29605 <li class="toclevel-1 tocsection-1"><a href="#Foo_bar"><span class="tocnumber">1</span> <span class="toctext">Foo bar</span></a></li>
29606 <li class="toclevel-1 tocsection-2"><a href="#foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext">foo Bar</span></a></li>
29607 <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>
29608 <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>
29609 <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>
29610 <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>
29611 </ul>
29612 </div>
29613
29614 <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>
29615 <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>
29616 <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>
29617 <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>
29618 <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>
29619 <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>
29620 <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>
29621 </p><p>.F0.9F.92.A9 <span id=".F0.9F.92.A9"></span>
29622 </p><p><a href="#.E5.95.A4.E9.85.92">#啤酒</a> <a href="#.E5.95.A4.E9.85.92">#啤酒</a>
29623 </p>
29624 !! end
29625
29626 !! test
29627 HTML5 ids: no legacy
29628 !! config
29629 wgFragmentMode=[ 'html5' ]
29630 !! wikitext
29631 == Foo bar ==
29632
29633 == foo Bar ==
29634
29635 == Тест ==
29636
29637 == Тест ==
29638
29639 == тест ==
29640
29641 == Hey < # " > % : ' ==
29642 [[#Foo bar]] [[#foo Bar]] [[#Тест]] [[#тест]] [[#Hey < # " > % : ']]
29643
29644 {{anchorencode:💩}} <span id="{{anchorencode:💩}}"></span>
29645
29646 <!-- These two links should produce identical HTML -->
29647 [[#啤酒]] [[#%E5%95%A4%E9%85%92]]
29648
29649 !! html/php
29650 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
29651 <ul>
29652 <li class="toclevel-1 tocsection-1"><a href="#Foo_bar"><span class="tocnumber">1</span> <span class="toctext">Foo bar</span></a></li>
29653 <li class="toclevel-1 tocsection-2"><a href="#foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext">foo Bar</span></a></li>
29654 <li class="toclevel-1 tocsection-3"><a href="#Тест"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
29655 <li class="toclevel-1 tocsection-4"><a href="#Тест_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
29656 <li class="toclevel-1 tocsection-5"><a href="#тест"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
29657 <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>
29658 </ul>
29659 </div>
29660
29661 <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>
29662 <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>
29663 <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>
29664 <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>
29665 <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>
29666 <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>
29667 <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>
29668 </p><p>💩 <span id="💩"></span>
29669 </p><p><a href="#啤酒">#啤酒</a> <a href="#啤酒">#啤酒</a>
29670 </p>
29671 !! end
29672
29673 !! test
29674 T90902: Normalize weird characters in section IDs
29675 !! config
29676 wgFragmentMode=[ 'html5', 'legacy' ]
29677 !! wikitext
29678 == Foo&nbsp;bar ==
29679 [[#Foo&nbsp;bar]]
29680
29681 !! html/php
29682 <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>
29683 <p><a href="#Foo_bar">#Foo&#160;bar</a>
29684 </p>
29685 !! end