SECURITY: Handle -{}- syntax in attributes safely
[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>