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
5 # The syntax should be fairly self-explanatory.
7 # Currently supported test options:
8 # One of the following three:
10 # (default) generate HTML output
11 # pst apply pre-save transform
12 # msg apply message transform
14 # Plus any combination of these:
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)
37 # You can also set the following parser properties via test options:
38 # wgEnableUploads, wgAllowExternalImages, wgMaxTocLevel,
39 # wgLinkHolderBatchSize, wgRawHtml, wgInterwikiMagic,
42 # For testing purposes, temporary articles can created:
43 # !!article / NAMESPACE:TITLE / !!text / ARTICLE TEXT / !!endarticle
44 # where '/' denotes a newline.
46 # This is the standard article assumed to exist.
83 MediaWiki:bad image list
85 * [[File:Bad.jpg]] except [[Nasty page]]
112 // For Serbian; localize Template namespace
120 Template:echo_with_span
126 Template:echo_with_div
139 Template:table_attribs
142 |</noinclude>style="color:red;"|Foo
146 Template:table_attribs_2
149 |</noinclude>style="color:red;"|Foo
154 Template:table_attribs_3
157 |</noinclude>style{{=}}"background:#f9f9f9;"|Foo
161 Template:table_attribs_4
163 | style="background-color:#DC241f;" width="10px" |
167 Template:table_attribs_5
170 |</noinclude>style="color:red;"||Bar
174 Template:table_attribs_6
176 style="background: <nowiki>
183 Template:table_attribs_7
186 |</noinclude>style{{=}}"background:#f9f9f9;"|Foo<ref>foo</ref>
190 Template:table_header_cells
192 {{table_attribs}}!!style='color:red;'|''Bar''||style='color:brown;'|''Foo'' and Baz
198 {{table_attribs}}||style='color:red;'|''Bar''||style='color:brown;'|''Foo'' and Baz
202 Template:PartialTable
209 Template:image_attribs
212 [[File:foobar.jpg|</noinclude>right|Caption text<noinclude>]]</noinclude>
215 ## See T48811 for details
217 Template:mixed_attr_content_template
219 style="color:red;" title="T48811"
225 Template:definition_list
272 Template:EmptyTRWithHTMLAttrTest
275 <tr align="center"></tr>
276 <tr><td>foo</td></tr>
277 <tr align="center"></tr>
278 <tr><td>bar</td></tr>
285 <ref>{{CircularRef}}</ref>
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>
316 This is a simple paragraph.
318 <p>This is a simple paragraph.
323 Paragraphs with extra newline spacing
346 Paragraphs with newline spacing with comment lines in between
354 <!--foo--><!--More than 1 comment, still stripped-->
358 <!--foo--> <!----> <!-- bar -->
419 Paragraphs with newline spacing with non-empty white-space lines in between
446 Paragraphs with newline spacing with non-empty mixed comment and white-space lines in between
454 <!--foo--><!--More than 1 comment doesn't disable stripping of this line!-->
493 Extra newlines: More paragraphs with indented comment
508 Extra newlines followed by heading
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&action=edit&section=1" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
524 <p><a href="/index.php?title=A&action=edit&redlink=1" class="new" title="A (page does not exist)">a</a>
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&action=edit&section=2" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
532 Extra newlines between heading and content are swallowed
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&action=edit&section=1" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
541 <p><a href="/index.php?title=A&action=edit&redlink=1" class="new" title="A (page does not exist)">a</a>
546 Heading with line break in nowiki
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&action=edit&section=1" title="Edit section: A B C">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
557 <h2 id="A_B.0AC">A <span typeof="mw:Nowiki">B
564 http://fr.wikipedia.org/wiki/🍺
565 <!-- EasterEgg we love beer, better be able be able to link to it -->
567 <p><a rel="nofollow" class="external free" href="http://fr.wikipedia.org/wiki/🍺">http://fr.wikipedia.org/wiki/🍺</a>
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.)
585 <li> Item 2</li></ul>
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
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>
626 # this example taken from the [[simple:Moon]] article (T49326)
628 Italics and possessives (1)
630 obtained by ''[[Lunar Prospector]]'''s gamma-ray spectrometer
632 <p>obtained by <i><a href="/index.php?title=Lunar_Prospector&action=edit&redlink=1" class="new" title="Lunar Prospector (page does not exist)">Lunar Prospector</a>'</i>s gamma-ray spectrometer
636 # this example taken from [[en:Flaming Pie]] (T51926)
638 Italics and possessives (2)
640 '''''Flaming Pie''''' is ... released in 1997. In ''Flaming Pie'''s liner notes
642 <p><i><b>Flaming Pie</b></i> is ... released in 1997. In <i>Flaming Pie'</i>s liner notes
646 # this example taken from [[en:Dictionary]] (T51926)
648 Italics and possessives (3)
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''.
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&action=edit&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>.
658 ### 2-quote opening sequence tests
661 Italics and bold: 2-quote opening sequence: (2,2)
670 Italics and bold: 2-quote opening sequence: (2,3)
679 Italics and bold: 2-quote opening sequence: (2,4)
689 # same html as previous, but wikitext adjusted to match parsoid html2wt
691 Italics and bold: 2-quote opening sequence: (2,4) w/ nowiki
693 ''foo<nowiki>''</nowiki>''
699 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
701 Italics and bold: 2-quote opening sequence: (2,5)
714 # same html as previous, but wikitext adjusted to match parsoid html2wt
716 Italics and bold: 2-quote opening sequence: (2,5+3) w/ nowiki
718 ''foo'''''<nowiki/>'''
729 ### 3-quote opening sequence tests
733 Italics and bold: 3-quote opening sequence: (3,2)
742 Italics and bold: 3-quote opening sequence: (3,3)
751 Italics and bold: 3-quote opening sequence: (3,4)
759 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
761 Italics and bold: 3-quote opening sequence: (3,5)
774 # same html as previous, but wikitext adjusted to match parsoid html2wt
776 Italics and bold: 3-quote opening sequence: (3,5+2) w/ nowiki
778 '''foo'''''<nowiki/>''
789 ### 4-quote opening sequence tests
793 Italics and bold: 4-quote opening sequence: (4,2)
803 # same html as previous, but wikitext adjusted to match parsoid html2wt
805 Italics and bold: 4-quote opening sequence: (4,2) w/ nowiki
807 <nowiki>''</nowiki>''foo''
814 Italics and bold: 4-quote opening sequence: (4,3)
823 Italics and bold: 4-quote opening sequence: (4,4)
833 # same html as previous, but wikitext adjusted to match parsoid html2wt
835 Italics and bold: 4-quote opening sequence: (4,4) w/ nowiki
843 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
845 Italics and bold: 4-quote opening sequence: (4,5)
854 <p>'<b>foo</b><i></i>
858 # same html as previous, but wikitext adjusted to match parsoid html2wt
860 Italics and bold: 4-quote opening sequence: (4,5+2) w/ nowiki
862 '<nowiki/>'''foo'''''<nowiki/>''
867 <p>'<b>foo</b><i></i>
873 ### 5-quote opening sequence tests
877 Italics and bold: 5-quote opening sequence: (5,2)
887 # same html as previous, but wikitext adjusted to match parsoid html2wt
889 Italics and bold: 5-quote opening sequence: (5,2+3)
898 Italics and bold: 5-quote opening sequence: (5,3)
908 # same html as previous, but wikitext adjusted to match parsoid html2wt
910 Italics and bold: 5-quote opening sequence: (5,3+2)
919 Italics and bold: 5-quote opening sequence: (5,4)
925 <p><i><b>foo'</b></i>
930 Italics and bold: 5-quote opening sequence: (5,5)
939 Italics and bold: 5-quote opening sequence: (5,6)
943 <p><i><b>foo'</b></i>
948 ### multiple quote sequences in a line
952 Italics and bold: multiple quote sequences: (2,4,2)
958 <p><i>foo'<b>bar</b></i>
962 # same html as previous, but wikitext adjusted to match parsoid html2wt
964 Italics and bold: multiple quote sequences: (2,4,2+3) w/ nowiki
966 ''foo'<nowiki/>'''bar'''''
968 <p><i>foo'<b>bar</b></i>
973 Italics and bold: multiple quote sequences: (2,4,3)
979 <p><i>foo'<b>bar</b></i>
983 # same html as previous, but wikitext adjusted to match parsoid html2wt
985 Italics and bold: multiple quote sequences: (2,4,3+2) w/ nowiki
987 ''foo'<nowiki/>'''bar'''''
989 <p><i>foo'<b>bar</b></i>
994 Italics and bold: multiple quote sequences: (2,4,4)
1000 <p><i>foo'<b>bar'</b></i>
1004 # same html as previous, but wikitext adjusted to match parsoid html2wt
1006 Italics and bold: multiple quote sequences: (2,4,4+2) w/ nowiki
1008 ''foo'<nowiki/>'''bar'<nowiki/>'''''
1010 <p><i>foo'<b>bar'</b></i>
1014 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
1016 Italics and bold: multiple quote sequences: (3,4,2)
1025 <p><b>foo'</b>bar<i></i>
1029 # same html as previous, but wikitext adjusted to match parsoid html2wt
1031 Italics and bold: multiple quote sequences: (3,4,2+2) w/ nowiki
1033 '''foo''''bar''<nowiki/>''
1038 <p><b>foo'</b>bar<i></i>
1042 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
1044 Italics and bold: multiple quote sequences: (3,4,3)
1053 <p><b>foo'</b>bar<b></b>
1057 # same html as previous, but wikitext adjusted to match parsoid html2wt
1059 Italics and bold: multiple quote sequences: (3,4,3+3) w/ nowiki
1061 '''foo''''bar'''<nowiki/>'''
1066 <p><b>foo'</b>bar<b></b>
1071 ### other quote tests
1074 Italics and bold: other quote tests: (2,3,5)
1076 ''this is about '''foo's family'''''
1078 <p><i>this is about <b>foo's family</b></i>
1084 Italics and bold: other quote tests: (2,(3,3),2)
1086 ''this is about '''foo's''' family''
1088 <p><i>this is about <b>foo's</b> family</i>
1094 Italics and bold: other quote tests: (3,2,3,2)
1098 '''this is about ''foo'''s family''
1100 <p><b>this is about <i>foo</i></b><i>s family</i>
1105 # same html as previous, but wikitext adjusted to match parsoid html2wt
1107 Italics and bold: other quote tests: (3,2,3+2+2,2)
1109 '''this is about ''foo'''''<nowiki/>''s family''
1111 <p><b>this is about <i>foo</i></b><i>s family</i>
1117 Italics and bold: other quote tests: (3,2,3,3)
1119 '''this is about ''foo'''s family'''
1121 <p>'<i>this is about </i>foo<b>s family</b>
1127 Italics and bold: other quote tests: (3,(2,2),3)
1129 '''this is about ''foo's'' family'''
1131 <p><b>this is about <i>foo's</i> family</b>
1137 Italicized possessive
1139 The ''[[Main Page]]'''s talk page.
1141 <p>The <i><a href="/wiki/Main_Page" title="Main Page">Main Page</a>'</i>s talk page.
1144 <p>The <i><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a>'</i>s talk page.</p>
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)
1151 parsoid=wt2html,wt2wt
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>
1178 Non-html5 tags should be accepted
1180 <center>''foo''</center>
1182 <font>''foo''</font>
1183 <strike>''foo''</strike>
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>
1195 <wbr> is valid wikitext (T54468)
1203 # <strike> is HTML4, <s> is HTML4/5.
1205 <s> or <strike> for strikethrough
1207 <strike>strike</strike>
1211 <p><strike>strike</strike>
1219 Text-level semantic html elements in wikitext
1222 <strong>text</strong>
1238 <ruby><rb>明日</rb><rp>(</rp><rt>Ashita</rt><rp> </rp><rtc>あした</rtc><rp>)</rp></ruby>
1245 <strong>text</strong>
1261 <ruby><rb>明日</rb><rp>(</rp><rt>Ashita</rt><rp> </rp><rtc>あした</rtc><rp>)</rp></ruby>
1269 # test cases taken from
1270 # https://www.w3.org/TR/html5/text-level-semantics.html#the-ruby-element
1272 Ruby markup (W3C-style)
1274 ; Mono-ruby for individual base characters
1275 : <ruby>日<rt>に</rt>本<rt>ほん</rt>語<rt>ご</rt></ruby>
1277 : <ruby>今日<rt>きょう</rt></ruby>
1279 : <ruby>法<rb>華</rb><rb>経</rb><rt>ほ</rt><rt>け</rt><rt>きょう</rt></ruby>
1281 : <ruby>東<rb>京</rb><rp>(</rp><rt>とう</rt><rt>きょう</rt><rp>)</rp></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>
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>
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>
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>
1308 # The next two test different paths in the sanitizer.
1310 Non-word characters don't terminate tag names (T19663, T42670, T54022)
1312 <blockquote|>a</blockquote>
1314 <b→> doesn't terminate </b→>
1316 <bä> doesn't terminate </bä>
1318 <boo> doesn't terminate </boo>
1320 <s.foo> doesn't terminate </s.foo>
1324 <p><blockquote|>a</blockquote>
1325 </p><p><b→> doesn't terminate </b→>
1326 </p><p><bä> doesn't terminate </bä>
1327 </p><p><boo> doesn't terminate </boo>
1328 </p><p><s.foo> doesn't terminate </s.foo>
1329 </p><p><sub-ID#1>
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.
1337 Non-word characters don't terminate tag names + tidy
1339 <blockquote|>a</blockquote>
1341 <b→> doesn't terminate </b→>
1343 <bä> doesn't terminate </bä>
1345 <boo> doesn't terminate </boo>
1347 <s.foo> doesn't terminate </s.foo>
1351 <p><blockquote|>a</p>
1352 <p><b→> doesn't terminate </b→></p>
1353 <p><bä> doesn't terminate </bä></p>
1354 <p><boo> doesn't terminate </boo></p>
1355 <p><s.foo> doesn't terminate </s.foo></p>
1356 <p><sub-ID#1></p>
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.
1366 Non-word characters are valid in extension tags (T19663)
1377 <pre typeof="mw:Extension/tåg" data-mw='{"name":"tåg","attrs":{},"body":{"extsrc":"tåg"}}' data-parsoid='{}' about="#mwt2"></pre>
1381 Isolated close tags should be treated as literal text (T54760)
1389 <p><s.foo>s</p>
1391 <p><s.foo>s</p>
1395 ### Special characters
1399 Bare pipe character (T54363)
1408 Bare pipe character from a template (T54363)
1417 ### <nowiki> test cases
1421 <nowiki> unordered list
1423 <nowiki>* This is not an unordered list item.</nowiki>
1425 <p>* This is not an unordered list item.
1428 <p><span typeof="mw:Nowiki">* This is not an unordered list item.</span></p>
1434 <nowiki>Lorem ipsum dolor
1442 <p>Lorem ipsum dolor
1451 <p><span typeof="mw:Nowiki">Lorem ipsum dolor
1461 Don't parse <nowiki><span class="error"></nowiki> (T149622)
1463 <nowiki><span class="error"></nowiki>
1465 <p><span class="error">
1468 <p><span typeof="mw:Nowiki"><span class="error"></span></p>
1474 :There is not nowiki.
1475 :There is <nowiki>nowiki</nowiki>.
1477 #There is not nowiki.
1478 #There is <nowiki>nowiki</nowiki>.
1480 *There is not nowiki.
1481 *There is <nowiki>nowiki</nowiki>.
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>
1491 <dl><dd data-parsoid='{}'>There is not nowiki.</dd>
1492 <dd data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</dd></dl>
1494 <ol><li data-parsoid='{}'>There is not nowiki.</li>
1495 <li data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</li></ol>
1497 <ul><li data-parsoid='{}'>There is not nowiki.</li>
1498 <li data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</li></ul>
1502 Entities inside <nowiki>
1504 <nowiki><</nowiki>
1509 <p><span typeof="mw:Nowiki"><span typeof="mw:Entity" data-parsoid='{"src":"&lt;","srcContent":"<"}'><</span></span></p>
1513 Entities inside template parameters
1519 <p><span typeof="mw:Transclusion mw:Entity" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&ndash;"}},"i":0}}]}'>–</span></p>
1523 Properly escape nowiki when combined with other wiki markup
1527 <p>* </nowiki> tag</p>
1529 <nowiki>*</nowiki> <nowiki></nowiki></nowiki> tag
1533 T93824: Put escaped HTML tags inside nowiki
1537 <p><h2>foo</h2></p>
1539 <nowiki><h2>foo</h2></nowiki>
1543 T71950: 1. Put nowiki as close to cause as possible, even with non-quote escapable chars
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>
1551 This text: L'[[Foo]]
1552 This text: L<nowiki>''</nowiki>[[Foo]]
1553 This text: L<nowiki>'''</nowiki>[[Foo]]<nowiki>''</nowiki>
1556 # This test fails because wikitext whitespace is not normalized before comparing.
1558 T71950: 2. Put nowiki as close to cause as possible, after ' :'
1562 <p>This text : L''<a rel="mw:WikiLink" href="./Foo">Foo</a>
1565 This text : L<nowiki>''</nowiki>[[Foo]]
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.
1571 T71482: Use {{!}} instead of nowiki for single pipe in template argument
1575 <p><span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo|bar"}},"i":0}}]}" about="#mwt1"></span>
1576 <span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo|bar |[["}},"i":0}}]}" about="#mwt2"></p>
1578 {{echo|foo{{!}}bar}}
1579 {{echo|<nowiki>foo|bar |[[</nowiki>}}
1583 T53961: Output correct nowikis in template arguments
1587 <p><span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a [ b"}},"i":0}}]}" about="#mwt1"></span>
1588 <span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a }} b"}},"i":0}}]}" about="#mwt2"></span>
1589 <span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a [[ b"}},"i":0}}]}" about="#mwt3"></span>
1590 <span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a | {{ ]]"}},"i":0}}]}" about="#mwt4"></span>
1591 <span typeof="mw:Transclusion" data-mw="{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a }"}},"i":0}}]}" about="#mwt5"></span></p>
1594 {{echo|<nowiki>a }} b</nowiki>}}
1595 {{echo|<nowiki>a [[ b</nowiki>}}
1596 {{echo|<nowiki>a | {{ ]]</nowiki>}}
1597 {{echo|a <nowiki>}</nowiki>}}
1601 Cases where "!!" needs nowiki protection
1606 <tr><th>this needs protection !! here</th></tr>
1610 <tr><th>this does not need
1611 protection !! here</th></tr>
1615 !<nowiki>this needs protection !! here</nowiki>
1628 Comments and Indent-Pre
1630 <!-- comment 1 --> asdf
1632 <!-- comment 1 --> asdf
1635 <!-- comment 1 --> asdf
1636 <!-- comment 2 -->xyz
1638 <!-- comment 1 --> asdf
1639 <!-- comment 2 --> xyz
1695 asdf<!-- comment 1 -->jkl
1705 <!-- foo --> b <!-- bar -->
1719 <!-- returns a single newline, not nothing, since the newline after > is not stripped -->
1725 Comment semantics and delimiters
1727 <!-- --><!----><!-----><!------>
1731 <!-- --><!----><!-----><!------>
1735 Comment semantics and delimiters, redux
1737 <!-- In SGML every "foo" here would actually show up in the text -- foo -- bar
1738 -- foo -- funky huh? ... -->
1742 <!-- In SGML every "foo" here would actually show up in the text -- foo -- bar
1743 -- foo -- funky huh? ... -->
1747 Comment semantics and delimiters: directors cut
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
1757 <!-- ... However we like to keep things simple and somewhat XML-ish so we eat
1758 everything starting with < followed by !-- until the first -- and > we see,
1759 that wouldn't be valid XML however, since in XML -- has to terminate a comment
1764 Comment semantics: nesting
1766 <!--<!-- no, we're not going to do anything fancy here -->-->
1771 <!--<!-- no, we're not going to do anything fancy here --><p>--></p>
1774 # Parsoid closes the unclosed comment, even if it means a slight
1777 Comment semantics: unclosed comment at end
1779 parsoid=wt2html,html2html
1781 <!--This comment will run out to the end of the document
1785 <!--This comment will run out to the end of the document-->
1789 Comment semantics: normalize comments to play nice with XML and browsers
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.
1798 <p>But this is not a comment.
1801 <!-- Browsers --!> think this is closed -->
1802 <!--> This would normally be text -->
1803 <!---> As would this -->
1804 <!-- XML doesn't like trailing dashes -------->
1805 <!-- Nor doubled hyphens -- anywhere in the data -->
1806 <p>But this is not a comment.</p>
1810 Comment semantics: round-trip even text which contains encoded -->
1812 <!-- hello & goodbye - > --> --&gt; --&xx -->
1814 <!-- hello & goodbye - > --> --&gt; --&xx -->
1818 Comment in template title
1827 Comment on its own line post-expand
1839 Comment on its own line post-expand with non-significant whitespace
1851 Multiple comments should still parse as SOL-transparent
1853 parsoid=wt2html,wt2wt
1856 <!--c2--><!--c3--><!--c4-->*b
1865 <!--c2--><!--c3--><!--c4-->
1871 ## Make sure ">" gets escaped in comments to avoid XSS
1873 IE conditional comments
1876 <script>alert('hi');</script>
1879 <!--[if lt IE 9]>
1880 <script>alert('hi');</script>
1885 ### paragraph wrapping tests
1900 Block tag on one line (<div>)
1916 No p-wrappable content
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>
1922 <div><span>x</span></div>
1923 <div><span><s>x</s></span></div>
1924 <div><span><s>x</s></span></div>
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>
1931 # T177612: Parsoid-only test
1933 Transclusion meta tags shouldn't trip Parsoid's useless p-wrapper stripping code
1935 {{echo|<span><div>x</div></span>}}
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":"<span><div>x</div></span>"}},"i":0}}]}'><div>x</div></span>
1943 Block tag on one line (<blockquote>)
1945 a <blockquote>foo</blockquote>
1949 a <blockquote>foo</blockquote>
1961 Block tag on both lines (<div>)
1978 Block tag on both lines (<blockquote>)
1980 a <blockquote>foo</blockquote>
1982 b <blockquote>foo</blockquote>
1984 a <blockquote>foo</blockquote>
1985 b <blockquote>foo</blockquote>
1999 Multiple lines without block tags
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
2029 Empty lines between lines with block tags
2067 <div data-parsoid='{"stx":"html"}'></div>
2070 <div data-parsoid='{"stx":"html"}'></div><p>a</p>
2073 <div data-parsoid='{"stx":"html"}'>a</div><p>b</p>
2075 <div data-parsoid='{"stx":"html"}'>b</div><p>d</p>
2078 <div data-parsoid='{"stx":"html"}'>e</div>
2081 ## PHP parser emits output which is broken
2083 Unclosed HTML p-tags should be handled properly
2096 <div data-parsoid='{"stx":"html"}'><p data-parsoid='{"stx":"html", "autoInsertedEnd":true}'>foo</p></div>
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
2105 1. P-wrapping should leave sol-transparent tags outside p-tags where possible
2109 a [[Category:A1]] [[Category:A2]]
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"/>
2118 2. P-wrapping should leave sol-transparent tags outside p-tags where possible
2124 <link rel="mw:PageProp/Category" href="./Category:A1"/><p>a</p>
2128 ### Preformatted text
2137 And a [[Main Page|link]]
2143 And a <a href="/wiki/Main_Page" title="Main Page">link</a>
2148 Tabs don't trigger preformatted text
2152 This is preformatted text.
2158 <pre>This is preformatted text.
2163 preformatted text.</p>
2164 <pre>This is preformatted text.
2169 Space before tab needs nowiki pre protection
2175 <nowiki> </nowiki> a
2179 Ident preformatting with inline content
2190 <pre> with <nowiki> inside (compatibility with 1.6 and earlier)
2207 Regression with preformatted in <center>
2221 T54763: Preformatted in <blockquote>
2227 indented cell (no pre-wrapping!)
2237 <p> indented cell (no pre-wrapping!)
2245 T53086: Double newlines in blockquotes should be turned into paragraphs
2262 T17491: <ins>/<del> in blockquote
2265 Foo <del>bar</del> <ins>baz</ins> quux
2269 <p>Foo <del>bar</del> <ins>baz</ins> quux
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)
2279 T17491: <ins>/<del> in blockquote (2)
2281 <blockquote>Foo <del>bar</del> <ins>baz</ins> quux
2284 <blockquote>Foo <del>bar</del> <ins>baz</ins> quux
2290 <del>bar</del> <ins>baz</ins> quux</blockquote>
2294 <pre> with attributes (T5202)
2296 <pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>
2298 <pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>
2303 <pre> with width attribute (T5202)
2305 <pre width="8">Narrow screen goodies</pre>
2307 <pre width="8">Narrow screen goodies</pre>
2312 <pre> with forbidden attribute (T5202)
2314 <pre width="8" onmouseover="alert(document.cookie)">Narrow screen goodies</pre>
2316 <pre width="8">Narrow screen goodies</pre>
2321 Entities inside <pre>
2330 <pre> with forbidden attribute values (T5202)
2332 <pre width="8" style="border-width: expression(alert(document.cookie))">Narrow screen goodies</pre>
2334 <pre width="8" style="/* insecure input */">Narrow screen goodies</pre>
2339 <nowiki> inside <pre> (T15238)
2347 <pre><nowiki><nowiki></nowiki>Foo<nowiki></nowiki></nowiki></pre>
2355 <pre><nowiki>Foo</nowiki></pre>
2360 <nowiki> inside of #tag:pre
2362 {{#tag:pre|Foo <nowiki>→bar</nowiki>}}
2364 <pre>Foo →bar</pre>
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 <nowiki>&rarr;bar</nowiki>"}},"i":0}}]}'>Foo <span typeof="mw:Entity">→</span>bar</pre>
2370 ## Don't expect this to rt, Parsoid drops the unmatched closing pre tags that
2371 ## aren't enclosed in nowikis.
2373 <nowiki> and <pre> preference (first one wins)
2404 <pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n<nowiki>\n"}}'><nowiki>
2409 <p><span typeof="mw:Nowiki">
2417 </pre> inside nowiki
2419 <nowiki></pre></nowiki>
2425 # Parsoid doesn't strip empty tags, like Tidy does.
2427 Empty pre; pre inside other HTML tags (T56946)
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
2454 <pre typeof="mw:Extension/pre" about="#mwt4" data-parsoid='{"stx":"html"}' data-mw='{"name":"pre","attrs":{},"body":{"extsrc":""}}'></pre>
2458 HTML pre followed by indent-pre
2468 # Note that tidy removes the empty <p> tags from the start and end.
2469 # Parsoid does not, by design.
2473 <p><pre>foo</pre></p>
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>
2483 Templates: Indent-Pre: 1a. Templates that break a line should suppress <pre>
2491 Templates: Indent-Pre: 1b. Templates that break a line should suppress <pre>
2501 Templates: Indent-Pre: 1c: Wrapping should be based on expanded content
2513 Templates: Indent-Pre: 1d: Wrapping should be based on expanded content
2534 Templates: Indent-Pre: 1e. Wrapping should be based on expanded content
2538 {{echo| foo}}{{echo| bar}}
2543 {{echo|<!--cmt--> foo}}
2545 <!--cmt-->{{echo| foo}}
2547 {{echo|{{echo| }}bar}}
2565 Templates: Indent-Pre: 1f: Wrapping should be based on expanded content
2601 ## Hmm, should Parsoid rt this?
2603 Pres with newline attributes
2605 parsoid=wt2html,html2html
2610 <pre class="one two">hi</pre>
2613 <pre typeof="mw:Extension/pre" about="#mwt2" class="one two" data-mw='{"name":"pre","attrs":{"class":"one two"},"body":{"extsrc":"hi"}}'>hi</pre>
2617 Things that look like <pre> tags aren't treated as such
2619 Barack Obama <President> of the United States
2620 <President></President>
2622 <p>Barack Obama <President> of the United States
2623 <President></President>
2628 Handle broken pre-like tags (T66025)
2632 {{echo|<pre <pre>x</pre>}}
2634 <table><pre </table>
2637 <table><pre </table>
2645 <pre about="#mwt1" typeof="mw:Transclusion mw:Extension/pre" data-parsoid='{"a":{"<pre":null},"sa":{"<pre":""},"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<pre <pre>x</pre>"}},"i":0}}]}'>x</pre>
2654 Parsoid: handle pre with space after attribute
2658 <pre style="width:50%;" >{{echo|foo}}</pre>
2660 <pre style="width:50%;">{{echo|foo}}</pre>
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>
2666 # TODO / maybe: fix wt2wt for this
2668 Parsoid: Don't paragraph-wrap fosterable content
2694 Parsoid: Don't paragraph-wrap fosterable content even if table syntax is unbalanced
2722 #--------------------------------------------------------------------
2723 # Transclusion parameter whitespace stripping tests
2724 # Behavior is different for positional and named parameters
2725 #--------------------------------------------------------------------
2727 Templates: Strip leading and trailing whitespace from named-param values
2731 {{echo|1= {{echo|b}} }}
2744 <ul><li> d</li></ul>
2749 Templates: Don't strip whitespace from positional-param values
2753 {{echo|{{echo|b}} }}
2785 <ul><li> f</li></ul>
2793 Templates: Don't recognize targets split by newlines
2809 Templates: Recognize targets when newlines and comments don't split the target
2814 <!--X--> ech<!--X-->o<!--X-->
2822 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"ech<!--X-->o<!--X--> \n <!--X--> <!--X-->\n\n ","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
2826 Templates: Handle empty comment-and-ws-only lines correctly
2829 <!--should be ignored-->
2830 <!--should be ignored as well-->
2837 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo\n<!--should be ignored-->\n <!--should be ignored as well-->\nbar"}},"i":0}}]}'>foo <!--should be ignored--> <!--should be ignored as well--> bar</p>
2841 Templates: Handle comments in the target
2844 <!-- should be ignored -->
2848 <!-- should be ignored and spaces on next line should not trip us up (T147742) -->
2851 {{echo<!-- should be ignored -->
2854 {{echo<!-- should be ignored -->|foo}}
2856 {{<!-- should be ignored -->echo|foo}}
2865 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo\n<!-- should be ignored -->\n","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
2867 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo\n<!-- 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>
2869 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo<!-- should be ignored -->\n","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
2871 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo<!-- should be ignored -->","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
2873 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
2877 Templates: Handle comments in parameter names (T69657)
2880 <!-- should be ignored -->
2884 <!-- should be ignored -->
2887 {{echo|1<!-- should be ignored -->=foo}}
2889 {{echo|<!-- should be ignored -->1=foo}}
2897 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"1\n<!-- should be ignored -->"}}},"i":0}}]}'>foo</p>
2899 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"<!-- should be ignored -->\n1"}}},"i":0}}]}'>foo</p>
2901 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"1<!-- should be ignored -->"}}},"i":0}}]}'>foo</p>
2903 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"<!-- should be ignored -->1"}}},"i":0}}]}'>foo</p>
2907 Templates: Other wikitext in parameter names (T69657)
2914 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"''1''":{"wt":"foo"}},"i":0}}]}'>{{{1}}}</p>
2918 Templates: With colons
2922 <p>Template with colon
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>
2928 #--------------------------------------------------------------------
2929 # Transclusion parameter escaping tests
2930 #--------------------------------------------------------------------
2933 Templates: Parsoid parameter escaping test 1
2935 {{echo|[foo]|{{echo|[bar]}}}}
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>
2944 Parsoid: Pipes in external links in template parameter
2946 {{echo|[{{echo|http://example.com}} link]}}
2948 <p><a rel="nofollow" class="external text" href="http://example.com">link</a></p>
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>
2954 Parsoid: pipe in transclusion parameter
2956 {{echo|http://foo.com/a|b}}
2958 <p><a rel="nofollow" class="external free" href="http://foo.com/a%7Cb">http://foo.com/a%7Cb</a></p>
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&#124;b"}},"i":0}}]}'>http://foo.com/a%7Cb</a></p>
2966 Parsoid: Pipe in external link target and content in template parameter
2968 parsoid=html2wt,wt2wt
2970 {{echo|[http://foo.com/a|b a|b]}}
2972 <p><a rel="nofollow" class="external text" href="http://foo.com/a%7Cb">a|b</a></p>
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>
2981 Parsoid: Pipe in template with nested template in external link target in template parameter (seriously)
2985 {{echo|[{{fullurl:{{FULLPAGENAME}}|action=edit}} bar]}}
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>
2991 Templates: Don't escape already nowiki-escaped text in template parameters
2993 parsoid=html2wt,wt2wt
2995 {{echo|foo<nowiki>|</nowiki>bar}}
2996 {{echo|<nowiki><div></nowiki>}}
2997 {{echo|<nowiki></nowiki>}}
2999 <p>foo|bar <div></p>
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>&lt;div&gt;</nowiki>"}},"i":0}}]}'><span typeof="mw:Entity"><</span>div<span typeof="mw:Entity">></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>
3009 Templates: '=' char in nested transclusions should not trigger nowiki escapes or conversion to named param
3011 parsoid=html2wt,wt2wt
3013 {{echo|{{echo|1=bar}}}}
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>
3022 Templates parameters with special tokenizing behavior dont get modified because of arg escaping
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>
3033 Templates: Preserve blank parameter names
3039 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"":{"wt":"foo"}},"i":0}}]}'>{{{1}}}</p>
3043 Templates: Preserve blank parameter names in other positions
3045 {{blank_param|bar|=foo}}
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
3054 ### Parsoid-centric tests for testing RT edge cases for pre
3058 1a. Indent-Pre and Comments
3071 1b. Indent-Pre and Comments
3084 1c. Indent-Pre and Comments
3097 1d. Indent-Pre and Comments
3098 (Pre-handler currently cannot distinguish between comment/ws order and normalizes them to [comment,ws] order)
3111 2a. Indent-Pre and tables
3132 2b. Indent-Pre and tables
3148 2c. Indent-Pre and tables (T44252)
3165 2d. Indent-Pre and tables
3182 <tbody><tr><td> b</td></tr>
3187 2e. Indent-Pre and table-line syntax
3200 2f. Indent-pre started by table-line syntax
3219 2g. Indented table markup mixed with indented pre content (proposed in T8200)
3224 Text that should be rendered preformatted
3232 <pre>Text that should be rendered preformatted
3241 3a. Indent-Pre and block tags (single-line html)
3245 c <blockquote> foo </blockquote>
3250 c <blockquote> foo </blockquote>
3251 <pre><span> foo </span>
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>
3274 3b. Indent-Pre and block tags (multi-line html)
3279 <pre>a <span>foo</span>
3284 <pre>a <span data-parsoid='{"stx":"html"}'>foo</span></pre>
3285 b <div data-parsoid='{"stx":"html"}'> foo </div>
3295 3c. Indent-Pre and block tags (pre-content on separate line)
3359 4. Indent-Pre and extension tags
3370 a <pre typeof="mw:Extension/tag" about="#mwt2" data-parsoid='{}' data-mw='{"name":"tag","attrs":{},"body":null}'></pre>
3374 5. Indent-Pre and html pre
3376 <pre class="123">hi</pre>
3378 <pre class="123">hi</pre>
3381 <pre typeof="mw:Extension/pre" about="#mwt2" class="123" data-mw='{"name":"pre","attrs":{"class":"123"},"body":{"extsrc":"hi"}}'>hi</pre>
3385 Render paragraphs when indent-pre is suppressed in blocklevels
3402 4. Multiple spaces at start-of-line
3420 ## NOTE: the leading white-space chars on empty line are significant
3422 5a. White-space in indent-pre
3434 ## NOTE: the leading white-space chars on empty line are significant
3436 5b. White-space in indent-pre
3455 5c. White-space in indent-pre
3468 6. Pre-blocks should extend across lines with leading WS even when there is no wrappable content
3491 7a. Indent-pre and category links
3493 parsoid=wt2html,wt2wt
3495 [[Category:foo]] <!-- No pre-wrapping -->
3496 {{echo| [[Category:foo]]}} <!-- No pre-wrapping -->
3499 <link rel="mw:PageProp/Category" href="./Category:Foo"> <!-- No pre-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-wrapping -->
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.
3508 7b. Indent-pre and category links
3513 [[Category:foo]] {{echo|b}}
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>
3520 Indent-Pre: Newlines in comments shouldn't affect sol state
3534 ### HTML-pre (some to spec PHP parser behavior and some Parsoid-RT-centric)
3538 HTML-pre: 1. embedded newlines
3573 <pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"foo"}}'>foo</pre>
3575 <pre typeof="mw:Extension/pre" about="#mwt4" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\nfoo\n"}}'>foo
3578 <pre typeof="mw:Extension/pre" about="#mwt6" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n\nfoo\n"}}'>
3583 <pre typeof="mw:Extension/pre" about="#mwt8" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n\n\nfoo\n"}}'>
3591 HTML-pre: big spaces
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"}}'>
3646 HTML-pre: 2: indented text
3659 HTML-pre: 3: other wikitext
3678 <pre typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"\n* foo\n# bar\n= no-h =\n'' no-italic ''\n[[ NoLink ]]\n"}}'>* foo
3687 ### Definition lists
3694 <dl><dt> name </dt>
3695 <dd> Definition</dd></dl>
3700 Definition list for indentation only
3704 <dl><dd> Indented text</dd></dl>
3709 Definition list with no space
3714 <dd>Definition</dd></dl>
3719 Definition list with URL link
3721 ; http://example.com/ : definition
3723 <dl><dt> <a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a> </dt>
3724 <dd> definition</dd></dl>
3729 Definition list with bracketed URL link
3731 ;[http://www.example.com/ Example]:Something about it
3733 <dl><dt><a rel="nofollow" class="external text" href="http://www.example.com/">Example</a></dt>
3734 <dd>Something about it</dd></dl>
3739 Definition list with wikilink containing colon
3741 ; [[Help:FAQ]]: The least-read page on Wikipedia
3743 <dl><dt> <a href="/index.php?title=Help:FAQ&action=edit&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>
3748 # At Brion's and JeLuF's insistence... :)
3750 Definition list with news link containing colon
3752 ; news:alt.wikipedia.rox: This isn't even a real newsgroup!
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>
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>
3762 Malformed definition list with colon
3764 ; news:alt.wikipedia.rox -- don't crash or enter an infinite loop
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>
3771 Definition lists: colon in external link text
3773 ; [http://www.wikipedia2.org/ Wikipedia : The Next Generation]: OK, I made that up
3775 <dl><dt> <a rel="nofollow" class="external text" href="http://www.wikipedia2.org/">Wikipedia : The Next Generation</a></dt>
3776 <dd> OK, I made that up</dd></dl>
3781 Definition lists: colon in HTML attribute
3783 ;<b style="display: inline">bold</b>
3785 <dl><dt><b style="display: inline">bold</b></dt></dl>
3790 Definition lists: self-closed tag
3792 ;one<br/>two : two-line fun
3794 <dl><dt>one<br />two </dt>
3795 <dd> two-line fun</dd></dl>
3800 Definition lists: ignore colons inside tags
3802 ;one <b>two : tag <i>fun:</i>:</b>: def
3804 <dl><dt>one <b>two : tag <i>fun:</i>:</b></dt>
3810 Definition lists: excess closed tags
3812 ;one</b>two : bad tag fun
3815 <dt>onetwo </dt>
3816 <dd>bad tag fun</dd>
3821 <dd>bad tag fun</dd>
3826 T13748: Literal closing tags
3830 <dd>test test test test test</dd>
3832 <dd>test test test test test</dd>
3837 <dd>test test test test test</dd>
3839 <dd>test test test test test</dd>
3845 Definition and unordered list using wiki syntax nested in unordered list using html tags.
3848 ; term : description
3853 <dl><dt> term </dt>
3854 <dd> description</dd></dl>
3855 <ul><li> unordered</li></ul>
3861 Definition list with empty definition and following paragraph
3873 Nested definition lists using html syntax
3886 Definition Lists: No nesting: Multiple dd's
3899 Definition Lists: Indentation: Regular
3907 <dl><dd>i3</dd></dl></dd></dl></dd></dl>
3912 Definition Lists: Indentation: Missing 1st level
3918 <dl><dd>i3</dd></dl></dd></dl></dd></dl>
3923 Definition Lists: Indentation: Multi-level indent
3927 <dl><dd><dl><dd><dl><dd>i3</dd></dl></dd></dl></dd></dl>
3932 Definition Lists: Hacky use to indent tables
3939 should be left alone
3941 <dl><dd><dl><dd><table>
3946 </td></tr></table></dd></dl></dd></dl>
3948 should be left alone
3953 Definition Lists: Hacky use to indent tables, with comments (T65979)
3961 should be left alone
3964 <dl><dd><dl><dd><table><tr>
3967 </tr></table><!-- bar --></dd></dl></dd></dl>
3969 should be left alone</p>
3973 Definition Lists: Hacky use to indent tables, with comment before table
3979 <dl><dd><dl><dd><!-- foo --><table><tr>
3981 </tr></table></dd></dl></dd></dl>
3984 # The trailing whitespace in this test is to catch a regression in
3985 # Parsoid after T54473.
3987 Definition Lists: Hacky use to indent tables (WS-insensitive)
3996 </td></tr></table></dd></dl>
4000 <tbody><tr><td>a</td></tr>
4001 </tbody></table> </dd></dl>
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
4010 ## Ex: ";;t2 ::d2" is transformed into:
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:
4034 ## All Parsoid only definition list tests have this difference.
4036 ## See also: https://phabricator.wikimedia.org/T8569
4037 ## and https://lists.wikimedia.org/pipermail/wikitext-l/2011-November/000483.html
4040 Table / list interaction: indented table with lists in table contents
4055 <ul><li> b</li></ul>
4059 <ul><li> d</li></ul>
4060 </td></tr></table></dd></dl>
4065 Table / list interaction: lists nested in tables nested in indented lists
4088 </td></tr></table></dd></dl>
4095 Definition Lists: Nesting: Multi-level (Parsoid only)
4125 Definition Lists: Nesting: Test 2 (Parsoid only)
4152 Definition Lists: Nesting: Test 3 (Parsoid only)
4195 Definition Lists: Nesting: Test 4
4200 <dl><dd><dl><dd><dl><dt>t3</dt>
4201 <dd>d3</dd></dl></dd></dl></dd></dl>
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!)
4213 Definition Lists: Mixed Lists: Test 1
4219 <dl><dd><dl><dt><ul><li> foo</li>
4220 <li> bar</li></ul></dt>&l