fb549f5ae184b2c38170a3dc89df0a5c0cbe359d
[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 Self closed html pairs (T7487)
18524 !! wikitext
18525 <center><font id="bug" />Centered text</center>
18526 <div><font id="bug2" />In div text</div>
18527 !! html+tidy
18528 <center><font id="bug"></font>Centered text</center>
18529 <div><font id="bug2"></font>In div text</div>
18530 !! end
18531
18532 #
18533 #
18534 #
18535
18536 !! test
18537 Punctuation: nbsp before exclamation
18538 !! wikitext
18539 C'est grave !
18540 !! html
18541 <p>C'est grave&#160;!
18542 </p>
18543 !! end
18544
18545 !! test
18546 Punctuation: CSS !important (T13874)
18547 !! wikitext
18548 <div style="width:50% !important">important</div>
18549 !! html
18550 <div style="width:50% !important">important</div>
18551
18552 !!end
18553
18554 !! test
18555 Punctuation: CSS ! important (T13874; with space after)
18556 !! wikitext
18557 <div style="width:50% ! important">important</div>
18558 !! html
18559 <div style="width:50% ! important">important</div>
18560
18561 !!end
18562
18563 !! test
18564 HTML bullet list, closed tags (T7497)
18565 !! wikitext
18566 <ul>
18567 <li>One</li>
18568 <li>Two</li>
18569 </ul>
18570 !! html/php
18571 <ul>
18572 <li>One</li>
18573 <li>Two</li>
18574 </ul>
18575
18576 !! html/parsoid
18577 <ul data-parsoid='{"stx":"html"}'>
18578 <li data-parsoid='{"stx":"html"}'>One</li>
18579 <li data-parsoid='{"stx":"html"}'>Two</li>
18580 </ul>
18581
18582 !! end
18583
18584 !! test
18585 HTML bullet list, unclosed tags (T7497)
18586 !! wikitext
18587 <ul>
18588 <li>One
18589 <li>Two
18590 </ul>
18591 !! html/php+tidy
18592 <ul>
18593 <li>One</li>
18594 <li>Two</li>
18595 </ul>
18596 !! html/parsoid
18597 <ul data-parsoid='{"stx":"html"}'>
18598 <li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
18599 <li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
18600 </ul>
18601
18602 !! end
18603
18604 !! test
18605 HTML ordered list, closed tags (T7497)
18606 !! wikitext
18607 <ol>
18608 <li>One</li>
18609 <li>Two</li>
18610 </ol>
18611 !! html/php
18612 <ol>
18613 <li>One</li>
18614 <li>Two</li>
18615 </ol>
18616
18617 !! html/parsoid
18618 <ol data-parsoid='{"stx":"html"}'>
18619 <li data-parsoid='{"stx":"html"}'>One</li>
18620 <li data-parsoid='{"stx":"html"}'>Two</li>
18621 </ol>
18622
18623 !! end
18624
18625 !! test
18626 HTML ordered list, unclosed tags (T7497)
18627 !! options
18628 !! wikitext
18629 <ol>
18630 <li>One
18631 <li>Two
18632 </ol>
18633 !! html/php+tidy
18634 <ol>
18635 <li>One</li>
18636 <li>Two</li>
18637 </ol>
18638 !! html/parsoid
18639 <ol data-parsoid='{"stx":"html"}'>
18640 <li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
18641 <li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
18642 </ol>
18643
18644 !! end
18645
18646 !! test
18647 HTML nested bullet list, closed tags (T7497)
18648 !! wikitext
18649 <ul>
18650 <li>One</li>
18651 <li>Two:
18652 <ul>
18653 <li>Sub-one</li>
18654 <li>Sub-two</li>
18655 </ul>
18656 </li>
18657 </ul>
18658 !! html/php
18659 <ul>
18660 <li>One</li>
18661 <li>Two:
18662 <ul>
18663 <li>Sub-one</li>
18664 <li>Sub-two</li>
18665 </ul>
18666 </li>
18667 </ul>
18668
18669 !! html/parsoid
18670 <ul data-parsoid='{"stx":"html"}'>
18671 <li data-parsoid='{"stx":"html"}'>One</li>
18672 <li data-parsoid='{"stx":"html"}'>Two:
18673 <ul data-parsoid='{"stx":"html"}'>
18674 <li data-parsoid='{"stx":"html"}'>Sub-one</li>
18675 <li data-parsoid='{"stx":"html"}'>Sub-two</li>
18676 </ul>
18677 </li>
18678 </ul>
18679 !! end
18680
18681 !! test
18682 HTML nested bullet list, open tags (T7497)
18683 !! wikitext
18684 <ul>
18685 <li>One
18686 <li>Two:
18687 <ul>
18688 <li>Sub-one
18689 <li>Sub-two
18690 </ul>
18691 </ul>
18692 !! html/php+tidy
18693 <ul>
18694 <li>One</li>
18695 <li>Two:
18696 <ul>
18697 <li>Sub-one</li>
18698 <li>Sub-two</li>
18699 </ul>
18700 </li>
18701 </ul>
18702 !! html/parsoid
18703 <ul>
18704 <li>One
18705 </li>
18706 <li>Two:
18707 <ul>
18708 <li>Sub-one
18709 </li>
18710 <li>Sub-two
18711 </li>
18712 </ul>
18713 </li>
18714 </ul>
18715
18716 !! end
18717
18718 !! test
18719 HTML nested ordered list, closed tags (T7497)
18720 !! wikitext
18721 <ol>
18722 <li>One</li>
18723 <li>Two:
18724 <ol>
18725 <li>Sub-one</li>
18726 <li>Sub-two</li>
18727 </ol>
18728 </li>
18729 </ol>
18730 !! html
18731 <ol>
18732 <li>One</li>
18733 <li>Two:
18734 <ol>
18735 <li>Sub-one</li>
18736 <li>Sub-two</li>
18737 </ol>
18738 </li>
18739 </ol>
18740
18741 !! end
18742
18743 !! test
18744 HTML nested ordered list, open tags (T7497)
18745 !! wikitext
18746 <ol>
18747 <li>One
18748 <li>Two:
18749 <ol>
18750 <li>Sub-one
18751 <li>Sub-two
18752 </ol>
18753 </ol>
18754 !! html/php
18755 <ol>
18756 <li>One
18757 <li>Two:
18758 <ol>
18759 <li>Sub-one
18760 <li>Sub-two
18761 </ol>
18762 </ol>
18763
18764 !! html/parsoid
18765 <ol>
18766 <li>One
18767 </li>
18768 <li>Two:
18769 <ol>
18770 <li>Sub-one
18771 </li>
18772 <li>Sub-two
18773 </li>
18774 </ol>
18775 </li>
18776 </ol>
18777
18778 !! end
18779
18780 !! test
18781 HTML ordered list item with parameters oddity
18782 !! wikitext
18783 <ol><li id="fragment">One</li>
18784 </ol>
18785 !! html
18786 <ol><li id="fragment">One</li>
18787 </ol>
18788
18789 !! end
18790
18791 # parsoid doesn't explicitly mark autonumbered links, see T55505
18792 !!test
18793 T7918: autonumbering
18794 !! wikitext
18795 [http://first/] [http://second] [ftp://ftp]
18796
18797 ftp://inlineftp
18798
18799 [mailto:enclosed@mail.tld With target]
18800
18801 [mailto:enclosed@mail.tld]
18802
18803 mailto:inline@mail.tld
18804 !! html/php
18805 <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>
18806 </p><p><a rel="nofollow" class="external free" href="ftp://inlineftp">ftp://inlineftp</a>
18807 </p><p><a rel="nofollow" class="external text" href="mailto:enclosed@mail.tld">With target</a>
18808 </p><p><a rel="nofollow" class="external autonumber" href="mailto:enclosed@mail.tld">[4]</a>
18809 </p><p><a rel="nofollow" class="external free" href="mailto:inline@mail.tld">mailto:inline@mail.tld</a>
18810 </p>
18811 !! html/parsoid
18812 <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>
18813 <p><a rel="mw:ExtLink" href="ftp://inlineftp">ftp://inlineftp</a></p>
18814 <p><a rel="mw:ExtLink" href="mailto:enclosed@mail.tld">With target</a></p>
18815 <p><a rel="mw:ExtLink" href="mailto:enclosed@mail.tld"></a></p>
18816 <p><a rel="mw:ExtLink" href="mailto:inline@mail.tld">mailto:inline@mail.tld</a></p>
18817 !! end
18818
18819
18820 #
18821 # Security and HTML correctness
18822 # From Nick Jenkins' fuzz testing
18823 #
18824
18825 !! test
18826 Fuzz testing: Parser13
18827 !! wikitext
18828 {|
18829 | http://a|
18830 !! html
18831 <table>
18832 <tr>
18833 <td>
18834 </td>
18835 </tr>
18836 </table>
18837
18838 !! end
18839
18840 !! test
18841 Fuzz testing: Parser14
18842 !! wikitext
18843 == onmouseover= ==
18844 http://__TOC__
18845 !! html
18846 <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>
18847 http://<div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
18848 <ul>
18849 <li class="toclevel-1 tocsection-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
18850 </ul>
18851 </div>
18852
18853
18854 !! html+tidy
18855 <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>
18856 <p>http://</p>
18857 <div id="toc" class="toc">
18858 <div class="toctitle">
18859 <h2>Contents</h2>
18860 </div>
18861 <ul>
18862 <li class="toclevel-1 tocsection-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
18863 </ul>
18864 </div>
18865 <p></p>
18866 !! end
18867
18868 !! test
18869 Fuzz testing: Parser14-table
18870 !! options
18871 parsoid=wt2html,html2html
18872 !! wikitext
18873 ==a==
18874 {| STYLE=__TOC__
18875 !! html
18876 <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>
18877 <table style="&#95;_TOC&#95;_">
18878 <tr><td></td></tr>
18879 </table>
18880
18881 !! html+tidy
18882 <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>
18883 <table style="__TOC__">
18884 <tr>
18885 <td></td>
18886 </tr>
18887 </table>
18888 !! html/parsoid
18889 <h2>a</h2>
18890 <table style="__TOC__"></table>
18891 !! end
18892
18893 # Known to produce bogus xml (extra </td>)
18894 !! test
18895 Fuzz testing: Parser16
18896 !! wikitext
18897 {|
18898 !https://||||||
18899 !! html
18900 <table>
18901 <tr>
18902 <th>https://</th>
18903 <th></th>
18904 <th></th>
18905 <th>
18906 </td>
18907 </tr>
18908 </table>
18909
18910 !! html+tidy
18911 <table>
18912 <tr>
18913 <th>https://</th>
18914 <th></th>
18915 <th></th>
18916 <th></th>
18917 </tr>
18918 </table>
18919 !! end
18920
18921 !! test
18922 Fuzz testing: Parser21
18923 !! wikitext
18924 {|
18925 ! irc://{{ftp://a" onmouseover="alert('hello world');"
18926 |
18927 !! html
18928 <table>
18929 <tr>
18930 <th> <a rel="nofollow" class="external free" href="irc://{{ftp://a">irc://{{ftp://a</a>" onmouseover="alert('hello world');"
18931 </th>
18932 <td>
18933 </td>
18934 </tr>
18935 </table>
18936
18937 !! end
18938
18939 !! test
18940 Fuzz testing: Parser22
18941 !! wikitext
18942 http://===r:::https://b
18943
18944 {|
18945 !! html
18946 <p><a rel="nofollow" class="external free" href="http://===r:::https://b">http://===r:::https://b</a>
18947 </p>
18948 <table>
18949 <tr><td></td></tr>
18950 </table>
18951
18952 !! end
18953
18954 # Known to produce bad XML for now
18955 !! test
18956 Fuzz testing: Parser24
18957 !! options
18958 parsoid=wt2html
18959 !! wikitext
18960 {|
18961 {{{|
18962 <u CLASS=
18963 | {{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--><noinclude>}}}} >
18964 <br style="onmouseover='alert(document.cookie);' " />
18965
18966 MOVE YOUR MOUSE CURSOR OVER THIS TEXT
18967 |
18968 !! html/php
18969 <table>
18970 {{{|
18971 <u class="&#124;">}}}} &gt;
18972 <br style="onmouseover=&#39;alert(document.cookie);&#39;" />
18973
18974 MOVE YOUR MOUSE CURSOR OVER THIS TEXT
18975 <tr>
18976 <td></u>
18977 </td>
18978 </tr>
18979 </table>
18980
18981 !! html/parsoid
18982 <p data-parsoid='{"fostered":true,"autoInsertedEnd":true}'>{{{|
18983 <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>"}'/>}}}} >
18984 <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}'>
18985
18986
18987
18988 <tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'></td></tr></tbody></table>
18989 !! end
18990
18991 # Note: the current result listed for this is not what the original one was,
18992 # but the original bug was JavaScript injection, which is fixed in any case.
18993 # It's not clear that the original result listed was any more correct than the
18994 # current one. Original result:
18995 # <p>{{{|
18996 # </p>
18997 # <li class="&#124;&#124;">
18998 # }}}blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
18999 !!test
19000 Fuzz testing: Parser25 (T8055)
19001 !! wikitext
19002 {{{
19003 |
19004 <LI CLASS=||
19005 >
19006 }}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE
19007 !! html/php
19008 <p>&lt;LI CLASS=blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
19009 </p>
19010 !! html/parsoid
19011 <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"]}'>
19012 </span><p about="#mwt1">&lt;LI CLASS=blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b></p>
19013 !! end
19014
19015 !!test
19016 Fuzz testing: URL adjacent extension (with space, clean)
19017 !! wikitext
19018 http://example.com <nowiki>junk</nowiki>
19019 !! html/php
19020 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> junk
19021 </p>
19022 !! html/parsoid
19023 <p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a> <span typeof="mw:Nowiki">junk</span></p>
19024 !! end
19025
19026 !!test
19027 Fuzz testing: URL adjacent extension (no space, dirty; nowiki)
19028 !! wikitext
19029 http://example.com<nowiki>junk</nowiki>
19030 !! html/php
19031 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>junk
19032 </p>
19033 !! html/parsoid
19034 <p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a><span typeof="mw:Nowiki">junk</span></p>
19035 !! end
19036
19037 !! test
19038 Fuzz testing: URL adjacent extension (no space, dirty; pre)
19039 !! wikitext
19040 http://example.com<pre>junk</pre>
19041 !! html/php
19042 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a><pre>junk</pre>
19043
19044 !! html/php+tidy
19045 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></p>
19046 <pre>
19047 junk
19048 </pre>
19049 !! html/parsoid
19050 <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>
19051 !! end
19052
19053 !! test
19054 Fuzz testing: image with bogus manual thumbnail
19055 !! wikitext
19056 [[Image:foobar.jpg|thumbnail= ]]
19057 !! html/php
19058 <div class="thumb tright"><div class="thumbinner" style="width:182px;">Error creating thumbnail: <div class="thumbcaption"></div></div></div>
19059
19060 !! html/parsoid
19061 <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>
19062 !! end
19063
19064 !! test
19065 Fuzz testing: encoded newline in generated HTML replacements (T8577)
19066 !! wikitext
19067 <pre dir="&#10;"></pre>
19068 !! html/php
19069 <pre dir="&#10;"></pre>
19070
19071 !! html/parsoid
19072 <pre typeof="mw:Extension/pre" about="#mwt2" dir="&amp;#10;" data-mw='{"name":"pre","attrs":{"dir":"&amp;#10;"},"body":{"extsrc":""}}'></pre>
19073 !! end
19074
19075 !! test
19076 Parsing optional HTML elements (T8171)
19077 !! options
19078 !! wikitext
19079 <table>
19080 <tr>
19081 <td> Some tabular data</td>
19082 <td> More tabular data ...
19083 <td> And yet som tabular data</td>
19084 </tr>
19085 </table>
19086 !! html
19087 <table>
19088 <tr>
19089 <td> Some tabular data</td>
19090 <td> More tabular data ...
19091 </td><td> And yet som tabular data</td>
19092 </tr>
19093 </table>
19094
19095 !! end
19096
19097 !! test
19098 Correct handling of <td>, <tr> (T8171)
19099 !! options
19100 !! wikitext
19101 <table>
19102 <tr>
19103 <td> Some tabular data</td>
19104 <td> More tabular data ...</td>
19105 <td> And yet som tabular data</td>
19106 </tr>
19107 </table>
19108 !! html
19109 <table>
19110 <tr>
19111 <td> Some tabular data</td>
19112 <td> More tabular data ...</td>
19113 <td> And yet som tabular data</td>
19114 </tr>
19115 </table>
19116
19117 !! end
19118
19119
19120 !! test
19121 Parsing crashing regression (fr:JavaScript)
19122 !! wikitext
19123 </body></x>
19124 !! html
19125 <p>&lt;/body&gt;&lt;/x&gt;
19126 </p>
19127 !! end
19128
19129 !! test
19130 Inline wiki vs wiki block nesting
19131 !! wikitext
19132 '''Bold paragraph
19133
19134 New wiki paragraph
19135 !! html
19136 <p><b>Bold paragraph</b>
19137 </p><p>New wiki paragraph
19138 </p>
19139 !! end
19140
19141 # FIXME: The current php output is documented
19142 # and desired output is the parsoid target.
19143 !! test
19144 Inline HTML vs wiki block nesting
19145 !! wikitext
19146 <b>Bold paragraph
19147
19148 New wiki paragraph
19149 !! html/php
19150 <p><b>Bold paragraph
19151 </p><p>New wiki paragraph</b>
19152 </p>
19153 !! html/parsoid
19154 <p><b>Bold paragraph</b>
19155 </p><p>New wiki paragraph
19156 </p>
19157 !! end
19158
19159 # Original result was this:
19160 # <p><b>bold</b><b>bold<i>bolditalics</i></b>
19161 # </p>
19162 # While that might be marginally more intuitive, maybe, the six-apostrophe
19163 # construct is clearly pathological and the result stated here (which is what
19164 # the parser actually does) is about as reasonable as anything.
19165 !!test
19166 Mixing markup for italics and bold
19167 !! options
19168 !! wikitext
19169 '''bold''''''bold''bolditalics'''''
19170 !! html
19171 <p>'<i>bold'</i><b>bold<i>bolditalics</i></b>
19172 </p>
19173 !! end
19174
19175
19176 !! article
19177 Xyzzyx
19178 !! text
19179 Article for special page transclusion test
19180 !! endarticle
19181
19182 !! test
19183 Special page transclusion
19184 !! options
19185 !! wikitext
19186 {{Special:Prefixindex/Xyzzyx}}
19187 !! html
19188 <ul class="mw-prefixindex-list"><li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
19189 </ul>
19190
19191 !! end
19192
19193 !! test
19194 Special page transclusion twice (T7021)
19195 !! options
19196 !! wikitext
19197 {{Special:Prefixindex/Xyzzyx}}
19198 {{Special:Prefixindex/Xyzzyx}}
19199 !! html
19200 <ul class="mw-prefixindex-list"><li><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></li>
19201 </ul>
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 Transclusion of default MediaWiki message
19209 !! wikitext
19210 {{MediaWiki:Mainpage}}
19211 !! html
19212 <p>Main Page
19213 </p>
19214 !! end
19215
19216 !! test
19217 Transclusion of nonexistent MediaWiki message
19218 !! wikitext
19219 {{MediaWiki:Mainpagexxx}}
19220 !! html
19221 <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>
19222 </p>
19223 !! end
19224
19225 !! test
19226 Transclusion of MediaWiki message with underscore
19227 !! wikitext
19228 {{MediaWiki:history_short}}
19229 !! html
19230 <p>History
19231 </p>
19232 !! end
19233
19234 !! test
19235 Transclusion of MediaWiki message with space
19236 !! wikitext
19237 {{MediaWiki:history short}}
19238 !! html
19239 <p>History
19240 </p>
19241 !! end
19242
19243 !! test
19244 Invalid header with following text
19245 !! wikitext
19246 = x = y
19247 !! html
19248 <p>= x = y
19249 </p>
19250 !! end
19251
19252
19253 !! test
19254 Section extraction test (section 0)
19255 !! options
19256 section=0
19257 !! wikitext
19258 start
19259 ==a==
19260 ===aa===
19261 ====aaa====
19262 ==b==
19263 ===ba===
19264 ===bb===
19265 ====bba====
19266 ===bc===
19267 ==c==
19268 ===ca===
19269 !! html/php
19270 start
19271 !! end
19272
19273 !! test
19274 Section extraction test (section 1)
19275 !! options
19276 section=1
19277 !! wikitext
19278 start
19279 ==a==
19280 ===aa===
19281 ====aaa====
19282 ==b==
19283 ===ba===
19284 ===bb===
19285 ====bba====
19286 ===bc===
19287 ==c==
19288 ===ca===
19289 !! html/php
19290 ==a==
19291 ===aa===
19292 ====aaa====
19293 !! end
19294
19295 !! test
19296 Section extraction test (section 2)
19297 !! options
19298 section=2
19299 !! wikitext
19300 start
19301 ==a==
19302 ===aa===
19303 ====aaa====
19304 ==b==
19305 ===ba===
19306 ===bb===
19307 ====bba====
19308 ===bc===
19309 ==c==
19310 ===ca===
19311 !! html/php
19312 ===aa===
19313 ====aaa====
19314 !! end
19315
19316 !! test
19317 Section extraction test (section 3)
19318 !! options
19319 section=3
19320 !! wikitext
19321 start
19322 ==a==
19323 ===aa===
19324 ====aaa====
19325 ==b==
19326 ===ba===
19327 ===bb===
19328 ====bba====
19329 ===bc===
19330 ==c==
19331 ===ca===
19332 !! html/php
19333 ====aaa====
19334 !! end
19335
19336 !! test
19337 Section extraction test (section 4)
19338 !! options
19339 section=4
19340 !! wikitext
19341 start
19342 ==a==
19343 ===aa===
19344 ====aaa====
19345 ==b==
19346 ===ba===
19347 ===bb===
19348 ====bba====
19349 ===bc===
19350 ==c==
19351 ===ca===
19352 !! html/php
19353 ==b==
19354 ===ba===
19355 ===bb===
19356 ====bba====
19357 ===bc===
19358 !! end
19359
19360 !! test
19361 Section extraction test (section 5)
19362 !! options
19363 section=5
19364 !! wikitext
19365 start
19366 ==a==
19367 ===aa===
19368 ====aaa====
19369 ==b==
19370 ===ba===
19371 ===bb===
19372 ====bba====
19373 ===bc===
19374 ==c==
19375 ===ca===
19376 !! html/php
19377 ===ba===
19378 !! end
19379
19380 !! test
19381 Section extraction test (section 6)
19382 !! options
19383 section=6
19384 !! wikitext
19385 start
19386 ==a==
19387 ===aa===
19388 ====aaa====
19389 ==b==
19390 ===ba===
19391 ===bb===
19392 ====bba====
19393 ===bc===
19394 ==c==
19395 ===ca===
19396 !! html/php
19397 ===bb===
19398 ====bba====
19399 !! end
19400
19401 !! test
19402 Section extraction test (section 7)
19403 !! options
19404 section=7
19405 !! wikitext
19406 start
19407 ==a==
19408 ===aa===
19409 ====aaa====
19410 ==b==
19411 ===ba===
19412 ===bb===
19413 ====bba====
19414 ===bc===
19415 ==c==
19416 ===ca===
19417 !! html/php
19418 ====bba====
19419 !! end
19420
19421 !! test
19422 Section extraction test (section 8)
19423 !! options
19424 section=8
19425 !! wikitext
19426 start
19427 ==a==
19428 ===aa===
19429 ====aaa====
19430 ==b==
19431 ===ba===
19432 ===bb===
19433 ====bba====
19434 ===bc===
19435 ==c==
19436 ===ca===
19437 !! html/php
19438 ===bc===
19439 !! end
19440
19441 !! test
19442 Section extraction test (section 9)
19443 !! options
19444 section=9
19445 !! wikitext
19446 start
19447 ==a==
19448 ===aa===
19449 ====aaa====
19450 ==b==
19451 ===ba===
19452 ===bb===
19453 ====bba====
19454 ===bc===
19455 ==c==
19456 ===ca===
19457 !! html/php
19458 ==c==
19459 ===ca===
19460 !! end
19461
19462 !! test
19463 Section extraction test (section 10)
19464 !! options
19465 section=10
19466 !! wikitext
19467 start
19468 ==a==
19469 ===aa===
19470 ====aaa====
19471 ==b==
19472 ===ba===
19473 ===bb===
19474 ====bba====
19475 ===bc===
19476 ==c==
19477 ===ca===
19478 !! html/php
19479 ===ca===
19480 !! end
19481
19482 !! test
19483 Section extraction test (nonexistent section 11)
19484 !! options
19485 section=11
19486 !! wikitext
19487 start
19488 ==a==
19489 ===aa===
19490 ====aaa====
19491 ==b==
19492 ===ba===
19493 ===bb===
19494 ====bba====
19495 ===bc===
19496 ==c==
19497 ===ca===
19498 !! html/php
19499 !! end
19500
19501 !! test
19502 Section extraction test with bogus heading (section 1)
19503 !! options
19504 section=1
19505 !! wikitext
19506 ==a==
19507 ==bogus== not a legal section
19508 ==b==
19509 !! html/php
19510 ==a==
19511 ==bogus== not a legal section
19512 !! end
19513
19514 !! test
19515 Section extraction test with bogus heading (section 2)
19516 !! options
19517 section=2
19518 !! wikitext
19519 ==a==
19520 ==bogus== not a legal section
19521 ==b==
19522 !! html/php
19523 ==b==
19524 !! end
19525
19526 !! test
19527 Section extraction test with comment after heading (section 1)
19528 !! options
19529 section=1
19530 !! wikitext
19531 ==a==
19532 ==b== <!-- -->
19533 ==c==
19534 !! html/php
19535 ==a==
19536 !! end
19537
19538 !! test
19539 Section extraction test with comment after heading (section 2)
19540 !! options
19541 section=2
19542 !! wikitext
19543 ==a==
19544 ==b== <!-- -->
19545 ==c==
19546 !! html/php
19547 ==b== <!-- -->
19548 !! end
19549
19550 !! test
19551 Section extraction test with bogus <nowiki> heading (section 1)
19552 !! options
19553 section=1
19554 !! wikitext
19555 ==a==
19556 ==bogus== <nowiki>not a legal section</nowiki>
19557 ==b==
19558 !! html/php
19559 ==a==
19560 ==bogus== <nowiki>not a legal section</nowiki>
19561 !! end
19562
19563 !! test
19564 Section extraction test with bogus <nowiki> heading (section 2)
19565 !! options
19566 section=2
19567 !! wikitext
19568 ==a==
19569 ==bogus== <nowiki>not a legal section</nowiki>
19570 ==b==
19571 !! html/php
19572 ==b==
19573 !! end
19574
19575 # Formerly testing for T4587, now resolved by the use of unmarked sections
19576 # instead of respecting commented sections
19577 !! test
19578 Section extraction prefixed by comment (section 1)
19579 !! options
19580 section=1
19581 !! wikitext
19582 <!-- -->==sec1==
19583 ==sec2==
19584 !! html/php
19585 ==sec2==
19586 !!end
19587
19588 !! test
19589 Section extraction prefixed by comment (section 2)
19590 !! options
19591 section=2
19592 !! wikitext
19593 <!-- -->==sec1==
19594 ==sec2==
19595 !! html/php
19596
19597 !!end
19598
19599 # Formerly testing for T4607, now resolved by the use of unmarked sections
19600 # instead of respecting HTML-style headings
19601 !! test
19602 Section extraction, mixed wiki and html (section 1)
19603 !! options
19604 section=1
19605 !! wikitext
19606 <h2>unmarked</h2>
19607 unmarked
19608 ==1==
19609 one
19610 ==2==
19611 two
19612 !! html/php
19613 ==1==
19614 one
19615 !! end
19616
19617 !! test
19618 Section extraction, mixed wiki and html (section 2)
19619 !! options
19620 section=2
19621 !! wikitext
19622 <h2>unmarked</h2>
19623 unmarked
19624 ==1==
19625 one
19626 ==2==
19627 two
19628 !! html/php
19629 ==2==
19630 two
19631 !! end
19632
19633
19634 # Formerly testing for T5342
19635 !! test
19636 Section extraction, heading surrounded by <noinclude>
19637 !! options
19638 section=1
19639 !! wikitext
19640 <noinclude>==unmarked==</noinclude>
19641 ==marked==
19642 !! html/php
19643 ==marked==
19644 !!end
19645
19646 # Test behavior of T21910
19647 !! test
19648 Sectiion with all-equals
19649 !! options
19650 section=2
19651 !! wikitext
19652 ===
19653 The line above must have a trailing space
19654 === <!--
19655 --> <!-- -->
19656 But just in case it doesn't...
19657 !! html/php
19658 === <!--
19659 --> <!-- -->
19660 But just in case it doesn't...
19661 !! end
19662
19663 !! test
19664 Section replacement test (section 0)
19665 !! options
19666 replace=0,"xxx"
19667 !! wikitext
19668 start
19669 ==a==
19670 ===aa===
19671 ====aaa====
19672 ==b==
19673 ===ba===
19674 ===bb===
19675 ====bba====
19676 ===bc===
19677 ==c==
19678 ===ca===
19679 !! html/php
19680 xxx
19681
19682 ==a==
19683 ===aa===
19684 ====aaa====
19685 ==b==
19686 ===ba===
19687 ===bb===
19688 ====bba====
19689 ===bc===
19690 ==c==
19691 ===ca===
19692 !! end
19693
19694 !! test
19695 Section replacement test (section 1)
19696 !! options
19697 replace=1,"xxx"
19698 !! wikitext
19699 start
19700 ==a==
19701 ===aa===
19702 ====aaa====
19703 ==b==
19704 ===ba===
19705 ===bb===
19706 ====bba====
19707 ===bc===
19708 ==c==
19709 ===ca===
19710 !! html/php
19711 start
19712 xxx
19713
19714 ==b==
19715 ===ba===
19716 ===bb===
19717 ====bba====
19718 ===bc===
19719 ==c==
19720 ===ca===
19721 !! end
19722
19723 !! test
19724 Section replacement test (section 2)
19725 !! options
19726 replace=2,"xxx"
19727 !! wikitext
19728 start
19729 ==a==
19730 ===aa===
19731 ====aaa====
19732 ==b==
19733 ===ba===
19734 ===bb===
19735 ====bba====
19736 ===bc===
19737 ==c==
19738 ===ca===
19739 !! html/php
19740 start
19741 ==a==
19742 xxx
19743
19744 ==b==
19745 ===ba===
19746 ===bb===
19747 ====bba====
19748 ===bc===
19749 ==c==
19750 ===ca===
19751 !! end
19752
19753 !! test
19754 Section replacement test (section 3)
19755 !! options
19756 replace=3,"xxx"
19757 !! wikitext
19758 start
19759 ==a==
19760 ===aa===
19761 ====aaa====
19762 ==b==
19763 ===ba===
19764 ===bb===
19765 ====bba====
19766 ===bc===
19767 ==c==
19768 ===ca===
19769 !! html/php
19770 start
19771 ==a==
19772 ===aa===
19773 xxx
19774
19775 ==b==
19776 ===ba===
19777 ===bb===
19778 ====bba====
19779 ===bc===
19780 ==c==
19781 ===ca===
19782 !! end
19783
19784 !! test
19785 Section replacement test (section 4)
19786 !! options
19787 replace=4,"xxx"
19788 !! wikitext
19789 start
19790 ==a==
19791 ===aa===
19792 ====aaa====
19793 ==b==
19794 ===ba===
19795 ===bb===
19796 ====bba====
19797 ===bc===
19798 ==c==
19799 ===ca===
19800 !! html/php
19801 start
19802 ==a==
19803 ===aa===
19804 ====aaa====
19805 xxx
19806
19807 ==c==
19808 ===ca===
19809 !! end
19810
19811 !! test
19812 Section replacement test (section 5)
19813 !! options
19814 replace=5,"xxx"
19815 !! wikitext
19816 start
19817 ==a==
19818 ===aa===
19819 ====aaa====
19820 ==b==
19821 ===ba===
19822 ===bb===
19823 ====bba====
19824 ===bc===
19825 ==c==
19826 ===ca===
19827 !! html/php
19828 start
19829 ==a==
19830 ===aa===
19831 ====aaa====
19832 ==b==
19833 xxx
19834
19835 ===bb===
19836 ====bba====
19837 ===bc===
19838 ==c==
19839 ===ca===
19840 !! end
19841
19842 !! test
19843 Section replacement test (section 6)
19844 !! options
19845 replace=6,"xxx"
19846 !! wikitext
19847 start
19848 ==a==
19849 ===aa===
19850 ====aaa====
19851 ==b==
19852 ===ba===
19853 ===bb===
19854 ====bba====
19855 ===bc===
19856 ==c==
19857 ===ca===
19858 !! html/php
19859 start
19860 ==a==
19861 ===aa===
19862 ====aaa====
19863 ==b==
19864 ===ba===
19865 xxx
19866
19867 ===bc===
19868 ==c==
19869 ===ca===
19870 !! end
19871
19872 !! test
19873 Section replacement test (section 7)
19874 !! options
19875 replace=7,"xxx"
19876 !! wikitext
19877 start
19878 ==a==
19879 ===aa===
19880 ====aaa====
19881 ==b==
19882 ===ba===
19883 ===bb===
19884 ====bba====
19885 ===bc===
19886 ==c==
19887 ===ca===
19888 !! html/php
19889 start
19890 ==a==
19891 ===aa===
19892 ====aaa====
19893 ==b==
19894 ===ba===
19895 ===bb===
19896 xxx
19897
19898 ===bc===
19899 ==c==
19900 ===ca===
19901 !! end
19902
19903 !! test
19904 Section replacement test (section 8)
19905 !! options
19906 replace=8,"xxx"
19907 !! wikitext
19908 start
19909 ==a==
19910 ===aa===
19911 ====aaa====
19912 ==b==
19913 ===ba===
19914 ===bb===
19915 ====bba====
19916 ===bc===
19917 ==c==
19918 ===ca===
19919 !! html/php
19920 start
19921 ==a==
19922 ===aa===
19923 ====aaa====
19924 ==b==
19925 ===ba===
19926 ===bb===
19927 ====bba====
19928 xxx
19929
19930 ==c==
19931 ===ca===
19932 !!end
19933
19934 !! test
19935 Section replacement test (section 9)
19936 !! options
19937 replace=9,"xxx"
19938 !! wikitext
19939 start
19940 ==a==
19941 ===aa===
19942 ====aaa====
19943 ==b==
19944 ===ba===
19945 ===bb===
19946 ====bba====
19947 ===bc===
19948 ==c==
19949 ===ca===
19950 !! html/php
19951 start
19952 ==a==
19953 ===aa===
19954 ====aaa====
19955 ==b==
19956 ===ba===
19957 ===bb===
19958 ====bba====
19959 ===bc===
19960 xxx
19961 !! end
19962
19963 !! test
19964 Section replacement test (section 10)
19965 !! options
19966 replace=10,"xxx"
19967 !! wikitext
19968 start
19969 ==a==
19970 ===aa===
19971 ====aaa====
19972 ==b==
19973 ===ba===
19974 ===bb===
19975 ====bba====
19976 ===bc===
19977 ==c==
19978 ===ca===
19979 !! html/php
19980 start
19981 ==a==
19982 ===aa===
19983 ====aaa====
19984 ==b==
19985 ===ba===
19986 ===bb===
19987 ====bba====
19988 ===bc===
19989 ==c==
19990 xxx
19991 !! end
19992
19993 !! test
19994 Section replacement test with initial whitespace (T15728)
19995 !! options
19996 replace=2,"xxx"
19997 !! wikitext
19998 Preformatted initial line
19999 ==a==
20000 ===a===
20001 !! html/php
20002 Preformatted initial line
20003 ==a==
20004 xxx
20005 !! end
20006
20007
20008 !! test
20009 Section extraction, heading followed by pre with 20 spaces (T8398)
20010 !! options
20011 section=1
20012 !! wikitext
20013 ==a==
20014 a
20015 !! html/php
20016 ==a==
20017 a
20018 !! end
20019
20020 !! test
20021 Section extraction, heading followed by pre with 19 spaces (T8398 sanity check)
20022 !! options
20023 section=1
20024 !! wikitext
20025 ==a==
20026 a
20027 !! html/php
20028 ==a==
20029 a
20030 !! end
20031
20032
20033 !! test
20034 Section extraction, <pre> around bogus header (T12309)
20035 !! options
20036 section=2
20037 !! wikitext
20038 == Section One ==
20039 <pre>
20040 =======
20041 </pre>
20042
20043 == Section Two ==
20044 stuff
20045 !! html/php
20046 == Section Two ==
20047 stuff
20048 !! end
20049
20050 !! test
20051 Section replacement, <pre> around bogus header (T12309)
20052 !! options
20053 replace=2,"xxx"
20054 !! wikitext
20055 == Section One ==
20056 <pre>
20057 =======
20058 </pre>
20059
20060 == Section Two ==
20061 stuff
20062 !! html/php
20063 == Section One ==
20064 <pre>
20065 =======
20066 </pre>
20067
20068 xxx
20069 !! end
20070
20071 !! test
20072 Handling of &#x0A; in URLs
20073 !! wikitext
20074 ** irc://&#x0A;a
20075 !! html/php
20076 <ul><li><ul><li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
20077
20078 !! html/parsoid
20079 <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>
20080 !! end
20081
20082 !! test
20083 Handling of %0A in URLs
20084 !! wikitext
20085 ** irc://%0Aa
20086 !! html/php
20087 <ul><li><ul><li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
20088
20089 !! html/parsoid
20090 <ul><li><ul><li> <a rel="mw:ExtLink" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
20091 !! end
20092
20093 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
20094 !! test
20095 5 quotes, code coverage +1 line
20096 !! options
20097 parsoid=wt2html
20098 !! wikitext
20099 '''''
20100 !! html/php
20101 !! html/parsoid
20102 <b><i></i></b>
20103 !! end
20104
20105 # same html as previous, but wikitext adjusted to match parsoid html2wt
20106 # note that wt2html and html2html will put the <i> before the <b>
20107 !! test
20108 5 quotes, code coverage +1 line w/ nowiki (1)
20109 !! options
20110 parsoid=wt2wt,html2wt
20111 !! wikitext
20112 '''''<nowiki/>'''''
20113 !! html/php
20114 <p><i></i>
20115 </p>
20116 !! html/parsoid
20117 <p><b><i></i></b></p>
20118 !! end
20119
20120 # same as previous, just swapping the <i> and <b>
20121 !! test
20122 5 quotes, code coverage +1 line w/ nowiki (2)
20123 !! wikitext
20124 '''''<nowiki/>'''''
20125 !! html/php
20126 <p><i></i>
20127 </p>
20128 !! html/parsoid
20129 <p><i><b></b></i></p>
20130 !! end
20131
20132 !! test
20133 Special:Search page linking.
20134 !! wikitext
20135 {{Special:search}}
20136 !! html
20137 <p><a href="/wiki/Special:Search" title="Special:Search">Special:Search</a>
20138 </p>
20139 !! end
20140
20141 !! test
20142 {{!}} is a magic word
20143 !! wikitext
20144 {{!}} is a magic word there and {{!}} is still a magic word here
20145 | is not a magic word here but {{!}} is still a magic word here
20146 !! html/php
20147 <p>| is a magic word there and | is still a magic word here
20148 | is not a magic word here but | is still a magic word here
20149 </p>
20150 !! html/parsoid
20151 <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
20152 | 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>
20153 !! end
20154
20155 !! test
20156 Say the magic word
20157 !! options
20158 title=[[Parser test]]
20159 !! wikitext
20160 * {{PAGENAME}}
20161 * {{PAGENAMEE}}
20162 * {{FULLPAGENAME}}
20163 * {{FULLPAGENAMEE}}
20164 * {{BASEPAGENAME}}
20165 * {{BASEPAGENAMEE}}
20166 * {{SUBPAGENAME}}
20167 * {{SUBPAGENAMEE}}
20168 * {{ROOTPAGENAME}}
20169 * {{ROOTPAGENAMEE}}
20170 * {{TALKPAGENAME}}
20171 * {{TALKPAGENAMEE}}
20172 * {{SUBJECTPAGENAME}}
20173 * {{SUBJECTPAGENAMEE}}
20174 * {{NAMESPACEE}}
20175 * {{NAMESPACE}}
20176 * {{NAMESPACENUMBER}}
20177 * {{TALKSPACE}}
20178 * {{TALKSPACEE}}
20179 * {{SUBJECTSPACE}}
20180 * {{SUBJECTSPACEE}}
20181 * {{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}
20182 !! html
20183 <ul><li> Parser test</li>
20184 <li> Parser_test</li>
20185 <li> Parser test</li>
20186 <li> Parser_test</li>
20187 <li> Parser test</li>
20188 <li> Parser_test</li>
20189 <li> Parser test</li>
20190 <li> Parser_test</li>
20191 <li> Parser test</li>
20192 <li> Parser_test</li>
20193 <li> Talk:Parser test</li>
20194 <li> Talk:Parser_test</li>
20195 <li> Parser test</li>
20196 <li> Parser_test</li>
20197 <li> </li>
20198 <li> </li>
20199 <li> 0</li>
20200 <li> Talk</li>
20201 <li> Talk</li>
20202 <li> </li>
20203 <li> </li>
20204 <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>
20205
20206 !! end
20207 ### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included.
20208
20209 !! test
20210 Gallery with valid attributes
20211 !! wikitext
20212 <gallery type="123" summary="345">
20213 File:File:Foobar.jpg
20214 </gallery>
20215 !! html/php
20216 <ul class="gallery mw-gallery-traditional" type="123">
20217 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20218 <div class="thumb" style="height: 150px;">File:Foobar.jpg</div>
20219 <div class="gallerytext">
20220 </div>
20221 </div></li>
20222 </ul>
20223
20224 !! html/parsoid
20225 <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"}}'>
20226 <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>
20227 </ul>
20228 !! end
20229
20230 ## Parsoid thinks the "centre" here is a property, not a caption.
20231 !! test
20232 Gallery
20233 !! options
20234 parsoid={
20235 "modes": ["wt2html"],
20236 "nativeGallery": true
20237 }
20238 !! wikitext
20239 <gallery>
20240 image1.png |
20241 image2.gif|||||
20242
20243 image3|
20244 image4 |300px| centre
20245 image5.svg| http://///////
20246 [[x|xx]]]]
20247 * image6
20248 </gallery>
20249 !! html/php
20250 <ul class="gallery mw-gallery-traditional">
20251 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20252 <div class="thumb" style="height: 150px;">Image1.png</div>
20253 <div class="gallerytext">
20254 </div>
20255 </div></li>
20256 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20257 <div class="thumb" style="height: 150px;">Image2.gif</div>
20258 <div class="gallerytext">
20259 </div>
20260 </div></li>
20261 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20262 <div class="thumb" style="height: 150px;">Image3</div>
20263 <div class="gallerytext">
20264 </div>
20265 </div></li>
20266 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20267 <div class="thumb" style="height: 150px;">Image4</div>
20268 <div class="gallerytext">
20269 <pre>centre
20270 </pre>
20271 </div>
20272 </div></li>
20273 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20274 <div class="thumb" style="height: 150px;">Image5.svg</div>
20275 <div class="gallerytext">
20276 <p><a rel="nofollow" class="external free" href="http://///////">http://///////</a>
20277 </p>
20278 </div>
20279 </div></li>
20280 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20281 <div class="thumb" style="height: 150px;">* image6</div>
20282 <div class="gallerytext">
20283 </div>
20284 </div></li>
20285 </ul>
20286
20287 !! html/parsoid
20288 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt3" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20289 <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>
20290 <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>
20291 <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>
20292 <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>
20293 <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>
20294 <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>
20295 </ul>
20296 !! end
20297
20298 !! test
20299 Gallery (with options, html)
20300 !! options
20301 parsoid={
20302 "modes": ["wt2html", "html2html"],
20303 "nativeGallery": true
20304 }
20305 !! wikitext
20306 <gallery widths="70px" heights="40px" perrow="2" caption="Foo [[Main Page]]">
20307 File:Nonexistent.jpg|caption
20308 File:Nonexistent.jpg
20309 image:foobar.jpg|some '''caption''' [[Main Page]]
20310 image:foobar.jpg
20311 image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
20312 </gallery>
20313 !! html/php
20314 <ul class="gallery mw-gallery-traditional" style="max-width: 226px;_width: 226px;">
20315 <li class='gallerycaption'>Foo <a href="/wiki/Main_Page" title="Main Page">Main Page</a></li>
20316 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20317 <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
20318 <div class="gallerytext">
20319 <p>caption
20320 </p>
20321 </div>
20322 </div></li>
20323 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20324 <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
20325 <div class="gallerytext">
20326 </div>
20327 </div></li>
20328 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20329 <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>
20330 <div class="gallerytext">
20331 <p>some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
20332 </p>
20333 </div>
20334 </div></li>
20335 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20336 <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>
20337 <div class="gallerytext">
20338 </div>
20339 </div></li>
20340 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20341 <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>
20342 <div class="gallerytext">
20343 <p>blabla.
20344 </p>
20345 </div>
20346 </div></li>
20347 </ul>
20348
20349 !! html/parsoid
20350 <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":{}}'>
20351 <li class="gallerycaption">Foo <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></li>
20352 <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>
20353 <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>
20354 <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>
20355 <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>
20356 <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>
20357 </ul>
20358 !! end
20359
20360 !! test
20361 Gallery (with options, extsrc)
20362 !! options
20363 parsoid={
20364 "nativeGallery": false
20365 }
20366 !! wikitext
20367 <gallery widths="70px" heights="40px" perrow="2" caption="Foo [[Main Page]]">
20368 File:Nonexistent.jpg|caption
20369 File:Nonexistent.jpg
20370 image:foobar.jpg|some '''caption''' [[Main Page]]
20371 image:foobar.jpg
20372 image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
20373 </gallery>
20374 !! html/php
20375 <ul class="gallery mw-gallery-traditional" style="max-width: 226px;_width: 226px;">
20376 <li class='gallerycaption'>Foo <a href="/wiki/Main_Page" title="Main Page">Main Page</a></li>
20377 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20378 <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
20379 <div class="gallerytext">
20380 <p>caption
20381 </p>
20382 </div>
20383 </div></li>
20384 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20385 <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
20386 <div class="gallerytext">
20387 </div>
20388 </div></li>
20389 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20390 <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>
20391 <div class="gallerytext">
20392 <p>some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
20393 </p>
20394 </div>
20395 </div></li>
20396 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20397 <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>
20398 <div class="gallerytext">
20399 </div>
20400 </div></li>
20401 <li class="gallerybox" style="width: 105px"><div style="width: 105px">
20402 <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>
20403 <div class="gallerytext">
20404 <p>blabla.
20405 </p>
20406 </div>
20407 </div></li>
20408 </ul>
20409
20410 !! html/parsoid
20411 <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"}}'>
20412 <li class="gallerycaption">Foo <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a></li>
20413 <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>
20414 <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>
20415 <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>
20416 <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>
20417 <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>
20418 </ul>
20419 !! end
20420
20421 !! test
20422 Gallery with link that has fragment
20423 !! options
20424 parsoid={
20425 "modes": ["wt2html", "html2html"],
20426 "nativeGallery": true
20427 }
20428 !! wikitext
20429 <gallery>
20430 image:foobar.jpg|link=Main_Page
20431 image:foobar.jpg|link=Main_Page#section
20432 image:foobar.jpg|link=Main Page#section|caption
20433 </gallery>
20434 !! html/php
20435 <ul class="gallery mw-gallery-traditional">
20436 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20437 <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>
20438 <div class="gallerytext">
20439 </div>
20440 </div></li>
20441 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20442 <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>
20443 <div class="gallerytext">
20444 </div>
20445 </div></li>
20446 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20447 <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>
20448 <div class="gallerytext">
20449 <p>caption
20450 </p>
20451 </div>
20452 </div></li>
20453 </ul>
20454
20455 !! html/parsoid
20456 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20457 <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>
20458 <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>
20459 <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>
20460 </ul>
20461 !! end
20462
20463 ## Whoops, Parsoid shouldn't be parsing templates in the attribute caption!
20464 !! test
20465 Gallery with template inside caption
20466 !! options
20467 parsoid={
20468 "nativeGallery": true
20469 }
20470 !! wikitext
20471 <gallery caption="{{echo|hi}}">
20472 File:Foobar.jpg|{{echo|ho}}
20473 </gallery>
20474 !! html/php
20475 <ul class="gallery mw-gallery-traditional">
20476 <li class='gallerycaption'>{{echo|hi}}</li>
20477 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20478 <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>
20479 <div class="gallerytext">
20480 <p>ho
20481 </p>
20482 </div>
20483 </div></li>
20484 </ul>
20485
20486 !! html/parsoid
20487 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt6" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20488 <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>
20489 <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>
20490 </ul>
20491 !! end
20492
20493 !! test
20494 Gallery with wikitext inside caption
20495 !! options
20496 parsoid={
20497 "nativeGallery": true
20498 }
20499 !! wikitext
20500 <gallery>
20501 File:Foobar.jpg|alt=galleryalt|[[File:Foobar.jpg|alt=inneralt|20x20px|desc]]
20502 File:Foobar.jpg|alt=galleryalt|{{Test|unamedParam|alt=param}}
20503 </gallery>
20504 !! html/php
20505 <ul class="gallery mw-gallery-traditional">
20506 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20507 <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>
20508 <div class="gallerytext">
20509 <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>
20510 </p>
20511 </div>
20512 </div></li>
20513 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20514 <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>
20515 <div class="gallerytext">
20516 <p>This is a test template
20517 </p>
20518 </div>
20519 </div></li>
20520 </ul>
20521
20522 !! html/parsoid
20523 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt6" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20524 <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>
20525 <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>
20526 </ul>
20527 !! end
20528
20529 !! test
20530 Gallery (with showfilename option)
20531 !! options
20532 parsoid={
20533 "nativeGallery": true
20534 }
20535 !! wikitext
20536 <gallery showfilename="">
20537 File:Nonexistent.jpg|caption
20538 File:Nonexistent.jpg
20539 File:Foobar.jpg|some '''caption''' [[Main Page]]
20540 File:Foobar.jpg
20541 </gallery>
20542 !! html/php
20543 <ul class="gallery mw-gallery-traditional">
20544 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20545 <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
20546 <div class="gallerytext">
20547 <p><a href="/wiki/File:Nonexistent.jpg" class="galleryfilename galleryfilename-truncate" title="File:Nonexistent.jpg">Nonexistent.jpg</a>
20548 caption
20549 </p>
20550 </div>
20551 </div></li>
20552 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20553 <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
20554 <div class="gallerytext">
20555 <p><a href="/wiki/File:Nonexistent.jpg" class="galleryfilename galleryfilename-truncate" title="File:Nonexistent.jpg">Nonexistent.jpg</a>
20556 </p>
20557 </div>
20558 </div></li>
20559 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20560 <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>
20561 <div class="gallerytext">
20562 <p><a href="/wiki/File:Foobar.jpg" class="galleryfilename galleryfilename-truncate" title="File:Foobar.jpg">Foobar.jpg</a>
20563 some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
20564 </p>
20565 </div>
20566 </div></li>
20567 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20568 <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>
20569 <div class="gallerytext">
20570 <p><a href="/wiki/File:Foobar.jpg" class="galleryfilename galleryfilename-truncate" title="File:Foobar.jpg">Foobar.jpg</a>
20571 </p>
20572 </div>
20573 </div></li>
20574 </ul>
20575
20576 !! html/parsoid
20577 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt3" data-mw='{"name":"gallery","attrs":{"showfilename":""},"body":{}}'>
20578 <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>
20579 <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>
20580 <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>
20581 <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>
20582 </ul>
20583 !! end
20584
20585 ## Should Parsoid be preserving these variations? See T151367
20586 !! test
20587 Gallery (with namespace-less filenames)
20588 !! options
20589 parsoid={
20590 "modes": ["wt2html", "html2html"],
20591 "nativeGallery": true
20592 }
20593 !! wikitext
20594 <gallery>
20595 File:Nonexistent.jpg
20596 Nonexistent.jpg
20597 image:foobar.jpg
20598 foobar.jpg
20599 </gallery>
20600 !! html/php
20601 <ul class="gallery mw-gallery-traditional">
20602 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20603 <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
20604 <div class="gallerytext">
20605 </div>
20606 </div></li>
20607 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20608 <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
20609 <div class="gallerytext">
20610 </div>
20611 </div></li>
20612 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20613 <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>
20614 <div class="gallerytext">
20615 </div>
20616 </div></li>
20617 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20618 <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>
20619 <div class="gallerytext">
20620 </div>
20621 </div></li>
20622 </ul>
20623
20624 !! html/parsoid
20625 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20626 <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>
20627 <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>
20628 <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>
20629 <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>
20630 </ul>
20631 !! end
20632
20633 !! test
20634 Gallery override link with WikiLink (T36852)
20635 !! options
20636 parsoid={
20637 "nativeGallery": true
20638 }
20639 !! wikitext
20640 <gallery>
20641 File:Foobar.jpg|alt=galleryalt|link=InterWikiLink
20642 </gallery>
20643 !! html/php
20644 <ul class="gallery mw-gallery-traditional">
20645 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20646 <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>
20647 <div class="gallerytext">
20648 </div>
20649 </div></li>
20650 </ul>
20651
20652 !! html/parsoid
20653 <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":{}}'>
20654 <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>
20655 </ul>
20656 !! end
20657
20658 !! test
20659 Gallery override link with absolute external link (T36852)
20660 !! options
20661 parsoid={
20662 "nativeGallery": true
20663 }
20664 !! wikitext
20665 <gallery>
20666 File:Foobar.jpg|alt=galleryalt|link=http://www.example.org
20667 </gallery>
20668 !! html/php
20669 <ul class="gallery mw-gallery-traditional">
20670 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20671 <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>
20672 <div class="gallerytext">
20673 </div>
20674 </div></li>
20675 </ul>
20676
20677 !! html/parsoid
20678 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20679 <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>
20680 </ul>
20681 !! end
20682
20683 !! test
20684 Gallery override link with absolute external link with LanguageConverter
20685 !! options
20686 language=zh
20687 !! input
20688 <gallery>
20689 File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
20690 </gallery>
20691 !! result
20692 <ul class="gallery mw-gallery-traditional">
20693 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20694 <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>
20695 <div class="gallerytext">
20696 <p>caption
20697 </p>
20698 </div>
20699 </div></li>
20700 </ul>
20701
20702 !! end
20703
20704 !! test
20705 Gallery override link with malicious javascript (T36852)
20706 !! options
20707 parsoid={
20708 "modes": ["wt2html", "html2html"],
20709 "nativeGallery": true
20710 }
20711 !! wikitext
20712 <gallery>
20713 File:Foobar.jpg|alt=galleryalt|link=" onclick="alert('malicious javascript code!');
20714 </gallery>
20715 !! html/php
20716 <ul class="gallery mw-gallery-traditional">
20717 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20718 <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>
20719 <div class="gallerytext">
20720 </div>
20721 </div></li>
20722 </ul>
20723
20724 !! html/parsoid
20725 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20726 <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>
20727 </ul>
20728 !! end
20729
20730 # Note that parsoid uses the invalid link as a caption, PHP does not.
20731 !! test
20732 Gallery with invalid title as link (T45964)
20733 !! options
20734 parsoid={
20735 "modes": ["wt2html", "html2html"],
20736 "nativeGallery": true
20737 }
20738 !! wikitext
20739 <gallery>
20740 File:Foobar.jpg|link=<
20741 </gallery>
20742 !! html/php
20743 <ul class="gallery mw-gallery-traditional">
20744 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20745 <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>
20746 <div class="gallerytext">
20747 </div>
20748 </div></li>
20749 </ul>
20750
20751 !! html/parsoid
20752 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
20753 <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>
20754 </ul>
20755 !! end
20756
20757 !! test
20758 Serialize gallery without attrs in data-mw
20759 !! options
20760 parsoid={
20761 "modes": ["html2wt"],
20762 "nativeGallery": true
20763 }
20764 !! html/parsoid
20765 <ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","body":{}}'>
20766 <li class="gallerycaption">123</li>
20767 <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>
20768 </ul>
20769 !! wikitext
20770 <gallery caption="123">
20771 File:Test.png
20772 </gallery>
20773 !! end
20774
20775 !! test
20776 Gallery with class and style attributes
20777 !! options
20778 parsoid={
20779 "nativeGallery": true
20780 }
20781 !! wikitext
20782 <gallery class="center" style="text-align: center;">
20783 File:Foobar.jpg
20784 </gallery>
20785 !! html/php
20786 <ul class="gallery mw-gallery-traditional center" style="text-align: center;">
20787 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20788 <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>
20789 <div class="gallerytext">
20790 </div>
20791 </div></li>
20792 </ul>
20793
20794 !! html/parsoid
20795 <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":{}}'>
20796 <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>
20797 </ul>
20798 !! end
20799
20800 !! test
20801 Gallery in slideshow mode
20802 !! options
20803 parsoid={
20804 "nativeGallery": true
20805 }
20806 !! wikitext
20807 <gallery mode="slideshow" showthumbnails="">
20808 File:Foobar.jpg
20809 </gallery>
20810 !! html/php
20811 <ul class="gallery mw-gallery-slideshow" data-showthumbnails="1">
20812 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
20813 <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>
20814 <div class="gallerytext">
20815 </div>
20816 </div></li>
20817 </ul>
20818
20819 !! html/parsoid
20820 <ul class="gallery mw-gallery-slideshow" data-showthumbnails="1" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"mode":"slideshow","showthumbnails":""},"body":{}}'>
20821 <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>
20822 </ul>
20823 !! end
20824
20825 !! test
20826 HTML Hex character encoding (spells the word "JavaScript")
20827 !! options
20828 parsoid=wt2html,wt2wt,html2html
20829 !! wikitext
20830 &#x4A;&#x061;&#x0076;&#x00061;&#x000053;&#x0000063;&#114;&#x0000069;&#00000112;&#x0000000074;
20831 !! html/php
20832 <p>&#x4a;&#x61;&#x76;&#x61;&#x53;&#x63;&#114;&#x69;&#112;&#x74;
20833 </p>
20834 !! html/php+tidy
20835 <p>JavaScript</p>
20836 !! html/parsoid
20837 <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>
20838 !! end
20839
20840 !! test
20841 HTML Hex character encoding bogus encoding (T28437 regression check)
20842 !! wikitext
20843 &#xsee;&#XSEE;
20844 !! html/php
20845 <p>&amp;#xsee;&amp;#XSEE;
20846 </p>
20847 !! html/parsoid
20848 <p>&amp;#xsee;&amp;#XSEE;</p>
20849 !! end
20850
20851 !! test
20852 HTML Hex character encoding mixed case
20853 !! options
20854 parsoid=wt2html,wt2wt,html2html
20855 !! wikitext
20856 &#xEE;&#Xee;
20857 !! html/php
20858 <p>&#xee;&#xee;
20859 </p>
20860 !! html/php+tidy
20861 <p>îî</p>
20862 !! html/parsoid
20863 <p><span typeof="mw:Entity">î</span><span typeof="mw:Entity">î</span></p>
20864 !! end
20865
20866 # See: https://www.w3.org/TR/html5/syntax.html#character-references
20867 # Note that U+000C (form feed) is not a valid XML character, so
20868 # it is banned even though allowed in HTML5.
20869 !! test
20870 Illegal character references (T106578)
20871 !! wikitext
20872 ; Null: &#00;
20873 ; FF: &#xC;
20874 ; CR: &#xD;
20875 ; Control (low): &#8;
20876 ; Control (high): &#x7F; &#x9F;
20877 ; Surrogate: &#xD83D;&#xDCA9;
20878 ; This is an okay astral character: &#x1F4A9;
20879 !! html+tidy
20880 <dl>
20881 <dt>Null</dt>
20882 <dd>&amp;#00;</dd>
20883 <dt>FF</dt>
20884 <dd>&amp;#xC;</dd>
20885 <dt>CR</dt>
20886 <dd>&amp;#xD;</dd>
20887 <dt>Control (low)</dt>
20888 <dd>&amp;#8;</dd>
20889 <dt>Control (high)</dt>
20890 <dd>&amp;#x7F; &amp;#x9F;</dd>
20891 <dt>Surrogate</dt>
20892 <dd>&amp;#xD83D;&amp;#xDCA9;</dd>
20893 <dt>This is an okay astral character</dt>
20894 <dd>💩</dd>
20895 </dl>
20896 !! end
20897
20898 !! test
20899 __FORCETOC__ override
20900 !! wikitext
20901 __NEWSECTIONLINK__
20902 __FORCETOC__
20903 !! html/php
20904 <p><br />
20905 </p>
20906 !! end
20907
20908 !! test
20909 ISBN code coverage
20910 !! wikitext
20911 ISBN 978-0-1234-56&#x20;789
20912 !! html
20913 <p><a href="/wiki/Special:BookSources/9780123456" class="internal mw-magiclink-isbn">ISBN 978-0-1234-56</a>&#x20;789
20914 </p>
20915 !! html+tidy
20916 <p><a href="/wiki/Special:BookSources/9780123456" class="internal mw-magiclink-isbn">ISBN 978-0-1234-56</a> 789</p>
20917 !! html/parsoid
20918 <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>
20919 !! end
20920
20921 !! test
20922 ISBN followed by 5 spaces
20923 !! wikitext
20924 ISBN
20925 !! html
20926 <p>ISBN
20927 </p>
20928 !! end
20929
20930 !! test
20931 Double ISBN
20932 !! wikitext
20933 ISBN ISBN 1234567890
20934 !! html/php
20935 <p>ISBN <a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
20936 </p>
20937 !! html/parsoid
20938 <p>ISBN <a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a></p>
20939 !! end
20940
20941 # Uppercase X and lowercase x as well
20942 !! test
20943 ISBN with an X
20944 !! wikitext
20945 ISBN 3-462-04561-X
20946 ISBN 3-462-04561-x
20947 ISBN 080442957X
20948 ISBN 080442957x
20949 ISBN 978080442957X
20950 ISBN 978080442957x
20951 !! html/php
20952 <p><a href="/wiki/Special:BookSources/346204561X" class="internal mw-magiclink-isbn">ISBN 3-462-04561-X</a>
20953 <a href="/wiki/Special:BookSources/346204561X" class="internal mw-magiclink-isbn">ISBN 3-462-04561-x</a>
20954 <a href="/wiki/Special:BookSources/080442957X" class="internal mw-magiclink-isbn">ISBN 080442957X</a>
20955 <a href="/wiki/Special:BookSources/080442957X" class="internal mw-magiclink-isbn">ISBN 080442957x</a>
20956 <a href="/wiki/Special:BookSources/978080442957X" class="internal mw-magiclink-isbn">ISBN 978080442957X</a>
20957 <a href="/wiki/Special:BookSources/978080442957X" class="internal mw-magiclink-isbn">ISBN 978080442957x</a>
20958 </p>
20959 !! html/parsoid
20960 <p><a href="./Special:BookSources/346204561X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-X</a>
20961 <a href="./Special:BookSources/346204561X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-x</a>
20962 <a href="./Special:BookSources/080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957X</a>
20963 <a href="./Special:BookSources/080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957x</a>
20964 <a href="./Special:BookSources/978080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957X</a>
20965 <a href="./Special:BookSources/978080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957x</a></p>
20966 !! end
20967
20968 !! test
20969 ISBN with empty prefix (parsoid test)
20970 !! wikitext
20971 ISBN 1234567890
20972 !! html/php
20973 <p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
20974 </p>
20975 !! html/parsoid
20976 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink">ISBN 1234567890</a></p>
20977 !! end
20978
20979 !! test
20980 T24905: <abbr> followed by ISBN followed by </a>
20981 !! wikitext
20982 <abbr>(fr)</abbr> ISBN 2753300917 [http://www.example.com example.com]
20983 !! html/php
20984 <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>
20985 </p>
20986 !! html/parsoid
20987 <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>
20988 !! end
20989
20990 !! test
20991 Double RFC
20992 !! wikitext
20993 RFC RFC 1234
20994 !! html
20995 <p>RFC <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc1234">RFC 1234</a>
20996 </p>
20997 !! end
20998
20999 !! test
21000 Double RFC with a wiki link
21001 !! wikitext
21002 RFC [[RFC 1234]]
21003 !! html
21004 <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>
21005 </p>
21006 !! end
21007
21008 !! test
21009 RFC code coverage
21010 !! wikitext
21011 RFC 983&#x20;987
21012 !! html
21013 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
21014 </p>
21015 !! html+tidy
21016 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc983">RFC 983</a> 987</p>
21017 !! end
21018
21019 !! test
21020 Centre-aligned image
21021 !! wikitext
21022 [[Image:foobar.jpg|centre]]
21023 !! html
21024 <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>
21025
21026 !!end
21027
21028 !! test
21029 None-aligned image
21030 !! wikitext
21031 [[Image:foobar.jpg|none]]
21032 !! html
21033 <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>
21034
21035 !!end
21036
21037 !! test
21038 Width + Height sized image (using px) (height is ignored)
21039 !! wikitext
21040 [[Image:foobar.jpg|640x480px]]
21041 !! html
21042 <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>
21043 </p>
21044 !!end
21045
21046 !! test
21047 Width-sized image (using px, no following whitespace)
21048 !! wikitext
21049 [[Image:foobar.jpg|640px]]
21050 !! html
21051 <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>
21052 </p>
21053 !!end
21054
21055 !! test
21056 Width-sized image (using px, with following whitespace - test regression from r39467)
21057 !! wikitext
21058 [[Image:foobar.jpg|640px ]]
21059 !! html
21060 <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>
21061 </p>
21062 !!end
21063
21064 !! test
21065 Width-sized image (using px, with preceding whitespace - test regression from r39467)
21066 !! wikitext
21067 [[Image:foobar.jpg| 640px]]
21068 !! html
21069 <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>
21070 </p>
21071 !!end
21072
21073 !! test
21074 Image with page parameter
21075 !! options
21076 djvu
21077 !! wikitext
21078 [[File:LoremIpsum.djvu|page=2]]
21079 !! html/php
21080 <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>
21081 </p>
21082 !! html/parsoid
21083 <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>
21084 !! end
21085
21086 !! test
21087 Another italics / bold test
21088 !! wikitext
21089 ''' ''x'
21090 !! html
21091 <pre>'<i> </i>x'
21092 </pre>
21093 !!end
21094
21095 # FIXME: The php output seems broken. It's interleaving some open/close tags.
21096 !! test
21097 dt/dd/dl test
21098 !! wikitext
21099 :;;;::
21100 !! html/php
21101 <dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dt></dl></dd></dl></dd></dl></dd></dl></dd></dl></dd></dl>
21102
21103 !! html/parsoid
21104 <dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dd></dl></dd></dl></dt></dl></dt></dl></dt></dl></dd></dl>
21105
21106 !!end
21107
21108 # Images with the "|" character in external URLs in comment tags; Eats half the comment, leaves unmatched "</a>" tag.
21109 !! test
21110 Images with the "|" character in the comment
21111 !! wikitext
21112 [[File:Foobar.jpg|thumb|An [http://test/?param1=|left|&param2=|x external] URL]]
21113 !! html/php
21114 <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>
21115
21116 !! html/parsoid
21117 <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>
21118 !! end
21119
21120 !! test
21121 [Before] HTML without raw HTML enabled ($wgRawHtml==false)
21122 !! wikitext
21123 <html><script>alert(1);</script></html>
21124 !! html
21125 <p>&lt;html&gt;&lt;script&gt;alert(1);&lt;/script&gt;&lt;/html&gt;
21126 </p>
21127 !! end
21128
21129 !! test
21130 HTML with raw HTML ($wgRawHtml==true)
21131 !! options
21132 wgRawHtml=1
21133 !! wikitext
21134 <html><script>alert(1);</script></html>
21135 !! html/php
21136 <p><script>alert(1);</script>
21137 </p>
21138 !! end
21139
21140 !! test
21141 Parents of subpages, one level up
21142 !! options
21143 subpage title=[[Subpage test/L1/L2/L3]]
21144 !! wikitext
21145 [[../|L2]]
21146 !! html
21147 <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>
21148 </p>
21149 !! end
21150
21151
21152 !! test
21153 Parents of subpages, one level up, not named
21154 !! options
21155 subpage title=[[Subpage test/L1/L2/L3]]
21156 !! wikitext
21157 [[../]]
21158 !! html
21159 <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>
21160 </p>
21161 !! end
21162
21163
21164
21165 !! test
21166 Parents of subpages, two levels up
21167 !! options
21168 subpage title=[[Subpage test/L1/L2/L3]]
21169 !! wikitext
21170 [[../../|L1]]2
21171
21172 [[../../|L1]]l
21173 !! html
21174 <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
21175 </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>
21176 </p>
21177 !! end
21178
21179 !! test
21180 Parents of subpages, two levels up, without trailing slash or name.
21181 !! options
21182 subpage title=[[Subpage test/L1/L2/L3]]
21183 !! wikitext
21184 [[../..]]
21185 !! html
21186 <p>[[../..]]
21187 </p>
21188 !! end
21189
21190 !! test
21191 Parents of subpages, two levels up, with lots of extra trailing slashes.
21192 !! options
21193 subpage title=[[Subpage test/L1/L2/L3]]
21194 !! wikitext
21195 [[../../////]]
21196 !! html
21197 <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>
21198 </p>
21199 !! end
21200
21201 !! article
21202 Subpage test/L1/L2/L3Sibling
21203 !! text
21204 Sibling article
21205 !! endarticle
21206
21207 !! test
21208 Transclusion of a sibling page (one level up)
21209 !! options
21210 subpage title=[[Subpage test/L1/L2/L3]]
21211 !! wikitext
21212 {{../L3Sibling}}
21213 !! html
21214 <p>Sibling article
21215 </p>
21216 !! end
21217
21218 !! test
21219 Transclusion of a child page
21220 !! options
21221 subpage title=[[Subpage test/L1/L2]]
21222 !! wikitext
21223 {{/L3Sibling}}
21224 !! html
21225 <p>Sibling article
21226 </p>
21227 !! end
21228
21229 # This is wt2html only in Parsoid because we add <nowiki>
21230 # because of {{..}} and we don't expect to fix that to
21231 # eliminate the nowikis selective for {{..}} markup.
21232 !! test
21233 Non-transclusion because of too many up levels
21234 !! options
21235 subpage title=[[Subpage test/L1/L2/L3]]
21236 parsoid=wt2html
21237 !! wikitext
21238 {{../../../../More than parent}}
21239 !! html/php
21240 <p>{{../../../../More than parent}}
21241 </p>
21242 !! html/parsoid
21243 <p>{{../../../../More than parent}}</p>
21244 !! end
21245
21246 !! test
21247 Definition list code coverage
21248 !! wikitext
21249 ; title : def
21250 ; title : def
21251 ;title: def
21252 !! html/php
21253 <dl><dt> title &#160;</dt>
21254 <dd> def</dd>
21255 <dt> title&#160;</dt>
21256 <dd> def</dd>
21257 <dt>title</dt>
21258 <dd> def</dd></dl>
21259
21260 !! html/parsoid
21261 <dl><dt> title <span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
21262 <dt> title<span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
21263 <dt>title</dt><dd> def</dd></dl>
21264 !! end
21265
21266 !! test
21267 Don't fall for the self-closing div
21268 !! wikitext
21269 <div>hello world</div/>
21270 !! html
21271 <div>hello world</div>
21272
21273 !! end
21274
21275 !! test
21276 MSGNW magic word
21277 !! wikitext
21278 {{MSGNW:msg}}
21279 !! html/php
21280 <p>&#91;&#91;:Template:Msg&#93;&#93;
21281 </p>
21282 !! end
21283
21284 !! test
21285 RAW magic word
21286 !! wikitext
21287 {{RAW:QUERTY}}
21288 !! html
21289 <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>
21290 </p>
21291 !! end
21292
21293 # This isn't needed for XHTML conformance, but would be handy as a fallback security measure
21294 !! test
21295 Always escape literal '>' in output, not just after '<'
21296 !! wikitext
21297 ><>
21298 !! html
21299 <p>&gt;&lt;&gt;
21300 </p>
21301 !! end
21302
21303 !! test
21304 Template caching
21305 !! wikitext
21306 {{Test}}
21307 {{Test}}
21308 !! html
21309 <p>This is a test template
21310 This is a test template
21311 </p>
21312 !! end
21313
21314
21315 !! article
21316 MediaWiki:Fake
21317 !! text
21318 ==header==
21319 !! endarticle
21320
21321 !! test
21322 Inclusion of !userCanEdit() content
21323 !! wikitext
21324 {{MediaWiki:Fake}}
21325 !! html
21326 <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>
21327
21328 !! end
21329
21330
21331 !! test
21332 Out-of-order TOC heading levels
21333 !! wikitext
21334 ==2==
21335 ======6======
21336 ===3===
21337 =1=
21338 =====5=====
21339 ==2==
21340 !! html
21341 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
21342 <ul>
21343 <li class="toclevel-1 tocsection-1"><a href="#2"><span class="tocnumber">1</span> <span class="toctext">2</span></a>
21344 <ul>
21345 <li class="toclevel-2 tocsection-2"><a href="#6"><span class="tocnumber">1.1</span> <span class="toctext">6</span></a></li>
21346 <li class="toclevel-2 tocsection-3"><a href="#3"><span class="tocnumber">1.2</span> <span class="toctext">3</span></a></li>
21347 </ul>
21348 </li>
21349 <li class="toclevel-1 tocsection-4"><a href="#1"><span class="tocnumber">2</span> <span class="toctext">1</span></a>
21350 <ul>
21351 <li class="toclevel-2 tocsection-5"><a href="#5"><span class="tocnumber">2.1</span> <span class="toctext">5</span></a></li>
21352 <li class="toclevel-2 tocsection-6"><a href="#2_2"><span class="tocnumber">2.2</span> <span class="toctext">2</span></a></li>
21353 </ul>
21354 </li>
21355 </ul>
21356 </div>
21357
21358 <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>
21359 <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>
21360 <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>
21361 <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>
21362 <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>
21363 <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>
21364
21365 !! end
21366
21367
21368 !! test
21369 ISBN with a dummy number
21370 !! wikitext
21371 ISBN ---
21372 !! html
21373 <p>ISBN ---
21374 </p>
21375 !! end
21376
21377
21378 !! test
21379 ISBN with space-delimited number
21380 !! wikitext
21381 ISBN 92 9017 032 8
21382 !! html/php
21383 <p><a href="/wiki/Special:BookSources/9290170328" class="internal mw-magiclink-isbn">ISBN 92 9017 032 8</a>
21384 </p>
21385 !! html/parsoid
21386 <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>
21387 !! end
21388
21389
21390 !! test
21391 ISBN with multiple spaces, no number
21392 !! wikitext
21393 ISBN foo
21394 !! html
21395 <p>ISBN foo
21396 </p>
21397 !! end
21398
21399
21400 !! test
21401 ISBN length
21402 !! wikitext
21403 ISBN 123456789
21404
21405 ISBN 1234567890
21406
21407 ISBN 12345678901
21408 !! html/php
21409 <p>ISBN 123456789
21410 </p><p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
21411 </p><p>ISBN 12345678901
21412 </p>
21413 !! html/parsoid
21414 <p>ISBN 123456789</p>
21415
21416 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a></p>
21417
21418 <p>ISBN 12345678901</p>
21419 !! end
21420
21421
21422 !! test
21423 ISBN with trailing year (T9110)
21424 !! wikitext
21425 ISBN 1-234-56789-0 - 2006
21426
21427 ISBN 1 234 56789 0 - 2006
21428 !! html/php
21429 <p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1-234-56789-0</a> - 2006
21430 </p><p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1 234 56789 0</a> - 2006
21431 </p>
21432 !! html/parsoid
21433 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1-234-56789-0</a> - 2006</p>
21434
21435 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1 234 56789 0</a> - 2006</p>
21436 !! end
21437
21438
21439 !! test
21440 anchorencode
21441 !! wikitext
21442 {{anchorencode:foo bar©#%n}}
21443 !! html
21444 <p>foo_bar.C2.A9.23.25n
21445 </p>
21446 !! end
21447
21448 !! test
21449 anchorencode trims spaces
21450 !! wikitext
21451 {{anchorencode: __pretty__please__}}
21452 !! html
21453 <p>pretty_please
21454 </p>
21455 !! end
21456
21457 !! test
21458 anchorencode deals with links
21459 !! wikitext
21460 {{anchorencode: [[hello|world]] [[hi]]}}
21461 !! html
21462 <p>world_hi
21463 </p>
21464 !! end
21465
21466 !! test
21467 anchorencode deals with templates
21468 !! wikitext
21469 {{anchorencode: {{Foo}} }}
21470 !! html
21471 <p>FOO
21472 </p>
21473 !! end
21474
21475 !! test
21476 anchorencode encodes like the TOC generator: (T20431)
21477 !! wikitext
21478 === _ +:.3A%3A&&amp;]] ===
21479 {{anchorencode: _ +:.3A%3A&&amp;]] }}
21480 __NOEDITSECTION__
21481 !! html
21482 <h3><span class="mw-headline" id=".2B:.3A.253A.26.26.5D.5D">_ +:.3A%3A&amp;&amp;]]</span></h3>
21483 <p>.2B:.3A.253A.26.26.5D.5D
21484 </p>
21485 !! end
21486
21487 !! test
21488 T8200: blockquotes and paragraph formatting
21489 !! wikitext
21490 <blockquote>
21491 foo
21492 </blockquote>
21493
21494 bar
21495
21496 baz
21497 !! html
21498 <blockquote>
21499 <p>foo
21500 </p>
21501 </blockquote>
21502 <p>bar
21503 </p>
21504 <pre>baz
21505 </pre>
21506 !! end
21507
21508 !! test
21509 T10293: Use of center tag ruins paragraph formatting
21510 !! wikitext
21511 <center>
21512 foo
21513 </center>
21514
21515 bar
21516
21517 baz
21518 !! html
21519 <center>
21520 <p>foo
21521 </p>
21522 </center>
21523 <p>bar
21524 </p>
21525 <pre>baz
21526 </pre>
21527 !! end
21528
21529 !!test
21530 Parsing of overlapping (improperly nested) inline html tags
21531 !! wikitext
21532 <span><s>x</span></s>
21533 !! html/php
21534 <p><span><s>x&lt;/span&gt;</s></span>
21535 </p>
21536 !! html/parsoid
21537 <p><span><s>x</s></span>
21538 </p>
21539 !!end
21540
21541 ###
21542 ### Language variants related tests
21543 ###
21544
21545 # Parsoid does not mark self-links.
21546 # Parsoid does not convert links; PHP will do any necessary redirects.
21547
21548 !! test
21549 Self-link in language variants
21550 !! options
21551 title=[[Dunav]] language=sr
21552 !! wikitext
21553 Both [[Dunav]] and [[Дунав]] are names for this river.
21554 !! html/php
21555 <p>Both <a class="mw-selflink selflink">Dunav</a> and <a class="mw-selflink selflink">Дунав</a> are names for this river.
21556 </p>
21557 !! html/parsoid
21558 <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>
21559 !! end
21560
21561 !! article
21562 Дуна
21563 !! text
21564 content
21565 !! endarticle
21566
21567 !! test
21568 Link to another existing title shouldn't be parsed as self-link even if it's a variant of this title
21569 !! options
21570 title=[[Duna]] language=sr
21571 !! wikitext
21572 [[Дуна]] is not a self-link while [[Duna]] and [[Dуна]] are still self-links.
21573 !! html/php
21574 <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.
21575 </p>
21576 !! html/parsoid
21577 <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>
21578 !! end
21579
21580 !! test
21581 Link to a section of a variant of this title shouldn't be parsed as self-link
21582 !! options
21583 title=[[Duna]] language=sr
21584 !! wikitext
21585 [[Dуна]] is a self-link while [[Dunа#Foo]] and [[Dуна#Foo]] are not self-links.
21586 !! html/php
21587 <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.
21588 </p>
21589 !! html/parsoid
21590 <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>
21591 !! end
21592
21593 !! test
21594 Link to pages in language variants
21595 !! options
21596 language=sr
21597 !! wikitext
21598 Main Page can be written as [[Маин Паге]]
21599 !! html/php
21600 <p>Main Page can be written as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a>
21601 </p>
21602 !! html/parsoid
21603 <p>Main Page can be written as <a rel="mw:WikiLink" href="./Маин_Паге" title="Маин Паге">Маин Паге</a></p>
21604 !! end
21605
21606
21607 !! test
21608 Multiple links to pages in language variants
21609 !! options
21610 language=sr
21611 !! wikitext
21612 [[Main Page]] can be written as [[Маин Паге]] same as [[Маин Паге]].
21613 !! html/php
21614 <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>.
21615 </p>
21616 !! html/parsoid
21617 <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>
21618 !! end
21619
21620
21621 !! test
21622 Simple template in language variants
21623 !! options
21624 language=sr
21625 !! wikitext
21626 {{тест}}
21627 !! html/php
21628 <p>This is a test template
21629 </p>
21630 !! end
21631
21632
21633 !! test
21634 Template with explicit namespace in language variants
21635 !! options
21636 language=sr
21637 !! wikitext
21638 {{Template:тест}}
21639 !! html/php
21640 <p>This is a test template
21641 </p>
21642 !! end
21643
21644
21645 !! test
21646 Basic test for template parameter in language variants
21647 !! options
21648 language=sr
21649 !! wikitext
21650 {{парамтест|param=foo}}
21651 !! html/php
21652 <p>This is a test template with parameter foo
21653 </p>
21654 !! end
21655
21656 !! test
21657 Simple category in language variants
21658 !! options
21659 language=sr cat
21660 !! wikitext
21661 [[Category:МедиаWики Усер'с Гуиде]]
21662 !! html/php
21663 cat=МедиаWики_Усер'с_Гуиде sort=
21664 !! html/parsoid
21665 <link rel="mw:PageProp/Category" href="./Категорија:МедиаWики_Усер'с_Гуиде" data-parsoid='{"stx":"simple","a":{"href":"./Категорија:МедиаWики_Усер&#39;с_Гуиде"},"sa":{"href":"Category:МедиаWики Усер&#39;с Гуиде"}}'/>
21666 !! end
21667
21668 !! article
21669 Category:分类
21670 !! text
21671 blah
21672 !! endarticle
21673
21674 !! article
21675 Category:分類
21676 !! text
21677 blah
21678 !! endarticle
21679
21680 ## We used to, but no longer wt2wt this test since the default serializer
21681 ## will normalize all categories to serialize on their own line.
21682 ## This wikitext usage is going to be fairly uncommon in production and
21683 ## selser will take care of preserving formatting in those scenarios.
21684 !! test
21685 Don't convert blue categorylinks to another variant (T35210)
21686 !! options
21687 cat
21688 language=zh
21689 parsoid=wt2html
21690 !! wikitext
21691 [[A]][[Category:分类]]
21692 !! html/php
21693 cat=分类 sort=
21694 !! html/parsoid
21695 <p><a rel="mw:WikiLink" href="./A" title="A">A</a></p>
21696 <link rel="mw:PageProp/Category" href="./Category:分类"/>
21697 !! end
21698
21699 !! test
21700 Stripping -{}- tags (language variants)
21701 !! options
21702 language=sr
21703 !! wikitext
21704 Latin proverb: -{Ne nuntium necare}-
21705 !! html/php
21706 <p>Latin proverb: Ne nuntium necare
21707 </p>
21708 !! html/parsoid
21709 <p>Latin proverb: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Ne nuntium necare"}}'></span></p>
21710 !! end
21711
21712
21713 !! test
21714 Prevent conversion with -{}- tags (language variants)
21715 !! options
21716 language=sr variant=sr-ec
21717 !! wikitext
21718 Latinski: -{Ne nuntium necare}-
21719 !! html/php
21720 <p>Латински: Ne nuntium necare
21721 </p>
21722 !! html/parsoid
21723 <p>Latinski: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Ne nuntium necare"}}'></span></p>
21724 !! end
21725
21726
21727 !! test
21728 Prevent conversion of text 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 links with -{}- tags (language variants)
21743 !! options
21744 language=sr variant=sr-ec
21745 !! wikitext
21746 -{[[Main Page]]}-
21747 !! html/php
21748 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
21749 </p>
21750 !! html/parsoid
21751 <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>
21752 !! end
21753
21754
21755 !! test
21756 -{}- tags within headlines (within html for parserConvert())
21757 !! options
21758 language=sr variant=sr-ec
21759 !! wikitext
21760 == -{Naslov}- ==
21761
21762 Note that even an unprotected headline ID is not affected by language
21763 conversion:
21764
21765 == Latinski ==
21766 !! html/php
21767 <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>
21768 <p>Ноте тхат евен ан унпротецтед хеадлине ИД ис нот аффецтед бy лангуаге
21769 цонверсион:
21770 </p>
21771 <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>
21772
21773 !! html/parsoid
21774 <h2 id="-.7BNaslov.7D-"><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Naslov"}}'></span></h2>
21775
21776 <p>Note that even an unprotected headline ID is not affected by language
21777 conversion:</p>
21778
21779 <h2 id="Latinski">Latinski</h2>
21780 !! end
21781
21782 !! test
21783 Explicit definition of language variant alternatives
21784 !! options
21785 language=zh variant=zh-tw
21786 !! wikitext
21787 -{zh:China;zh-tw:Taiwan}-, not China
21788 !! html/php
21789 <p>Taiwan, not China
21790 </p>
21791 !! html/parsoid
21792 <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>
21793 !! end
21794
21795 !! test
21796 Filter syntax for language variants
21797 !! options
21798 language=zh variant=zh-tw
21799 !! wikitext
21800 foo-{zh;zh-hans;zh-hant|blog, WEBJOURNAL, WEBLOG}-quux
21801 !! html/php
21802 <p>fooblog, WEBJOURNAL, WEBLOGquux
21803 </p>
21804 !! html/parsoid
21805 <p>foo<span typeof="mw:LanguageVariant" data-mw-variant='{"filter":{"l":["zh","zh-hans","zh-hant"],"t":"blog, WEBJOURNAL, WEBLOG"}}'></span>quux</p>
21806 !! end
21807
21808 # Note that Parsoid post-processing for language variants needs to
21809 # update the `title` attribute here, based on the mw:ExpandedAttrs property
21810 !! test
21811 Conversion around HTML tags
21812 !! options
21813 language=sr variant=sr-ec
21814 !! wikitext
21815 -{H|span=>sr-ec:script;title=>sr-ec:src}-
21816 <span title="La-{sr-el:L;sr-ec:C}-tin">ski</span>
21817 !! html/php
21818 <p>
21819 <span title="ЛаCтин">ски</span>
21820 </p>
21821 !! html/parsoid
21822 <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"}]}'/>
21823 <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>
21824 !! end
21825
21826 !! test
21827 Explicit session-wise two-way language variant mapping (A flag and - flag)
21828 !! options
21829 language=zh variant=zh-tw
21830 !! wikitext
21831 This is -{zh:China; zh-tw:Taiwan}-, but we'll forget that now.
21832
21833 Taiwan is not China.
21834
21835 But -{A|zh:China; zh-tw:Taiwan}- is China,
21836
21837 (This-{-|zh:China; zh-tw:Taiwan}- should be stripped!)
21838
21839 and -{China}- is China.
21840 !! html/php
21841 <p>This is Taiwan, but we'll forget that now.
21842 </p><p>Taiwan is not China.
21843 </p><p>But Taiwan is Taiwan,
21844 </p><p>(This should be stripped!)
21845 </p><p>and China is China.
21846 </p>
21847 !! html/parsoid
21848 <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>
21849 <p>Taiwan is not China.</p>
21850 <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>
21851 <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>
21852 <p>and <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"China"}}'></span> is China.</p>
21853 !! end
21854
21855 !! test
21856 Explicit session-wise one-way language variant mapping (A flag and - flag)
21857 !! options
21858 language=zh variant=zh-tw
21859 !! wikitext
21860 This is -{COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}-, but we'll forget that now.
21861
21862 COUNTRY is China or Taiwan.
21863
21864 But -{A|COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}- is COUNTRY,
21865
21866 (This-{-|COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}- should be stripped!)
21867
21868 and -{COUNTRY}- is COUNTRY.
21869 !! html/php
21870 <p>This is Taiwan, but we'll forget that now.
21871 </p><p>COUNTRY is China or Taiwan.
21872 </p><p>But Taiwan is Taiwan,
21873 </p><p>(This should be stripped!)
21874 </p><p>and COUNTRY is COUNTRY.
21875 </p>
21876 !! html/parsoid
21877 <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>
21878 <p>COUNTRY is China or Taiwan.</p>
21879 <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>
21880 <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>
21881 <p>and <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"COUNTRY"}}'></span> is COUNTRY.</p>
21882 !! end
21883
21884 !! test
21885 Explicit session-wise two-way language variant mapping (H flag for hide)
21886 !! options
21887 language=zh variant=zh-tw
21888 !! wikitext
21889 (This-{H|zh:China;zh-tw:Taiwan}- should be stripped!)
21890
21891 Taiwan is China.
21892 !! html/php
21893 <p>(This should be stripped!)
21894 </p><p>Taiwan is Taiwan.
21895 </p>
21896 !! html/parsoid
21897 <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>
21898 <p>Taiwan is China.</p>
21899 !! end
21900
21901 !! test
21902 Explicit session-wise one-way language variant mapping (H flag for hide)
21903 !! options
21904 language=zh variant=zh-tw
21905 !! wikitext
21906 (This-{H|COUNTRY=>zh:China;COUNTRY=>zh-tw:Taiwan}- should be stripped!)
21907
21908 COUNTRY is Taiwan or China.
21909 !! html/php
21910 <p>(This should be stripped!)
21911 </p><p>Taiwan is Taiwan or China.
21912 </p>
21913 !! html/parsoid
21914 <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>
21915 <p>COUNTRY is Taiwan or China.</p>
21916 !! end
21917
21918 ## Note that parsoid test runner does not support 'showtitle' option.
21919 !! test
21920 Adding explicit conversion rule for title (T flag)
21921 !! options
21922 language=zh variant=zh-tw showtitle
21923 !! wikitext
21924 Should be stripped-{T|zh:China;zh-tw:Taiwan}-!
21925
21926 Taiwan is China.
21927 !! html/php
21928 Taiwan
21929 <p>Should be stripped!
21930 </p><p>Taiwan is China.
21931 </p>
21932 !! html/parsoid
21933 <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>
21934 <p>Taiwan is China.</p>
21935 !! end
21936
21937 !! test
21938 Code coverage: T combined with H flag
21939 !! options
21940 language=zh variant=zh-tw showtitle
21941 !! wikitext
21942 Should be stripped-{T;H|zh:China; zh-tw:Taiwan}-!
21943
21944 Taiwan is China.
21945 !! html/php
21946 Taiwan
21947 <p>Should be stripped!
21948 </p><p>Taiwan is Taiwan.
21949 </p>
21950 !! html/parsoid
21951 <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>
21952 <p>Taiwan is China.</p>
21953 !! end
21954
21955 !! test
21956 Code coverage: T with no variants
21957 !! options
21958 language=zh variant=zh-tw showtitle
21959 !! wikitext
21960 -{H|zh:China; zh-tw:Taiwan}-
21961 Taiwan is China.-{T|Taiwan is China}-
21962 !! html/php
21963 Taiwan is China
21964 <p>
21965 Taiwan is Taiwan.
21966 </p>
21967 !! html/parsoid
21968 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/>
21969 Taiwan is China.<meta typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"Taiwan is China"},"title":true}'/></p>
21970 !! end
21971
21972 !! test
21973 Code coverage: rules with no variants
21974 !! options
21975 language=zh variant=zh-tw
21976 !! wikitext
21977 -{H|zh:China; zh-tw:Taiwan}-
21978 Taiwan is China.
21979 -{H|China}-
21980 Taiwan is China.
21981 !! html/php
21982 <p>
21983 Taiwan is Taiwan.
21984
21985 Taiwan is China.
21986 </p>
21987 !! html/parsoid
21988 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/>
21989 Taiwan is China.
21990 <meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"*","t":"China"}]}'/>
21991 Taiwan is China.</p>
21992 !! end
21993
21994
21995 !! test
21996 Code coverage: D flag for conversion rule
21997 !! options
21998 language=zh variant=zh-tw
21999 !! wikitext
22000 -{D|zh-cn:XA; zh-tw:YA}-
22001 -{A;D|zh-cn:XB; zh-tw:YB}-
22002 -{D;H|zh-cn:XC; zh-tw:YC}-
22003
22004 -{D;H|FOO=>zh-tw:BAR;FOO=>zh-cn:BAT}-
22005
22006 -{D|0=>zh-tw:1}-
22007 -{A;D|2=>zh-tw:3}-
22008 -{D;H|4=>zh-tw:5}-
22009
22010 XA XB XC YA YB YC FOO BAR BAT 012345
22011 !! html/php
22012 <p>大陆:XA;台灣:YA;
22013
22014 大陆:XC;台灣:YC;
22015 </p><p>FOO⇒台灣:BAR;FOO⇒大陆:BAT;
22016 </p><p>0⇒台灣:1;
22017
22018 4⇒台灣:5;
22019 </p><p>XA YB YC YA YB YC BAR BAR BAT 013355
22020 </p>
22021 !! html/parsoid
22022 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"describe":true,"twoway":[{"l":"zh-cn","t":"XA"},{"l":"zh-tw","t":"YA"}]}'></span>
22023 <meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"twoway":[{"l":"zh-cn","t":"XB"},{"l":"zh-tw","t":"YB"}]}'/>
22024 <span typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"twoway":[{"l":"zh-cn","t":"XC"},{"l":"zh-tw","t":"YC"}]}'></span></p>
22025 <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>
22026 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"describe":true,"oneway":[{"f":"0","l":"zh-tw","t":"1"}]}'></span>
22027 <meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"oneway":[{"f":"2","l":"zh-tw","t":"3"}]}'/>
22028 <span typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"describe":true,"oneway":[{"f":"4","l":"zh-tw","t":"5"}]}'></span></p>
22029 <p>XA XB XC YA YB YC FOO BAR BAT 012345</p>
22030 !! end
22031
22032 !! test
22033 Code coverage: N flag for conversion rule
22034 !! options
22035 language=zh variant=zh-cn
22036 !! wikitext
22037 -{N|zh-cn}-
22038
22039 -{N|zh-tw}-
22040
22041 -{N|sr-ec}-
22042 !! html/php
22043 <p>大陆
22044 </p><p>台灣
22045 </p><p>српски (ћирилица)‎
22046 </p>
22047 !! html/parsoid
22048 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"name":{"t":"zh-cn"}}'></span></p>
22049 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"name":{"t":"zh-tw"}}'></span></p>
22050 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"name":{"t":"sr-ec"}}'></span></p>
22051 !! end
22052
22053 # html2wt suppresses the bogus 'D' flag, so this is wt2html only
22054 !! test
22055 Code coverage: N flag for conversion rule (wt2html only)
22056 !! options
22057 language=zh variant=zh-cn
22058 parsoid=wt2html,html2html
22059 !! wikitext
22060 -{D;N|en}-
22061 !! html/php
22062 <p>English
22063 </p>
22064 !! html/parsoid
22065 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"name":{"t":"en"}}' data-parsoid='{"fl":["D","N"]}'></span></p>
22066 !! end
22067
22068 !! test
22069 Testing that changing the language variant here in the tests actually works
22070 !! options
22071 language=zh variant=zh showtitle
22072 !! wikitext
22073 Should be stripped-{T|zh:China; zh-tw:Taiwan}-!
22074 !! html/php
22075 China
22076 <p>Should be stripped!
22077 </p>
22078 !! html/parsoid
22079 <p>Should be stripped<meta typeof="mw:LanguageVariant" data-mw-variant='{"title":true,"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'/>!</p>
22080 !! end
22081
22082 !! test
22083 Recursive conversion of alt and title attrs shouldn't clear converter state
22084 !! options
22085 language=zh variant=zh-cn
22086 showtitle
22087 !! wikitext
22088 -{H|zh-cn:Exclamation; zh-tw:exclamation}-
22089 Should be stripped-{T|zh-cn:China; zh-tw:Taiwan}-<span title="exclamation">!</span>
22090 !! html/php
22091 China
22092 <p>
22093 Should be stripped<span title="Exclamation">!</span>
22094 </p>
22095 !! html/parsoid
22096 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"zh-cn","t":"Exclamation"},{"l":"zh-tw","t":"exclamation"}]}'/>
22097 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>
22098 !! end
22099
22100 !! test
22101 T26072: more test on conversion rule for title
22102 !! options
22103 language=zh variant=zh-tw showtitle
22104 !! wikitext
22105 This should be stripped-{T|zh:China; zh-tw:Taiwan}-!
22106
22107 This won't take interferes with the title rule-{H|zh:Beijing; zh-tw:Taipei}-.
22108 !! html/php
22109 Taiwan
22110 <p>This should be stripped!
22111 </p><p>This won't take interferes with the title rule.
22112 </p>
22113 !! html/parsoid
22114 <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>
22115 <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>
22116 !! end
22117
22118 !! test
22119 Partly disable title conversion if variant == main language code
22120 !! options
22121 language=zh variant=zh title=[[ZH]] showtitle
22122 !! wikitext
22123 -{T|zh-cn:CN;zh-tw:TW}-
22124 !! html/php
22125 ZH
22126 <p>
22127 </p>
22128 !! html/parsoid
22129 <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>
22130 !! end
22131
22132 !! test
22133 Partly disable title conversion if variant == main language code, more
22134 !! options
22135 language=zh variant=zh title=[[ZH]] showtitle
22136 !! wikitext
22137 -{T|TW}-
22138 !! html/php
22139 ZH
22140 <p>
22141 </p>
22142 !! html/parsoid
22143 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"TW"},"title":true}'/></p>
22144 !! end
22145
22146 !! test
22147 Raw output of variant escape tags (R flag)
22148 !! options
22149 language=zh variant=zh-tw
22150 !! wikitext
22151 Raw: -{R|zh:China;zh-tw:Taiwan}-
22152 !! html/php
22153 <p>Raw: zh:China;zh-tw:Taiwan
22154 </p>
22155 !! html/parsoid
22156 <p>Raw: <span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"zh:China;zh-tw:Taiwan"}}'></span></p>
22157 !! end
22158
22159 # html2wt suppresses the bogus 'D' flags, so this is wt2html only
22160 !! test
22161 Raw output of variant escape tags (R flag) (wt2html only)
22162 !! options
22163 language=zh variant=zh-tw
22164 parsoid=wt2html,html2html
22165 !! wikitext
22166 -{Variant}- -{D|syntax}- -{D;R|options}-
22167 !! html/php
22168 <p>Variant syntax options
22169 </p>
22170 !! html/parsoid
22171 <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>
22172 !! end
22173
22174 !! test
22175 Nested markup inside raw output of variant escape tags (R flag)
22176 !! options
22177 language=zh variant=zh-tw
22178 !! wikitext
22179 Nested raw: -{R|nested -{zh:China;zh-tw:Taiwan}- nested}-
22180 !! html/php
22181 <p>Nested raw: nested Taiwan nested
22182 </p>
22183 !! html/parsoid
22184 <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>
22185 !! end
22186
22187 !! test
22188 Nested markup and spaces inside raw output of variant escape tags (R flag)
22189 !! options
22190 language=zh variant=zh-tw
22191 !! wikitext
22192 X-{ outer -{ inner }- outer }-X
22193 !! html/php
22194 <p>X outer inner outer X
22195 </p>
22196 !! html/parsoid
22197 <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>
22198 !! end
22199
22200 !! test
22201 Templates inside raw output of variant escape tags (R flag)
22202 !! options
22203 language=zh variant=zh-tw
22204 !! wikitext
22205 Nested raw: -{R|nested {{echo|hi}} templates}-
22206 !! html/php
22207 <p>Nested raw: nested hi templates
22208 </p>
22209 !! html/parsoid
22210 <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>
22211 !! end
22212
22213 !! test
22214 Strings evaluating false shouldn't be ignored by Language converter (T51072)
22215 !! options
22216 language=zh variant=zh-cn
22217 !! input
22218 -{zh-cn:0;zh-sg:1;zh-tw:2;zh-hk:3}-
22219 !! html/php
22220 <p>0
22221 </p>
22222 !! html/parsoid
22223 <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>
22224 !! end
22225
22226 !! test
22227 Conversion rules from [numeric-only string] to [something else] (T48634)
22228 !! options
22229 language=zh variant=zh-cn
22230 !! input
22231 -{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
22232 !! html/php
22233 <p>D12345EE12345
22234 </p>
22235 !! html/parsoid
22236 <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>
22237 !! end
22238
22239 !! test
22240 Two-way converter rule entries with an empty value should be ignored (T53551)
22241 !! options
22242 language=zh variant=zh-cn
22243 !! input
22244 -{H|zh-cn:foo;zh-tw:;}-foobar
22245 !! html/php
22246 <p>foobar
22247 </p>
22248 !! html/parsoid
22249 <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>
22250 !! end
22251
22252 !! test
22253 One-way converter rule entries with an empty "from" string should be ignored (T53551)
22254 !! options
22255 language=zh variant=zh-cn
22256 !! input
22257 -{H|=>zh-cn:foo;}-foobar
22258 !! html/php
22259 <p>foobar
22260 </p>
22261 !! html/parsoid
22262 <p><meta typeof="mw:LanguageVariant" data-parsoid='{"tSp":[5]}' data-mw-variant='{"add":true,"oneway":[{"f":"","l":"zh-cn","t":"foo"}]}'/>foobar</p>
22263 !! end
22264
22265 !! test
22266 Empty converter rule entries shouldn't be inserted into the conversion table (T53551)
22267 !! options
22268 language=zh variant=zh-cn
22269 !! input
22270 -{H|}-foobar
22271 !! html/php
22272 <p>foobar
22273 </p>
22274 !! html/parsoid
22275 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"twoway":[{"l":"*","t":""}]}'/>foobar</p>
22276 !! end
22277
22278 !! test
22279 Nested using of manual convert syntax
22280 !! options
22281 language=zh variant=zh-hk
22282 !! wikitext
22283 Nested: -{zh-hans:Hi -{zh-cn:China;zh-sg:Singapore;}-;zh-hant:Hello -{zh-tw:Taiwan;zh-hk:H-{ong}- K-{}-ong;}-;}-!
22284 !! html/php
22285 <p>Nested: Hello Hong Kong!
22286 </p>
22287 !! html/parsoid
22288 <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>
22289 !! end
22290
22291 !! test
22292 HTML markups with conversion syntax in attribs, nested in other conversion blocks
22293 !! options
22294 language=zh variant=zh-cn
22295 !! wikitext
22296 -{zh;zh-hans;zh-hant|<span title="-{X}-">A</span>}-
22297 !! html/php
22298 <p><span title="X">A</span>
22299 </p>
22300 !! html/parsoid
22301 <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>
22302 !! end
22303
22304 !! test
22305 HTML markups with conversion syntax in attribs, nested in other conversion blocks (not working yet in PHP parser)
22306 !! options
22307 language=zh variant=zh-cn
22308 !! wikitext
22309 -{<span title="-{X}-">A</span>}-
22310 !! html/php+disabled
22311 <p><span title="X">A</span>
22312 </p>
22313 !! html/parsoid
22314 <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>
22315 !! end
22316
22317 # Parsoid and PHP disagree on how to parse this example: Parsoid
22318 # insists that the content of a language converter element be a valid
22319 # DOM fragment or attribute string
22320 !! test
22321 Language converter markup with block content
22322 !! options
22323 language=zh variant=zh-cn
22324 !! wikitext
22325 <span>a-{b<div>c}-d
22326
22327 <span>a-{zh;zh-hans;zh-hant|b<div>c}-d
22328
22329 <span>a-{H|0=>zh-cn:x<span>y;0=>zh-tw:b<div>c}-d
22330 !! html/php+tidy
22331 <p><span>ab</span></p>
22332 <div><span>cd <span>ab</span></span>
22333 <div><span>cd <span>ad</span></span></div>
22334 </div>
22335 !! html/parsoid
22336 <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>
22337
22338 <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>
22339
22340 <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>
22341 !! end
22342
22343 !! test
22344 LanguageConverter selser (1)
22345 !! options
22346 language=zh variant=zh-cn
22347 parsoid={
22348 "modes": ["wt2wt", "selser"],
22349 "changes": [
22350 ["span[typeof]", "attr", "data-mw-variant", "{\"disabled\":{\"t\":\"edited\"}}"]
22351 ]
22352 }
22353 !! wikitext
22354 -{raw}-
22355 !! wikitext/edited
22356 -{edited}-
22357 !! end
22358
22359 !! test
22360 LanguageConverter selser (2)
22361 !! options
22362 language=zh variant=zh-cn
22363 parsoid={
22364 "modes": ["wt2wt", "selser"],
22365 "changes": [
22366 ["span[class='x']", "contents", "text", "-{foo}-"],
22367 ["a", "contents", "text", "-{"],
22368 ["span[typeof]", "attr", "data-mw", "{\"parts\":[{\"template\":{\"target\":{\"wt\":\"1x\",\"href\":\"./Template:1x\"},\"params\":{\"1\":{\"wt\":\"-{\"}},\"i\":0}}]}"]
22369 ]
22370 }
22371 !! wikitext
22372 <span class="x">TEXT1</span>
22373 [http://example.com TEXT2]
22374 [[Foo|TEXT3]]
22375 {{echo|TEXT4}}
22376 !! wikitext/edited
22377 <span class="x"><nowiki>-{foo}-</nowiki></span>
22378 [http://example.com -{]
22379 [[Foo|<nowiki>-{</nowiki>]]
22380 {{1x|<nowiki>-{</nowiki>}}
22381 !! end
22382
22383 # Tests LanguageVariantText in ConstrainedText
22384 !! test
22385 LanguageConverter selser (3)
22386 !! options
22387 language=zh variant=zh-cn
22388 parsoid={
22389 "modes": ["wt2wt", "selser"],
22390 "changes": [
22391 ["td > span", "attr", "typeof", "mw:LanguageVariant"],
22392 ["td > span", "attr", "data-mw-variant", "{\"disabled\":{\"t\":\"edited\"}}"]
22393 ]
22394 }
22395 !! wikitext
22396 {|
22397 |-
22398 |<span>Foo</span>
22399 |}
22400 !! wikitext/edited
22401 {|
22402 |-
22403 |<nowiki/>-{edited}-
22404 |}
22405 !! end
22406
22407 # Tests LanguageVariantText._fromSelSer
22408 !! test
22409 LanguageConverter selser (4)
22410 !! options
22411 language=zh variant=zh-cn
22412 parsoid={
22413 "modes": ["wt2wt", "selser"],
22414 "changes": [
22415 ["td > span.x", "remove"]
22416 ]
22417 }
22418 !! wikitext
22419 {|
22420 |-
22421 |<span class="x">Foo</span>-{Bar}-
22422 ||<span class="x">Foo</span>-{Bar}-
22423 |}
22424 !! wikitext/edited
22425 {|
22426 |-
22427 |<nowiki/>-{Bar}-
22428 ||-{Bar}-
22429 |}
22430 !! end
22431
22432 # Since Parsoid is starting to emit canonical wikitext for links,
22433 # [http://example.com http://example.com] will not RT back to that
22434 # form anymore.
22435 # Parsoid does not language-convert links (it is done in a
22436 # post-processing step)
22437 !! test
22438 Proper conversion of text in external links
22439 !! options
22440 language=sr variant=sr-ec
22441 parsoid=wt2html
22442 !! wikitext
22443 http://www.google.com
22444 gopher://www.google.com
22445 [http://www.google.com http://www.google.com]
22446 [gopher://www.google.com gopher://www.google.com]
22447 [https://www.google.com irc://www.google.com]
22448 [ftp://www.google.com www.google.com/ftp://dir]
22449 [//www.google.com www.google.com]
22450 !! html/php
22451 <p><a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
22452 <a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
22453 <a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
22454 <a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
22455 <a rel="nofollow" class="external text" href="https://www.google.com">irc://www.google.com</a>
22456 <a rel="nofollow" class="external text" href="ftp://www.google.com">www.гоогле.цом/фтп://дир</a>
22457 <a rel="nofollow" class="external text" href="//www.google.com">www.гоогле.цом</a>
22458 </p>
22459 !! html/parsoid
22460 <p><a rel="mw:ExtLink" href="http://www.google.com">http://www.google.com</a>
22461 <a rel="mw:ExtLink" href="gopher://www.google.com">gopher://www.google.com</a>
22462 <a rel="mw:ExtLink" href="http://www.google.com">http://www.google.com</a>
22463 <a rel="mw:ExtLink" href="gopher://www.google.com">gopher://www.google.com</a>
22464 <a rel="mw:ExtLink" href="https://www.google.com">irc://www.google.com</a>
22465 <a rel="mw:ExtLink" href="ftp://www.google.com">www.google.com/ftp://dir</a>
22466 <a rel="mw:ExtLink" href="//www.google.com">www.google.com</a></p>
22467 !! end
22468
22469 !! test
22470 Do not convert roman numbers to language variants
22471 !! options
22472 language=sr variant=sr-ec
22473 !! wikitext
22474 Fridrih IV je car.
22475 !! html/php
22476 <p>Фридрих IV је цар.
22477 </p>
22478 !! html/parsoid
22479 <p>Fridrih IV je car.</p>
22480 !! end
22481
22482 !! test
22483 Unclosed language converter markup "-{"
22484 !! options
22485 language=sr
22486 !! wikitext
22487 -{T|hello
22488 !! html
22489 <p>-{T|hello
22490 </p>
22491 !! end
22492
22493 !! test
22494 Don't convert raw rule "-{R|=&gt;}-" to "=>"
22495 !! options
22496 language=sr
22497 !! wikitext
22498 -{R|=&gt;}-
22499 !! html/php
22500 <p>=&gt;
22501 </p>
22502 !! html/parsoid
22503 <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>
22504 !!end
22505
22506 !! test
22507 Don't break link parsing if language converter markup is in the caption.
22508 !! options
22509 language=sr variant=sr-ec
22510 !! wikitext
22511 [[Main Page|-{R|main page}-]]
22512 !! html/php
22513 <p><a href="/wiki/Main_Page" title="Маин Паге">main page</a>
22514 </p>
22515 !! html/parsoid
22516 <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>
22517 !! end
22518
22519 !! test
22520 T146304: Don't break template parsing if language converter markup is in the parameter.
22521 !! options
22522 language=sr variant=sr-ec
22523 !! wikitext
22524 {{echo|-{R|foo}-}}
22525 !! html/php
22526 <p>foo
22527 </p>
22528 !! html/parsoid
22529 <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>
22530 !! end
22531
22532 !! test
22533 T146305: Don't break image parsing if language converter markup is in the caption.
22534 !! options
22535 language=sr
22536 !! wikitext
22537 [[Датотека:Foobar.jpg|thumb|-{R|caption:}-]]
22538 !! html/php
22539 <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>
22540
22541 !! html/parsoid
22542 <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>
22543 !! end
22544
22545 !! test
22546 T146305: Don't break image parsing if nested language converter markup is in the caption.
22547 !! options
22548 language=zh variant=zh-cn
22549 !! wikitext
22550 [[File:Foobar.jpg|thumb|-{|zh-cn:blog (hk: -{zh-hans|WEBJOURNAL}-, tw: -{zh-hans|WEBLOG}-)}-]]
22551 !! html/php
22552 <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>
22553
22554 !! html/parsoid
22555 <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>
22556 !! end
22557
22558 # XXX html2wt disabled because rich markup in alt is not preserved.
22559 !! test
22560 Don't break gallery if language converter markup is inside.
22561 !! options
22562 language=zh
22563 !! wikitext
22564 <gallery>
22565 File:foobar.jpg|[[File:foobar.jpg|20px|desc|alt=-{R|foo}-|-{R|bar}-]]|alt=-{R|bat}-
22566 File:foobar.jpg|{{Test|unamedParam|alt=-{R|param}-}}|alt=galleryalt
22567 </gallery>
22568 !! html/php
22569 <ul class="gallery mw-gallery-traditional">
22570 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
22571 <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>
22572 <div class="gallerytext">
22573 <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>
22574 </p>
22575 </div>
22576 </div></li>
22577 <li class="gallerybox" style="width: 155px"><div style="width: 155px">
22578 <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>
22579 <div class="gallerytext">
22580 <p>This is a test template
22581 </p>
22582 </div>
22583 </div></li>
22584 </ul>
22585
22586 !! html/parsoid
22587 <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"}}'>
22588 <li class="gallerybox">
22589 <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>
22590 <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>
22591 </li>
22592 <li class="gallerybox">
22593 <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>
22594 <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>
22595 </li>
22596 </ul>
22597 !! end
22598
22599 !! test
22600 T153135: Don't break list handling if language converter markup is in the item.
22601 !! options
22602 language=zh variant=zh-cn
22603 !! wikitext
22604 ;-{zh-cn:AAA;zh-tw:BBB}-
22605 ;-{R|foo:bar}-
22606 !! html/php
22607 <dl><dt>AAA</dt>
22608 <dt>foo:bar</dt></dl>
22609
22610 !! html/parsoid
22611 <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>
22612 <dt data-parsoid='{"dsr":[25,39,1,0]}'><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"foo:bar"}}'></span></dt>
22613 </dl>
22614 !! end
22615
22616 // Note that parsoid does not protect colons unless language converter
22617 // markup is properly nested, because it is a backtracking parser.
22618 !! test
22619 T153135: Unclosed markup in definition list (code coverage)
22620 !! options
22621 language=zh variant=zh-cn
22622 !! wikitext
22623 ;<b>foo:bar
22624 ;-{zh-cn:AAA
22625 !! html/php+tidy
22626 <dl>
22627 <dt><b>foo:bar</b></dt>
22628 <dt><b>-{zh-cn:AAA</b></dt>
22629 </dl>
22630 !! html/parsoid
22631 <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}'>
22632 <dt data-parsoid='{"dsr":[12,20,1,0]}'>-{zh-cn</dt>
22633 <dd data-parsoid='{"stx":"row","dsr":[20,24,1,0]}'>AAA</dd>
22634 </b></dl>
22635 !! end
22636
22637 !! test
22638 T153135: Nested language converter markup in definition list (code coverage)
22639 !! options
22640 language=zh variant=zh-cn
22641 !! wikitext
22642 ;-{|zh-cn:AAA -{zh-hans|foo:bar}- -{R|bat:baz}-}-:def
22643 !! html/php
22644 <dl><dt>AAA foo:bar bat:baz</dt>
22645 <dd>def</dd></dl>
22646
22647 !! html/parsoid
22648 <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>
22649 <dd data-parsoid='{"stx":"row","dsr":[49,53,1,0]}'>def</dd>
22650 </dl>
22651 !! end
22652
22653 # html2wt mode disabled due to <nowiki> insertion.
22654 !! test
22655 T153140: Don't break table handling if language converter markup is in the cell.
22656 !! options
22657 language=sr variant=sr-ec
22658 parsoid=wt2html,wt2wt,html2html
22659 !! wikitext
22660 {|
22661 |-
22662 | -{R|B}-
22663 |}
22664 !! html/php
22665 <table>
22666
22667 <tr>
22668 <td> B
22669 </td></tr></table>
22670
22671 !! html/parsoid
22672 <table>
22673 <tbody>
22674 <tr>
22675 <td><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"B"}}'></span></td>
22676 </tr>
22677 </tbody>
22678 </table>
22679 !! end
22680
22681 !! test
22682 Language converter tricky html2wt cases (1)
22683 !! options
22684 language=sr
22685 parsoid=html2wt,wt2wt
22686 !! html/parsoid
22687 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"}-"}}'></span></p>
22688 !! wikitext
22689 -{<nowiki>}-</nowiki>}-
22690 !! html/php
22691 <p>&#125;-
22692 </p>
22693 !! end
22694
22695 !! test
22696 Language converter tricky html2wt cases (2)
22697 !! options
22698 language=sr
22699 parsoid=html2wt,wt2wt
22700 !! html/parsoid
22701 <p>-{foo}-</p>
22702 !! wikitext
22703 <nowiki>-{foo}-</nowiki>
22704 !! html/php
22705 <p>-&#123;foo&#125;-
22706 </p>
22707 !! end
22708
22709 !! test
22710 Language converter tricky html2wt cases (3)
22711 !! options
22712 language=sr
22713 parsoid=html2wt,wt2wt
22714 !! html/parsoid
22715 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"|"}}'></span></p>
22716 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"R|raw"}}'></span></p>
22717 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"-{foo}-"}}'></span></p>
22718 !! wikitext
22719 -{R||}-
22720
22721 -{R|R|raw}-
22722
22723 -{<nowiki>-{foo}-</nowiki>}-
22724 !! html/php
22725 <p>|
22726 </p><p>R|raw
22727 </p><p>-&#123;foo&#125;-
22728 </p>
22729 !! end
22730
22731 !! test
22732 Language converter tricky html2wt cases (4)
22733 !! options
22734 language=sr
22735 parsoid=html2wt,wt2wt
22736 !! html/parsoid
22737 <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>
22738 !! wikitext
22739 -{R|{{echo|hey}}}-
22740 !! html/php
22741 <p>hey
22742 </p>
22743 !! end
22744
22745 # Note that the <nowiki> escaping added by parsoid for source text,
22746 # destination text, and language names only works on the PHP side
22747 # for *destination text*. (HTML entity escaping wouldn't work
22748 # any better.) This is probably a bug, at least for source texts.
22749 # (For language names PHP uses a precise regexp based on the languages
22750 # it currently knows have variants, which is fragile since this set
22751 # can grow/shrink over time.)
22752 !! test
22753 Language converter tricky html2wt cases (5)
22754 !! options
22755 language=zh variant=zh-cn
22756 !! html/parsoid
22757 <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>
22758 <p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"oneway":[{"f":"A","l":"bo:g;us","t":"B"}]}'/></p>
22759 <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>
22760 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"twoway":[{"l":"bo:g;us","t":"xyz"},{"l":"zh-cn","t":"abc"}]}'></span></p>
22761 <p>a:b=>c xyz</p>
22762 !! wikitext
22763 -{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
22764
22765 -{H|A=><nowiki>bo:g;us</nowiki>:B}-
22766
22767 -{A|zh-tw:xyz; zh-cn:<nowiki>0;zh-tw:bar</nowiki>}-
22768
22769 -{<nowiki>bo:g;us</nowiki>:xyz; zh-cn:abc}-
22770
22771 a:b=>c xyz
22772 !! html/php+disabled
22773 <p>foobat;xyz=&gt;zh-cn:abc
22774 </p><p>A
22775 </p><p>0;zh-tw:bar
22776 </p><p>abc
22777 </p><p>a:b=&gt;c 0;zh-tw:bar
22778 </p>
22779 !! end
22780
22781 !! test
22782 T179579: Nowiki and lc interaction
22783 !! options
22784 parsoid=wt2html
22785 language=sr
22786 !! wikitext
22787 -{</nowiki>123}-
22788
22789 -{123<nowiki>|</nowiki>456}-
22790 !! html/parsoid
22791 <p><span typeof="mw:LanguageVariant" data-mw-variant='{"disabled":{"t":"&amp;lt;/nowiki>123"}}' data-parsoid='{"fl":[],"src":"-{&lt;/nowiki>123}-"}'></span></p>
22792
22793 <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>
22794 !! end
22795
22796 !! test
22797 T2529: Uncovered bullet
22798 !! wikitext
22799 * Foo {{bullet}}
22800 !! html
22801 <ul><li> Foo </li>
22802 <li> Bar</li></ul>
22803
22804 !! end
22805
22806 # Plain MediaWiki does not remove empty lists, but tidy actually does.
22807 # Templates in Wikipedia rely on this behavior, as tidy has always been
22808 # enabled there. These tests are normally run *without* tidy, so specify the
22809 # full output here.
22810 # To test realistic parsing behavior, apply a tidy-like transformation to both
22811 # the expected output and your parser's output.
22812 !! test
22813 T2529: Uncovered bullet leaving empty list, normally removed by tidy
22814 !! wikitext
22815 ******* Foo {{bullet}}
22816 !! html
22817 <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>
22818 <li> Bar</li></ul>
22819
22820 !! end
22821
22822 !! test
22823 T2529: Uncovered table already at line-start
22824 !! wikitext
22825 x
22826
22827 {{table}}
22828 y
22829 !! html
22830 <p>x
22831 </p>
22832 <table>
22833 <tr>
22834 <td> 1 </td>
22835 <td> 2
22836 </td></tr>
22837 <tr>
22838 <td> 3 </td>
22839 <td> 4
22840 </td></tr></table>
22841 <p>y
22842 </p>
22843 !! end
22844
22845 !! test
22846 T2529: Uncovered bullet in parser function result
22847 !! wikitext
22848 * Foo {{lc:{{bullet}} }}
22849 !! html
22850 <ul><li> Foo </li>
22851 <li> bar</li></ul>
22852
22853 !! end
22854
22855 !! test
22856 T7678: Double-parsed template argument
22857 !! wikitext
22858 {{lc:{{{1}}}|hello}}
22859 !! html
22860 <p>{{{1}}}
22861 </p>
22862 !! end
22863
22864 !! test
22865 T7678: Double-parsed template invocation
22866 !! wikitext
22867 {{lc:{{paramtest {{!}} param = hello }} }}
22868 !! html
22869 <p>{{paramtest | param = hello }}
22870 </p>
22871 !! end
22872
22873 !! test
22874 Case insensitivity of parser functions for non-ASCII characters (T10143)
22875 !! options
22876 language=cs
22877 title=[[Main Page]]
22878 !! wikitext
22879 {{PRVNÍVELKÉ:ěščř}}
22880 {{prvnívelké:ěščř}}
22881 {{PRVNÍMALÉ:ěščř}}
22882 {{prvnímalé:ěščř}}
22883 {{MALÁ:ěščř}}
22884 {{malá:ěščř}}
22885 {{VELKÁ:ěščř}}
22886 {{velká:ěščř}}
22887 !! html
22888 <p>Ěščř
22889 Ěščř
22890 ěščř
22891 ěščř
22892 ěščř
22893 ěščř
22894 ĚŠČŘ
22895 ĚŠČŘ
22896 </p>
22897 !! end
22898
22899 !! test
22900 Morwen/13: Unclosed link followed by heading
22901 !! wikitext
22902 [[link
22903 ==heading==
22904 !! html
22905 <p>[[link
22906 </p>
22907 <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>
22908
22909 !! end
22910
22911 !! test
22912 HHP2.1: Heuristics for headings in preprocessor parenthetical structures
22913 !! wikitext
22914 {{foo|
22915 =heading=
22916 !! html
22917 <p>{{foo|
22918 </p>
22919 <h1><span class="mw-headline" id="heading">heading</span></h1>
22920
22921 !! end
22922
22923 !! test
22924 HHP2.2: Heuristics for headings in preprocessor parenthetical structures
22925 !! wikitext
22926 {{foo|
22927 ==heading==
22928 !! html
22929 <p>{{foo|
22930 </p>
22931 <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>
22932
22933 !! end
22934
22935 !! test
22936 Tildes in comments
22937 !! options
22938 pst
22939 !! wikitext
22940 <!-- ~~~~ -->
22941 !! html/php
22942 <!-- ~~~~ -->
22943 !! end
22944
22945 !! test
22946 Paragraphs inside divs (no extra line breaks)
22947 !! wikitext
22948 <div>Line one
22949
22950 Line two</div>
22951 !! html
22952 <div>Line one
22953 Line two</div>
22954
22955 !! end
22956
22957 !! test
22958 Paragraphs inside divs (extra line break on open)
22959 !! wikitext
22960 <div>
22961 Line one
22962
22963 Line two</div>
22964 !! html
22965 <div>
22966 <p>Line one
22967 </p>
22968 Line two</div>
22969
22970 !! end
22971
22972 !! test
22973 Paragraphs inside divs (extra line break on close)
22974 !! wikitext
22975 <div>Line one
22976
22977 Line two
22978 </div>
22979 !! html
22980 <div>Line one
22981 <p>Line two
22982 </p>
22983 </div>
22984
22985 !! end
22986
22987 !! test
22988 Paragraphs inside divs (extra line break on open and close)
22989 !! wikitext
22990 <div>
22991 Line one
22992
22993 Line two
22994 </div>
22995 !! html
22996 <div>
22997 <p>Line one
22998 </p><p>Line two
22999 </p>
23000 </div>
23001
23002 !! end
23003
23004 !! test
23005 Nesting tags, paragraphs on lines which begin with <div>
23006 !! wikitext
23007 <div></div><strong>A
23008 B</strong>
23009 !! html/php+tidy
23010 <p><strong>A</strong></p>
23011 <p><strong>B</strong></p>
23012 !! html/parsoid
23013 <div></div>
23014 <p><strong>A
23015 B</strong>
23016 </p>
23017 !! end
23018
23019 # T8200: <blockquote> should behave like <div> with respect to line breaks
23020 !! test
23021 T8200: paragraphs inside blockquotes (no extra line breaks)
23022 !! wikitext
23023 <blockquote>Line one
23024
23025 Line two</blockquote>
23026 !! html
23027 <blockquote>Line one
23028 Line two</blockquote>
23029
23030 !! html+tidy
23031 <blockquote>
23032 <p>Line one Line two</p>
23033 </blockquote>
23034 !! end
23035
23036 !! test
23037 T8200: paragraphs inside blockquotes (extra line break on open)
23038 !! wikitext
23039 <blockquote>
23040 Line one
23041
23042 Line two</blockquote>
23043 !! html
23044 <blockquote>
23045 <p>Line one
23046 </p>
23047 Line two</blockquote>
23048
23049 !! html+tidy
23050 <blockquote>
23051 <p>Line one</p>
23052 Line two</blockquote>
23053 !! end
23054
23055 !! test
23056 T8200: paragraphs inside blockquotes (extra line break on close)
23057 !! wikitext
23058 <blockquote>Line one
23059
23060 Line two
23061 </blockquote>
23062 !! html
23063 <blockquote>Line one
23064 <p>Line two
23065 </p>
23066 </blockquote>
23067
23068 !! html+tidy
23069 <blockquote>
23070 <p>Line one</p>
23071 <p>Line two</p>
23072 </blockquote>
23073 !! end
23074
23075 !! test
23076 T8200: paragraphs inside blockquotes (extra line break on open and close)
23077 !! wikitext
23078 <blockquote>
23079 Line one
23080
23081 Line two
23082 </blockquote>
23083 !! html
23084 <blockquote>
23085 <p>Line one
23086 </p><p>Line two
23087 </p>
23088 </blockquote>
23089
23090 !! html+tidy
23091 <blockquote>
23092 <p>Line one</p>
23093 <p>Line two</p>
23094 </blockquote>
23095 !! end
23096
23097 !! test
23098 Paragraphs inside blockquotes/divs (no extra line breaks)
23099 !! wikitext
23100 <blockquote><div>Line one
23101
23102 Line two</div></blockquote>
23103 !! html
23104 <blockquote><div>Line one
23105 Line two</div></blockquote>
23106
23107 !! end
23108
23109 !! test
23110 Paragraphs inside blockquotes/divs (extra line break on open)
23111 !! wikitext
23112 <blockquote><div>
23113 Line one
23114
23115 Line two</div></blockquote>
23116 !! html
23117 <blockquote><div>
23118 <p>Line one
23119 </p>
23120 Line two</div></blockquote>
23121
23122 !! end
23123
23124 !! test
23125 Paragraphs inside blockquotes/divs (extra line break on close)
23126 !! wikitext
23127 <blockquote><div>Line one
23128
23129 Line two
23130 </div></blockquote>
23131 !! html
23132 <blockquote><div>Line one
23133 <p>Line two
23134 </p>
23135 </div></blockquote>
23136
23137 !! end
23138
23139 !! test
23140 Paragraphs inside blockquotes/divs (extra line break on open and close)
23141 !! wikitext
23142 <blockquote><div>
23143 Line one
23144
23145 Line two
23146 </div></blockquote>
23147 !! html
23148 <blockquote><div>
23149 <p>Line one
23150 </p><p>Line two
23151 </p>
23152 </div></blockquote>
23153
23154 !! end
23155
23156 !! test
23157 Interwiki links trounced by replaceExternalLinks after early LinkHolderArray expansion
23158 !! options
23159 wgLinkHolderBatchSize=0
23160 !! wikitext
23161 [[meatball:1]]
23162 [[meatball:2]]
23163 [[meatball:3]]
23164 !! html
23165 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?1" class="extiw" title="meatball:1">meatball:1</a>
23166 <a href="http://www.usemod.com/cgi-bin/mb.pl?2" class="extiw" title="meatball:2">meatball:2</a>
23167 <a href="http://www.usemod.com/cgi-bin/mb.pl?3" class="extiw" title="meatball:3">meatball:3</a>
23168 </p>
23169 !! end
23170
23171 !! test
23172 Free external link invading image caption
23173 !! wikitext
23174 [[Image:Foobar.jpg|thumb|http://x|hello]]
23175 !! html
23176 <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>
23177
23178 !! end
23179
23180 !! test
23181 T17196: localised external link numbers
23182 !! options
23183 language=fa
23184 !! wikitext
23185 [http://en.wikipedia.org/]
23186 !! html/php
23187 <p><a rel="nofollow" class="external autonumber" href="http://en.wikipedia.org/">[۱]</a>
23188 </p>
23189 !! html/parsoid
23190 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/"></a></p>
23191 !! end
23192
23193 !! test
23194 Multibyte character in padleft
23195 !! wikitext
23196 {{padleft:-Hello|7|Æ}}
23197 !! html
23198 <p>Æ-Hello
23199 </p>
23200 !! end
23201
23202 !! test
23203 Multibyte character in padright
23204 !! wikitext
23205 {{padright:Hello-|7|Æ}}
23206 !! html
23207 <p>Hello-Æ
23208 </p>
23209 !! end
23210
23211 !!test
23212 formatdate parser function
23213 !! wikitext
23214 {{#formatdate:2009-03-24}}
23215 !! html
23216 <p><span class="mw-formatted-date" title="2009-03-24">2009-03-24</span>
23217 </p>
23218 !! end
23219
23220 !!test
23221 formatdate parser function, with default format
23222 !! wikitext
23223 {{#formatdate:2009-03-24|mdy}}
23224 !! html
23225 <p><span class="mw-formatted-date" title="2009-03-24">March 24, 2009</span>
23226 </p>
23227 !! end
23228
23229 !! test
23230 Spacing of numbers in formatted dates
23231 !! wikitext
23232 {{#formatdate:January 15}}
23233 !! html
23234 <p><span class="mw-formatted-date" title="01-15">January 15</span>
23235 </p>
23236 !! end
23237
23238 !! test
23239 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
23240 !! options
23241 language=nl title=[[MediaWiki:Common.css]]
23242 !! wikitext
23243 {{#formatdate:2009-03-24|dmy}}
23244 !! html
23245 <p><span class="mw-formatted-date" title="2009-03-24">24 March 2009</span>
23246 </p>
23247 !! end
23248
23249 #
23250 #
23251 #
23252
23253 #
23254 # Edit comments
23255 #
23256
23257 !! test
23258 Edit comment with link
23259 !! options
23260 comment
23261 !! wikitext
23262 I like the [[Main Page]] a lot
23263 !! html/php
23264 I like the <a href="/wiki/Main_Page" title="Main Page">Main Page</a> a lot
23265 !!end
23266
23267 !! test
23268 Edit comment with link and link text
23269 !! options
23270 comment
23271 !! wikitext
23272 I like the [[Main Page|best pages]] a lot
23273 !! html/php
23274 I like the <a href="/wiki/Main_Page" title="Main Page">best pages</a> a lot
23275 !!end
23276
23277 !! test
23278 Edit comment with link and link text with suffix
23279 !! options
23280 comment
23281 !! wikitext
23282 I like the [[Main Page|best page]]s a lot
23283 !! html/php
23284 I like the <a href="/wiki/Main_Page" title="Main Page">best pages</a> a lot
23285 !!end
23286
23287 !! test
23288 Edit comment with section link (non-local, eg in history list)
23289 !! options
23290 comment title=[[Main Page]]
23291 !! wikitext
23292 /* External links */ removed bogus entries
23293 !! html/php
23294 <a href="/wiki/Main_Page#External_links" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
23295 !!end
23296
23297 !! test
23298 Edit comment with section link and text before it (non-local, eg in history list)
23299 !! options
23300 comment title=[[Main Page]]
23301 !! wikitext
23302 pre-comment text /* External links */ removed bogus entries
23303 !! html/php
23304 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>
23305 !!end
23306
23307 !! test
23308 Edit comment with section link (local, eg in diff view)
23309 !! options
23310 comment local title=[[Main Page]]
23311 !! wikitext
23312 /* External links */ removed bogus entries
23313 !! html/php
23314 <a href="#External_links">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
23315 !!end
23316
23317 !! test
23318 Edit comment with subpage link (T16080)
23319 !! options
23320 comment
23321 subpage
23322 title=[[Subpage test]]
23323 !! wikitext
23324 Poked at a [[/subpage]] here...
23325 !! html/php
23326 Poked at a <a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">/subpage</a> here...
23327 !!end
23328
23329 !! test
23330 Edit comment with subpage link and link text (T16080)
23331 !! options
23332 comment
23333 subpage
23334 title=[[Subpage test]]
23335 !! wikitext
23336 Poked at a [[/subpage|neat little page]] here...
23337 !! html/php
23338 Poked at a <a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">neat little page</a> here...
23339 !!end
23340
23341 !! test
23342 Edit comment with bogus subpage link in non-subpage NS (T16080)
23343 !! options
23344 comment
23345 title=[[Subpage test]]
23346 !! wikitext
23347 Poked at a [[/subpage]] here...
23348 !! html/php
23349 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...
23350 !!end
23351
23352 !! test
23353 Edit comment with bare anchor link (local, as on diff)
23354 !! options
23355 comment
23356 local
23357 title=[[Main Page]]
23358 !! wikitext
23359 [[#section]]
23360 !! html/php
23361 <a href="#section">#section</a>
23362 !! end
23363
23364 !! test
23365 Edit comment with bare anchor link (non-local, as on history)
23366 !! options
23367 comment
23368 title=[[Main Page]]
23369 !! wikitext
23370 [[#section]]
23371 !! html/php
23372 <a href="/wiki/Main_Page#section" title="Main Page">#section</a>
23373 !! end
23374
23375 !! test
23376 Anchor starting with underscore
23377 !! options
23378 title=[[Foo]]
23379 !! wikitext
23380 [[#_ref|One]]
23381 !! html/php
23382 <p><a href="#_ref">One</a>
23383 </p>
23384 !! html/parsoid
23385 <p><a rel="mw:WikiLink" href="./Foo#_ref" data-parsoid='{"stx":"piped","a":{"href":"./Foo#_ref"},"sa":{"href":"#_ref"}}'>One</a></p>
23386 !! end
23387
23388 !! test
23389 Id starting with underscore
23390 !! wikitext
23391 <div id="_ref"></div>
23392 !! html/*
23393 <div id="_ref"></div>
23394
23395 !! end
23396
23397 !! test
23398 Edit comment with link with more than one pipe (T99346)
23399 !! options
23400 comment
23401 !! wikitext
23402 [[Main Page|Many|pipes]]
23403 !! html/php
23404 <a href="/wiki/Main_Page" title="Main Page">Many|pipes</a>
23405 !! end
23406
23407 !! test
23408 Complex edit comment with link with more than one pipe (T99346)
23409 !! options
23410 comment
23411 !! wikitext
23412 Created page with "<noinclude>[[Category:Requests for permissions/Bot|{{subst:#titleparts:{{subst:PAGENAME}}|1|3}}]]</noinclude> === [[User:MineoBot|]] 8=== {{Request for permissions/links|Mineo..."
23413 !! html/php
23414 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;
23415 !! end
23416
23417 !! test
23418 Space normalisation on autocomment (T24784)
23419 !! options
23420 comment
23421 title=[[Main Page]]
23422 !! wikitext
23423 /* __hello__world__ */
23424 !! html/php
23425 <a href="/wiki/Main_Page#hello_world" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">__hello__world__</span></span>
23426 !! end
23427
23428 !! test
23429 percent-encoding and + signs in comments (T28410)
23430 !! options
23431 comment
23432 !! wikitext
23433 [[ABC%33D% ++]] [[ABC%33D% ++|+%20]]
23434 !! html/php
23435 <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>
23436 !! end
23437
23438 # Parsoid doesn't support this yet: see T75581
23439 # but it *should* omit the 'src' attribute if the image is bad.
23440 # PHP side of tests was disabled in
23441 # mediawiki/core:6bd31e7d95161a6e88fa86df60871051da997c3c
23442 # because of issues in the PHP parserTests infrastructure
23443 # (but the output below is indeed what the PHP side emits)
23444 !! test
23445 Bad images - basic functionality
23446 !! wikitext
23447 [[File:Bad.jpg]]
23448 !! DISABLED/html/php
23449 !! html/parsoid
23450 <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>
23451 !! end
23452
23453 !! test
23454 Bad images - T18039: text after bad image disappears
23455 !! wikitext
23456 Foo bar
23457 [[File:Bad.jpg]]
23458 Bar foo
23459 !! DISABLED/html/php
23460 <p>Foo bar
23461 </p><p>Bar foo
23462 </p>
23463 !! html/parsoid
23464 <p>Foo bar
23465 <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>
23466 Bar foo</p>
23467 !! end
23468
23469 !! test
23470 Verify that displaytitle works (T24501) no displaytitle
23471 !! options
23472 showtitle
23473 !! config
23474 wgAllowDisplayTitle=true
23475 wgRestrictDisplayTitle=false
23476 !! wikitext
23477 this is not the the title
23478 !! html/php
23479 Parser test
23480 <p>this is not the the title
23481 </p>
23482 !! end
23483
23484 !! test
23485 Verify that displaytitle works (T24501) RestrictDisplayTitle=false
23486 !! options
23487 showtitle
23488 title=[[Screen]]
23489 !! config
23490 wgAllowDisplayTitle=true
23491 wgRestrictDisplayTitle=false
23492 !! wikitext
23493 this is not the the title
23494 {{DISPLAYTITLE:whatever}}
23495 !! html/php
23496 whatever
23497 <p>this is not the the title
23498 </p>
23499 !! end
23500
23501 !! test
23502 Verify that displaytitle works (T24501) RestrictDisplayTitle=true mismatch
23503 !! options
23504 showtitle
23505 title=[[Screen]]
23506 !! config
23507 wgAllowDisplayTitle=true
23508 wgRestrictDisplayTitle=true
23509 !! wikitext
23510 this is not the the title
23511 {{DISPLAYTITLE:whatever}}
23512 !! html/php
23513 Screen
23514 <p>this is not the the title
23515 </p>
23516 !! end
23517
23518 !! test
23519 Verify that displaytitle works (T24501) RestrictDisplayTitle=true matching
23520 !! options
23521 showtitle
23522 title=[[Screen]]
23523 !! config
23524 wgAllowDisplayTitle=true
23525 wgRestrictDisplayTitle=true
23526 !! wikitext
23527 this is not the the title
23528 {{DISPLAYTITLE:screen}}
23529 !! html/php
23530 screen
23531 <p>this is not the the title
23532 </p>
23533 !! end
23534
23535 !! test
23536 Verify that displaytitle works (T24501) AllowDisplayTitle=false
23537 !! options
23538 showtitle
23539 title=[[Screen]]
23540 !! config
23541 wgAllowDisplayTitle=false
23542 !! wikitext
23543 this is not the the title
23544 {{DISPLAYTITLE:screen}}
23545 !! html/php
23546 Screen
23547 <p>this is not the the title
23548 <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>
23549 </p>
23550 !! end
23551
23552 !! test
23553 Verify that displaytitle works (T24501) AllowDisplayTitle=false no DISPLAYTITLE
23554 !! options
23555 showtitle
23556 title=[[Screen]]
23557 !! config
23558 wgAllowDisplayTitle=false
23559 !! wikitext
23560 this is not the the title
23561 !! html/php
23562 Screen
23563 <p>this is not the the title
23564 </p>
23565 !! end
23566
23567 !! test
23568 Verify that displaytitle handles inline CSS styles (T28547) - rejected value
23569 !! options
23570 showtitle
23571 title=[[Screen]]
23572 !! config
23573 wgAllowDisplayTitle=true
23574 wgRestrictDisplayTitle=true
23575 !! wikitext
23576 this is not the the title
23577 {{DISPLAYTITLE:<span style="display: none;">s</span>creen}}
23578 !! html/php
23579 <span style="/* attempt to bypass $wgRestrictDisplayTitle */">s</span>creen
23580 <p>this is not the the title
23581 </p>
23582 !! end
23583
23584 !! test
23585 Verify that displaytitle handles inline CSS styles (T28547) - accepted value
23586 !! options
23587 showtitle
23588 title=[[Screen]]
23589 !! config
23590 wgAllowDisplayTitle=true
23591 wgRestrictDisplayTitle=true
23592 !! wikitext
23593 this is not the the title
23594 {{DISPLAYTITLE:<span style="color: red;">s</span>creen}}
23595 !! html/php
23596 <span style="color: red;">s</span>creen
23597 <p>this is not the the title
23598 </p>
23599 !! end
23600
23601 !! test
23602 Page status indicators: Empty name is invalid
23603 !! options
23604 showindicators
23605 !! wikitext
23606 <indicator name=" "></indicator>
23607 <indicator></indicator>
23608 !! html/php
23609 <p><span class="error"><strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.</span>
23610 <span class="error"><strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.</span>
23611 </p>
23612 !! end
23613
23614 !! test
23615 Page status indicators: Weird syntaxes that are okay
23616 !! options
23617 showindicators
23618 !! wikitext
23619 <indicator name="empty" />
23620 <indicator name="name"></indicator>
23621 !! html/php
23622 empty=
23623 name=
23624 <p><br />
23625 </p>
23626 !! end
23627
23628 !! test
23629 Page status indicators: Torture test
23630 !! options
23631 showindicators
23632 !! wikitext
23633 <indicator name="01">hello world</indicator>
23634 <indicator name="02">[[Main Page]]</indicator>
23635 <indicator name="03">[[File:Foobar.jpg|25px|link=]]</indicator>
23636 <indicator name="04">[[File:Foobar.jpg|25px]]</indicator>
23637 <indicator name="05">* foo
23638 * bar</indicator>
23639 <indicator name="06"><nowiki>foo</nowiki></indicator>
23640 <indicator name="07"> Preformatted</indicator>
23641 <indicator name="08"><div>Broken tag</indicator>
23642 <indicator name="09">{| class=wikitable
23643 | cell
23644 |}</indicator>
23645 <indicator name="10">Two
23646
23647 paragraphs</indicator>
23648 !! html/php
23649 01=hello world
23650 02=<a href="/wiki/Main_Page" title="Main Page">Main Page</a>
23651 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" />
23652 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>
23653 05=<ul><li> foo</li>
23654 <li> bar</li></ul>
23655
23656 06=foo
23657 07=<pre>Preformatted
23658 </pre>
23659 08=<div>Broken tag</div>
23660
23661 09=<table class="wikitable">
23662 <tr>
23663 <td> cell
23664 </td></tr></table>
23665
23666 10=<p>Two
23667 </p><p>paragraphs
23668 </p>
23669 <p><br />
23670 </p><p><br />
23671 </p><p><br />
23672 </p><p><br />
23673 </p><p><br />
23674 </p>
23675 !! end
23676
23677 !! test
23678 preload: check <noinclude> and <includeonly>
23679 !! options
23680 preload
23681 !! wikitext
23682 Hello <noinclude>cruel</noinclude><includeonly>kind</includeonly> world.
23683 !! html/php
23684 Hello kind world.
23685 !! end
23686
23687 !! test
23688 preload: check <onlyinclude>
23689 !! options
23690 preload
23691 !! wikitext
23692 Goodbye <onlyinclude>Hello world</onlyinclude>
23693 !! html/php
23694 Hello world
23695 !! end
23696
23697 !! test
23698 preload: can pass tags through if we want to
23699 !! options
23700 preload
23701 !! wikitext
23702 <includeonly><</includeonly>includeonly>Hello world<includeonly><</includeonly>/includeonly>
23703 !! html/php
23704 <includeonly>Hello world</includeonly>
23705 !! end
23706
23707 !! test
23708 preload: check that it doesn't try to do tricks
23709 !! options
23710 preload
23711 !! wikitext
23712 * <!-- Hello --> ''{{world}}'' {{<includeonly>subst:</includeonly>How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
23713 !! html/php
23714 * <!-- Hello --> ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
23715 !! end
23716
23717 !! test
23718 Play a bit with r67090 and T5158
23719 !! wikitext
23720 <div style="width:50% !important">&nbsp;</div>
23721 <div style="width:50%&nbsp;!important">&nbsp;</div>
23722 <div style="width:50%&#160;!important">&nbsp;</div>
23723 <div style="border : solid;">&nbsp;</div>
23724 !! html/php
23725 <div style="width:50% !important">&#160;</div>
23726 <div style="width:50% !important">&#160;</div>
23727 <div style="width:50% !important">&#160;</div>
23728 <div style="border&#160;: solid;">&#160;</div>
23729
23730 !! html/parsoid
23731 <div style="width:50% !important" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
23732 <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>
23733 <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>
23734 <div style="border : solid;" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
23735
23736 !! end
23737
23738 !! test
23739 HTML5 data attributes
23740 !! wikitext
23741 <span data-foo="bar">Baz</span>
23742 <p data-abc-def_hij="">Quuz</p>
23743 !! html/php
23744 <p><span data-foo="bar">Baz</span>
23745 </p>
23746 <p data-abc-def_hij="">Quuz</p>
23747
23748 !! html/parsoid
23749 <p><span data-foo="bar" data-parsoid='{"stx":"html"}'>Baz</span></p>
23750 <p data-abc-def_hij="" data-parsoid='{"stx":"html"}'>Quuz</p>
23751 !! end
23752
23753 !! test
23754 Strip reserved data attributes
23755 !! wikitext
23756 <div data-mw="foo" data-parsoid="bar" data-mw-someext="baz" data-ok="fred" data-ooui="xyzzy" data-bad:ns="ns">d</div>
23757 !! html/php
23758 <div data-ok="fred">d</div>
23759
23760 !! html/parsoid
23761 <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>
23762 !! end
23763
23764 !! test
23765 percent-encoding and + signs in internal links (T28410)
23766 !! wikitext
23767 [[User:+%]] [[Page+title%]]
23768 [[%+]] [[%+|%20]] [[%+ ]] [[%+r]]
23769 [[%]] [[+]] [[File:%+abc%39|foo|[[bar]]]]
23770 [[%33%45]] [[%33%45+]]
23771 !! html/php
23772 <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>
23773 <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>
23774 <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>
23775 <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>
23776 </p>
23777 !! html/parsoid
23778 <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>
23779 <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>
23780 <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>
23781 <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>
23782 !! end
23783
23784 !! test
23785 Special characters in embedded file links (T29679)
23786 !! wikitext
23787 [[File:Contains & ampersand.jpg]]
23788 [[File:Does not exist.jpg|Title with & ampersand]]
23789 !! html/php
23790 <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>
23791 <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>
23792 </p>
23793 !! html/parsoid
23794 <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>
23795 <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>
23796 !! end
23797
23798 !! test
23799 Confirm that 'apos' named character reference doesn't make it to output (not legal in HTML 4)
23800 !! wikitext
23801 Text&apos;s been normalized?
23802 !! html
23803 <p>Text&#39;s been normalized?
23804 </p>
23805 !! end
23806
23807 !! test
23808 T21052 U+3000 IDEOGRAPHIC SPACE should terminate free external links
23809 !! wikitext
23810 http://www.example.org/ <-- U+3000 (vim: ^Vu3000)
23811 !! html
23812 <p><a rel="nofollow" class="external free" href="http://www.example.org/">http://www.example.org/</a> &lt;-- U+3000 (vim: ^Vu3000)
23813 </p>
23814 !! end
23815
23816 !! test
23817 T21052 U+3000 IDEOGRAPHIC SPACE should terminate bracketed external links
23818 !! wikitext
23819 [http://www.example.org/ ideograms]
23820 !! html
23821 <p><a rel="nofollow" class="external text" href="http://www.example.org/">ideograms</a>
23822 </p>
23823 !! end
23824
23825 !! test
23826 T21052 U+3000 IDEOGRAPHIC SPACE should terminate external images links
23827 !! wikitext
23828 http://www.example.org/pic.png <-- U+3000 (vim: ^Vu3000)
23829 !! html
23830 <p><img src="http://www.example.org/pic.png" alt="pic.png"/> &lt;-- U+3000 (vim: ^Vu3000)
23831 </p>
23832 !! end
23833
23834 !! article
23835 Mediawiki:loop1
23836 !! text
23837 {{Identical|A}}
23838 !! endarticle
23839
23840 !! article
23841 Mediawiki:loop2
23842 !! text
23843 {{Identical|B}}
23844 !! endarticle
23845
23846 !! article
23847 Template:Identical
23848 !! text
23849 {{int:loop1}}
23850 {{int:loop2}}
23851 !! endarticle
23852
23853 !! test
23854 T33098 Template which includes system messages which includes the template
23855 !! wikitext
23856 {{Identical}}
23857 !! html
23858 <p><span class="error">Template loop detected: <a href="/wiki/Template:Identical" title="Template:Identical">Template:Identical</a></span>
23859 <span class="error">Template loop detected: <a href="/wiki/Template:Identical" title="Template:Identical">Template:Identical</a></span>
23860 </p>
23861 !! end
23862
23863 !! test
23864 T33490 Turkish: ucfirst 'blah'
23865 !! options
23866 language=tr
23867 !! wikitext
23868 {{ucfirst:blah}}
23869 !! html
23870 <p>Blah
23871 </p>
23872 !! end
23873
23874 !! test
23875 T33490 Turkish: ucfirst 'ix'
23876 !! options
23877 language=tr
23878 !! wikitext
23879 {{ucfirst:ix}}
23880 !! html
23881 <p>İx
23882 </p>
23883 !! end
23884
23885 !! test
23886 T33490 Turkish: lcfirst 'BLAH'
23887 !! options
23888 language=tr
23889 !! wikitext
23890 {{lcfirst:BLAH}}
23891 !! html
23892 <p>bLAH
23893 </p>
23894 !! end
23895
23896 !! test
23897 T33490 Turkish: ucfırst (with a dotless i)
23898 !! options
23899 language=tr
23900 !! wikitext
23901 {{ucfırst:blah}}
23902 !! html
23903 <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>
23904 </p>
23905 !! end
23906
23907 !! test
23908 T33490 ucfırst (with a dotless i) with English language
23909 !! options
23910 language=en
23911 !! wikitext
23912 {{ucfırst:blah}}
23913 !! html
23914 <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>
23915 </p>
23916 !! end
23917
23918 # Note that Parsoid doesn't emit an explicit TOC.
23919 # Note also that the html2wt direction tends to emit an extra newline
23920 # between the __TOC__ magicword and the first heading unless *both*
23921 # the <meta> and the <h2> have a data-parsoid attribute set (even if
23922 # it's "{}").
23923
23924 !! test
23925 T28375: TOC with italics
23926 !! options
23927 title=[[Main Page]]
23928 !! wikitext
23929 __TOC__
23930 == ''Lost'' episodes ==
23931 !! html/php
23932 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
23933 <ul>
23934 <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>
23935 </ul>
23936 </div>
23937
23938 <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>
23939
23940 !! html/parsoid
23941 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
23942 <h2 data-parsoid='{}'> <i>Lost</i> episodes </h2>
23943 !! end
23944
23945 !! test
23946 T28375: TOC with bold
23947 !! options
23948 title=[[Main Page]]
23949 !! wikitext
23950 __TOC__
23951 == '''should be bold''' then normal text ==
23952 !! html/php
23953 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
23954 <ul>
23955 <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>
23956 </ul>
23957 </div>
23958
23959 <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>
23960
23961 !! html/parsoid
23962 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
23963 <h2 data-parsoid='{}'> <b>should be bold</b> then normal text </h2>
23964 !! end
23965
23966 !! test
23967 T35845: Headings become cursive in TOC when they contain an image
23968 !! options
23969 title=[[Main Page]]
23970 !! wikitext
23971 __TOC__
23972 == Image [[Image:foobar.jpg]] ==
23973 !! html/php
23974 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
23975 <ul>
23976 <li class="toclevel-1 tocsection-1"><a href="#Image"><span class="tocnumber">1</span> <span class="toctext">Image</span></a></li>
23977 </ul>
23978 </div>
23979
23980 <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>
23981
23982 !! html/parsoid
23983 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
23984 <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>
23985 !! end
23986
23987 !! test
23988 T35845 (2): Headings become bold in TOC when they contain a blockquote
23989 !! options
23990 title=[[Main Page]]
23991 !! wikitext
23992 __TOC__
23993 == <blockquote>Quote</blockquote> ==
23994 !! html/php
23995 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
23996 <ul>
23997 <li class="toclevel-1 tocsection-1"><a href="#Quote"><span class="tocnumber">1</span> <span class="toctext">Quote</span></a></li>
23998 </ul>
23999 </div>
24000
24001 <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>
24002
24003 !! html/php+tidy
24004 <p></p>
24005 <div id="toc" class="toc">
24006 <div class="toctitle">
24007 <h2>Contents</h2>
24008 </div>
24009 <ul>
24010 <li class="toclevel-1 tocsection-1"><a href="#Quote"><span class="tocnumber">1</span> <span class="toctext">Quote</span></a></li>
24011 </ul>
24012 </div>
24013 <p></p>
24014 <h2><span class="mw-headline" id="Quote"></span></h2>
24015 <blockquote>
24016 <p><span class="mw-headline" id="Quote">Quote</span></p>
24017 </blockquote>
24018 <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>
24019 !! html/parsoid
24020 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24021 <h2 data-parsoid='{}'> <blockquote>Quote</blockquote> </h2>
24022 !! end
24023
24024 !! test
24025 Unclosed tags in TOC
24026 !! options
24027 title=[[Main Page]]
24028 !! wikitext
24029 __TOC__
24030 == Proof: 2 < 3 ==
24031 <small>Hanc marginis exiguitas non caperet.</small>
24032 QED
24033 !! html/php
24034 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24035 <ul>
24036 <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>
24037 </ul>
24038 </div>
24039
24040 <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>
24041 <p><small>Hanc marginis exiguitas non caperet.</small>
24042 QED
24043 </p>
24044 !! html/parsoid
24045 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24046 <h2 data-parsoid='{}'> Proof: 2 &lt; 3 </h2>
24047 <p><small>Hanc marginis exiguitas non caperet.</small>
24048 QED</p>
24049 !! end
24050
24051 !! test
24052 Multiple tags in TOC
24053 !! wikitext
24054 __TOC__
24055 == <i>Foo</i> <b>Bar</b> ==
24056
24057 == <i>Foo</i> <blockquote>Bar</blockquote> ==
24058 !! html/php
24059 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24060 <ul>
24061 <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>
24062 <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>
24063 </ul>
24064 </div>
24065
24066 <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>
24067 <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>
24068
24069 !! html/php+tidy
24070 <p></p>
24071 <div id="toc" class="toc">
24072 <div class="toctitle">
24073 <h2>Contents</h2>
24074 </div>
24075 <ul>
24076 <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>
24077 <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>
24078 </ul>
24079 </div>
24080 <p></p>
24081 <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>
24082 <h2><span class="mw-headline" id="Foo_Bar_2"><i>Foo</i></span></h2>
24083 <blockquote>
24084 <p><span class="mw-headline" id="Foo_Bar_2">Bar</span></p>
24085 </blockquote>
24086 <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>
24087 !! html/parsoid
24088 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24089 <h2 data-parsoid='{}'> <i data-parsoid='{"stx":"html"}'>Foo</i> <b data-parsoid='{"stx":"html"}'>Bar</b> </h2>
24090 <h2> <i data-parsoid='{"stx":"html"}'>Foo</i> <blockquote>Bar</blockquote> </h2>
24091 !! end
24092
24093 # Don't expect Parsoid to roundtrip this until the php parser comes closer to
24094 # html5 tag parsing.
24095 !! test
24096 Tags with parameters in TOC
24097 !! options
24098 parsoid=wt2html
24099 !! wikitext
24100 __TOC__
24101 == <sup class="in-h2">Hello</sup> ==
24102
24103 == <sup class="a > b">Evilbye</sup> ==
24104 !! html/php
24105 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24106 <ul>
24107 <li class="toclevel-1 tocsection-1"><a href="#Hello"><span class="tocnumber">1</span> <span class="toctext"><sup>Hello</sup></span></a></li>
24108 <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>
24109 </ul>
24110 </div>
24111
24112 <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>
24113 <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>
24114
24115 !! html/parsoid
24116 <meta property="mw:PageProp/toc" />
24117 <h2> <sup class="in-h2" data-parsoid='{"stx":"html"}'>Hello</sup> </h2>
24118
24119 <h2> <sup class="a " data-parsoid='{"stx":"html"}'> b">Evilbye</sup> </h2>
24120 !! end
24121
24122 !! test
24123 span tags with directionality in TOC
24124 !! wikitext
24125 __TOC__
24126 == <span dir="ltr">C++</span> ==
24127
24128 == <span dir="rtl">זבנג!</span> ==
24129
24130 == <span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span> ==
24131
24132 == <span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span> ==
24133
24134 == <span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span> ==
24135 !! html/php
24136 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24137 <ul>
24138 <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>
24139 <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>
24140 <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>
24141 <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>
24142 <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>
24143 </ul>
24144 </div>
24145
24146 <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>
24147 <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>
24148 <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>
24149 <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>
24150 <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>
24151
24152 !! html/parsoid
24153 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24154 <h2 data-parsoid='{}'> <span dir="ltr">C++</span> </h2>
24155 <h2> <span dir="rtl">זבנג!</span> </h2>
24156 <h2> <span style="font-style: italic">The attributes on these span tags must be deleted from the TOC</span> </h2>
24157 <h2> <span style="font-style: italic" dir="ltr">All attributes on these span tags must be deleted from the TOC</span> </h2>
24158 <h2> <span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span> </h2>
24159 !! end
24160
24161 !! test
24162 T74884: bdi element in ToC
24163 !! wikitext
24164 __TOC__
24165 == <bdi>test</bdi> ==
24166 !! html/php
24167 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24168 <ul>
24169 <li class="toclevel-1 tocsection-1"><a href="#test"><span class="tocnumber">1</span> <span class="toctext"><bdi>test</bdi></span></a></li>
24170 </ul>
24171 </div>
24172
24173 <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>
24174
24175 !! html/parsoid
24176 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24177 <h2 data-parsoid='{}'> <bdi>test</bdi> </h2>
24178 !! end
24179
24180 !! test
24181 T35715: s/strike element in ToC
24182 !! wikitext
24183 __TOC__
24184 == <s>test</s> test <strike>test</strike> ==
24185 !! html/php
24186 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24187 <ul>
24188 <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>
24189 </ul>
24190 </div>
24191
24192 <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>
24193
24194 !! html/parsoid
24195 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24196 <h2 data-parsoid='{}'> <s>test</s> test <strike>test</strike> </h2>
24197 !! end
24198
24199 # Note that the html output does not have the <p></p>, but the
24200 # html+tidy output *does*. This is because the empty <p></p> is
24201 # removed by the sanitizer, but only when tidy is *not* enabled (!).
24202 !! test
24203 Empty <p> tag in TOC, removed by Sanitizer (T92892)
24204 !! wikitext
24205 __TOC__
24206 == x ==
24207 !! html/php
24208 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
24209 <ul>
24210 <li class="toclevel-1 tocsection-1"><a href="#x"><span class="tocnumber">1</span> <span class="toctext">x</span></a></li>
24211 </ul>
24212 </div>
24213
24214 <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>
24215
24216 !! html/php+tidy
24217 <p></p>
24218 <div id="toc" class="toc">
24219 <div class="toctitle">
24220 <h2>Contents</h2>
24221 </div>
24222 <ul>
24223 <li class="toclevel-1 tocsection-1"><a href="#x"><span class="tocnumber">1</span> <span class="toctext">x</span></a></li>
24224 </ul>
24225 </div>
24226 <p></p>
24227 <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>
24228 !! html/parsoid
24229 <meta property="mw:PageProp/toc" data-parsoid='{}'/>
24230 <h2 data-parsoid='{}'> x </h2>
24231 !! end
24232
24233 !! article
24234 MediaWiki:T34057
24235 !! text
24236 == {{int:headline_sample}} ==
24237 !! endarticle
24238
24239 !! test
24240 T34057: Title needed when expanding <h> nodes.
24241 !! options
24242 title=[[Main Page]]
24243 !! wikitext
24244 {{int:T34057}}
24245 !! html
24246 <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>
24247
24248 !! end
24249
24250 !! test
24251 Strip marker in urlencode
24252 !! wikitext
24253 {{urlencode:x<nowiki/>y}}
24254 {{urlencode:x<nowiki/>y|wiki}}
24255 {{urlencode:x<nowiki/>y|path}}
24256 {{urlencode:x<pre id="one">two</pre>y}}
24257 !! html/php
24258 <p>xy
24259 xy
24260 xy
24261 xy
24262 </p>
24263 !! end
24264
24265 !! test
24266 Strip marker in lc
24267 !! wikitext
24268 {{lc:x<nowiki/>y}}
24269 !! html
24270 <p>xy
24271 </p>
24272 !! end
24273
24274 !! test
24275 Strip marker in uc
24276 !! wikitext
24277 {{uc:x<nowiki/>y}}
24278 !! html
24279 <p>XY
24280 </p>
24281 !! end
24282
24283 !! test
24284 Strip marker in formatNum
24285 !! wikitext
24286 {{formatnum:1<nowiki/>2}}
24287 {{formatnum:1<nowiki/>2|R}}
24288 !! html
24289 <p>12
24290 12
24291 </p>
24292 !! end
24293
24294 !! test
24295 Check noCommafy in formatNum
24296 !! options
24297 language=be-tarask
24298 !! wikitext
24299 {{formatnum:123456.78}}
24300 {{formatnum:123456.78|NOSEP}}
24301 !! html
24302 <p>123 456,78
24303 123456.78
24304 </p>
24305 !! end
24306
24307 !! test
24308 Wrong option for formatNum (T58199)
24309 !! wikitext
24310 {{formatnum:1,234.56|Random}}
24311 {{formatnum:1,234.56|EVERYTHING}}
24312 {{formatnum:1234.56|any argument that has the string 'NOSEP'}}
24313 !! html
24314 <p>1,234.56
24315 1,234.56
24316 1,234.56
24317 </p>
24318 !! end
24319
24320 !! test
24321 Strip marker in grammar
24322 !! options
24323 language=fi
24324 !! wikitext
24325 {{grammar:elative|foo<nowiki/>bar}}
24326 !! html
24327 <p>foobarista
24328 </p>
24329 !! end
24330
24331 !! test
24332 Strip marker in padleft
24333 !! wikitext
24334 {{padleft:|2|x<nowiki/>y}}
24335 !! html
24336 <p>xy
24337 </p>
24338 !! end
24339
24340 !! test
24341 Strip marker in padright
24342 !! wikitext
24343 {{padright:|2|x<nowiki/>y}}
24344 !! html
24345 <p>xy
24346 </p>
24347 !! end
24348
24349 !! test
24350 Strip marker in anchorencode
24351 !! wikitext
24352 {{anchorencode:x<nowiki/>y}}
24353 !! html
24354 <p>xy
24355 </p>
24356 !! end
24357
24358 !! test
24359 nowiki inside link inside heading (T20295)
24360 !! wikitext
24361 ==[[foo|x<nowiki>y</nowiki>z]]==
24362 !! html
24363 <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>
24364
24365 !! end
24366
24367 !! test
24368 new support for bdi element (T33817)
24369 !! wikitext
24370 <p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>
24371 !! html
24372 <p dir="rtl" lang="he">ולדימיר לנין (ברוסית: <bdi lang="ru">Владимир Ленин</bdi>, 24 באפריל 1870–22 בינואר 1924) הוא מנהיג פוליטי קומוניסטי רוסי.</p>
24373
24374 !!end
24375
24376 !! test
24377 Ignore pipe between table row attributes
24378 !! wikitext
24379 {|
24380 | quux
24381 |- id=foo | style='color: red'
24382 | bar
24383 |}
24384 !! html
24385 <table>
24386 <tr>
24387 <td> quux
24388 </td></tr>
24389 <tr id="foo" style="color: red">
24390 <td> bar
24391 </td></tr></table>
24392
24393 !! end
24394
24395 !!test
24396 Language parser function
24397 !! wikitext
24398 {{#language:ar}}
24399 !! html
24400 <p>العربية
24401 </p>
24402 !! end
24403
24404 !!test
24405 Padleft and padright as substr
24406 !! wikitext
24407 {{padleft:|3|abcde}}
24408 {{padright:|3|abcde}}
24409 !! html
24410 <p>abc
24411 abc
24412 </p>
24413 !! end
24414
24415 !!test
24416 Special parser function
24417 !! wikitext
24418 {{#special:RandomPage}}
24419 {{#special:BaDtItLe}}
24420 {{#special:Foobar}}
24421 !! html
24422 <p>Special:Random
24423 Special:Badtitle
24424 Special:Foobar
24425 </p>
24426 !! end
24427
24428 !!test
24429 T36939 - Case insensitive link parsing ([HttP://])
24430 !! wikitext
24431 [HttP://MediaWiki.Org/]
24432 !! html/php
24433 <p><a rel="nofollow" class="external autonumber" href="HttP://MediaWiki.Org/">[1]</a>
24434 </p>
24435 !! html/parsoid
24436 <p><a rel="mw:ExtLink" href="HttP://MediaWiki.Org/"></a></p>
24437 !! end
24438
24439 !!test
24440 T36939 - Case insensitive link parsing ([HttP:// title])
24441 !! wikitext
24442 [HttP://MediaWiki.Org/ MediaWiki]
24443 !! html
24444 <p><a rel="nofollow" class="external text" href="HttP://MediaWiki.Org/">MediaWiki</a>
24445 </p>
24446 !! end
24447
24448 !!test
24449 T36939 - Case insensitive link parsing (HttP://)
24450 !! wikitext
24451 HttP://MediaWiki.Org/
24452 !! html/php
24453 <p><a rel="nofollow" class="external free" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a>
24454 </p>
24455 !! html/parsoid
24456 <p><a rel="mw:ExtLink" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a></p>
24457 !! end
24458
24459 !!test
24460 Disable TOC
24461 !! options
24462 notoc
24463 !! wikitext
24464 Lead
24465 == Section 1 ==
24466 == Section 2 ==
24467 == Section 3 ==
24468 == Section 4 ==
24469 == Section 5 ==
24470 !! html
24471 <p>Lead
24472 </p>
24473
24474 <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>
24475 <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>
24476 <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>
24477 <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>
24478 <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>
24479
24480 !! end
24481
24482
24483 ###
24484 ### Parsoid-specific tests
24485 ### Parsoid-PHP parser incompatibilities
24486 ###
24487 !!test
24488 1. SOL-sensitive wikitext tokens as template-args
24489 !!options
24490 parsoid=wt2html,wt2wt
24491 !! wikitext
24492 {{echo|*a}}
24493 {{echo|#a}}
24494 {{echo|:a}}
24495 !! html
24496 <span about="#mwt1" typeof="mw:Transclusion">
24497 </span><ul about="#mwt1"><li>a</li>
24498 </ul>
24499 <span about="#mwt2" typeof="mw:Transclusion">
24500 </span><ol about="#mwt2"><li>a</li>
24501 </ol>
24502 <span about="#mwt3" typeof="mw:Transclusion">
24503 </span><dl about="#mwt3"><dd>a</dd>
24504 </dl>
24505 !!end
24506
24507 #### -----------------------------------------------------------------
24508 #### Parsoid-specific functionality tests
24509 #### -----------------------------------------------------------------
24510
24511 # T65642/T68749: Formatting elt fixup around images is cleaned up.
24512 # We know wt2wt will fail, but we expect selser to pass.
24513 # Due to the nature of our testing, wt2wt and selser tests will enter the
24514 # blacklist and we'll catch selser regressions based on changes to the
24515 # blacklist entries for selser tests.
24516 !! test
24517 1. Bad treebuilder fixup of formatting elt is cleaned up
24518 !! options
24519 parsoid=wt2html,wt2wt
24520 !! wikitext
24521 {|
24522 |
24523 <small>
24524 [[Image:Foobar.jpg|right|Test]]
24525 </small>
24526 |}
24527 !! html/parsoid
24528 <table>
24529 <tbody><tr><td>
24530 <small>
24531 <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>
24532 </small>
24533 </td></tr>
24534 </tbody></table>
24535 !! end
24536
24537 !! test
24538 2. Bad treebuilder fixup of formatting elt is cleaned up
24539 !! options
24540 parsoid=wt2html,wt2wt
24541 !! wikitext
24542 '''foo[[File:Foobar.jpg|thumb|caption]]bar'''
24543
24544 <small>[[Image:Foobar.jpg|right|300px]]</small>
24545 !! html/parsoid
24546
24547 <p><b>foo</b></p>
24548 <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>
24549 <p><b>bar</b></p>
24550 <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>
24551 !! end
24552
24553 !! test
24554 3. Bad treebuilder fixup of formatting elt is cleaned up
24555 !! options
24556 parsoid=wt2html,wt2wt
24557 !! wikitext
24558 <small>'''foo[[File:Foobar.jpg|thumb|caption]]bar'''</small>
24559 !! html/parsoid
24560 <p><small><b>foo</b></small></p>
24561 <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>
24562 <p><small><b>bar</b></small></p>
24563 !! end
24564
24565 !! test
24566 4. Bad treebuilder fixup of formatting elt is cleaned up: formatting tags around captionless images are ignored
24567 !! options
24568 parsoid=wt2html,wt2wt
24569 !! wikitext
24570 '''<small>[[Image:Foobar.jpg|right|300px]]</small>'''
24571 !! html/parsoid
24572 <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>
24573 !! end
24574
24575 #### ----------------------------------------------------------------
24576 #### Parsoid-only testing of Parsoid's impl of LST
24577 #### Not implemented yet, see
24578 #### https://www.mediawiki.org/wiki/Parsoid/HTML_based_LST
24579 #### ----------------------------------------------------------------
24580
24581 ## We still need to support serializing the older format while content is stored.
24582 !! test
24583 LST Sections: Backwards compatibility
24584 !! options
24585 parsoid={
24586 "suppressErrors": true,
24587 "modes": ["html2wt"]
24588 }
24589 !! wikitext
24590 <section begin="2011-05-16" />
24591 <section end="2014-04-10 (MW 1.23wmf22)" />
24592 !! html/parsoid
24593 <p><meta typeof="mw:Extension/LabeledSectionTransclusion/begin" content="2011-05-16"/>
24594 <meta typeof="mw:Extension/LabeledSectionTransclusion/end" content="2014-04-10 (MW 1.23wmf22)"/></p>
24595 !! end
24596
24597 !! test
24598 LST Sections: Newfangled approach
24599 !! wikitext
24600 <section begin="2011-05-16" />
24601 <section end="2014-04-10 (MW 1.23wmf22)" />
24602 !! html/parsoid
24603 <p><span typeof="mw:Extension/section" about="#mwt4" data-mw='{"name":"section","attrs":{"begin":"2011-05-16"},"body":null}'>
24604 </span>
24605 <span typeof="mw:Extension/section" about="#mwt6" data-mw='{"name":"section","attrs":{"end":"2014-04-10 (MW 1.23wmf22)"},"body":null}'>
24606 </span></p>
24607 !! end
24608
24609 #--------- Test stripping of empty nodes in template content ----------
24610
24611 !! test
24612 Empty LI and TR nodes should be stripped from template content
24613 !! wikitext
24614 {{EmptyLITest}}
24615 {{EmptyTRTest}}
24616 !! html/parsoid
24617 <ul about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyLITest","href":"./Template:EmptyLITest"},"params":{},"i":0}}]}'>
24618 <li>a</li>
24619 <li>b</li>
24620 </ul>
24621 <table about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRTest","href":"./Template:EmptyTRTest"},"params":{},"i":0}}]}'>
24622 <tbody>
24623 <tr>
24624 <td>foo</td>
24625 </tr>
24626 <tr>
24627 <td>bar</td>
24628 </tr>
24629 </tbody>
24630 </table>
24631 !! end
24632
24633 !! test
24634 Empty LI and TR nodes should not be stripped from top-level content
24635 !! wikitext
24636 * a
24637 *
24638 * b
24639 {|
24640 |-
24641 |-
24642 |foo
24643 |}
24644 !! html/parsoid
24645 <ul>
24646 <li> a</li>
24647 <li class='mw-empty-elt'></li>
24648 <li> b</li>
24649 </ul>
24650 <table>
24651 <tbody>
24652 <tr class='mw-empty-elt'></tr>
24653 <tr>
24654 <td>foo</td>
24655 </tr>
24656 </tbody>
24657 </table>
24658 !! end
24659
24660 !! test
24661 Empty TR nodes should not be stripped if they have any attributes set
24662 !! wikitext
24663 {{EmptyTRWithHTMLAttrTest}}
24664 !! html/parsoid
24665 <table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRWithHTMLAttrTest","href":"./Template:EmptyTRWithHTMLAttrTest"},"params":{},"i":0}}]}'>
24666 <tr align='center'></tr>
24667 <tr><td>foo</td></tr>
24668 <tr align='center'></tr>
24669 <tr><td>bar</td></tr>
24670 </table>
24671 !! end
24672
24673 #### ----------------------------------------------------------------
24674 #### The following section of tests are primarily to test
24675 #### wikitext escaping capabilities of Parsoid. Given that
24676 #### escaping can be done any number of ways, the wikitext (input)
24677 #### is always adjusted to reflect how Parsoid adds nowiki
24678 #### escape tags.
24679 ####
24680 #### We are marking several tests as parsoid-only since the
24681 #### HTML in the result section is different from what the
24682 #### PHP parser generates for it.
24683 #### ----------------------------------------------------------------
24684
24685
24686 #### --------------- Headings ---------------
24687 #### 0. Unnested
24688 #### 1. Nested inside html <h1>=foo=</h1>
24689 #### 2. Outside heading nest on a single line <h1>foo</h1>*bar
24690 #### 3. Nested inside html with wikitext split by html tags
24691 #### 4. No escape needed
24692 #### 5. Empty headings <h1></h1>
24693 #### 6. Heading chars in SOL context
24694 #### ----------------------------------------
24695 !! test
24696 Headings: 0. Unnested
24697 !! options
24698 parsoid=html2wt
24699 !! html/parsoid
24700 <p>=foo=</p>
24701
24702 <p> =foo=
24703 <!--cmt-->
24704 =foo=</p>
24705
24706 <p>=foo<i>a</i>=</p>
24707 !! wikitext
24708 <nowiki>=foo=</nowiki>
24709
24710 <nowiki> </nowiki>=foo=
24711 <!--cmt-->
24712 <nowiki>=foo=</nowiki>
24713
24714 =foo''a''<nowiki>=</nowiki>
24715 !!end
24716
24717 # New headings and existing headings are handled differently
24718 !! test
24719 Headings: 1. Nested inside html
24720 !! options
24721 parsoid=html2wt
24722 !! html/parsoid
24723 <h1>=foo=</h1>
24724 <h2>=foo=</h2>
24725 <h3>=foo=</h3>
24726
24727 <h1 data-parsoid=''>=foo=</h1>
24728 <h2 data-parsoid=''>=foo=</h2>
24729 <h3 data-parsoid=''>=foo=</h3>
24730 <h4 data-parsoid=''>=foo=</h4>
24731 <h5 data-parsoid=''>=foo=</h5>
24732 <h6 data-parsoid=''>=foo=</h6>
24733 !! wikitext
24734 = =foo= =
24735
24736 == =foo= ==
24737
24738 === =foo= ===
24739
24740 =<nowiki>=foo=</nowiki>=
24741 ==<nowiki>=foo=</nowiki>==
24742 ===<nowiki>=foo=</nowiki>===
24743 ====<nowiki>=foo=</nowiki>====
24744 =====<nowiki>=foo=</nowiki>=====
24745 ======<nowiki>=foo=</nowiki>======
24746
24747 !!end
24748
24749 !! test
24750 Headings: 2. Outside heading nest on a single line <h1>foo</h1>*bar
24751 !! options
24752 parsoid=html2wt
24753 !! html/parsoid
24754 <h1>foo</h1>*bar
24755 <h1>foo</h1>=bar
24756 <h1>foo</h1>=bar=
24757 !! wikitext
24758 = foo =
24759 <nowiki>*</nowiki>bar
24760
24761 = foo =
24762 =bar
24763
24764 = foo =
24765 <nowiki>=bar=</nowiki>
24766 !!end
24767
24768 !! test
24769 Headings: 3. Nested inside html with wikitext split by html tags
24770 !! options
24771 parsoid=html2wt
24772 !! html/parsoid
24773 <h1>=<b>bold</b>foo=</h1>
24774 !! wikitext
24775 = ='''bold'''foo= =
24776 !!end
24777
24778 !! test
24779 Headings: 4a. No escaping needed (testing just h1 and h2)
24780 !! options
24781 parsoid=html2wt
24782 !! html/parsoid
24783 <h1>=foo</h1>
24784 <h1>foo=</h1>
24785 <h1> =foo= </h1>
24786 <h1>=foo= bar</h1>
24787 <h2>=foo</h2>
24788 <h2>foo=</h2>
24789 <h1>=</h1>
24790 <h1><i>=</i>foo=</h1>
24791 !! wikitext
24792 = =foo =
24793
24794 = foo= =
24795
24796 = =foo= =
24797
24798 = =foo= bar =
24799
24800 == =foo ==
24801
24802 == foo= ==
24803
24804 = = =
24805
24806 = ''=''foo= =
24807 !!end
24808
24809 !! test
24810 Headings: 4b. No escaping needed (inside p-tags)
24811 !! options
24812 parsoid=html2wt
24813 !! html/parsoid
24814 <p>===
24815 =foo= x
24816 =foo= <s></s>
24817 </p>
24818 !! wikitext
24819 ===
24820 =foo= x
24821 =foo= <s></s>
24822 !!end
24823
24824 !! test
24825 Headings: 5. Empty headings
24826 !! options
24827 parsoid=html2wt
24828 !! html/parsoid
24829 <h1 data-parsoid='{}'></h1>
24830
24831 <h2 data-parsoid='{}'></h2>
24832
24833 <h3 data-parsoid='{}'></h3>
24834
24835 <h4 data-parsoid='{}'></h4>
24836
24837 <h5 data-parsoid='{}'></h5>
24838
24839 <h6 data-parsoid='{}'></h6>
24840 !! wikitext
24841 =<nowiki/>=
24842
24843 ==<nowiki/>==
24844
24845 ===<nowiki/>===
24846
24847 ====<nowiki/>====
24848
24849 =====<nowiki/>=====
24850
24851 ======<nowiki/>======
24852 !!end
24853
24854 !! test
24855 Headings: 6a. Heading chars in SOL context (with trailing spaces)
24856 !! options
24857 parsoid=html2wt
24858 !! html/parsoid
24859 <p>=a=</p>
24860
24861 <p>=a=</p>
24862
24863 <p>=a=</p>
24864 !! wikitext
24865 <nowiki>=a=</nowiki>
24866
24867 <nowiki>=a=</nowiki>
24868
24869 <nowiki>=a=</nowiki>
24870 !!end
24871
24872 !! test
24873 Headings: 6b. Heading chars in SOL context (with trailing newlines)
24874 !! options
24875 parsoid=html2wt
24876 !! html/parsoid
24877 <p>=a=
24878 b</p>
24879
24880 <p>=a=
24881 b</p>
24882
24883 <p>=a=
24884 b</p>
24885 !! wikitext
24886 <nowiki>=a=</nowiki>
24887 b
24888
24889 <nowiki>=a=</nowiki>
24890 b
24891
24892 <nowiki>=a=</nowiki>
24893 b
24894 !!end
24895
24896 !! test
24897 Headings: 6c. Heading chars in SOL context (leading newline break)
24898 !! options
24899 parsoid=html2wt
24900 !! html/parsoid
24901 <p>a
24902 =b=</p>
24903 !! wikitext
24904 a
24905 <nowiki>=b=</nowiki>
24906 !!end
24907
24908 !! test
24909 Headings: 6d. Heading chars in SOL context (with interspersed comments)
24910 !! options
24911 parsoid=html2wt
24912 !! html/parsoid
24913 <!--c0--><p>=a=</p>
24914
24915 <!--c1--><p>=a=</p> <!--c2--> <!--c3-->
24916 !! wikitext
24917 <!--c0--><nowiki>=a=</nowiki>
24918
24919 <!--c1--><nowiki>=a=</nowiki> <!--c2--> <!--c3-->
24920 !!end
24921
24922 !! test
24923 Headings: 6d. Heading chars in SOL context (No escaping needed)
24924 !! options
24925 parsoid=html2wt
24926 !! html/parsoid
24927 =a=<div>b</div>
24928 !! wikitext
24929 =a=<div>b</div>
24930 !!end
24931
24932 !! test
24933 Headings: 7. Insert a newline between new content and headings
24934 !! options
24935 parsoid=html2wt
24936 !! html/parsoid
24937 <h2>NEW</h2>
24938 <p>new</p>
24939 <h2 data-parsoid='{}'>A</h2>
24940 <p data-parsoid='{}'>a</p>
24941 !! wikitext
24942 == NEW ==
24943 new
24944
24945 ==A==
24946 a
24947
24948 !! end
24949
24950 #### --------------- Lists ---------------
24951 #### 0. Outside nests (*foo, etc.)
24952 #### 1. Nested inside html <ul><li>*foo</li></ul>
24953 #### 2. Inside definition lists
24954 #### 3. Only bullets at start should be escaped
24955 #### 4. No escapes needed
24956 #### 5. No unnecessary escapes
24957 #### 6. Escape bullets in SOL position
24958 #### 7. Escape bullets in a multi-line context
24959 #### ----------------------------------------
24960
24961 !! test
24962 Lists: 0. Outside nests
24963 !! options
24964 parsoid=html2wt
24965 !! html/parsoid
24966 <p>*foo</p>
24967
24968 <p>#foo</p>
24969
24970 <p>;Foo:bar</p>
24971 !! wikitext
24972 <nowiki>*</nowiki>foo
24973
24974 <nowiki>#</nowiki>foo
24975
24976 <nowiki>;</nowiki>Foo<nowiki>:</nowiki>bar
24977 !!end
24978
24979 ## Making these next 3 tests Parsoid-only since they are html2wt tests
24980 ## to test wikitext escaping, and insignificant whitespace diffs
24981 ## cause PHP parser tests to barf
24982 !! test
24983 Lists: 1. Nested inside html (No unnecessary escapes)
24984 !! options
24985 parsoid=html2wt
24986 !! html/parsoid
24987 <ul>
24988 <li>*foo</li>
24989 <li>#foo</li>
24990 <li>:foo</li>
24991 <li>;foo</li>
24992 <li data-parsoid='{}'>*foo</li>
24993 <li data-parsoid='{}'>#foo</li>
24994 <li data-parsoid='{}'>:foo</li>
24995 <li data-parsoid='{}'>;foo</li>
24996 </ul>
24997
24998 <ol>
24999 <li>*foo</li>
25000 <li>#foo</li>
25001 <li>:foo</li>
25002 <li>;foo</li>
25003 <li data-parsoid='{}'>*foo</li>
25004 <li data-parsoid='{}'>#foo</li>
25005 <li data-parsoid='{}'>:foo</li>
25006 <li data-parsoid='{}'>;foo</li>
25007 </ol>
25008 !! wikitext
25009 * *foo
25010 * #foo
25011 * :foo
25012 * ;foo
25013 *<nowiki>*foo</nowiki>
25014 *<nowiki>#foo</nowiki>
25015 *<nowiki>:foo</nowiki>
25016 *<nowiki>;foo</nowiki>
25017
25018 # *foo
25019 # #foo
25020 # :foo
25021 # ;foo
25022 #<nowiki>*foo</nowiki>
25023 #<nowiki>#foo</nowiki>
25024 #<nowiki>:foo</nowiki>
25025 #<nowiki>;foo</nowiki>
25026 !!end
25027
25028 !! test
25029 Lists: 2. Inside definition lists
25030 !! options
25031 parsoid=html2wt
25032 !! html/parsoid
25033 <dl><dt>;foo</dt></dl>
25034 <dl><dt>:foo</dt></dl>
25035 <dl><dt>:foo</dt>
25036 <dd>bar</dd></dl>
25037 <dl><dd>:foo</dd></dl>
25038 !! wikitext
25039 ; ;foo
25040
25041 ; <nowiki>:foo</nowiki>
25042
25043 ; <nowiki>:foo</nowiki>
25044 : bar
25045
25046 : :foo
25047 !!end
25048
25049 !! test
25050 Lists: 3. Only bullets at start of text in wikitext-generated HTML should be escaped
25051 !! options
25052 parsoid=html2wt
25053 !! html/parsoid
25054 <ul>
25055 <li>*foo*bar</li>
25056 <li data-parsoid='{}'>*foo<i>it</i>*bar</li>
25057 </ul>
25058 !! wikitext
25059 * *foo*bar
25060 *<nowiki>*foo</nowiki>''it''*bar
25061 !!end
25062
25063 !! test
25064 Lists: 4. No escapes needed
25065 !! options
25066 parsoid=html2wt
25067 !! html/parsoid
25068 <ul>
25069 <li>foo*bar
25070 </li>
25071 </ul>
25072 <ul>
25073 <li><i>foo</i>*bar
25074 </li>
25075 </ul>
25076 <ul>
25077 <li><a rel="mw:WikiLink" href="Foo" title="Foo">Foo</a>: bar
25078 </li>
25079 </ul>
25080 <ul>
25081 <li><a rel="mw:WikiLink" href="Foo" title="Foo">Foo</a>*bar
25082 </li>
25083 </ul>
25084 !! wikitext
25085 *foo*bar
25086
25087 *''foo''*bar
25088
25089 *[[Foo]]: bar
25090
25091 *[[Foo]]*bar
25092 !!end
25093
25094 !! test
25095 Lists: 5. No unnecessary escapes
25096 !! options
25097 parsoid=html2wt
25098 !! html/parsoid
25099 <ul><li> bar <span>[[foo]]</span></li></ul>
25100 <ul><li> =bar <span>[[foo]]</span></li></ul>
25101 <ul><li> [[bar <span>[[foo]]</span></li></ul>
25102 <ul><li> ]]bar <span>[[foo]]</span></li></ul>
25103 <ul><li> =bar <span>foo]]</span>=</li></ul>
25104 <ul><li> <s></s>: a</li></ul>
25105 <ul><li> <i>* foo</i></li></ul>
25106
25107 !! wikitext
25108 * bar <span><nowiki>[[foo]]</nowiki></span>
25109
25110 * =bar <span><nowiki>[[foo]]</nowiki></span>
25111
25112 * [[bar <span><nowiki>[[foo]]</nowiki></span>
25113
25114 * ]]bar <span><nowiki>[[foo]]</nowiki></span>
25115
25116 * =bar <span>foo]]</span>=
25117
25118 * <s></s>: a
25119
25120 * ''* foo''
25121 !!end
25122
25123 !! test
25124 Lists: 6. Escape bullets in SOL position
25125 !! options
25126 parsoid=html2wt
25127 !! html/parsoid
25128 <p><!--cmt-->*foo</p>
25129 !! wikitext
25130 <!--cmt--><nowiki>*</nowiki>foo
25131 !!end
25132
25133 !! test
25134 Lists: 7. Escape bullets in a multi-line context
25135 !! options
25136 parsoid=html2wt
25137 !! html/parsoid
25138 <p>a
25139 *b
25140 </p>
25141 !! wikitext
25142 a
25143 <nowiki>*</nowiki>b
25144 !!end
25145
25146 !! test
25147 Lists: 8. Escape colons only if not present in tags
25148 !! options
25149 parsoid=html2wt
25150 !! html/parsoid
25151 <dl><dt>a:b<i>c:d</i></dt></dl>
25152 !! wikitext
25153 ; <nowiki>a:b</nowiki>''c:d''
25154 !! end
25155
25156 #### --------------- HRs ---------------
25157 #### 1. Single line
25158 #### -----------------------------------
25159
25160 !! test
25161 HRs: 1. Single line
25162 !! options
25163 parsoid=html2wt
25164 !! html/parsoid
25165 <hr />----
25166 <hr />=foo=
25167 <hr />*foo
25168 !! wikitext
25169 ----<nowiki>----</nowiki>
25170 ----=foo=
25171 ----*foo
25172 !! end
25173
25174 #### --------------- Tables ---------------
25175 #### 1a. Simple example
25176 #### 1b. No escaping needed (!foo)
25177 #### 1c. No escaping needed (|foo)
25178 #### 1d. No escaping needed (|}foo)
25179 ####
25180 #### 2a. Nested in td (<td>foo|bar</td>)
25181 #### 2b. Nested in td (<td>foo||bar</td>)
25182 #### 2c. Nested in td -- no escaping needed(<td>foo!!bar</td>)
25183 ####
25184 #### 3a. Nested in th (<th>foo!bar</th>)
25185 #### 3b. Nested in th (<th>foo!!bar</th>)
25186 #### 3c. Nested in th -- no escaping needed(<th>foo||bar</th>)
25187 ####
25188 #### 4a. Escape -
25189 #### 4b. Escape +
25190 #### 4c. No escaping needed
25191 #### --------------------------------------
25192
25193 !! test
25194 Tables: 1a. Simple example
25195 !! options
25196 parsoid=html2wt
25197 !! html/parsoid
25198 <p>{|
25199 |}
25200 </p>
25201 !! wikitext
25202 <nowiki>{|</nowiki>
25203 |}
25204 !! end
25205
25206 !! test
25207 Tables: 1b. No escaping needed
25208 !! options
25209 parsoid=html2wt
25210 !! html/parsoid
25211 <p>!foo
25212 </p>
25213 !! wikitext
25214 !foo
25215 !! end
25216
25217 !! test
25218 Tables: 1c. No escaping needed
25219 !! options
25220 parsoid=html2wt
25221 !! html/parsoid
25222 <p>|foo
25223 </p>
25224 !! wikitext
25225 |foo
25226 !! end
25227
25228 !! test
25229 Tables: 1d. No escaping needed
25230 !! options
25231 parsoid=html2wt
25232 !! html/parsoid
25233 <p>|}foo
25234 </p>
25235 !! wikitext
25236 |}foo
25237 !! end
25238
25239 !! test
25240 Tables: 2a. Nested in td
25241 !! options
25242 parsoid=html2wt
25243 !! html/parsoid
25244 <table><tbody><tr>
25245 <td>foo|bar</td></tr>
25246 <tr><td>x<div>a|b</div></td>
25247 </tbody></table>
25248 !! wikitext
25249 {|
25250 |<nowiki>foo|bar</nowiki>
25251 |-
25252 |x<div><nowiki>a|b</nowiki></div>
25253 |}
25254 !! html/php+tidy
25255 <table>
25256 <tr>
25257 <td>foo|bar</td>
25258 </tr>
25259 <tr>
25260 <td>x
25261 <div>a|b</div>
25262 </td>
25263 </tr>
25264 </table>
25265 !! end
25266
25267 !! test
25268 Tables: 2b. Nested in td
25269 !! options
25270 parsoid=html2wt
25271 !! html/parsoid
25272 <table><tbody><tr>
25273 <td>foo||bar</td>
25274 <td>a<i>b||c</i></td>
25275 <td>a<i><div>b||c</div></i></td>
25276 </tr></tbody></table>
25277 !! wikitext
25278 {|
25279 |<nowiki>foo||bar</nowiki>
25280 |a''<nowiki>b||c</nowiki>''
25281 |a''<div><nowiki>b||c</nowiki></div>''
25282 |}
25283 !! html/php
25284 <table>
25285 <tr>
25286 <td>foo||bar
25287 </td>
25288 <td>a<i>b||c</i>
25289 </td>
25290 <td>a<i><div>b||c</div></i>
25291 </td></tr></table>
25292
25293 !! end
25294
25295 !! test
25296 Tables: 2c. Nested in td -- no escaping needed
25297 !! options
25298 parsoid=html2wt
25299 !! html/*
25300 <table>
25301 <tr>
25302 <td>foo!!bar
25303 </td></tr></table>
25304
25305 !! wikitext
25306 {|
25307 |foo!!bar
25308 |}
25309 !! end
25310
25311 !! test
25312 Tables: 3a. Nested in th
25313 !! options
25314 parsoid=html2wt
25315 !! html/*
25316 <table>
25317 <tr>
25318 <th>foo!bar
25319 </th></tr></table>
25320
25321 !! wikitext
25322 {|
25323 !foo!bar
25324 |}
25325 !! end
25326
25327 !! test
25328 Tables: 3b. Nested in th
25329 !! options
25330 parsoid=html2wt
25331 !! html/parsoid
25332 <table><tbody>
25333 <tr><th>foo!!bar</th>
25334 <th><i>foo|bar</i></th>
25335 <th><i>foo!!bar</i></th>
25336 <th><i><span>foo!!bar</span></i></th>
25337 </tr></tbody></table>
25338 !! wikitext
25339 {|
25340 !<nowiki>foo!!bar</nowiki>
25341 !''<nowiki>foo|bar</nowiki>''
25342 !''<nowiki>foo!!bar</nowiki>''
25343 !''<span><nowiki>foo!!bar</nowiki></span>''
25344 |}
25345 !! html/php
25346 <table>
25347 <tr>
25348 <th>foo!!bar
25349 </th>
25350 <th><i>foo|bar</i>
25351 </th>
25352 <th><i>foo!!bar</i>
25353 </th>
25354 <th><i><span>foo!!bar</span></i>
25355 </th></tr></table>
25356
25357 !! end
25358
25359 !! test
25360 Tables: 3c. Nested in th
25361 !! options
25362 parsoid=html2wt
25363 !! html/parsoid
25364 <table><tbody>
25365 <tr><th>foo||bar</th>
25366 <th><span typeof="mw:Nowiki">foo||bar</span></th>
25367 </tr></tbody></table>
25368 !! wikitext
25369 {|
25370 !<nowiki>foo||bar</nowiki>
25371 !<nowiki>foo||bar</nowiki>
25372 |}
25373 !! html/php
25374 <table>
25375 <tr>
25376 <th>foo||bar
25377 </th>
25378 <th>foo||bar
25379 </th></tr></table>
25380
25381 !! end
25382
25383 !! test
25384 Tables: 4a. Escape -
25385 !! options
25386 parsoid=html2wt
25387 !! html/*
25388 <table>
25389 <tr>
25390 <th>-bar
25391 </th></tr>
25392 <tr>
25393 <td>-bar
25394 </td></tr></table>
25395
25396 !! wikitext
25397 {|
25398 !-bar
25399 |-
25400 |<nowiki>-bar</nowiki>
25401 |}
25402 !! end
25403
25404 !! test
25405 Tables: 4b. Escape +
25406 !! options
25407 parsoid=html2wt
25408 !! html/*
25409 <table>
25410 <tr>
25411 <th>+bar
25412 </th></tr>
25413 <tr>
25414 <td>+bar
25415 </td></tr></table>
25416
25417 !! wikitext
25418 {|
25419 !+bar
25420 |-
25421 |<nowiki>+bar</nowiki>
25422 |}
25423 !! end
25424
25425 !! test
25426 Tables: 4c. No escaping needed
25427 !! options
25428 parsoid=html2wt
25429 !! html/parsoid
25430 <table><tbody>
25431 <tr><td>foo-bar</td><td>foo+bar</td></tr>
25432 <tr><td><i>foo</i>-bar</td><td><i>foo</i>+bar</td></tr>
25433 <tr><td>foo
25434 <p>bar|baz
25435 +bar
25436 -bar</p></td></tr>
25437 <tr><td>x
25438 <div>a|b</div></td>
25439 </tbody></table>
25440 !! wikitext
25441 {|
25442 |foo-bar
25443 |foo+bar
25444 |-
25445 |''foo''-bar
25446 |''foo''+bar
25447 |-
25448 |foo
25449 bar|baz
25450 +bar
25451 -bar
25452 |-
25453 |x
25454 <div>a|b</div>
25455 |}
25456 !! html/php
25457 <table>
25458 <tr>
25459 <td>foo-bar
25460 </td>
25461 <td>foo+bar
25462 </td></tr>
25463 <tr>
25464 <td><i>foo</i>-bar
25465 </td>
25466 <td><i>foo</i>+bar
25467 </td></tr>
25468 <tr>
25469 <td>foo
25470 <p>bar|baz
25471 +bar
25472 -bar
25473 </p>
25474 </td></tr>
25475 <tr>
25476 <td>x
25477 <div>a|b</div>
25478 </td></tr></table>
25479
25480 !! end
25481
25482 !! test
25483 Tables: 4d. No escaping needed
25484 !! options
25485 parsoid=html2wt
25486 !! html/parsoid
25487 <table>
25488 <tbody><tr><td><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>-bar</td>
25489 <td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>+1</td>
25490 <td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>-2</td></tr>
25491 </tbody></table>
25492 !! wikitext
25493 {|
25494 |[[Foo]]-bar
25495 ||+1
25496 ||-2
25497 |}
25498 !! html/php
25499 <table>
25500 <tr>
25501 <td><a href="/wiki/Foo" title="Foo">Foo</a>-bar
25502 </td>
25503 <td>+1
25504 </td>
25505 <td>-2
25506 </td></tr></table>
25507
25508 !! end
25509
25510 !! test
25511 T97430: Don't emit empty nowiki pairs around marker meta tags
25512 !! options
25513 parsoid=html2wt
25514 !! html/parsoid
25515 <p>*This is a long sentence here that will make the nowiki algo split up the nowikis into multiple pairs
25516 |** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.</p>
25517 !! wikitext
25518 <nowiki>*</nowiki>This is a long sentence here that will make the nowiki algo split up the nowikis into multiple pairs
25519 |** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.
25520 !! end
25521
25522 !! test
25523 Unclosed xmlish element in table line shouldn't eat end delimiters
25524 !! options
25525 parsoid=html2wt
25526 !! html/parsoid
25527 <table>
25528 <tbody><tr><td> &lt;foo</td>
25529 <td> bar></td></tr>
25530 </tbody></table>
25531 !! wikitext
25532 {|
25533 | <foo
25534 | bar>
25535 |}
25536 !! html/php
25537 <table>
25538 <tr>
25539 <td> &lt;foo
25540 </td>
25541 <td> bar&gt;
25542 </td></tr></table>
25543
25544 !! end
25545
25546 #### --------------- Links ----------------
25547 #### 1. Quote marks in link text
25548 #### 2. Wikilinks: Escapes needed
25549 #### 3. Wikilinks: No escapes needed
25550 #### 4. Extlinks: Escapes needed
25551 #### 5. Extlinks: No escapes needed
25552 #### --------------------------------------
25553 !! test
25554 Links 1. WikiLinks: No escapes needed
25555 !! options
25556 parsoid=html2wt
25557 !! html/parsoid
25558 <p><a rel="mw:WikiLink" href="Foo" title="Foo">Foo<i>boo</i></a>
25559 <a rel="mw:WikiLink" href="Foo" title="Foo">[Foobar]</a>
25560 <a rel="mw:WikiLink" href="Foo" title="Foo">x [Foobar] x</a></p>
25561 !! wikitext
25562 [[Foo|Foo''boo'']]
25563 [[Foo|[Foobar]]]
25564 [[Foo|x [Foobar] x]]
25565 !! html/php
25566 <p><a href="/wiki/Foo" title="Foo">Foo<i>boo</i></a>
25567 <a href="/wiki/Foo" title="Foo">[Foobar]</a>
25568 <a href="/wiki/Foo" title="Foo">x [Foobar] x</a>
25569 </p>
25570 !! end
25571
25572 !! test
25573 Links 2. WikiLinks: Escapes needed
25574 !! options
25575 parsoid=html2wt
25576 !! html/parsoid
25577 <a href="Foo" rel="mw:WikiLink">Foobar]</a>
25578 <a href="Foo" rel="mw:WikiLink">x [http://google.com g] x</a>
25579 <a href="Foo" rel="mw:WikiLink">[[Bar]]</a>
25580 <a href="Foo" rel="mw:WikiLink">x [[Bar]] x</a>
25581 <a href="Foo" rel="mw:WikiLink">|Bar</a>
25582 <a href="Foo" rel="mw:WikiLink">]]bar</a>
25583 <a href="Foo" rel="mw:WikiLink">[[bar</a>
25584 <a href="Foo" rel="mw:WikiLink">x [[ y</a>
25585 <a href="Foo" rel="mw:WikiLink">x ]] y</a>
25586 <a href="Foo" rel="mw:WikiLink">x ]] y [[ z</a>
25587 !! wikitext
25588 [[Foo|<nowiki>Foobar]</nowiki>]]
25589 [[Foo|x <nowiki>[http://google.com g]</nowiki> x]]
25590 [[Foo|<nowiki>[[Bar]]</nowiki>]]
25591 [[Foo|<nowiki>x [[Bar]] x</nowiki>]]
25592 [[Foo|<nowiki>|Bar</nowiki>]]
25593 [[Foo|<nowiki>]]bar</nowiki>]]
25594 [[Foo|<nowiki>[[bar</nowiki>]]
25595 [[Foo|<nowiki>x [[ y</nowiki>]]
25596 [[Foo|<nowiki>x ]] y</nowiki>]]
25597 [[Foo|<nowiki>x ]] y [[ z</nowiki>]]
25598 !! html/php
25599 <p><a href="/wiki/Foo" title="Foo">Foobar]</a>
25600 <a href="/wiki/Foo" title="Foo">x [http://google.com g] x</a>
25601 <a href="/wiki/Foo" title="Foo">[[Bar]]</a>
25602 <a href="/wiki/Foo" title="Foo">x [[Bar]] x</a>
25603 <a href="/wiki/Foo" title="Foo">|Bar</a>
25604 <a href="/wiki/Foo" title="Foo">]]bar</a>
25605 <a href="/wiki/Foo" title="Foo">[[bar</a>
25606 <a href="/wiki/Foo" title="Foo">x [[ y</a>
25607 <a href="/wiki/Foo" title="Foo">x ]] y</a>
25608 <a href="/wiki/Foo" title="Foo">x ]] y [[ z</a>
25609 </p>
25610 !! end
25611
25612 !! test
25613 Links 3. WikiLinks: No escapes needed
25614 !! options
25615 parsoid=html2wt
25616 !! html/parsoid
25617 <p><a rel="mw:WikiLink" href="Foo">[Foobar</a>
25618 <a rel="mw:WikiLink" href="Foo" title="Foo">foo|bar</a></p>
25619 !! wikitext
25620 [[Foo|[Foobar]]
25621 [[Foo|foo|bar]]
25622 !! html/php
25623 <p><a href="/wiki/Foo" title="Foo">[Foobar</a>
25624 <a href="/wiki/Foo" title="Foo">foo|bar</a>
25625 </p>
25626 !! end
25627
25628 !! test
25629 Links 4. ExtLinks: Escapes needed
25630 !! options
25631 parsoid=html2wt
25632 !! html/parsoid
25633 <p><a rel="mw:ExtLink" href="http://google.com">[google]</a>
25634 <a rel="mw:ExtLink" href="http://google.com">google]</a>
25635 <a rel="mw:ExtLink" href="http://google.com">goog] le</a></p>
25636 <p>[http://google.com]</p>
25637 <p>[http://google.com google]</p>
25638 <p>[<a rel="mw:ExtLink" href="http://google.com">http://google.com</a>]</p>
25639 <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>
25640 !! wikitext
25641 [http://google.com <nowiki>[google]</nowiki>]
25642 [http://google.com <nowiki>google]</nowiki>]
25643 [http://google.com <nowiki>goog] le</nowiki>]
25644
25645 <nowiki>[http://google.com]</nowiki>
25646
25647 <nowiki>[http://google.com google]</nowiki>
25648
25649 [http://google.com<nowiki>]</nowiki>
25650
25651 [{{echo|http://google.com}}<nowiki>]</nowiki>
25652 !! html/php
25653 <p><a rel="nofollow" class="external text" href="http://google.com">[google]</a>
25654 <a rel="nofollow" class="external text" href="http://google.com">google]</a>
25655 <a rel="nofollow" class="external text" href="http://google.com">goog] le</a>
25656 </p><p>[http://google.com]
25657 </p><p>[http://google.com google]
25658 </p><p>[<a rel="nofollow" class="external free" href="http://google.com">http://google.com</a>]
25659 </p><p>[<a rel="nofollow" class="external free" href="http://google.com">http://google.com</a>]
25660 </p>
25661 !! end
25662
25663 !! test
25664 Links 5. ExtLinks: No escapes needed
25665 !! options
25666 parsoid=html2wt
25667 !! html/parsoid
25668 <p><a rel="mw:ExtLink" href="http://google.com">[google</a></p>
25669 <p>[<a ref="mw:ExtLink" href="http://google.com"></a>]</p>
25670 !! wikitext
25671 [http://google.com [google]
25672
25673 [[http://google.com]]
25674 !! html/php
25675 <p><a rel="nofollow" class="external text" href="http://google.com">[google</a>
25676 </p><p>[<a rel="nofollow" class="external autonumber" href="http://google.com">[1]</a>]
25677 </p>
25678 !! end
25679
25680 !! test
25681 Links 6. Add <nowiki/>s between text-nodes and url-links when required (T66300)
25682 !! options
25683 parsoid=html2wt
25684 !! html/parsoid
25685 <p>x<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>y
25686 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>?x
25687 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>&amp;x
25688 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>'x
25689 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>,x
25690 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>.x
25691 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>;x
25692 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>:x
25693 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>;x
25694 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>!x
25695 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>=x
25696 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>(x)
25697 <a rel="mw:ExtLink" href="http://example.com(x" data-parsoid='{"stx":"url"}'>http://example.com(x</a>)
25698 </p>
25699 !! wikitext
25700 x<nowiki/>http://example.com<nowiki/>y
25701 http://example.com<nowiki/>?x
25702 http://example.com<nowiki/>&x
25703 http://example.com<nowiki/>'x
25704 http://example.com<nowiki/>,x
25705 http://example.com<nowiki/>.x
25706 http://example.com<nowiki/>;x
25707 http://example.com<nowiki/>:x
25708 http://example.com<nowiki/>;x
25709 http://example.com<nowiki/>!x
25710 http://example.com<nowiki/>=x
25711 http://example.com<nowiki/>(x)
25712 http://example.com(x<nowiki/>)
25713 !! end
25714
25715 !! test
25716 Links 7a. Don't add spurious <nowiki/>s between text-nodes and url-links (T66300)
25717 !! options
25718 parsoid=html2wt
25719 !! html/parsoid
25720 <p>x
25721 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>
25722 y
25723 "<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>"
25724 (<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>)
25725 (<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>) foo
25726 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>,
25727 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>, foo
25728 </p>
25729 !! wikitext
25730 x
25731 http://example.com
25732 y
25733 "http://example.com"
25734 (http://example.com)
25735 (http://example.com) foo
25736 http://example.com,
25737 http://example.com, foo
25738 !! html/php
25739 <p>x
25740 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
25741 y
25742 "<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>"
25743 (<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
25744 (<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>) foo
25745 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>,
25746 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>, foo
25747 </p>
25748 !! end
25749
25750 !! test
25751 Links 7b. Don't add spurious <nowiki/>s between text-nodes and url-links (T66300)
25752 !! options
25753 parsoid=html2wt
25754 !! html/parsoid
25755 <p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>.,;:!?\
25756 -<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>:</p>
25757 !! wikitext
25758 http://example.com.,;:!?\
25759 -http://example.com:
25760 !! html/php
25761 <p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>.,;:!?\
25762 -<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>:
25763 </p>
25764 !! end
25765
25766 !! test
25767 Links 8. Add <nowiki/>s between text-nodes and RFC-links when required (T66300)
25768 !! options
25769 parsoid=html2wt
25770 !! html/parsoid
25771 <p><a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>4
25772 <a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y
25773 X<a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y</p>
25774 !! wikitext
25775 RFC 123<nowiki/>4
25776 RFC 123<nowiki/>y
25777 X<nowiki/>RFC 123<nowiki/>y
25778 !! end
25779
25780 !! test
25781 Links 9. Don't add spurious <nowiki/>s between text-nodes and RFC-links (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>?foo
25786 <a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>&amp;foo
25787 -<a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>-
25788 </p>
25789 !! wikitext
25790 RFC 123?foo
25791 RFC 123&foo
25792 -RFC 123-
25793 !! html/php
25794 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc123">RFC 123</a>?foo
25795 <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc123">RFC 123</a>&amp;foo
25796 -<a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc123">RFC 123</a>-
25797 </p>
25798 !! end
25799
25800 !! test
25801 Links 10. Add <nowiki/>s between text-nodes and PMID-links when required (T66300)
25802 !! options
25803 parsoid=html2wt
25804 !! html/parsoid
25805 <p><a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>4
25806 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
25807 X<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
25808 !! wikitext
25809 PMID 123<nowiki/>4
25810 PMID 123<nowiki/>y
25811 X<nowiki/>PMID 123<nowiki/>y
25812 !! end
25813
25814 !! test
25815 Links 11. Don't add spurious <nowiki/>s between text-nodes and PMID-links (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>?foo
25820 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>&foo
25821 -<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>-
25822 </p>
25823 !! wikitext
25824 PMID 123?foo
25825 PMID 123&foo
25826 -PMID 123-
25827 !! html/php
25828 <p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract">PMID 123</a>?foo
25829 <a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract">PMID 123</a>&amp;foo
25830 -<a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract">PMID 123</a>-
25831 </p>
25832 !! end
25833
25834 !! test
25835 Links 12. Add <nowiki/>s between text-nodes and ISBN-links when required (T66300)
25836 !! options
25837 parsoid=html2wt
25838 !! html/parsoid
25839 <p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>1
25840 <a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>x
25841 a<a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>b
25842 </p>
25843 !! wikitext
25844 ISBN 1234567890<nowiki/>1
25845 ISBN 1234567890<nowiki/>x
25846 a<nowiki/>ISBN 1234567890<nowiki/>b
25847 !! end
25848
25849 !! test
25850 Links 13. Don't add spurious <nowiki/>s between text-nodes and ISBN-links (T66300)
25851 !! options
25852 parsoid=html2wt
25853 !! html/parsoid
25854 <p>-<a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>'s
25855 !! wikitext
25856 -ISBN 1234567890's
25857 !! html/php
25858 <p>-<a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>'s
25859 </p>
25860 !! end
25861
25862 !! test
25863 Links 14. Protect link-like plain text. (Parsoid bug T78425)
25864 !! options
25865 parsoid=html2wt
25866 !! html/*
25867 <p>this is not a link: http://example.com
25868 </p>
25869 !! wikitext
25870 this is not a link: <nowiki>http://example.com</nowiki>
25871 !! end
25872
25873 !! test
25874 Links 15. Link trails can't become link prefixes.
25875 !! options
25876 language=is
25877 parsoid=html2wt
25878 !! html/parsoid
25879 <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>
25880 !! wikitext
25881 [[Söfnuður]]-[[00]]
25882 !! html/php
25883 <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>
25884 </p>
25885 !! end
25886
25887 #### --------------- Quotes ---------------
25888 #### 1. Quotes inside <b> and <i>
25889 #### 2. Link fragments separated by <i> and <b> tags
25890 #### 3. Link fragments inside <i> and <b>
25891 #### 4. No escaping needed
25892 #### --------------------------------------
25893 !! test
25894 1a. Quotes inside <b> and <i>
25895 !! options
25896 parsoid=html2wt
25897 !! html/*
25898 <p><i>'foo'</i>
25899 <i>''foo''</i>
25900 <i>'''foo'''</i>
25901 <i>foo</i>'s
25902 <b>'foo'</b>
25903 <b>''foo''</b>
25904 <b>'''foo'''</b>
25905 <b>foo'<i>bar'</i>baz</b>
25906 <b>foo</b>'s
25907 '<i>foo</i>
25908 <i>foo</i>'
25909 <i>foo'</i>'
25910 '<i>foo</i>'
25911 '<b>foo</b>
25912 <b>foo</b>'
25913 '<b>foo</b>'
25914 <i>fools'<span> errand</span></i>
25915 <i><span>fool</span>'s errand</i>
25916 '<i>foo</i> bar '<i>baz</i>
25917 a|!*#-:;+-~[]{}b'<i>x</i>
25918 </p>
25919 !! wikitext
25920 ''<nowiki/>'foo'''
25921 ''<nowiki>''foo''</nowiki>''
25922 ''<nowiki>'''foo'''</nowiki>''
25923 ''foo''<nowiki/>'s
25924 '''<nowiki/>'foo''''
25925 '''<nowiki>''foo''</nowiki>'''
25926 '''<nowiki>'''foo'''</nowiki>'''
25927 '''foo'<nowiki/>''bar'<nowiki/>''baz'''
25928 '''foo'''<nowiki/>'s
25929 '''foo''
25930 ''foo''<nowiki/>'
25931 ''foo'''<nowiki/>'
25932 '''foo''<nowiki/>'
25933 ''''foo'''
25934 '''foo'''<nowiki/>'
25935 ''''foo'''<nowiki/>'
25936 ''fools'<span> errand</span>''
25937 ''<span>fool</span>'s errand''
25938 '<nowiki/>''foo'' bar '''baz''
25939 a|!*#-:;+-~[]{}b'''x''
25940 !! end
25941
25942 !! test
25943 1b. Quotes inside <b> and <i> with other tags on same line
25944 !! options
25945 parsoid=html2wt
25946 !! html/parsoid
25947 '<i>a</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
25948 <i>a'</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
25949 <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>
25950 <a rel="mw:WikiLink" href="Foo" title="Foo">foo</a> x'<i><a href="Bar" rel="mw:WikiLink" title="Bar">bar</a></i>
25951 '<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>
25952 '<i>foo</i> <div title="name">test</div>
25953 '<i>foo</i> and <br data-parsoid='{"stx":"html","noClose":true}'/> bar
25954 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
25955 <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>
25956 </ol>
25957 !! wikitext
25958 '''a'' foo ''[[bar]]''
25959 ''a''' foo ''[[bar]]''
25960 ''a''' foo '''{{echo|[[bar]]}}'''
25961 [[foo]] x'''[[bar]]''
25962 '''foo'' <ref>test</ref>
25963 '''foo'' <div title="name">test</div>
25964 '''foo'' and <br> bar
25965 <references />
25966 !! end
25967
25968 !! test
25969 2. Link fragments separated by <i> and <b> tags
25970 !! options
25971 parsoid=html2wt
25972 !! html/parsoid
25973 <p>[[<i>foo</i>hello]]</p>
25974 <p>[[<b>foo</b>hello]]</p>
25975 !! wikitext
25976 [[''foo''<nowiki>hello]]</nowiki>
25977
25978 [['''foo'''<nowiki>hello]]</nowiki>
25979 !! end
25980
25981 # FIXME: Escaping one or both of [[ and ]] is also acceptable --
25982 # this is one of the shortcomings of this format
25983 !! test
25984 3. Link fragments inside <i> and <b>
25985 !! options
25986 parsoid=html2wt
25987 !! html/parsoid
25988 <p><i>[[foo</i>]]</p>
25989 <p><b>[[foo</b>]]</p>
25990 !! wikitext
25991 ''[[foo''<nowiki>]]</nowiki>
25992
25993 '''[[foo'''<nowiki>]]</nowiki>
25994 !! end
25995
25996 !! test
25997 4. No escaping needed
25998 !! options
25999 parsoid=html2wt
26000 !! html/parsoid
26001 <p>'<span><i>bar</i></span>'
26002 '<span><b>bar</b></span>'
26003 'a:b'foo
26004 </p>
26005 !! wikitext
26006 '<span>''bar''</span>'
26007 '<span>'''bar'''</span>'
26008 'a:b'foo
26009 !! end
26010
26011 #### ----------- Paragraphs ---------------
26012 #### 1. No unnecessary escapes
26013 #### --------------------------------------
26014
26015 !! test
26016 1. No unnecessary escapes
26017 !! options
26018 parsoid=html2wt
26019 !! html/parsoid
26020 <p>bar <span>[[foo]]</span>
26021 </p><p>=bar <span>[[foo]]</span>
26022 </p><p>[[bar <span>[[foo]]</span>
26023 </p><p>]]bar <span>[[foo]]</span>
26024 </p><p>=bar <span>foo]]</span>=
26025 </p>
26026 !! wikitext
26027 bar <span><nowiki>[[foo]]</nowiki></span>
26028
26029 =bar <span><nowiki>[[foo]]</nowiki></span>
26030
26031 [[bar <span><nowiki>[[foo]]</nowiki></span>
26032
26033 ]]bar <span><nowiki>[[foo]]</nowiki></span>
26034
26035 =bar <span>foo]]</span><nowiki>=</nowiki>
26036 !!end
26037
26038 #### ----------------------- PRE --------------------------
26039 #### 1. Leading whitespace in SOL context should be escaped
26040 #### ------------------------------------------------------
26041 !! test
26042 1. Leading whitespace in SOL context should be escaped
26043 !! options
26044 parsoid=html2wt
26045 !! html/parsoid
26046 <p> a</p>
26047
26048 <p> a</p>
26049
26050 <p> a(tab)</p>
26051
26052 <p> a
26053 <!--cmt-->
26054 a</p>
26055
26056 <p>a
26057 b</p>
26058
26059 <p>a
26060 b</p>
26061
26062 <p>a
26063 b</p>
26064 !! wikitext
26065 <nowiki> </nowiki>a
26066
26067 <nowiki> </nowiki> a
26068
26069 a(tab)
26070
26071 <nowiki> </nowiki> a
26072 <!--cmt-->
26073 <nowiki> </nowiki>a
26074
26075 a
26076 <nowiki> </nowiki>b
26077
26078 a
26079 b
26080
26081 a
26082 b
26083 !! html/php
26084 <p> a
26085 </p><p> a
26086 </p><p> a(tab)
26087 </p><p> a
26088 a
26089 </p><p>a
26090 b
26091 </p><p>a
26092 b
26093 </p><p>a
26094 b
26095 </p>
26096 !! end
26097
26098 !! test
26099 2. Leading whitespace in non-indent-pre contexts should not be escaped
26100 !! options
26101 parsoid=html2wt
26102 !! html/parsoid
26103 <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>
26104 <ol class="mw-references references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
26105 <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>
26106 b</span></li>
26107 </ol>
26108 !! wikitext
26109 foo <ref>''a''
26110 b</ref>
26111 <references />
26112 !! end
26113
26114 !! test
26115 3. Leading whitespace in indent-pre suppressing contexts should not be escaped
26116 !! options
26117 parsoid=html2wt
26118 !! html/parsoid
26119 <blockquote>
26120 <p>
26121 a
26122 <span>b</span>
26123 c</p>
26124 </blockquote>
26125 !! wikitext
26126 <blockquote>
26127 a
26128 <span>b</span>
26129 c
26130 </blockquote>
26131 !! end
26132
26133 !! test
26134 4. Leading whitespace in indent-pre suppressing contexts should not be escaped
26135 !! options
26136 parsoid=html2wt
26137 !! html/parsoid
26138 <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>
26139 !! wikitext
26140 [[File:Foobar.jpg|thumb|caption]]
26141 !! end
26142
26143 !! test
26144 5. Nowiki escaping should account for indent-pres
26145 !! options
26146 parsoid=html2wt
26147 !! html/parsoid
26148 <pre>==foo==</pre>
26149 !! wikitext
26150 ==foo==
26151 !! end
26152
26153 !!test
26154 T95794: nowiki escaping should account for leading space at start-of-line in an indent-pre block
26155 !! options
26156 parsoid=html2wt
26157 !! html/parsoid
26158 <pre>
26159 * foo
26160 * bar
26161 </pre>
26162 !! wikitext
26163 * foo
26164 * bar
26165 !! end
26166
26167 #### --------------- Behavior Switches --------------------
26168
26169 !! test
26170 1. Valid behavior switches should be escaped
26171 !! options
26172 parsoid=html2wt
26173 !! html/parsoid
26174 __TOC__
26175 <i>__TOC__</i>
26176 !! wikitext
26177 <nowiki>__TOC__</nowiki>
26178 ''<nowiki>__TOC__</nowiki>''
26179 !! end
26180
26181 !! test
26182 2. Invalid behavior switches should not be escaped
26183 !! options
26184 parsoid=html2wt
26185 !! html/parsoid
26186 __TOO__
26187 __|__
26188 !! wikitext
26189 __TOO__
26190 __|__
26191 !! end
26192
26193 # We use indent-pre as an indirect way to test for sol-transparent behavior.
26194 !! test
26195 Behavior switches should be SOL-transparent
26196 !! options
26197 parsoid=html2wt
26198 !! html/parsoid
26199 <meta property="mw:PageProp/toc" />
26200
26201 <!-- this one's bogus -->
26202 <pre>__TOO__</pre>
26203
26204 <pre data-parsoid='{}'><meta property="mw:PageProp/toc" data-parsoid='{"src":"__TOC__","magicSrc":"__TOC__"}'/> foo</pre>
26205
26206 <meta property="mw:PageProp/toc" data-parsoid='{"src":"__TOC__","magicSrc":"__TOC__"}'/><pre data-parsoid='{}'>bar</pre>
26207 !! wikitext
26208 __TOC__
26209
26210 <!-- this one's bogus -->
26211 __TOO__
26212
26213 __TOC__ foo
26214
26215 __TOC__
26216 bar
26217 !! end
26218
26219 #### --------------- HTML tags ---------------
26220 #### 1. a tags
26221 #### 2. other tags
26222 #### 3. multi-line html tag
26223 #### 4. extension tags
26224 #### -----------------------------------------
26225 !! test
26226 1. a tags
26227 !! options
26228 parsoid=html2wt
26229 !! html/parsoid
26230 &lt;a href=&quot;http://google.com&quot;&gt;google&lt;/a&gt;
26231 !! wikitext
26232 <a href="http://google.com">google</a>
26233 !! end
26234
26235 !! test
26236 2. other tags
26237 !! options
26238 parsoid=html2wt
26239 !! html/parsoid
26240 <ul><li> &lt;div&gt;foo&lt;/div&gt;</li>
26241 <li> &lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;</li>
26242 <li> &lt;td&gt;</li></ul>
26243
26244 !! wikitext
26245 * <nowiki><div>foo</div></nowiki>
26246 * <nowiki><div style="color:red">foo</div></nowiki>
26247 * <nowiki><td></nowiki>
26248 !! end
26249
26250 !! test
26251 3. multi-line html tag
26252 !! options
26253 parsoid=html2wt
26254 !! html/parsoid
26255 <p>&lt;div
26256 &gt;foo&lt;/div
26257 &gt;
26258 </p>
26259 !! wikitext
26260 <nowiki><div
26261 >foo</div
26262 ></nowiki>
26263 !! end
26264
26265 !! test
26266 4. extension tags
26267 !! options
26268 parsoid=html2wt
26269 !! html/parsoid
26270 <p>&lt;ref&gt;foo&lt;/ref&gt;
26271 </p><p>&lt;ref&gt;bar
26272 </p><p>baz&lt;/ref&gt;
26273 </p>
26274 !! wikitext
26275 <nowiki><ref>foo</ref></nowiki>
26276
26277 <nowiki><ref>bar</nowiki>
26278
26279 baz<nowiki></ref></nowiki>
26280 !! end
26281
26282 #### --------------- Others ---------------
26283 !! test
26284 Escaping nowikis
26285 !! options
26286 parsoid=html2wt
26287 !! html/parsoid
26288 <p>&lt;nowiki&gt;foo&lt;/nowiki&gt;
26289 </p>
26290 !! wikitext
26291 &lt;nowiki&gt;foo&lt;/nowiki&gt;
26292 !! end
26293
26294 ## The quote-char in the input is necessary for triggering the bug
26295 !! test
26296 (T54035) Nowiki-escaping should not get tripped by " :" in text
26297 !! options
26298 parsoid=html2wt
26299 !! html/parsoid
26300 <p>foo's bar :</p>
26301 !! wikitext
26302 foo's bar :
26303 !! end
26304
26305 #----------- End of wikitext escaping tests --------------
26306
26307 !! test
26308
26309 Tag-like HTML structures are passed through as text
26310 !! wikitext
26311 <x y>
26312
26313 <x.y>
26314
26315 <x-y>
26316
26317 1>2
26318
26319 x<y
26320
26321 a>b
26322
26323 1<d e>f
26324 !! html
26325 <p>&lt;x y&gt;
26326 </p><p>&lt;x.y&gt;
26327 </p><p>&lt;x-y&gt;
26328 </p><p>1&gt;2
26329 </p><p>x&lt;y
26330 </p><p>a&gt;b
26331 </p><p>1&lt;d e&gt;f
26332 </p>
26333 !! end
26334
26335 !! test
26336 HTML tag with necessary entities in attributes
26337 !! wikitext
26338 <span title="&amp;amp;">foo</span>
26339 !! html
26340 <p><span title="&amp;amp;">foo</span>
26341 </p>
26342 !! end
26343
26344 !! test
26345 HTML tag with 'unnecessary' entity encoding in attributes
26346 !! wikitext
26347 <span title="&amp;">foo</span>
26348 !! html
26349 <p><span title="&amp;">foo</span>
26350 </p>
26351 !! end
26352
26353 !! test
26354 HTML tag with broken attribute value quoting
26355 !! options
26356 parsoid=wt2html,html2html
26357 !! wikitext
26358 <span title="Hello world>Foo</span>
26359 !! html/php
26360 <p><span title="Hello world">Foo</span>
26361 </p>
26362 !! html/parsoid
26363 <p><span title="Hello world">Foo</span></p>
26364 !! end
26365
26366 !! test
26367 Self-closed tag with broken attribute value quoting
26368 !! options
26369 parsoid=wt2html,html2html
26370 !! wikitext
26371 <div title="Hello world />Foo
26372 !! html/php+tidy
26373 <div title="Hello world"></div>
26374 <p>Foo</p>
26375 !! html/parsoid
26376 <div title="Hello world " data-parsoid='{"stx":"html","selfClose":true}'></div><p>Foo</p>
26377 !! end
26378
26379 !! test
26380 Table with broken attribute value quoting
26381 !! options
26382 parsoid=wt2html,html2html
26383 !! wikitext
26384 {|
26385 | title="Hello world|Foo
26386 |}
26387 !! html/php
26388 <table>
26389 <tr>
26390 <td title="Hello world">Foo
26391 </td></tr></table>
26392
26393 !! html/parsoid
26394 <table>
26395 <tr>
26396 <td title="Hello world">Foo
26397 </td></tr></table>
26398
26399 !! end
26400
26401 !! test
26402 Table with broken attribute value quoting on consecutive lines
26403 !! options
26404 parsoid=wt2html,html2html
26405 !! wikitext
26406 {|
26407 | title="Hello world|Foo
26408 | style="color:red|Bar
26409 |}
26410 !! html/php
26411 <table>
26412 <tr>
26413 <td title="Hello world">Foo
26414 </td>
26415 <td style="color:red">Bar
26416 </td></tr></table>
26417
26418 !! html/parsoid
26419 <table><tbody>
26420 <tr>
26421 <td title="Hello world">Foo
26422 </td><td style="color: red">Bar
26423 </td></tr></tbody></table>
26424
26425 !! end
26426
26427 !!test
26428 Accept empty td cell attribute
26429 !! wikitext
26430 {|
26431 | align="center" | foo || |
26432 |}
26433 !! html
26434 <table>
26435 <tr>
26436 <td align="center"> foo </td>
26437 <td>
26438 </td></tr></table>
26439
26440 !!end
26441
26442 !!test
26443 Non-empty attributes in th-cells
26444 !! wikitext
26445 {|
26446 ! Foo !! style="color: red" | Bar
26447 |}
26448 !! html
26449 <table>
26450 <tr>
26451 <th> Foo </th>
26452 <th style="color: red"> Bar
26453 </th></tr></table>
26454
26455 !!end
26456
26457 !!test
26458 Accept empty attributes in th-cells
26459 !! wikitext
26460 {|
26461 !| foo !!| bar
26462 |}
26463 !! html
26464 <table>
26465 <tr>
26466 <th> foo </th>
26467 <th> bar
26468 </th></tr></table>
26469
26470 !!end
26471
26472 !!test
26473 Empty table rows go away
26474 !! wikitext
26475 {|
26476 | Hello
26477 | there
26478 |- class="foo"
26479 |-
26480 |}
26481 !! html
26482 <table>
26483 <tr>
26484 <td> Hello
26485 </td>
26486 <td> there
26487 </td></tr>
26488
26489 </table>
26490
26491 !! end
26492
26493 ###
26494 ### Parsoid-centric tests for testing RTing of inter-element separators
26495 ### Edge cases not tested by existing parser tests and specific to
26496 ### Parsoid-specific serialization strategies.
26497 ###
26498
26499 !!test
26500 RT-ed inter-element separators should be valid separators
26501 !! wikitext
26502 {|
26503 |- [[foo]]
26504 |}
26505 !! html/php
26506 <table>
26507
26508 </table>
26509
26510 !! html/parsoid
26511 <table>
26512 <tbody><tr class='mw-empty-elt' data-parsoid='{"startTagSrc":"|-","a":{"[[foo]]":null},"sa":{"[[foo]]":""},"autoInsertedEnd":true}'></tr>
26513 </tbody></table>
26514 !!end
26515
26516 # Parsoid-only since PHP parser relies on Tidy for correct output
26517 !!test
26518 Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out
26519 !!options
26520 parsoid
26521 !! wikitext
26522 {|
26523 |<small>foo
26524 bar
26525 |}
26526
26527 {|
26528 |<small>foo<small>
26529 |}
26530 !! html
26531 <table>
26532 <tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo
26533 <p>bar</p></small></td></tr>
26534 </tbody></table>
26535
26536 <table>
26537 <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>
26538 </tbody></table>
26539 !!end
26540
26541 # Note that the "style" attribute is really a template parameter here.
26542 # The = would have to be {{=}} if you wanted the literal.
26543 !!test
26544 Empty TD followed by TD with tpl-generated attribute
26545 !! wikitext
26546 {|
26547 |-
26548 |
26549 |{{echo|style='color:red'}}|foo
26550 |}
26551 !! html
26552 <table>
26553
26554 <tr>
26555 <td>
26556 </td>
26557 <td>foo
26558 </td></tr></table>
26559
26560 !!end
26561
26562 !!test
26563 Indented table with an empty td
26564 !! wikitext
26565 {|
26566 |-
26567 |
26568 |foo
26569 |}
26570 !! html
26571 <table>
26572
26573 <tr>
26574 <td>
26575 </td>
26576 <td>foo
26577 </td></tr></table>
26578
26579 !!end
26580
26581 ## We have some newline diffs RT-ing this edge case
26582 ## and it is not important enough -- we seem to be emitting
26583 ## at most 2 newlines after a </tr> and this is unrelated to
26584 ## the issue from T85627 that this is testing.
26585 !!test
26586 Indented table with blank lines in between (T85627)
26587 !! options
26588 parsoid=wt2html
26589 !! wikitext
26590 {|
26591 |foo
26592
26593
26594 |}
26595 !! html
26596 <table>
26597
26598 <tr>
26599 <td>foo
26600 </td></tr></table>
26601
26602 !!end
26603
26604 !!test
26605 Indented block & table
26606 !! wikitext
26607 <div>foo</div>
26608 {|
26609 |foo
26610 |}
26611 !! html/php
26612 <div>foo</div>
26613 <table>
26614 <tr>
26615 <td>foo
26616 </td></tr></table>
26617
26618 !! html/parsoid
26619 <div data-parsoid='{"stx":"html"}'>foo</div>
26620 <table><tbody>
26621 <tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'>foo</td></tr>
26622 </tbody></table>
26623 !!end
26624
26625 !! test
26626 Indent and comment before table row
26627 !! wikitext
26628 {|
26629 <!--hi-->|-
26630 | there
26631 |}
26632 !! html/php
26633 <table>
26634
26635 <tr>
26636 <td> there
26637 </td></tr></table>
26638
26639 !! html/parsoid
26640 <table>
26641 <!--hi--><tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
26642 <td data-parsoid='{"autoInsertedEnd":true}'> there</td></tr>
26643 </tbody></table>
26644 !! end
26645
26646 # Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext
26647 !!test
26648 Empty TR followed by a template-generated TR
26649 !!options
26650 parsoid
26651 !! wikitext
26652 {|
26653 |-
26654 {{echo|<tr><td>foo</td></tr>}}
26655 |}
26656 !! html
26657 <table>
26658 <tbody>
26659 <tr class='mw-empty-elt'></tr>
26660 <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}}]}'>
26661 <td>foo</td></tr>
26662 </tbody></table>
26663 !!end
26664
26665 ## PHP and parsoid output differ for this, and since this is primarily
26666 ## for testing Parsoid's serializer, marking this Parsoid only
26667 !!test
26668 Empty TR followed by mixed-ws-comment line should RT correctly
26669 !!options
26670 parsoid
26671 !! wikitext
26672 {|
26673 |-
26674 <!--c-->
26675 |-
26676 <!--c--> <!--d-->
26677 |}
26678 !! html
26679 <table>
26680 <tbody>
26681 <tr class='mw-empty-elt'></tr>
26682 <!--c-->
26683 <tr>
26684 <!--c--> </tr><!--d-->
26685 </tbody></table>
26686
26687 !!end
26688
26689 !!test
26690 Multi-line image caption generated by templates with/without trailing newlines
26691 !! wikitext
26692 [[File:Foobar.jpg|thumb|300x300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}]]
26693 [[File:Foobar.jpg|thumb|300x300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}\n\n]]
26694 !! html/parsoid
26695 <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>
26696 <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>
26697 !!end
26698
26699 !! test
26700 New element inserted (without intervening newlines) after an old sol-transparent node should serialize correctly
26701 !! options
26702 parsoid=html2wt
26703 !! html/parsoid
26704 <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>
26705
26706 <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{}'/><h1>new heading</h1>
26707 !! wikitext
26708 <includeonly>foo</includeonly>
26709 new para
26710
26711 [[Category:Foo]]
26712
26713 = new heading =
26714 !! end
26715
26716 ## PHP emits broken html for this, and since this is primarily
26717 ## a Parsoid serializer test, marking this Parsoid only
26718 !!test
26719 Improperly nested inline or quotes tags with whitespace in between
26720 !! wikitext
26721 <span> <s>x</span> </s>
26722 ''' ''x''' ''
26723 !! html/parsoid
26724 <p><span> <s>x</s></span><s> </s>
26725 <b> <i>x</i></b><i> </i>
26726 </p>
26727 !!end
26728
26729 !!test
26730 Encapsulate protected attributes from wt
26731 !! wikitext
26732 <div typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true">foo</div>
26733
26734 {| typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true"
26735 | ok
26736 |}
26737 !! html/parsoid
26738 <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>
26739
26740 <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">
26741 <tbody><tr><td data-parsoid='{"autoInsertedEnd":true}'> ok</td></tr>
26742 </tbody></table>
26743 !!end
26744
26745 ## Currently the p-wrapper is fragile in how it adds / removes transformations.
26746 ## Having nested or stray pre tags results in the attempt to add duplicates,
26747 ## causing an assertion fail. This test tries to prevent that situation.
26748 !!test
26749 Ensure ParagraphWrapper can deal with stray closing pre tags
26750 !!options
26751 parsoid=wt2html
26752 !! wikitext
26753 plain text</pre>
26754 !! html/parsoid
26755 plain text
26756 !!end
26757
26758 !!test
26759 1. Ensure fostered text content is wrapped in element nodes
26760 !!options
26761 parsoid=wt2html
26762 !! wikitext
26763 <table>hi</table><table>ho</table>
26764 !! html/parsoid
26765 <p>hi</p>
26766 <table></table>
26767 <p>ho</p>
26768 <table></table>
26769 !!end
26770
26771 !!test
26772 2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost)
26773 !!options
26774 parsoid=wt2html,wt2wt
26775 !! wikitext
26776 <table>
26777 <tr> || ||
26778 <td> a
26779 </table>
26780 !! html/parsoid
26781 <p> || ||
26782 </p><table>
26783 <tbody><tr><td> a</td></tr>
26784 </tbody></table>
26785 !!end
26786
26787 !!test
26788 Encapsulation properly handles null DSR information from foster box
26789 !!options
26790 parsoid=wt2html,wt2wt
26791 !! wikitext
26792 {{echo|<table>foo<tr><td>bar</td></tr></table>}}
26793 !! html/parsoid
26794 <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>
26795 !!end
26796
26797 !!test
26798 1. Encapsulate foster-parented transclusion content
26799 !!options
26800 parsoid=wt2wt,wt2html
26801 !! wikitext
26802 <table>{{echo|foo<tr><td>bar</td></tr>}}</table>
26803 !! html/parsoid
26804 <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>
26805 <tbody>
26806 <tr>
26807 <td>bar</td>
26808 </tr>
26809 </tbody>
26810 </table>
26811 !!end
26812
26813 !!test
26814 2. Encapsulate foster-parented transclusion content
26815 !!options
26816 parsoid=wt2wt,wt2html
26817 !! wikitext
26818 <table><div>{{echo|foo}}</div><tr><td>bar</td></tr></table>
26819 !! html/parsoid
26820 <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>
26821 <table>
26822 <tbody>
26823 <tr>
26824 <td>bar</td>
26825 </tr>
26826 </tbody>
26827 </table>
26828 !!end
26829
26830 !!test
26831 3. Encapsulate foster-parented transclusion content
26832 !!options
26833 parsoid=wt2wt,wt2html
26834 !! wikitext
26835 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
26836 !! html/parsoid
26837 <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;]}">
26838 <p>foo</p>
26839 </div>
26840 <table>
26841 <tbody>
26842 <tr>
26843 <td>bar</td>
26844 </tr>
26845 </tbody>
26846 </table>
26847 !!end
26848
26849 !!test
26850 4. Encapsulate foster-parented transclusion content
26851 !!options
26852 parsoid=wt2wt,wt2html
26853 !! wikitext
26854 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
26855 !! html/parsoid
26856 <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;]}">
26857 <p>foo</p>
26858 </div>
26859 <table>
26860 <tbody>
26861 <tr>
26862 <td>bar</td>
26863 </tr>
26864 </tbody>
26865 </table>
26866 !!end
26867
26868 !!test
26869 5. Encapsulate foster-parented transclusion content
26870 !!options
26871 parsoid=wt2wt,wt2html
26872 !! wikitext
26873 <table><tr><td><div><p>{{echo|foo</p></div></td>foo}}</tr></table>
26874 !! html/parsoid
26875 <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>
26876 <table>
26877 <tbody>
26878 <tr>
26879 <td>
26880 <div>
26881 <p>foo</p>
26882 </div>
26883 </td>
26884 </tr>
26885 </tbody>
26886 </table>
26887 !!end
26888
26889 !!test
26890 6. Encapsulate foster-parented transclusion content
26891 !!options
26892 parsoid=wt2wt,wt2html
26893 !! wikitext
26894 <table><tr><td><div><p>{{echo|foo</p></div></td>foo</tr></table>}}<p>ok</p>
26895 !! html/parsoid
26896 <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>
26897 <table>
26898 <tbody>
26899 <tr>
26900 <td>
26901 <div>
26902 <p>foo</p>
26903 </div>
26904 </td>
26905 </tr>
26906 </tbody>
26907 </table>
26908 <p>ok</p>
26909 !!end
26910
26911 !!test
26912 7. Encapsulate foster-parented transclusion content
26913 !!options
26914 parsoid=wt2wt,wt2html
26915 !! wikitext
26916 <table>{{echo|<p>foo</p>}}<td>bar</td></table>
26917 !! html/parsoid
26918 <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>
26919 <table>
26920 <tbody>
26921 <tr>
26922 <td>bar</td>
26923 </tr>
26924 </tbody>
26925 </table>
26926 !!end
26927
26928 # Note that the wt is broken on purpose: the = should be {{=}} if you
26929 # don't want it to be a template parameter key.
26930 !!test
26931 8. Encapsulate foster-parented transclusion content
26932 !!options
26933 parsoid=wt2wt,wt2html
26934 !! wikitext
26935 {{echo|a
26936 }}{|{{echo|style='color:red'}}
26937 |-
26938 |b
26939 |}
26940 !! html/parsoid
26941 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n"}},"i":0}}]}'>a</p>
26942 <span> </span>
26943 <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>
26944 <table>
26945 <tbody>
26946 <tr>
26947 <td>b</td>
26948 </tr>
26949 </tbody>
26950 </table>
26951 !!end
26952
26953 !!test
26954 9. Encapsulate foster-parented transclusion content
26955 !!options
26956 parsoid=wt2wt,wt2html
26957 !! wikitext
26958 <table>{{echo|hi</table>hello}}
26959 !! html/parsoid
26960 <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>
26961 !!end
26962
26963 !!test
26964 Table in fosterable position
26965 !!options
26966 parsoid=wt2html
26967 !! wikitext
26968 {{OpenTable}}
26969 <div>
26970 {|
26971 |}
26972 </div>
26973 |}
26974 !! html/parsoid
26975 <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">
26976 </span>
26977 <table about="#mwt1" data-parsoid='{"autoInsertedEnd":true}'></table>
26978
26979 <table>
26980 </table>
26981 !!end
26982
26983 # Parsoid only for T66747
26984 !! test
26985 Properly encapsulate empty-content transclusions in fosterable positions
26986 !! wikitext
26987 <table>
26988 {{#if:|
26989 <td>foo</td>
26990 }}
26991 </table>
26992 !! html/parsoid
26993 <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"}]]}'>
26994
26995 </table>
26996 !! end
26997
26998 !! test
26999 Always encapsulate foster box when template range is expanded to table
27000 !! options
27001 parsoid=wt2wt
27002 !! wikitext
27003 {|
27004 hello
27005 {{OpenTable}}
27006 |}
27007 !! html/parsoid
27008
27009 !! end
27010
27011 !! test
27012 T115289: Unclosed table
27013 !! wikitext
27014 {{echo|<table>}}<!--c-->[[Category:Two]]
27015 !! html/parsoid
27016 <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>
27017 !! end
27018
27019 !! test
27020 T115289: Don't migrate newlines out of tables with fostered content
27021 !! wikitext
27022 <table><td></td>{{echo|<tr>[[Category:One]]}}<!--c-->[[Category:Two]]
27023 !! html/parsoid
27024 <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>
27025 !! end
27026
27027 !! test
27028 T73074: More fostering fun
27029 !! wikitext
27030 <table><td></td>{{echo|<tr>}}<!--c-->[[Category:Two]]
27031 !! html/parsoid
27032 <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>
27033 !! end
27034
27035 !!test
27036 Support <object> element with .data attribute
27037 !!options
27038 parsoid=html2wt
27039 !! html/parsoid
27040 <object data="test.swf"></object>
27041 !! wikitext
27042 <object data="test.swf"></object>
27043 !!end
27044
27045 !! test
27046 Don't block XML namespace declaration
27047 !! wikitext
27048 <span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">MediaWiki</span>
27049 !! html/php
27050 <p><span xmlns:dct="http&#58;//purl.org/dc/terms/" property="dct:title">MediaWiki</span>
27051 </p>
27052 !! html/parsoid
27053 <p><span xmlns:dct="http://purl.org/dc/terms/" data-x-property="dct:title" data-parsoid='{"stx":"html"}'>MediaWiki</span></p>
27054 !! end
27055
27056 # -----------------------------------------------------------------
27057 # The following section of tests are primarily to spec requirements
27058 # around Parsoid's serialization (old, new, edited content)
27059 #
27060 # All these tests are marked Parsoid html2wt and html2html only
27061 # ----------------------------------------------------------------
27062
27063 !! test
27064 Ignore rel attribute in a-tags during serialization to url-links
27065 !! options
27066 parsoid=html2wt
27067 !! html/parsoid
27068 <a href='http://en.wikipedia.org/wiki/Foobar'>http://en.wikipedia.org/wiki/Foobar</a>
27069 <a href='http://en.wikipedia.org/wiki/Foobar' rel='mw:ExtLink'>http://en.wikipedia.org/wiki/Foobar</a>
27070 <a href='http://en.wikipedia.org/wiki/Foobar' rel='mw:WikiLink'>http://en.wikipedia.org/wiki/Foobar</a>
27071 !! wikitext
27072 http://en.wikipedia.org/wiki/Foobar
27073 http://en.wikipedia.org/wiki/Foobar
27074 http://en.wikipedia.org/wiki/Foobar
27075 !! end
27076
27077 # 'mi' is a localinterwiki prefix as well as a language
27078 !! test
27079 Serialize interwiki links pointing to the current wiki as plain wiki links (T67869)
27080 !! options
27081 parsoid=html2wt
27082 !! html/parsoid
27083 <p><a rel="mw:ExtLink" href="http://mi.wikipedia.org/wiki/Foo">Foo</a></p>
27084 !! wikitext
27085 [[Foo]]
27086 !! end
27087
27088 !! test
27089 Parsoid should accept interwiki shortcuts
27090 !! options
27091 parsoid=html2wt
27092 !! html/parsoid
27093 <p><a rel='mw:WikiLink' href='./fr:Foo'>Foo</a>
27094 <a rel='mw:ExtLink' href='./fr:Foo'>Foo</a>
27095 <a href='./fr:Foo'>Foo</a></p>
27096 <p><a rel='mw:WikiLink' href='fr%3AFoo'>Foo</a>
27097 <a rel='mw:ExtLink' href='fr%3AFoo'>Foo</a>
27098 <a href='fr%3AFoo'>Foo</a></p>
27099 <p><a href='FR%3AFoo'>Foo</a>
27100 <a href='./FR:Foo'>Foo</a></p>
27101 !! wikitext
27102 [[:fr:Foo|Foo]]
27103 [[:fr:Foo|Foo]]
27104 [[:fr:Foo|Foo]]
27105
27106 [[:fr:Foo|Foo]]
27107 [[:fr:Foo|Foo]]
27108 [[:fr:Foo|Foo]]
27109
27110 [[:fr:Foo|Foo]]
27111 [[:fr:Foo|Foo]]
27112 !! end
27113
27114 !! test
27115 Parsoid should not accept invalid interwiki shortcuts
27116 !! options
27117 parsoid=html2wt
27118 !! html/parsoid
27119 <p><a rel='mw:WikiLink' href='news:Foo'>Foo</a>
27120 <a rel='mw:ExtLink' href='news:Foo'>Foo</a>
27121 <a href='news:Foo'>Foo</a></p>
27122 !! wikitext
27123 [news:Foo Foo]
27124 [news:Foo Foo]
27125 [news:Foo Foo]
27126 !! end
27127
27128 # See T93839
27129 !! test
27130 New wikilinks should be serialized properly
27131 !! options
27132 parsoid=html2wt
27133 !! html/parsoid
27134 <a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{}'>Foo</a>
27135 <a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>
27136 <a href="//en.wikipedia.org/wiki/Foo">//en.wikipedia.org/wiki/Foo</a>
27137 <a href="http://en.wikipedia.org/wiki/Foo">http://en.wikipedia.org/wiki/Foo</a>
27138 <a href="//en.wikipedia.org/wiki/Foo_bar">//en.wikipedia.org/wiki/Foo bar</a>
27139 !! wikitext
27140 [[Foo]]
27141 [[Foo]]
27142 [[:en:Foo|//en.wikipedia.org/wiki/Foo]]
27143 http://en.wikipedia.org/wiki/Foo
27144 [[:en:Foo_bar|//en.wikipedia.org/wiki/Foo bar]]
27145 !! end
27146
27147 !! test
27148 New wiki links (href variations)
27149 !! options
27150 parsoid=html2wt
27151 !! html/parsoid
27152 <a rel="mw:WikiLink" href="./Foo_bar">Foo_bar</a>
27153 <a rel="mw:WikiLink" href="Foo_bar">Foo_bar</a>
27154 <a rel="mw:WikiLink" href="Foo bar">Foo_bar</a>
27155 <a rel="mw:WikiLink" href="./Toxine_bact%C3%A9rienne">Toxine bactérienne</a>
27156 !! wikitext
27157 [[Foo_bar]]
27158 [[Foo_bar]]
27159 [[Foo_bar]]
27160 [[Toxine bactérienne]]
27161 !! end
27162
27163 !! test
27164 New wiki links (content string variations)
27165 !! options
27166 parsoid=html2wt
27167 !! html/parsoid
27168 <a rel="mw:WikiLink" href="./Foo_bar">Foo_bar</a>
27169 <a rel="mw:WikiLink" href="./Foo_bar">Foo bar</a>
27170 <a rel="mw:WikiLink" href="./Foo_bar">./Foo_bar</a>
27171 !! wikitext
27172 [[Foo_bar]]
27173 [[Foo bar]]
27174 [[Foo_bar|./Foo_bar]]
27175 !! end
27176
27177 !! test
27178 New category links (href variations)
27179 !! options
27180 parsoid=html2wt
27181 !! html/parsoid
27182 <link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne" />
27183 <link rel="mw:PageProp/Category" href="./Category:Toxine_bact%C3%A9rienne" />
27184 <link rel="mw:PageProp/Category" href="Category:Toxine_bact%C3%A9rienne" />
27185 !! wikitext
27186 [[Category:Toxine bactérienne]]
27187 [[Category:Toxine bactérienne]]
27188 [[Category:Toxine bactérienne]]
27189 !! end
27190
27191 !! test
27192 New sol transparent links don't need indent-pre nowiki protection
27193 !! options
27194 parsoid=html2wt
27195 language=de
27196 !! html/parsoid
27197 <link rel="mw:PageProp/redirect" href="./Main_Page">
27198 <!-- this is good --> <link rel="mw:PageProp/Category" href="./Category:Good" />
27199 <!-- this is great --> <link rel="mw:PageProp/Category" href="./Kategorie:Great" />
27200 !! wikitext
27201 #WEITERLEITUNG [[Main Page]]
27202 <!-- this is good --> [[Category:Good]]
27203 <!-- this is great --> [[Kategorie:Great]]
27204 !! end
27205
27206 !! test
27207 New interlanguage links (href variations)
27208 !! options
27209 parsoid=html2wt
27210 !! html/parsoid
27211 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine bactérienne" />
27212 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine_bactérienne" />
27213 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine_bact%C3%A9rienne" />
27214 !! wikitext
27215 [[es:Toxine bactérienne]]
27216 [[es:Toxine_bactérienne]]
27217 [[es:Toxine_bactérienne]]
27218 !! end
27219
27220 !! test
27221 Image: Modifying size of an image (1)
27222 !! options
27223 parsoid={
27224 "modes": ["wt2wt"],
27225 "changes": [
27226 ["img[height]", "attr", "height", "22"],
27227 ["img[width]", "attr", "width", "200"]
27228 ]
27229 }
27230 !! wikitext
27231 [[Image:Foobar.jpg|230x230px]]
27232 !! wikitext/edited
27233 [[Image:Foobar.jpg|200x200px]]
27234 !!end
27235
27236 !! test
27237 Image: Modifying size of an image (2)
27238 !! options
27239 parsoid={
27240 "modes": ["wt2wt"],
27241 "changes": [
27242 ["img[height]", "attr", "height", "100"],
27243 ["img[width]", "attr", "width", "500"]
27244 ]
27245 }
27246 !! wikitext
27247 [[Image:Foobar.jpg|230x230px]]
27248 !! wikitext/edited
27249 [[Image:Foobar.jpg|500x500px]]
27250 !!end
27251
27252 # Change in size is ignored so long as class='mw-default-size'
27253 !! test
27254 Image: Modifying size of an image (3)
27255 !! options
27256 parsoid={
27257 "modes": ["wt2wt"],
27258 "changes": [
27259 ["figure[class]", "removeClass", "mw-default-size"],
27260 ["figure img", "attr", "height", "19"],
27261 ["figure img", "attr", "width", "170"]
27262 ]
27263 }
27264 !! wikitext
27265 [[Image:Foobar.jpg|thumb]]
27266 !! wikitext/edited
27267 [[Image:Foobar.jpg|thumb|170x170px]]
27268 !!end
27269
27270 !! test
27271 Image: Modifying alignment of an image (T50665)
27272 !! options
27273 parsoid={
27274 "modes": ["wt2wt"],
27275 "changes": [
27276 ["figure[class]", "removeClass", "mw-halign-right"],
27277 ["figure[class]", "addClass", "mw-halign-left"]
27278 ]
27279 }
27280 !! wikitext
27281 [[Image:Foobar.jpg|thumb|caption|right]]
27282 !! wikitext/edited
27283 [[Image:Foobar.jpg|thumb|caption|left]]
27284 !! end
27285
27286 !! test
27287 Image: Modifying mw-default-size of an frameless image (T64805)
27288 !! options
27289 parsoid={
27290 "modes": ["wt2wt"],
27291 "changes": [
27292 ["figure.mw-default-size", "removeClass", "mw-default-size"]
27293 ]
27294 }
27295 !! wikitext
27296 [[Image:Foobar.jpg|frameless|right]]
27297 !! wikitext/edited
27298 [[Image:Foobar.jpg|frameless|right|220x220px]]
27299 !! end
27300
27301 !! test
27302 Image: Modifying valign of an image (T51221)
27303 !! options
27304 parsoid={
27305 "modes": ["wt2wt"],
27306 "changes": [
27307 ["*[typeof=\"mw:Image\"]", "removeClass", "mw-valign-middle"],
27308 ["*[typeof=\"mw:Image\"]", "addClass", "mw-valign-text-top"]
27309 ]
27310 }
27311 !! wikitext
27312 [[File:Foobar.jpg|20px|middle]]
27313 !! wikitext/edited
27314 [[File:Foobar.jpg|20px|text-top]]
27315 !! end
27316
27317 !! test
27318 Image: Modifying alt attribute of an image (T58400)
27319 !! options
27320 parsoid={
27321 "modes": ["wt2wt"],
27322 "changes": [
27323 ["img[alt]", "attr", "alt", "some alternate edited text"]
27324 ]
27325 }
27326 !! wikitext
27327 [[File:Foobar.jpg|thumb|some caption|alt=some alternate text]]
27328 !! wikitext/edited
27329 [[File:Foobar.jpg|thumb|some caption|alt=some alternate edited text]]
27330 !!end
27331
27332 !! test
27333 Image: Modifying caption of an image
27334 !! options
27335 parsoid={
27336 "modes": ["wt2wt"],
27337 "changes": [
27338 ["figcaption", "text", "new caption"]
27339 ]
27340 }
27341 !! wikitext
27342 [[Image:Foobar.jpg|thumb|original caption]]
27343 !! wikitext/edited
27344 [[Image:Foobar.jpg|thumb|new caption]]
27345 !!end
27346
27347 !! test
27348 Image: empty alt attribute (T50924)
27349 !! options
27350 parsoid
27351 !! wikitext
27352 [[File:Foobar.jpg|thumb|alt=|bar]]
27353 !! html
27354 <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>
27355 !! end
27356
27357 !! test
27358 Image: new attributes should be serialized in wiki's language for RTL languages (T53852)
27359 !! options
27360 parsoid=html2wt
27361 language=ar
27362 disabled
27363 !! html/parsoid
27364 <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>
27365 !! wikitext
27366 [[Imagen:Foobar.jpg|derecha|miniaturadeimagen]]
27367 !! end
27368
27369 !! test
27370 Image: Block level image should have \n before and after
27371 !! wikitext
27372 123
27373 [[File:Foobar.jpg|right|thumb|150x150px]]
27374 456
27375 !! html/parsoid
27376 <p>123</p>
27377 <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>
27378 <p>456</p>
27379 !! end
27380
27381 !! test
27382 Image: New block level image should have \n before and after (existing content)
27383 !! wikitext
27384 123
27385 [[File:Foobar.jpg|right|thumb|150x150px]]
27386 456
27387 !! html/parsoid
27388 <p>123</p>
27389 <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>
27390 <p>456</p>
27391 !! end
27392
27393 !! test
27394 Image: upright option (parsoid)
27395 !! wikitext
27396 [[File:Foobar.jpg|thumb|upright|caption]]
27397 [[File:Foobar.jpg|thumb|upright=0.5|caption]]
27398 [[File:Foobar.jpg|thumb|500x500px|upright=0.5|caption]]
27399 !! html/parsoid
27400 <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>
27401 <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>
27402 <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>
27403 !! end
27404
27405 !! test
27406 Image: upright option is ignored on inline and frame images (parsoid)
27407 !! wikitext
27408 [[File:Foobar.jpg|500x500px|upright=0.5|caption]]
27409 !! html/parsoid
27410 <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>
27411 !! end
27412
27413 !! test
27414 Image: in template parameter with empty parameter
27415 !! wikitext
27416 {{echo|[[File:Foobar.jpg|link=]]}}
27417 !! html/parsoid
27418 <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>
27419 !! end
27420
27421 !! test
27422 Image: from basic HTML (1)
27423 !! options
27424 parsoid=html2wt
27425 !! html/parsoid
27426 <span typeof="mw:Image">
27427 <img src="./File:Foobar.jpg" width=100 height=100 alt="Alt">
27428 </span>
27429 !! wikitext
27430 [[File:Foobar.jpg|link=|alt=Alt|100x100px]]
27431 !! end
27432
27433 !! test
27434 Image: from basic HTML (2)
27435 !! options
27436 parsoid=html2wt
27437 !! html/parsoid
27438 <img src="./File:Foobar.jpg" width=100 height=100 alt="Alt">
27439 !! wikitext
27440 [[File:Foobar.jpg|link=|alt=Alt|100x100px]]
27441 !! end
27442
27443 !! test
27444 Image: from basic HTML (3)
27445 !! options
27446 parsoid=html2wt
27447 !! html/parsoid
27448 <a href="Main"><img src="./File:Foobar.jpg" width=100 height=100 alt="Alt"></a>
27449 !! wikitext
27450 [[File:Foobar.jpg|link=Main|alt=Alt|100x100px]]
27451 !! end
27452
27453 !! test
27454 Image: from basic HTML (4)
27455 !! options
27456 parsoid=html2wt
27457 !! html/parsoid
27458 <img src="./File:Foobar.jpg">
27459 !! wikitext
27460 [[File:Foobar.jpg|link=]]
27461 !! end
27462
27463 !! test
27464 Image: Invalid title as link
27465 !! wikitext
27466 [[File:Foobar.jpg|link=<]]
27467 !! html/php
27468 <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>
27469 </p>
27470 !! html/parsoid
27471 <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>
27472 !! end
27473
27474 !! test
27475 Lists: Serialize correctly even when list content is wrapped in p-tags (like VE does)
27476 !! options
27477 parsoid=html2wt
27478 !! html/parsoid
27479 <ul>
27480 <li><p>foo</p></li>
27481 </ul>
27482 !! wikitext
27483 * foo
27484 !! end
27485
27486 !! test
27487 Lists: Serialize correctly even when list tags has unneeded whitespace between tags
27488 !! options
27489 parsoid=html2wt
27490 !! html/parsoid
27491 <ul> <li>foo</li></ul>
27492 !! wikitext
27493 * foo
27494 !! end
27495
27496 !! test
27497 Don't strip leading whitespace when handling indent-pre suppressing tags
27498 !! options
27499 parsoid=html2wt
27500 !! html/parsoid
27501 <table>
27502 <tr><td> indented row</td></tr>
27503 </table>
27504 <blockquote><p>
27505 <b>This is very bold of you!</b>
27506 </p>
27507 <table><tr><td>
27508 indented cell (no pre-wrapping!)
27509 </td></tr></table>
27510 </blockquote>
27511 <p>foo</p>
27512 <div>bar</div>
27513 !! wikitext
27514 {|
27515 | indented row
27516 |}
27517 <blockquote>
27518 '''This is very bold of you!'''
27519
27520 {|
27521 |
27522 indented cell (no pre-wrapping!)
27523 |}
27524 </blockquote>
27525 foo
27526 <div>bar</div>
27527 !! end
27528
27529 !! test
27530 Nowiki-wrap leading whitespace when handling indent-pre inducing tags
27531 !! options
27532 parsoid=html2wt
27533 !! html/parsoid
27534 <p>foo</p>
27535 <span>bar</span>
27536
27537 <span>foo2
27538 </span>bar2
27539
27540 <div>foo</div>
27541 <span>bar</span>
27542
27543 <div>
27544 <span>foo</span>
27545 </div>
27546 !! wikitext
27547 foo
27548
27549 <span>bar</span>
27550
27551 <span>foo2
27552 <nowiki> </nowiki></span>bar2
27553
27554 <div>foo</div>
27555 <nowiki> </nowiki><span>bar</span>
27556
27557 <div>
27558 <nowiki> </nowiki><span>foo</span>
27559 </div>
27560 !! end
27561
27562 !! test
27563 Lists: Dont insert newlines in a serialized list item.
27564 !! options
27565 parsoid=html2wt
27566 !! html/parsoid
27567 <ul><li>a<br>b</li><li>c</li></ul>
27568 !! wikitext
27569 * a<br>b
27570 * c
27571 !! end
27572
27573 !! test
27574 1. Headings: Force sol-transparent links and behavior switches to serialize before/after
27575 !! options
27576 parsoid={
27577 "modes": ["html2wt"],
27578 "scrubWikitext": false
27579 }
27580 !! html/parsoid
27581 <h2>hello there<link href="./Category:A1" rel="mw:PageProp/Category" /></h2>
27582 <h2><link href="./Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
27583
27584 <h2><!--foo--> <link href="./Category:A3" rel="mw:PageProp/Category" /> how goes it</h2>
27585 <h2>it goes well <link href="./Category:A4" rel="mw:PageProp/Category" /> <!--bar--></h2>
27586
27587 <h2 data-parsoid='{}'>howdy<link href="./Category:A5" rel="mw:PageProp/Category" /></h2>
27588
27589 <h2><meta property="mw:PageProp/toc" /> ok</h2>
27590 !! wikitext
27591 == hello there [[Category:A1]] ==
27592
27593 == [[Category:A2]] hi pal ==
27594
27595 == <!--foo--> [[Category:A3]] how goes it ==
27596
27597 == it goes well [[Category:A4]] <!--bar--> ==
27598
27599 ==howdy [[Category:A5]]==
27600
27601 == __TOC__ ok ==
27602 !! end
27603
27604 !! test
27605 2. Headings: Force sol-transparent links and behavior switches to serialize before/after
27606 !! options
27607 parsoid={
27608 "modes": ["html2wt"],
27609 "scrubWikitext": true
27610 }
27611 !! html/parsoid
27612 <h2>hello there<link href="./Category:A1" rel="mw:PageProp/Category" /></h2>
27613 <h2><link href="./Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
27614
27615 <h2><!--foo--> <link href="./Category:A3" rel="mw:PageProp/Category" /> how goes it</h2>
27616 <h2>it goes well <link href="./Category:A4" rel="mw:PageProp/Category" /> <!--bar--></h2>
27617
27618 <h2><meta property="mw:PageProp/toc" /> ok</h2>
27619 !! wikitext
27620 == hello there ==
27621 [[Category:A1]]
27622 [[Category:A2]]
27623
27624 == hi pal ==
27625
27626 <!--foo--> [[Category:A3]]
27627
27628 == how goes it ==
27629
27630 == it goes well ==
27631 [[Category:A4]] <!--bar-->
27632
27633 __TOC__
27634
27635 == ok ==
27636 !! end
27637
27638 !! test
27639 Headings: Don't hoist metas that come from templates
27640 !! options
27641 parsoid={
27642 "modes": ["html2wt"],
27643 "scrubWikitext": true
27644 }
27645 !! html/parsoid
27646 <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>
27647 !! wikitext
27648 == {{echo|foo [[Category:Foo]]}} ==
27649 !! end
27650
27651 !! test
27652 Headings: Category in ref isn't hoisted
27653 !! options
27654 parsoid={
27655 "modes": ["html2wt"],
27656 "scrubWikitext": true
27657 }
27658 !! html/parsoid
27659 <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>
27660
27661 <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>
27662 !! wikitext
27663 == foo <ref>bar
27664 [[Category:Baz]] </ref> ==
27665
27666 <references />
27667 !! end
27668
27669 !! test
27670 Parsoid: Serialize positional parameters with = in them as named parameter
27671 !! options
27672 parsoid=html2wt
27673 !! html/parsoid
27674 <p about="#mwt1" typeof="mw:Transclusion"
27675 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}},"i":0}}]}'>foo</p>
27676
27677 <p about="#mwt1" typeof="mw:Transclusion"
27678 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}, "2":{"wt":"bar"}},"i":0}}]}'>foo</p>
27679
27680 <!--Orig params with data-parsoid has heuristics for handling = chars-->
27681 <!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
27682 <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>
27683 !! wikitext
27684 {{echo|1=f=oo}}
27685
27686 {{echo|1=f=oo|2=bar}}
27687
27688 <!--Orig params with data-parsoid has heuristics for handling = chars-->
27689 <!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
27690 {{echo|<nowiki>f=oo</nowiki>|bar}}
27691 !! end
27692
27693 !! test
27694 Parsoid: Serialize positional parameters with = in extlink as named parameter
27695 !! options
27696 parsoid=html2wt
27697 !! html/parsoid
27698 <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>
27699 !! wikitext
27700 {{echo|1=http://stuff?is=ok}}
27701 !! end
27702
27703 !! test
27704 Parsoid: Correctly serialize block-node children when they are a combination of text and p-nodes
27705 !! options
27706 parsoid=html2wt
27707 !! html/parsoid
27708 <div>a<p>b</p></div>
27709 <div>a
27710 <p>b</p></div>
27711 <div>
27712 a
27713 <p>b</p></div>
27714 !! wikitext
27715 <div>a
27716 b
27717 </div>
27718 <div>a
27719 b
27720 </div>
27721 <div>
27722 a
27723
27724 b
27725 </div>
27726 !! end
27727
27728 !! test
27729 Substrings resembling wikitext in hrefs should not get nowiki escapes
27730 !! options
27731 parsoid=html2wt
27732 !! html/parsoid
27733 <a rel="mw:WikiLink" href="./Foo''bar''baz">Foo''bar''baz</a>
27734 !! wikitext
27735 [[Foo''bar''baz]]
27736 !! end
27737
27738 !! test
27739 Enforce single-line context in the serializer
27740 !! options
27741 parsoid=html2wt
27742 !! html/parsoid
27743 <h2>testing
27744 123</h2>
27745
27746 <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">
27747 </span><span about="#mwt1">you</span> </h2>
27748
27749 <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>
27750
27751 <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
27752 there</span></li></ol>
27753
27754 <ul><li>asd
27755 sdf</li></ul>
27756
27757 <ul><li>foo
27758 bar
27759 baz</li>
27760 <li>foo <b>bar</b>
27761 baz</li></ul>
27762
27763 <dl><dt>hi
27764 ho </dt><dd data-parsoid='{"stx":"row"}'> hi
27765 ho</dd></dl>
27766
27767 <dl><dd> <table>
27768 <tbody><tr><td> ha
27769 ha
27770 ha</td></tr>
27771 </tbody></table></dd></dl>
27772 !! wikitext
27773 == testing 123 ==
27774
27775 == hi {{bogus|there
27776 you}} ==
27777
27778 == foo <ref>hello
27779 there</ref> ==
27780
27781 <references />
27782
27783 * asd sdf
27784
27785 * foo bar baz
27786 * foo '''bar''' baz
27787
27788 ; hi ho : hi ho
27789
27790 : {|
27791 | ha
27792 ha
27793 ha
27794 |}
27795 !! end
27796
27797 !! test
27798 Serialize new placeholder space without spans
27799 !! options
27800 parsoid=html2wt
27801 !! html/parsoid
27802 <p>foo<span typeof="mw:Placeholder"> </span>: bar</p>
27803
27804 <p>foo<span typeof="mw:DisplaySpace mw:Placeholder" data-parsoid='{"src":" ","isDisplayHack":true}'> </span>: bar</p>
27805
27806 <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>
27807 !! wikitext
27808 foo : bar
27809
27810 foo : bar
27811
27812 <ref>foo : bar</ref>ok
27813 !! end
27814
27815
27816 #-----------------------
27817 # Tag minimization tests
27818 #-----------------------
27819
27820 !! test
27821 1. I/B quote minimization: wikitext-only tags should be combined
27822 !! options
27823 parsoid=html2wt
27824 !! html/parsoid
27825 <p><i>A</i><i>B</i></p>
27826 <p><b>A</b><b>B</b></p>
27827 <p><i>A</i><b><i>B</i></b></p>
27828 <p><b>A</b><i><b>B</b></i></p>
27829 <p><b>A</b><i><b>B</b><b>C</b></i><b>D</b></p>
27830 <p><i><b>A</b></i><i><b>B</b></i></p>
27831 <p><i><b>A</b></i><b><i>B</i></b></p>
27832 <p><b><i>A</i></b><i><b>B</b></i></p>
27833 !! wikitext
27834 ''AB''
27835
27836 '''AB'''
27837
27838 ''A'''B'''''
27839
27840 '''A''B'''''
27841
27842 '''A''BC''D'''
27843
27844 '''''AB'''''
27845
27846 '''''AB'''''
27847
27848 '''''AB'''''
27849 !! end
27850
27851 !! test
27852 2. I/B quote minimization: wikitext and html tags should not be combined
27853 !! options
27854 parsoid=html2wt
27855 !! html/parsoid
27856 <p><i>A</i><i data-parsoid='{"stx":"html"}'>B</i></p>
27857 <p><i>A</i><b><i data-parsoid='{"stx":"html"}'>B</i></b></p>
27858 !! wikitext
27859 ''A''<i>B</i>
27860
27861 ''A''<nowiki/>'''<i>B</i>'''
27862 !! end
27863
27864 !! test
27865 3. I/B quote minimization: templated content stops minimization
27866 !! options
27867 parsoid=html2wt
27868 !! html/parsoid
27869 <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>
27870 <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>
27871 !! wikitext
27872 ''A''{{echo|''B''}}
27873
27874 ''A''{{echo|'''''B'''''}}
27875 !! end
27876
27877 !! test
27878 4. I/B quote minimization: new content should be mimimized with adjacent old content
27879 !! options
27880 parsoid=html2wt
27881 !! html/parsoid
27882 <p><i>A</i><i>B</i></p>
27883 <p><b>A</b><b>B</b></p>
27884 <p><i>A</i><b><i>B</i></b></p>
27885 !! wikitext
27886 ''AB''
27887
27888 '''AB'''
27889
27890 ''A'''B'''''
27891 !! end
27892
27893 !! test
27894 5a. Merge adjacent quote nodes if they've been edited
27895 !! options
27896 parsoid={
27897 "modes": ["wt2wt", "selser"],
27898 "changes": [
27899 ["p", "contents", "remove", ":contains('b')"]
27900 ]
27901 }
27902 !! wikitext
27903 ''a''b''c''
27904 !! wikitext/edited
27905 ''ac''
27906 !! end
27907
27908 !! test
27909 5b. Merge adjacent quote nodes if they've been edited
27910 !! options
27911 parsoid={
27912 "modes": ["wt2wt", "selser"],
27913 "changes": [
27914 ["#x", "remove"]
27915 ]
27916 }
27917 !! wikitext
27918 ''a''<span id="x">b</span>''c''
27919 !! wikitext/edited
27920 ''ac''
27921 !! end
27922
27923 !! test
27924 1. Merge adjacent link nodes as long as at least one element is new
27925 !! options
27926 parsoid={
27927 "modes": ["html2wt"],
27928 "scrubWikitext": true
27929 }
27930 !! html/parsoid
27931 <a rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
27932 <a data-parsoid="{}" rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
27933 <a data-parsoid="{}" rel="mw:WikiLink" href="./Football">Foot</a><a data-parsoid="{}" rel="mw:WikiLink" href="./Football">ball</a>
27934 !! wikitext
27935 [[Football]]
27936 [[Football]]
27937 [[Football|Foot]][[Football|ball]]
27938 !! end
27939
27940 !! test
27941 2. Merge adjacent link nodes and enable additional normalizations
27942 !! options
27943 parsoid={
27944 "modes": ["html2wt"],
27945 "scrubWikitext": true
27946 }
27947 !! html/parsoid
27948 <a rel="mw:WikiLink" href="./Football"><i>Foot</i></a><a rel="mw:WikiLink" href="./Football"><i>ball</i></a>
27949 !! wikitext
27950 [[Football|''Football'']]
27951 !! end
27952
27953 !! test
27954 3. Don't merge adjacent link nodes if scrubWikitext is false
27955 !! options
27956 parsoid={
27957 "modes": ["html2wt"],
27958 "scrubWikitext": false
27959 }
27960 !! html/parsoid
27961 <a rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
27962 !! wikitext
27963 [[Football|Foot]][[Football|ball]]
27964 !! end
27965
27966 #------------------------------
27967 # End of tag minimization tests
27968 #------------------------------
27969
27970 !!test
27971 T56262: New entities
27972 !! options
27973 parsoid=html2wt
27974 !! html/parsoid
27975 <span typeof="mw:Entity">&nbsp;</span>
27976 !! wikitext
27977 &nbsp;
27978 !! end
27979
27980 ## Note that there is no wikitext output for 'unknownproperty' ##
27981 ## Unknown magic words are silently dropped ##
27982
27983 !! test
27984 Magic words
27985 !! options
27986 parsoid=html2wt
27987 !! html/parsoid
27988 <meta property='mw:PageProp/toc' />
27989 <meta property='mw:PageProp/notoc' />
27990 <meta property='mw:PageProp/forcetoc' />
27991 <meta property='mw:PageProp/index' />
27992 <meta property='mw:PageProp/noindex' />
27993 <meta property='mw:PageProp/nogallery' />
27994 <meta property='mw:PageProp/noeditsection' />
27995 <meta property='mw:PageProp/notitleconvert' />
27996 <meta property='mw:PageProp/nocontentconvert' />
27997 <meta property='mw:PageProp/unknownproperty' />
27998 !! wikitext
27999 __TOC__
28000 __NOTOC__
28001 __FORCETOC__
28002 __INDEX__
28003 __NOINDEX__
28004 __NOGALLERY__
28005 __NOEDITSECTION__
28006 __NOTITLECONVERT__
28007 __NOCONTENTCONVERT__
28008 !! end
28009
28010 !! test
28011 Consecutive <pre>s should not get merged
28012 !! options
28013 parsoid=html2wt,html2html
28014 !! html/parsoid
28015 <pre>a</pre><pre>b</pre>
28016
28017 <pre>c
28018 </pre><pre>
28019 d</pre>
28020
28021 <pre>e
28022
28023 </pre><pre>
28024
28025 f</pre>
28026 !! wikitext
28027 a
28028
28029 b
28030
28031 c
28032
28033 d
28034
28035 e
28036
28037
28038
28039 f
28040 !! end
28041
28042 !! test
28043 Edited ISBN links not serializable as ISBN links should serialize as wikilinks
28044 !! options
28045 parsoid=html2wt
28046 !! html/parsoid
28047 <a href="./Special:BookSources/1234567890" rel="mw:ExtLink">ISBN 1234567895</a>
28048 !! wikitext
28049 [[Special:BookSources/1234567890|ISBN 1234567895]]
28050 !! end
28051
28052 !! test
28053 Edited RFC links not serializable as RFC links should serialize as extlinks
28054 !! options
28055 parsoid=html2wt
28056 !! html/parsoid
28057 <a href="https://tools.ietf.org/html/rfc123" rel="mw:ExtLink">New RFC</a>
28058 !! wikitext
28059 [https://tools.ietf.org/html/rfc123 New RFC]
28060 !! end
28061
28062 !! test
28063 Edited PMID links not serializable as PMID links should serialize as extlinks
28064 !! options
28065 parsoid=html2wt
28066 !! html/parsoid
28067 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink">New PMID</a>
28068 !! wikitext
28069 [//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract New PMID]
28070 !! end
28071
28072 !! test
28073 WTS of autolinks with trailing/surrounding context
28074 !! options
28075 parsoid=html2wt
28076 !! html/parsoid
28077 <p><a href="http://cscott.net">http://cscott.net</a><b>foo</b></p>
28078 <p><a href="http://cscott.net">http://cscott.net</a><b data-parsoid='{"stx":"html"}'>foo</b></p>
28079 <p><b><a href="http://cscott.net">http://cscott.net</a></b></p>
28080 <p><b><a href="http://cscott.net">http://cscott.net</a> </b></p>
28081 <p><b><a href="http://cscott.net">http://cscott.net</a>x</b></p>
28082 <p><a href="http://cscott.net">http://cscott.net</a>x</p>
28083 !! wikitext
28084 http://cscott.net'''foo'''
28085
28086 http://cscott.net<b>foo</b>
28087
28088 '''http://cscott.net'''
28089
28090 '''http://cscott.net '''
28091
28092 '''http://cscott.net<nowiki/>x'''
28093
28094 http://cscott.net<nowiki/>x
28095 !! end
28096
28097 !! test
28098 WTS of autolinks with nowikis (round-trip)
28099 !! wikitext
28100 x<nowiki/>http://cscott.net<nowiki/>x
28101 !! html/parsoid
28102 <p>x<a rel="mw:ExtLink" href="http://cscott.net">http://cscott.net</a>x</p>
28103 !! end
28104
28105 # this is the "easy" test because it leaves in place all the
28106 # data-parsoid information indicating this is an autolink
28107 !! test
28108 WTS of autolinks with escapes (editing)
28109 !! options
28110 parsoid={
28111 "modes": ["wt2wt"],
28112 "changes": [
28113 [ "span", "remove" ]
28114 ]
28115 }
28116 !! wikitext
28117 x<nowiki/>http://cscott.net<nowiki/>x
28118 !! wikitext/edited
28119 x<nowiki/>http://cscott.net<nowiki/>x
28120 !! end
28121
28122 !! test
28123 WTS of edited autolink-like text (T103364)
28124 !! options
28125 parsoid={
28126 "modes": ["wt2wt"],
28127 "changes": [
28128 [ "span[typeof]", "removeAttr", "typeof" ]
28129 ]
28130 }
28131 !! wikitext
28132 Not a link: <nowiki>http://example.com</nowiki>.
28133 !! wikitext/edited
28134 Not a link: <span><nowiki>http://example.com</nowiki></span>.
28135 !! end
28136
28137 !! test
28138 WTS of newly-authored autolink-like text (T103364)
28139 !! options
28140 parsoid=html2wt
28141 !! html/parsoid
28142 <p>http://example.com is not a link.</p>
28143 !! wikitext
28144 <nowiki>http://example.com</nowiki> is not a link.
28145 !! end
28146
28147 !! test
28148 WTS of autolink-like text after an autolink (T108563)
28149 !! options
28150 parsoid=html2wt
28151 !! html/parsoid
28152 <p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a> http://example.com is not a link.</p>
28153 !! wikitext
28154 http://example.com <nowiki>http://example.com</nowiki> is not a link.
28155 !! end
28156
28157 !! test
28158 Magic links inside links (not autolinked)
28159 !! wikitext
28160 [[Foo|http://example.com]]
28161 [[Foo|RFC 1234]]
28162 [[Foo|PMID 1234]]
28163 [[Foo|ISBN 123456789x]]
28164
28165 [http://foo.com http://example.com]
28166 [http://foo.com RFC 1234]
28167 [http://foo.com PMID 1234]
28168 [http://foo.com ISBN 123456789x]
28169 !! html+tidy
28170 <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>
28171 <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>
28172 !! html/parsoid
28173 <p><a rel="mw:WikiLink" href="./Foo" title="Foo">http://example.com</a>
28174 <a rel="mw:WikiLink" href="./Foo" title="Foo">RFC 1234</a>
28175 <a rel="mw:WikiLink" href="./Foo" title="Foo">PMID 1234</a>
28176 <a rel="mw:WikiLink" href="./Foo" title="Foo">ISBN 123456789x</a></p>
28177
28178 <p><a rel="mw:ExtLink" href="http://foo.com">http://example.com</a>
28179 <a rel="mw:ExtLink" href="http://foo.com">RFC 1234</a>
28180 <a rel="mw:ExtLink" href="http://foo.com">PMID 1234</a>
28181 <a rel="mw:ExtLink" href="http://foo.com">ISBN 123456789x</a></p>
28182 !! end
28183
28184 !! test
28185 Magic links inside image captions (autolinked)
28186 !! wikitext
28187 [[File:Foobar.jpg|thumb|http://example.com]]
28188 [[File:Foobar.jpg|thumb|RFC 1234]]
28189 [[File:Foobar.jpg|thumb|PMID 1234]]
28190 [[File:Foobar.jpg|thumb|ISBN 123456789x]]
28191 !! html+tidy
28192 <div class="thumb tright">
28193 <div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
28194 <div class="thumbcaption">
28195 <div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
28196 <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div>
28197 </div>
28198 </div>
28199 <div class="thumb tright">
28200 <div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
28201 <div class="thumbcaption">
28202 <div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
28203 <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc1234">RFC 1234</a></div>
28204 </div>
28205 </div>
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 class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</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 href="/wiki/Special:BookSources/123456789X" class="internal mw-magiclink-isbn">ISBN 123456789x</a></div>
28218 </div>
28219 </div>
28220 !! html/parsoid
28221 <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>
28222 <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>
28223 <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>
28224 <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>
28225 !! end
28226
28227 !! test
28228 WTS of magic word text (T109371)
28229 !! options
28230 parsoid=html2wt
28231 !! html/parsoid
28232 <p>RFC 1234</p>
28233 <p><a href="http://foo.com" rel="mw:ExtLink">RFC 1234</a></p>
28234 <p><a href="./Foo" rel="mw:WikiLink">RFC 1234</a></p>
28235 !! wikitext
28236 <nowiki>RFC 1234</nowiki>
28237
28238 [http://foo.com RFC 1234]
28239
28240 [[Foo|RFC 1234]]
28241 !! end
28242
28243 !! test
28244 Edited Redirect link should emit a non-piped wikitext link
28245 !! options
28246 parsoid=html2wt
28247 !! html/parsoid
28248 <link rel="mw:PageProp/redirect" href="Bar" data-parsoid='{"a":{"href":"./Foo"},"sa":{"href":"Foo"}}'>
28249 !! wikitext
28250 #REDIRECT [[Bar]]
28251 !! end
28252
28253 !! test
28254 T75121: Infer extension name from typeOf if data-mw is not present
28255 !! options
28256 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
28257 !! html/parsoid
28258 <div typeOf="mw:Extension/foo"></div>
28259 !! wikitext
28260 <foo />
28261 !! end
28262
28263 # Note that the <p> wrapping isn't present in PHP parser output
28264 # The important thing for this test is that P-wrapping doesn't
28265 # interfere with the <nowiki> protection for leading - in <td>
28266 # (which isn't necessary for <th>).
28267 !! test
28268 T88318: p-wrapped dash in table.
28269 !! options
28270 parsoid=html2wt,wt2wt
28271 !! html/parsoid
28272 <table><tbody>
28273 <tr><th><p>-</p></th><th><p>- </p></th></tr>
28274 <tr><td><p>-</p></td><td><p>- </p></td></tr>
28275 <tr><td><small>-</small></td><td><br/><p>-</p></td><td><br/>-</td></tr>
28276 </tbody></table>
28277 !! wikitext
28278 {|
28279 !-
28280 !-
28281 |-
28282 |<nowiki>-</nowiki>
28283 |<nowiki>- </nowiki>
28284 |-
28285 |<small>-</small>
28286 |<br>
28287 -
28288 |<br>
28289 -
28290 |}
28291 !! html/php+tidy
28292 <table>
28293 <tr>
28294 <th>-</th>
28295 <th>-</th>
28296 </tr>
28297 <tr>
28298 <td>-</td>
28299 <td>-</td>
28300 </tr>
28301 <tr>
28302 <td><small>-</small></td>
28303 <td><br />
28304 <p>-</p>
28305 </td>
28306 <td><br />
28307 <p>-</p>
28308 </td>
28309 </tr>
28310 </table>
28311 !! end
28312
28313 !! test
28314 T149209: WTS: Handle newlines in table cells properly
28315 !! options
28316 parsoid=html2wt
28317 !! html/parsoid
28318 <table>
28319 <tbody>
28320 <tr><td>a
28321 b
28322 </td><td data-parsoid='{"stx_v":"row"}'>c</td></tr>
28323 <tr><td><p>x</p>
28324 </td><td data-parsoid='{"stx_v":"row", "startTagSrc": "{{!}}{{!}}"}'>y</td></tr>
28325 </tbody></table>
28326 <table>
28327 <tbody>
28328 <tr><th>a
28329 b
28330 </th><th data-parsoid='{"stx_v":"row"}'>c</th></tr>
28331 <tr><th><p>x</h>
28332 </th><th data-parsoid='{"stx_v":"row"}'>y</th></tr>
28333 </tbody></table>
28334 !! wikitext
28335 {|
28336 |a
28337 b
28338 |c
28339 |-
28340 |x
28341 {{!}}y
28342 |}
28343 {|
28344 !a
28345 b
28346 !c
28347 |-
28348 !x
28349 !y
28350 |}
28351 !! end
28352
28353 !! test
28354 T149209: Selser: Handle newlines in table cells properly
28355 !! options
28356 parsoid={
28357 "modes": ["selser"],
28358 "changes": [
28359 [ "#h1", "html", "a\nb\n" ],
28360 [ "#h2", "html", "a\nb\n" ],
28361 [ "#c1", "html", "a\nb\n" ],
28362 [ "#c2", "html", "<p>a</p>" ],
28363 [ "#c3", "html", "<p>a</p>" ],
28364 [ "#c4", "html", "edit-me<p>a</p>" ]
28365 ]
28366 }
28367 !! wikitext
28368 {|
28369 ! id="h1" |edit-me!!1
28370 |-
28371 ! id="h2" |edit-me||2
28372 |-
28373 | id="c1" |edit-me||3
28374 |-
28375 | id="c2" |edit-me||4
28376 |-
28377 | id="c3" |edit-me||p||q||r
28378 |-
28379 | id="c4" |edit-me||p||q||r
28380 |}
28381 !! wikitext/edited
28382 {|
28383 ! id="h1" |a
28384 b
28385 !1
28386 |-
28387 ! id="h2" |a
28388 b
28389 !2
28390 |-
28391 | id="c1" |a
28392 b
28393 |3
28394 |-
28395 | id="c2" |a
28396 |4
28397 |-
28398 | id="c3" |a
28399 |p||q||r
28400 |-
28401 | id="c4" |edit-me
28402 a
28403 |p||q||r
28404 |}
28405 !! end
28406
28407 !! test
28408 HTML id attribute with Parsoid-like element ids should not be serialized to wikitext
28409 !! options
28410 parsoid=html2wt
28411 !! html/parsoid
28412 <table id='mwAb'>
28413 <td id='mwAc'>foo</td>
28414 <td id='serialize-this'>bar</td>
28415 </table>
28416 !! wikitext
28417 {|
28418 |foo
28419 | id="serialize-this" |bar
28420 |}
28421 !! end
28422
28423 !! test
28424 Parsoid-like element ids should not be serialized to wikitext unless shadowed
28425 !! options
28426 parsoid=html2wt
28427 !! html/parsoid
28428 <div id="mwAQ" data-parsoid='{"stx":"html","a":{"id":"mwAQ"},"sa":{"id":"hello"}}'>ok</div>
28429 !! wikitext
28430 <div id="hello">ok</div>
28431 !! end
28432
28433 !! test
28434 WTS change modes
28435 !! options
28436 parsoid={
28437 "modes": ["wt2wt"],
28438 "changes": [
28439 [ "#xyz", "before", "<b>before</b> stuff " ],
28440 [ "#xyz", "after", " stuff <i>after</i>" ],
28441 [ "#xyz", "html", "x <b>y</b> z" ]
28442 ]
28443 }
28444 !! wikitext
28445 <span id="xyz">hello</span>
28446 !! wikitext/edited
28447 '''before''' stuff <span id="xyz">x '''y''' z</span> stuff ''after''
28448 !! end
28449
28450 !! test
28451 Never serialize a-tag as html, regardless of what data-parsoid has to say
28452 !! options
28453 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
28454 !! html/parsoid
28455 <a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"html"}'>Foo</a>
28456 !! wikitext
28457 [[Foo]]
28458 !! end
28459
28460 ## SSS FIXME: This is broken output nevertheless.
28461 ## What might be a reasonable non-broken output for this?
28462 ## This is an edge case unlikely to be seen in production
28463 ## that I am not wasting more time on this right now.
28464 !! test
28465 Never serialize a-tag as html, no matter what attributes it has
28466 !! options
28467 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
28468 !! html/parsoid
28469 <a bad='true' href='http://boo.org'><img src='http://boohoo.org' /></a>
28470 !! wikitext
28471 [http://boo.org http://boohoo.org]
28472 !! end
28473
28474 # Misnested is an indication that selser can reuse the source but these have
28475 # shown to sneak through on occasion. See T101768.
28476 # The original wikitext here is: [http://test.com [[one]] two three]
28477 !! test
28478 Strip span tags added to mark misnested links
28479 !! options
28480 parsoid=html2wt
28481 !! html/parsoid
28482 <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>
28483 !! wikitext
28484 [http://test.com][[one]] two three
28485 !! end
28486
28487 !! test
28488 Catch regression when unpacking misnested links
28489 !! options
28490 parsoid=wt2html
28491 !! wikitext
28492 {{echo|hi}}[http://example.com [[ho]]]
28493 !! html/parsoid
28494 <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>
28495 !! end
28496
28497 !! test
28498 Use data-parsoid.firstWikitextNode to compute newline constraints for template content
28499 !! options
28500 parsoid=html2wt
28501 !! html/parsoid
28502 <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|}"]}'>
28503 <tbody><tr><td>d
28504 </td></tr>
28505 </tbody></table>
28506 !! wikitext
28507 {{echo|a}}
28508 {|{{echo|c
28509 {{!}}d
28510 }}
28511 |}
28512 !! end
28513
28514 ## This test verifies the presence and computation of this attribute indirectly
28515 ## by making an edit and ensuring that the serialization is correct (which it would be
28516 ## only if firstWikitextNode is properly set).
28517 !! test
28518 data-parsoid.firstWikitextNode should be computed properly in the presence of fostered content
28519 !! options
28520 parsoid= {
28521 "modes": ["wt2wt"],
28522 "changes": [
28523 [ "div#x", "remove" ],
28524 [ "div", "before", "<div>new</div>" ]
28525 ]
28526 }
28527 !! wikitext
28528 <div id="x">foo</div>
28529 {|
28530 {{echo|<div>boo</div>
28531 {{!}}b}}
28532 |c
28533 |}
28534 !! wikitext/edited
28535
28536 <div>new</div>
28537 {|
28538 {{echo|<div>boo</div>
28539 {{!}}b}}
28540 |c
28541 |}
28542 !! end
28543
28544 # --------------------------------------------
28545 # Tests spec'ing wikitext serialization norms |
28546 # --------------------------------------------
28547
28548 !! test
28549 Serialize multi-line indent-pre starting with wikitext syntax
28550 !! options
28551 parsoid=html2wt
28552 !! html/parsoid
28553 <pre>* 1
28554 ** 2
28555 * 3</pre>
28556 !! wikitext
28557 * 1
28558 ** 2
28559 * 3
28560 !! end
28561
28562 !! test
28563 1. Categories should always be serialized on their own line
28564 !! options
28565 parsoid=html2wt
28566 !! html/parsoid
28567 foo<link rel="mw:PageProp/Category" href="./Category:Foo">bar
28568 !! wikitext
28569 foo
28570 [[Category:Foo]]
28571 bar
28572 !! end
28573
28574 !! test
28575 2. Categories that are part of templates should not introduce a line break
28576 !! wikitext
28577 foo {{echo|<span>bar</span> [[Category:baz]]}} bar
28578 !! html/parsoid
28579 <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>
28580 !! end
28581
28582 # Careful while editing these next 2 tests. There are \u200f characters
28583 # before and after the <link> tags in the HTML and following some
28584 # of the categories in wikitext
28585 # Do not remove these characters in edits.
28586 #
28587 # As part of the serialization, these bidi characters will get stripped.
28588 !! test
28589 RTL (\u200f) and LTR (\u200e) markers around category tags should be stripped
28590 !! options
28591 parsoid={
28592 "modes": ["html2wt"],
28593 "scrubWikitext": true
28594 }
28595 !! html/parsoid
28596 <p>‏<link rel="mw:PageProp/Category" href="./קטגוריה:טקסים" />‏
28597 ‏<link rel="mw:PageProp/Category" href="./קטגוריה:_שיטות_משפט" />‏</p>
28598 !! wikitext
28599 [[קטגוריה:טקסים]]
28600 [[קטגוריה: שיטות משפט]]
28601 !! end
28602
28603 !! test
28604 RTL (\u200f) and LTR (\u200e) markers should not be stripped if followed by a text node
28605 !! options
28606 parsoid={
28607 "modes": ["html2wt"],
28608 "scrubWikitext": true
28609 }
28610 !! html/parsoid
28611 <p>‏<link rel="mw:PageProp/Category" href="./קטגוריה:טקסים" />‏y</p>
28612 !! wikitext
28613 [[קטגוריה:טקסים]]
28614 ‏y
28615 !! end
28616
28617 !! test
28618 Lists: Add space after bullets
28619 !! options
28620 parsoid=html2wt
28621 !! html/parsoid
28622 <ul>
28623 <li>foo</li>
28624 <li> bar</li>
28625 <li><span> baz</span></li>
28626 </ul>
28627 !! wikitext
28628 * foo
28629 * bar
28630 * <span> baz</span>
28631 !! end
28632
28633 !! test
28634 1. Headings: Add space before/after == (T53744)
28635 !! options
28636 parsoid=html2wt
28637 !! html/parsoid
28638 <h2>foo</h2>
28639 <h2> bar</h2>
28640 <h2>baz </h2>
28641 <h2><span> baz</span></h2>
28642 !! wikitext
28643 == foo ==
28644
28645 == bar ==
28646
28647 == baz ==
28648
28649 == <span> baz</span> ==
28650 !! end
28651
28652 !! test
28653 2. Headings: Add space before/after == even after hoisted content
28654 !! options
28655 parsoid={
28656 "modes": ["html2wt"],
28657 "scrubWikitext": true
28658 }
28659 !! html/parsoid
28660 <h2> <link href="./Category:A2" rel="mw:PageProp/Category" />ok</h2>
28661 !! wikitext
28662 [[Category:A2]]
28663
28664 == ok ==
28665 !! end
28666
28667 !! test
28668 1. Headings: suppress newly created empty headings
28669 !! options
28670 parsoid={
28671 "modes": ["html2wt"],
28672 "scrubWikitext": true
28673 }
28674 !! html/parsoid
28675 <h2></h2>
28676 !! wikitext
28677 !! end
28678
28679 !! test
28680 2. Headings: don't suppress empty headings if scrubWikitext is false
28681 !! options
28682 parsoid=html2wt
28683 !! html/parsoid
28684 <h2></h2>
28685 !! wikitext
28686 ==<nowiki/>==
28687 !! end
28688
28689 !! test
28690 3. Headings: suppress empty headings on edits
28691 !! options
28692 parsoid={
28693 "modes": ["selser"],
28694 "scrubWikitext": true,
28695 "changes": [
28696 [ "#x", "remove"]
28697 ]
28698 }
28699 !! wikitext
28700 ==<span id="x">foo</span>==
28701 !! wikitext/edited
28702 !! end
28703
28704 !! test
28705 Headings: Replace <br/> with a single whitespace char (when scrubWikitext = true)
28706 !! options
28707 parsoid={
28708 "modes": ["html2wt"],
28709 "scrubWikitext": true
28710 }
28711 !! html/parsoid
28712 <h2>foo<br/>bar</h2>
28713 <h2>foo <span><br/>bar</span> baz</h2>
28714 !! wikitext
28715 == foo bar ==
28716
28717 == foo <span> bar</span> baz ==
28718 !! end
28719
28720 !! test
28721 Headings: Replace <br/> with a single whitespace char (when scrubWikitext = false)
28722 !! options
28723 parsoid={
28724 "modes": ["html2wt"],
28725 "scrubWikitext": false
28726 }
28727 !! html/parsoid
28728 <h2>foo<br/>bar</h2>
28729 !! wikitext
28730 == foo<br> bar ==
28731 !! end
28732
28733 !! test
28734 1. WT Quote Tags: suppress newly created empty style tags
28735 !! options
28736 parsoid={
28737 "modes": ["html2wt"],
28738 "scrubWikitext": true
28739 }
28740 !! html/parsoid
28741 <i></i><b></b>
28742 !! wikitext
28743 !! end
28744
28745 !! test
28746 2. WT Quote Tags: don't suppress empty style tags if scrubWikitext is false
28747 !! options
28748 parsoid=html2wt
28749 !! html/parsoid
28750 <i></i><b></b>
28751 !! wikitext
28752 ''<nowiki/>'''''<nowiki/>'''
28753 !! end
28754
28755 !! test
28756 3. WT Quote Tags: suppress empty style tags on edits
28757 !! options
28758 parsoid={
28759 "modes": ["selser"],
28760 "scrubWikitext": true,
28761 "changes": [
28762 [ "#x", "remove"]
28763 ]
28764 }
28765 !! wikitext
28766 '''<span id="x">foo</span>'''
28767 !! wikitext/edited
28768 !! end
28769
28770 !! test
28771 1. Anchors: suppress newly created empty anchors
28772 !! options
28773 parsoid={
28774 "modes": ["html2wt"],
28775 "scrubWikitext": true
28776 }
28777 !! html/parsoid
28778 <a rel="mw:WikiLink" href="./Test" title="Test"></a>
28779 !! wikitext
28780 !! end
28781
28782 !! test
28783 2. Anchors: don't suppress empty anchors if scrubWikitext is false
28784 !! options
28785 parsoid={
28786 "modes": ["html2wt"],
28787 "scrubWikitext": false
28788 }
28789 !! html/parsoid
28790 <a rel="mw:WikiLink" href="./Test" title="Test"></a>
28791 !! wikitext
28792 [[Test|<nowiki/>]]
28793 !! end
28794
28795 !! test
28796 3. Anchors: suppress empty anchors on edits
28797 !! options
28798 parsoid={
28799 "modes": ["selser"],
28800 "scrubWikitext": true,
28801 "changes": [
28802 [ "#x", "remove"]
28803 ]
28804 }
28805 !! wikitext
28806 [[Test|<span id="x">foo</span>]]
28807 !! wikitext/edited
28808 !! end
28809
28810 !! test
28811 3a. Anchors: do not suppress numbered extlinks
28812 !! options
28813 parsoid={
28814 "modes": ["wt2wt"],
28815 "scrubWikitext": true
28816 }
28817 !! wikitext
28818 [http://foo.com]
28819 !! html/parsoid
28820 <a rel="mw:ExtLink" href="http://foo.com"></a>
28821 !! end
28822
28823 !! test
28824 3b. Anchors: do not suppress numbered extlinks
28825 !! options
28826 parsoid={
28827 "modes": ["wt2wt"],
28828 "scrubWikitext": true,
28829 "changes": [
28830 [ "#x", "remove"]
28831 ]
28832 }
28833 !! wikitext
28834 [http://foo.com <span id="x">foo</span>]
28835 !! wikitext/edited
28836 [http://foo.com]
28837 !! end
28838
28839 !!test
28840 Normalizations should be restricted to edited content
28841 !!options
28842 parsoid={
28843 "modes": ["selser"],
28844 "scrubWikitext": true,
28845 "changes": [
28846 [ "h1", "before", "<i></i>"]
28847 ]
28848 }
28849 !!wikitext
28850 a
28851 = =
28852 b
28853 !!wikitext/edited
28854 a
28855 = =
28856 b
28857 !!end
28858
28859 !! test
28860 1. Multiple normalizations (html2wt)
28861 !! options
28862 parsoid={
28863 "modes": ["html2wt"],
28864 "scrubWikitext": true
28865 }
28866 !! html
28867 <h2><i></i></h2>
28868 <p><a href='Foo' rel='mw:WikiLink'>foo<i></i>
28869 </a><b><i></i></b>x</p>
28870 !! wikitext
28871
28872 [[foo]]
28873 x
28874
28875 !! end
28876
28877 !! test
28878 2. Multiple normalizations (selser)
28879 !! options
28880 parsoid={
28881 "modes": ["selser"],
28882 "scrubWikitext": true,
28883 "changes": [
28884 [ "#x", "after", "<h1><i></i></h1>\n<p> x<b></b></p>"]
28885 ]
28886 }
28887 !! wikitext
28888 <span id="x">foo</span>
28889 !! wikitext/edited
28890 <span id="x">foo</span>
28891
28892 x
28893 !! end
28894
28895 !! test
28896 1. Indent Pre Nowiki: suppress whitespace at the start of new paragraph
28897 !! options
28898 parsoid={
28899 "modes": ["html2wt"],
28900 "scrubWikitext": true
28901 }
28902 !! html/parsoid
28903 <p> hi</p>
28904 <p> hello</p>
28905 !! wikitext
28906 hi
28907
28908 hello
28909 !! end
28910
28911 !! test
28912 2. Indent Pre Nowiki: don't suppress whitespace at the start of new paragraph if scrubWikitext is false
28913 !! options
28914 parsoid=html2wt
28915 !! html/parsoid
28916 <p> hi</p>
28917 <p> hello</p>
28918 !! wikitext
28919 <nowiki> </nowiki>hi
28920
28921 <nowiki> </nowiki> hello
28922 !! end
28923
28924 !! test
28925 3. Indent Pre Nowiki: suppress whitespace after newlines in new paragraph or table cell
28926 !! options
28927 parsoid={
28928 "modes": ["html2wt"],
28929 "scrubWikitext": true
28930 }
28931 !! html/parsoid
28932 <p>Foo
28933 bar
28934 baz</p>
28935
28936 <table><tr><td>Foo
28937 bar
28938 baz bang</td></tr></table>
28939
28940 <p><!--boo--> foo
28941 bar</p>
28942
28943 <p> foo
28944 bar<span>boo</span></p>
28945 !! wikitext
28946 Foo
28947 bar
28948 baz
28949
28950 {|
28951 |Foo
28952 bar
28953 baz bang
28954 |}
28955
28956 <!--boo-->foo
28957 bar
28958
28959 foo
28960 bar<span>boo</span>
28961 !! end
28962
28963 !! test
28964 4. Indent Pre Nowiki: suppress leading whitespace in edited paragraphs
28965 !! options
28966 parsoid={
28967 "modes": ["selser"],
28968 "scrubWikitext": true,
28969 "changes": [
28970 [ "p", "html", " a\n b" ]
28971 ]
28972 }
28973 !! wikitext
28974 xyz
28975 !! wikitext/edited
28976 a
28977 b
28978 !! end
28979
28980 !! test
28981 1. New links that end in spaces
28982 !! options
28983 parsoid={
28984 "modes": ["html2wt"],
28985 "scrubWikitext": false
28986 }
28987 !! html/parsoid
28988 <p><a rel="mw:WikiLink" href="./Berlin" title="Berlin">Berlin </a>is the capital of Germany.</p>
28989 <p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo </a><b>bar</b></p>
28990 <p><a rel="mw:WikiLink" href="./Boston" title="Boston">Boston </a> is a city.</p>
28991 !! wikitext
28992 [[Berlin ]]<nowiki/>is the capital of Germany.
28993
28994 [[Foo ]]'''bar'''
28995
28996 [[Boston ]] is a city.
28997 !! end
28998
28999 !! test
29000 2. New links that end in spaces
29001 !! options
29002 parsoid={
29003 "modes": ["html2wt"],
29004 "scrubWikitext": true
29005 }
29006 !! html/parsoid
29007 <p><a rel="mw:WikiLink" href="./Berlin" title="Berlin">Berlin </a>is the capital of Germany.</p>
29008 <p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo </a><b>bar</b></p>
29009 <p><a rel="mw:WikiLink" href="./Boston" title="Boston">Boston </a> is a city.</p>
29010 !! wikitext
29011 [[Berlin]] is the capital of Germany.
29012
29013 [[Foo]] '''bar'''
29014
29015 [[Boston]] is a city.
29016 !! end
29017
29018 !! test
29019 1. Table cells with escapable prefixes
29020 !! options
29021 parsoid={
29022 "modes": ["html2wt"],
29023 "scrubWikitext": false
29024 }
29025 !! html
29026 <table>
29027 <tr><td>a</td></tr>
29028 <tr><td>-</td></tr>
29029 <tr><td>+</td></tr>
29030 </table>
29031 !! wikitext
29032 {|
29033 |a
29034 |-
29035 |<nowiki>-</nowiki>
29036 |-
29037 |<nowiki>+</nowiki>
29038 |}
29039 !! end
29040
29041 !! test
29042 2. Table cells with escapable prefixes
29043 !! options
29044 parsoid={
29045 "modes": ["html2wt"],
29046 "scrubWikitext": true
29047 }
29048 !! html
29049 <table>
29050 <tr><td>a</td></tr>
29051 <tr><td>-</td></tr>
29052 <tr><td>+</td></tr>
29053 </table>
29054 !! wikitext
29055 {|
29056 |a
29057 |-
29058 | -
29059 |-
29060 | +
29061 |}
29062 !! end
29063
29064 !! test
29065 3a. Table cells with escapable prefixes after edits
29066 !! options
29067 parsoid={
29068 "modes": ["selser"],
29069 "scrubWikitext": true,
29070 "changes": [
29071 [ "table tbody tr:first-child td:first-child", "remove"]
29072 ]
29073 }
29074 !! wikitext
29075 {|
29076 |a||-
29077 |}
29078 !! wikitext/edited
29079 {|
29080 | -
29081 |}
29082 !! end
29083
29084 !! test
29085 3b. Table cells with escapable prefixes after edits
29086 !! options
29087 parsoid={
29088 "modes": ["selser"],
29089 "scrubWikitext": true,
29090 "changes": [
29091 [ "table tbody tr:first-child td:first-child", "html", "-" ],
29092 [ "#x", "remove" ]
29093 ]
29094 }
29095 !! wikitext
29096 {|
29097 |pqr
29098 |<span id="x">foo</span>+
29099 |}
29100 !! wikitext/edited
29101 {|
29102 | -
29103 | +
29104 |}
29105 !! end
29106
29107 # FIXME: This test will fail because
29108 # normalization doesn't realize that the id attribute
29109 # will eliminate the escapable scenario
29110 !! test
29111 4a. Table cells without escapable prefixes after edits
29112 !! options
29113 parsoid={
29114 "modes": ["selser"],
29115 "scrubWikitext": true,
29116 "changes": [
29117 [ "#x", "html", "-" ]
29118 ]
29119 }
29120 !! wikitext
29121 {|
29122 | id="x" |abcd
29123 |}
29124 !! wikitext/edited
29125 {|
29126 | id="x" |-
29127 |}
29128 !! end
29129
29130 ## This tests normalizer's ability to discriminate between
29131 ## cells having identical content.
29132 !! test
29133 4b. Table cells without escapable prefixes after edits
29134 !! options
29135 parsoid={
29136 "modes": ["selser"],
29137 "scrubWikitext": true,
29138 "changes": [
29139 [ "td", "html", "-" ]
29140 ]
29141 }
29142 !! wikitext
29143 {|
29144 |a||b
29145 |}
29146 !! wikitext/edited
29147 {|
29148 | -||-
29149 |}
29150 !! end
29151
29152 ## This tests normalizer's ability to not be tripped by
29153 ## comments (and whitespace)
29154 !! test
29155 4c. Table cells without escapable prefixes after edits
29156 !! options
29157 parsoid={
29158 "modes": ["selser"],
29159 "scrubWikitext": true,
29160 "changes": [
29161 [ "table tbody tr td:first-child", "remove" ]
29162 ]
29163 }
29164 !! wikitext
29165 {|
29166 |-
29167 <!--foo--> |a||-
29168 |}
29169 !! wikitext/edited
29170 {|
29171 |-
29172 <!--foo--> | -
29173 |}
29174 !! end
29175
29176 ## This tests normalizer's ability to handle HTML cells
29177 !! test
29178 4d. Table cells without escapable prefixes after edits
29179 !! options
29180 parsoid={
29181 "modes": ["selser"],
29182 "scrubWikitext": true,
29183 "changes": [
29184 [ "td", "html", "-" ]
29185 ]
29186 }
29187 !! wikitext
29188 <table>
29189 <tr><td>a</td></tr>
29190 </table>
29191 !! wikitext/edited
29192 <table>
29193 <tr><td>-</td></tr>
29194 </table>
29195 !! end
29196
29197 ## T111151 Remove font elements without attributes
29198 !! test
29199 5a. font tags without attributes should be dropped in scrubWikitext mode
29200 !! options
29201 parsoid={
29202 "modes": ["html2wt"],
29203 "scrubWikitext": true
29204 }
29205 !! html
29206 <font>foo</font>
29207 <font><font>bar</font></font>
29208 <font class="x">boo</font>
29209 !! wikitext
29210 foo
29211 bar
29212 <font class="x">boo</font>
29213 !! end
29214
29215 !! test
29216 5b. font tags should not be dropped without scrubWikitext being enabled
29217 !! options
29218 parsoid={
29219 "modes": ["html2wt"],
29220 "scrubWikitext": false
29221 }
29222 !! html
29223 <font>foo</font>
29224 !! wikitext
29225 <font>foo</font>
29226 !! end
29227
29228 !! test
29229 Escape nowiki DOM elements
29230 !! options
29231 parsoid=html2wt
29232 !! html/parsoid
29233 <nowiki><i>foo</i></nowiki>
29234 !! wikitext
29235 &lt;nowiki&gt;''foo''&lt;/nowiki&gt;
29236 !! end
29237
29238 # This is meant to be an interim fix while we go about figuring out
29239 # how to not introduce these trailing <nowiki/>s in the first place.
29240 !! test
29241 T115717: Strip trailing <nowiki/>s (without affecting valid uses)
29242 !! options
29243 parsoid=html2wt
29244 !! html/parsoid
29245 <p>x<meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/>
29246 y</p>
29247 <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>
29248 <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>
29249 !! wikitext
29250 x
29251 y
29252
29253 {{echo|
29254 1 = <nowiki/>}}
29255
29256 {{echo|
29257 1 = <nowiki/>
29258 }}
29259 !! end
29260
29261 # ---------------------------------------------------
29262 # End of tests spec'ing wikitext serialization norms |
29263 # ---------------------------------------------------
29264
29265 # T104032
29266 !! test
29267 Bare inline nodes not wrapped inside p-tags should be treated as p-wrapped
29268 !! options
29269 parsoid=html2wt
29270 !! html/parsoid
29271 a<p>b</p>
29272 <b>c</b><p>d</p>
29273 <table><tr>
29274 <td>a<p>b</p></td>
29275 <td><b>c</b><p>d</p></td>
29276 </tr></table>
29277 !! wikitext
29278 a
29279
29280 b
29281
29282 '''c'''
29283
29284 d
29285 {|
29286 |a
29287 b
29288 |'''c'''
29289 d
29290 |}
29291 !! end
29292
29293 !! test
29294 Anchor without href scenarios
29295 !! options
29296 parsoid={ "modes": ["html2wt"], "suppressErrors": true }
29297 !! html/parsoid
29298 <a class="bc"></a>
29299 <a class="no">dice</a>
29300 <a name="foo"></a>
29301 !! wikitext
29302
29303 dice
29304 <span name="foo"></span>
29305 !! end
29306
29307 !! test
29308 New transclusion added after a list should be serialized after the list
29309 !! options
29310 parsoid=html2wt
29311 !! html/parsoid
29312 <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>
29313 !! wikitext
29314 * a
29315 {{echo|foo}}
29316 !! end
29317
29318 # -----------------------------------------------------------------
29319 # End of section for Parsoid-only html2wt tests for serialization
29320 # of new content
29321 # -----------------------------------------------------------------
29322
29323 # -----------------------------------------------------------------
29324 # The following section of tests are primarily to spec behavior of
29325 # the selective serializer. All these tests have manual selser
29326 # changes. The automated selser changes for all tests handle the
29327 # wide variation of changes, but these tests here capture specs
29328 # deterministically.
29329 # ----------------------------------------------------------------
29330
29331 ## T90517
29332 !! test
29333 Selser: New comments should not be lost
29334 !! options
29335 parsoid={
29336 "modes": ["selser"],
29337 "changes": [
29338 [ "#a", "after", "<!--c1-->" ],
29339 [ "#b", "before", "<!--c2-->" ]
29340 ]
29341 }
29342 !! wikitext
29343 <span id="a">a</span>
29344
29345 <span id="b">b</span>
29346 !! wikitext/edited
29347 <span id="a">a</span><!--c1-->
29348
29349 <!--c2--><span id="b">b</span>
29350 !! end
29351
29352 ## T89383
29353 !! test
29354 Selser: Check for validity of DSR before using it
29355 !! options
29356 parsoid={
29357 "modes": ["selser"],
29358 "changes": [
29359 [ "#a", "before", "<meta property='mw:PageProp/displaytitle' content='foo'>" ]
29360 ]
29361 }
29362 !! wikitext
29363 <span id="a">a</span>
29364 !! wikitext/edited
29365 {{DISPLAYTITLE:foo}}
29366 <span id="a">a</span>
29367 !! end
29368
29369 !! test
29370 1. DOMDiff: Changes to <ref> content should be looked up using id
29371 !! options
29372 parsoid={
29373 "modes": ["selser"],
29374 "changes": [
29375 ["#X", "after", "bar"],
29376 ["#Y", "after", "baz"]
29377 ]
29378 }
29379 !! wikitext
29380 X <ref><span id="X">foo</span></ref>
29381 Y <ref name="a" />
29382 <references>
29383 <ref name="a"><span id="Y">foo</span></ref>
29384 </references>
29385 !! wikitext/edited
29386 X <ref><span id="X">foo</span>bar</ref>
29387 Y <ref name="a" />
29388 <references>
29389 <ref name="a"><span id="Y">foo</span>baz</ref>
29390 </references>
29391 !! end
29392
29393 !! test
29394 2. DOMDiff: Changes to <ref> content should be looked up using id
29395 !! options
29396 parsoid={
29397 "modes": ["selser"],
29398 "changes": [
29399 ["#Z", "after", "bar"]
29400 ]
29401 }
29402 !! wikitext
29403 A <ref>foo bar for a</ref>
29404 B <ref group="X" name="b" />
29405
29406 <references />
29407
29408 <references group="X">
29409 <ref name="b"><span id="Z">foo</span></ref>
29410 </references>
29411 !! wikitext/edited
29412 A <ref>foo bar for a</ref>
29413 B <ref group="X" name="b" />
29414
29415 <references />
29416
29417 <references group="X">
29418 <ref name="b"><span id="Z">foo</span>bar</ref>
29419 </references>
29420 !! end
29421
29422 !! test
29423 DOMDiff: Edits to content nested in elements with templated attributes should not be lost (T139388)
29424 !! options
29425 parsoid={
29426 "modes": ["selser"],
29427 "changes": [
29428 [ "div:first-child", "text", "bar" ]
29429 ]
29430 }
29431 !! wikitext
29432 <div style="{{1x|color:red;}}%">foo</div>
29433 !! wikitext/edited
29434 <div style="{{1x|color:red;}}%">bar</div>
29435 !! end
29436
29437 !! test
29438 Empty LI (T49673)
29439 !! wikitext
29440 * a
29441 *
29442 *
29443 * b
29444 !! html/php+tidy
29445 <ul>
29446 <li>a</li>
29447 <li class="mw-empty-elt"></li>
29448 <li class="mw-empty-elt"></li>
29449 <li>b</li>
29450 </ul>
29451 !! end
29452
29453 !! test
29454 Thumbnail output
29455 !! wikitext
29456 [[File:Thumb.png|thumb]]
29457 !! html/php+tidy
29458 <div class="thumb tright">
29459 <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>
29460 <div class="thumbcaption">
29461 <div class="magnify"><a href="/wiki/File:Thumb.png" class="internal" title="Enlarge"></a></div>
29462 </div>
29463 </div>
29464 </div>
29465 !! end
29466
29467 !! test
29468 unclosed internal link XSS (T137264)
29469 !! wikitext
29470 [[#%3Cscript%3Ealert(1)%3C/script%3E|
29471 !! html/php
29472 <p>[[#&lt;script&gt;alert(1)&lt;/script&gt;|
29473 </p>
29474 !! html/parsoid
29475 <p>[[#%3Cscript%3Ealert(1)%3C/script%3E|</p>
29476 !! end
29477
29478 # Use $wgRawHtml to inject a <style> tag, since you normally can't in wikitext
29479 # (Parsoid doesn't support $wgRawHtml==true)
29480 !! test
29481 Validating that <style> isn't eaten by tidy (T167349)
29482 !! options
29483 wgRawHtml=1
29484 !! wikitext
29485 <div class="foo">
29486 <html><style>.foo::before { content: "<foo>"; }</style></html>
29487 <html><style data-mw-foobar="baz">.foo::after { content: "<bar>"; }</style></html>
29488 </div>
29489 !! html/php+tidy
29490 <div class="foo">
29491 <style>.foo::before { content: "<foo>"; }</style>
29492 <style data-mw-foobar="baz">.foo::after { content: "<bar>"; }</style>
29493 </div>
29494 !! end
29495
29496 !! test
29497 Decoding of HTML entities in headings and links for IDs and link fragments (T103714)
29498 !! wikitext
29499 == A&B&amp;C&amp;amp;D&amp;amp;amp;E ==
29500 [[#A&B&amp;C&amp;amp;D&amp;amp;amp;E]]
29501 !! html/php
29502 <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>
29503 <p><a href="#A.26B.26C.26amp.3BD.26amp.3Bamp.3BE">#A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E</a>
29504 </p>
29505 !! end
29506
29507 !! test
29508 Decoding of HTML entities in indicator names for IDs (T104196)
29509 !! options
29510 showindicators
29511 !! wikitext
29512 <indicator name="1&2&amp;3&amp;amp;4&amp;amp;amp;5">Indicator</indicator>
29513 !! html/php
29514 1&2&3&amp;4&amp;amp;5=Indicator
29515
29516 !! end
29517
29518 !! test
29519 HTML5 ids: fallback to legacy
29520 !! config
29521 wgFragmentMode=[ 'html5', 'legacy' ]
29522 !! wikitext
29523 == Foo bar ==
29524
29525 == foo Bar ==
29526
29527 == Тест ==
29528
29529 == Тест ==
29530
29531 == тест ==
29532
29533 == Hey < # " > % : ' ==
29534 [[#Foo bar]] [[#foo Bar]] [[#Тест]] [[#тест]] [[#Hey < # " > % : ']]
29535
29536 {{anchorencode:💩}} <span id="{{anchorencode:💩}}"></span>
29537
29538 <!-- These two links should produce identical HTML -->
29539 [[#啤酒]] [[#%E5%95%A4%E9%85%92]]
29540
29541 !! html/php
29542 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
29543 <ul>
29544 <li class="toclevel-1 tocsection-1"><a href="#Foo_bar"><span class="tocnumber">1</span> <span class="toctext">Foo bar</span></a></li>
29545 <li class="toclevel-1 tocsection-2"><a href="#foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext">foo Bar</span></a></li>
29546 <li class="toclevel-1 tocsection-3"><a href="#Тест"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
29547 <li class="toclevel-1 tocsection-4"><a href="#Тест_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
29548 <li class="toclevel-1 tocsection-5"><a href="#тест"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
29549 <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>
29550 </ul>
29551 </div>
29552
29553 <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>
29554 <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>
29555 <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>
29556 <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>
29557 <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>
29558 <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>
29559 <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>
29560 </p><p>💩 <span id="💩"></span>
29561 </p><p><a href="#啤酒">#啤酒</a> <a href="#啤酒">#啤酒</a>
29562 </p>
29563 !! end
29564
29565 !! test
29566 HTML5 ids: legacy with a fallback to modern
29567 !! config
29568 wgFragmentMode=[ 'legacy', 'html5' ]
29569 !! wikitext
29570 == Foo bar ==
29571
29572 == foo Bar ==
29573
29574 == Тест ==
29575
29576 == Тест ==
29577
29578 == тест ==
29579
29580 == Hey < # " > % : ' ==
29581 [[#Foo bar]] [[#foo Bar]] [[#Тест]] [[#тест]] [[#Hey < # " > % : ']]
29582
29583 {{anchorencode:💩}} <span id="{{anchorencode:💩}}"></span>
29584
29585 <!-- These two links should produce identical HTML -->
29586 [[#啤酒]] [[#%E5%95%A4%E9%85%92]]
29587
29588 !! html/php
29589 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
29590 <ul>
29591 <li class="toclevel-1 tocsection-1"><a href="#Foo_bar"><span class="tocnumber">1</span> <span class="toctext">Foo bar</span></a></li>
29592 <li class="toclevel-1 tocsection-2"><a href="#foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext">foo Bar</span></a></li>
29593 <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>
29594 <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>
29595 <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>
29596 <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>
29597 </ul>
29598 </div>
29599
29600 <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>
29601 <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>
29602 <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>
29603 <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>
29604 <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>
29605 <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>
29606 <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>
29607 </p><p>.F0.9F.92.A9 <span id=".F0.9F.92.A9"></span>
29608 </p><p><a href="#.E5.95.A4.E9.85.92">#啤酒</a> <a href="#.E5.95.A4.E9.85.92">#啤酒</a>
29609 </p>
29610 !! end
29611
29612 !! test
29613 HTML5 ids: no legacy
29614 !! config
29615 wgFragmentMode=[ 'html5' ]
29616 !! wikitext
29617 == Foo bar ==
29618
29619 == foo Bar ==
29620
29621 == Тест ==
29622
29623 == Тест ==
29624
29625 == тест ==
29626
29627 == Hey < # " > % : ' ==
29628 [[#Foo bar]] [[#foo Bar]] [[#Тест]] [[#тест]] [[#Hey < # " > % : ']]
29629
29630 {{anchorencode:💩}} <span id="{{anchorencode:💩}}"></span>
29631
29632 <!-- These two links should produce identical HTML -->
29633 [[#啤酒]] [[#%E5%95%A4%E9%85%92]]
29634
29635 !! html/php
29636 <div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
29637 <ul>
29638 <li class="toclevel-1 tocsection-1"><a href="#Foo_bar"><span class="tocnumber">1</span> <span class="toctext">Foo bar</span></a></li>
29639 <li class="toclevel-1 tocsection-2"><a href="#foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext">foo Bar</span></a></li>
29640 <li class="toclevel-1 tocsection-3"><a href="#Тест"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
29641 <li class="toclevel-1 tocsection-4"><a href="#Тест_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
29642 <li class="toclevel-1 tocsection-5"><a href="#тест"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
29643 <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>
29644 </ul>
29645 </div>
29646
29647 <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>
29648 <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>
29649 <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>
29650 <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>
29651 <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>
29652 <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>
29653 <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>
29654 </p><p>💩 <span id="💩"></span>
29655 </p><p><a href="#啤酒">#啤酒</a> <a href="#啤酒">#啤酒</a>
29656 </p>
29657 !! end
29658
29659 !! test
29660 T90902: Normalize weird characters in section IDs
29661 !! config
29662 wgFragmentMode=[ 'html5', 'legacy' ]
29663 !! wikitext
29664 == Foo&nbsp;bar ==
29665 [[#Foo&nbsp;bar]]
29666
29667 !! html/php
29668 <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>
29669 <p><a href="#Foo_bar">#Foo&#160;bar</a>
29670 </p>
29671 !! end