C. Scott Ananian has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/355265 )
Change subject: Sync parserTests with core ...................................................................... Sync parserTests with core Lots of new tests added to the blacklist from core commit 186a182a150f20475f0887cbc261d9be01dbfd98, which will be fixed by the LanguageConverter support in Parsoid patch https://gerrit.wikimedia.org/r/140235 One other change was made, to a Santizier test, in core commit 33e4ac5b220b0edbef6774b3d961a3313fbf76e9. Parsoid never had the bug which is being fixed there (<link> confused with <li>). Change-Id: I5c61781149bb8e598ccd7b6664f63cc42a346a8c --- M tests/parserTests-blacklist.js M tests/parserTests.json M tests/parserTests.txt 3 files changed, 447 insertions(+), 7 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid refs/changes/65/355265/1 diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js index e595334..6887613 100644 --- a/tests/parserTests-blacklist.js +++ b/tests/parserTests-blacklist.js @@ -115,6 +115,14 @@ add("wt2html", "T8563: Section extraction for section suppressed by <includeonly>", "<meta typeof=\"mw:Includes/IncludeOnly\" data-parsoid='{\"src\":\"<includeonly>\\n==Includeonly section==\\n</includeonly>\",\"dsr\":[0,52,null,null]}'/><meta typeof=\"mw:Includes/IncludeOnly/End\" data-parsoid='{\"src\":\"\",\"dsr\":[52,52,null,null]}'/>\n<h2 id=\"Section_1\" data-parsoid='{\"dsr\":[53,66,2,2]}'>Section 1</h2>"); add("wt2html", "2. includeonly in html attr value", "<p data-parsoid='{\"dsr\":[0,155,0,0]}'><span id=\"v1\" about=\"#mwt1\" typeof=\"mw:ExpandedAttrs\" data-parsoid='{\"stx\":\"html\",\"a\":{\"id\":\"v1\"},\"sa\":{\"id\":\"<noinclude>v1</noinclude><includeonly>v2</includeonly>\"},\"dsr\":[0,76,66,7]}' data-mw='{\"attribs\":[[{\"txt\":\"id\"},{\"html\":\"<meta typeof=\\\"mw:Includes/NoInclude\\\" data-parsoid='{\\\"src\\\":\\\"&lt;noinclude>\\\",\\\"dsr\\\":[10,21,null,null]}'/>v1<meta typeof=\\\"mw:Includes/NoInclude/End\\\" data-parsoid='{\\\"src\\\":\\\"&lt;/noinclude>\\\",\\\"dsr\\\":[23,35,null,null]}'/><meta typeof=\\\"mw:Includes/IncludeOnly\\\" data-parsoid='{\\\"src\\\":\\\"&lt;includeonly>v2&lt;/includeonly>\\\",\\\"dsr\\\":[35,64,null,null]}'/><meta typeof=\\\"mw:Includes/IncludeOnly/End\\\" data-parsoid='{\\\"src\\\":\\\"\\\",\\\"dsr\\\":[64,64,null,null]}'/>\"}]]}'>bar</span>\n<span id=\".22v1.22\" about=\"#mwt2\" typeof=\"mw:ExpandedAttrs\" data-parsoid='{\"stx\":\"html\",\"a\":{\"id\":\".22v1.22\"},\"sa\":{\"id\":\"<noinclude>\\\"v1\\\"</noinclude><includeonly>\\\"v2\\\"</includeonly>\"},\"dsr\":[77,155,68,7]}' data-mw='{\"attribs\":[[{\"txt\":\"id\"},{\"html\":\"<meta typeof=\\\"mw:Includes/NoInclude\\\" data-parsoid='{\\\"src\\\":\\\"&lt;noinclude>\\\",\\\"dsr\\\":[86,97,null,null]}'/>\\\"v1\\\"<meta typeof=\\\"mw:Includes/NoInclude/End\\\" data-parsoid='{\\\"src\\\":\\\"&lt;/noinclude>\\\",\\\"dsr\\\":[101,113,null,null]}'/><meta typeof=\\\"mw:Includes/IncludeOnly\\\" data-parsoid='{\\\"src\\\":\\\"&lt;includeonly>\\\\\\\"v2\\\\\\\"&lt;/includeonly>\\\",\\\"dsr\\\":[113,144,null,null]}'/><meta typeof=\\\"mw:Includes/IncludeOnly/End\\\" data-parsoid='{\\\"src\\\":\\\"\\\",\\\"dsr\\\":[144,144,null,null]}'/>\"}]]}'>bar</span></p>"); add("wt2html", "4. includeonly in table attributes", "<table data-parsoid='{\"dsr\":[0,77,2,2]}'>\n<tbody data-parsoid='{\"dsr\":[3,75,0,0]}'><tr about=\"#mwt1\" typeof=\"mw:ExpandedAttrs\" data-parsoid='{\"startTagSrc\":\"|-\",\"a\":{\"<noinclude>\\n|-\\n|a\\n</noinclude>\":null},\"sa\":{\"<noinclude>\\n|-\\n|a\\n</noinclude>\":\"\"},\"autoInsertedEnd\":true,\"dsr\":[3,36,33,0]}' data-mw='{\"attribs\":[[{\"txt\":\"a\",\"html\":\"<meta typeof=\\\"mw:Includes/NoInclude\\\" data-parsoid='{\\\"src\\\":\\\"&lt;noinclude>\\\",\\\"dsr\\\":[6,17,null,null]}'/>\\n|-\\n|a\\n<meta typeof=\\\"mw:Includes/NoInclude/End\\\" data-parsoid='{\\\"src\\\":\\\"&lt;/noinclude>\\\",\\\"dsr\\\":[24,36,null,null]}'/>\"},{\"html\":\"\"}]]}'></tr>\n<tr about=\"#mwt2\" typeof=\"mw:ExpandedAttrs\" data-parsoid='{\"startTagSrc\":\"|-\",\"a\":{\"<includeonly>\\n|-\\n|b\\n</includeonly>\":null},\"sa\":{\"<includeonly>\\n|-\\n|b\\n</includeonly>\":\"\"},\"autoInsertedEnd\":true,\"dsr\":[37,74,37,0]}' data-mw='{\"attribs\":[[{\"txt\":\"\",\"html\":\"<meta typeof=\\\"mw:Includes/IncludeOnly\\\" data-parsoid='{\\\"src\\\":\\\"&lt;includeonly>\\\\n|-\\\\n|b\\\\n&lt;/includeonly>\\\",\\\"dsr\\\":[40,74,null,null]}'/><meta typeof=\\\"mw:Includes/IncludeOnly/End\\\" data-parsoid='{\\\"src\\\":\\\"\\\",\\\"dsr\\\":[74,74,null,null]}'/>\"},{\"html\":\"\"}]]}'></tr>\n</tbody></table>"); +add("wt2html", "Preprocessor precedence 3: language converter is rightmost opening", "<p about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,11,0,0],\"pi\":[[{\"k\":\"1\"}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"hi\"}},\"i\":0}}]}'>hi</p>\n\n<p data-parsoid='{\"dsr\":[13,30,0,0]}'>{{-{R|echo|hi}}}-</p>\n\n<p data-parsoid='{\"dsr\":[32,45,0,0]}'>[[-{R|raw]]}-</p>"); +add("wt2html", "Preprocessor precedence 7: broken template is rightmost opening", "<p data-parsoid='{\"dsr\":[0,18,0,0]}'>[[Foo|{{echo|Bar]]</p>\n\n<p data-parsoid='{\"dsr\":[20,48,0,0]}'><a rel=\"mw:WikiLink\" href=\"./Foo\" title=\"Foo\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Foo\"},\"sa\":{\"href\":\"Foo\"},\"dsr\":[20,46,6,2]}'><span about=\"#mwt5\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[26,42,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"Bar]]-x\"}},\"i\":0}}]}'>Bar]]-x</span>-y</a>-z</p>\n\n<p data-parsoid='{\"dsr\":[50,128,0,0]}'>Careful: linktrails can move the end of the wikilink:\n<a rel=\"mw:WikiLink\" href=\"./Foo\" title=\"Foo\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Foo\"},\"sa\":{\"href\":\"Foo\"},\"dsr\":[104,128,6,3],\"tail\":\"l\"}'><span about=\"#mwt6\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[110,124,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"y']]a\"}},\"i\":0}}]}'>y']]a</span>ll</a></p>"); +add("wt2html", "Preprocessor precedence 10: groups of braces with leading dash", "<dl about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,52,null,null],\"pi\":[[{\"k\":\"1\"},{\"k\":\"2\"},{\"k\":\"3\"},{\"k\":\"4\"},{\"k\":\"5\"}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"Preprocessor precedence 10\",\"href\":\"./Template:Preprocessor_precedence_10\"},\"params\":{\"1\":{\"wt\":\"Three\"},\"2\":{\"wt\":\"raw2\"},\"3\":{\"wt\":\"Bullet\"},\"4\":{\"wt\":\"1\"},\"5\":{\"wt\":\"2\"}},\"i\":0}}]}'><dt>1</dt><dd> -{R|raw}-</dd>\n<dt>2</dt><dd> -</dd></dl><ul about=\"#mwt1\"><li> Bar-</li></ul><span about=\"#mwt1\">\n</span><dl about=\"#mwt1\"><dt>3</dt><dd> -Three-</dd>\n<dt>4</dt><dd> -{raw2}-</dd>\n<dt>5</dt><dd> -</dd></dl><ul about=\"#mwt1\"><li> Bar-</li></ul><span about=\"#mwt1\">\n</span><dl about=\"#mwt1\"><dt>6</dt><dd> -Three-</dd>\n<dt>7</dt><dd> -{raw2}-</dd></dl>"); +add("wt2html", "Preprocessor precedence 11: found during visual diff testing", "<p data-parsoid='{\"dsr\":[0,40,0,0]}'><span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,40,null,null],\"pi\":[[{\"k\":\"1\"}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"#tag:span\",\"function\":\"tag\"},\"params\":{\"1\":{\"wt\":\"-{{#tag:span|-{{echo|x}}}}\"}},\"i\":0}}]}'>-<span>-x</span></span></p>\n\n<p about=\"#mwt4\" typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[42,72,0,0],\"pi\":[[{\"k\":\"1\"}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"-{{echo|-{{echo|x}}}}\"}},\"i\":0}}]}'>--x</p>\n\n<p about=\"#mwt7\" typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[74,94,0,0],\"pi\":[[{\"k\":\"1\"}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"-{{echo|x}}\"}},\"i\":0}}]}'>-x</p>"); +add("wt2html", "Preprocessor precedence 12: broken language converter closed by brace.", "<p data-parsoid='{\"dsr\":[0,52,0,0]}'>This form breaks the template, which is unfortunate:</p>\n<ul data-parsoid='{\"dsr\":[53,76,0,0]}'><li data-parsoid='{\"dsr\":[53,76,1,0]}'> <span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[55,76,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo-{bar}bat\"}},\"i\":0}}]}'>foo-{bar}bat</span></li></ul>\n\n<p data-parsoid='{\"dsr\":[78,170,0,0]}'>But if the broken language converter markup is inside an extension\ntag, nothing bad happens:</p>\n<ul data-parsoid='{\"dsr\":[171,304,0,0]}'><li data-parsoid='{\"dsr\":[171,202,1,0]}'> <span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[173,202,8,9]}'>foo-{bar}bat</span></li>\n<li data-parsoid='{\"dsr\":[203,243,1,0]}'> <span typeof=\"mw:Transclusion mw:Nowiki\" about=\"#mwt4\" data-parsoid='{\"dsr\":[205,243,null,null],\"pi\":[[{\"k\":\"1\"}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"<nowiki>foo-{bar}bat</nowiki>\"}},\"i\":0}}]}'>foo-{bar}bat</span></li>\n<li data-parsoid='{\"dsr\":[244,269,1,0]}'> <pre typeof=\"mw:Extension/pre\" about=\"#mwt6\" data-parsoid='{\"stx\":\"html\",\"dsr\":[246,269,5,6]}' data-mw='{\"name\":\"pre\",\"attrs\":{},\"body\":{\"extsrc\":\"foo-{bar}bat\"}}'>foo-{bar}bat</pre></li>\n<li data-parsoid='{\"dsr\":[270,304,1,0]}'> <pre typeof=\"mw:Transclusion mw:Extension/pre\" about=\"#mwt8\" data-parsoid='{\"stx\":\"html\",\"dsr\":[272,304,null,null],\"pi\":[[{\"k\":\"1\"}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"<pre>foo-{bar}bat</pre>\"}},\"i\":0}}]}'>foo-{bar}bat</pre></li></ul>\n\n<pre typeof=\"mw:Extension/tag\" about=\"#mwt11\" data-parsoid='{\"dsr\":[306,329,2,2]}' data-mw='{\"name\":\"tag\",\"attrs\":{},\"body\":{\"extsrc\":\"foo-{bar}bat\"}}'></pre>\n<pre typeof=\"mw:Extension/tag mw:Transclusion\" about=\"#mwt13\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[330,362]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"<tag>foo-{bar}bat</tag>\"}},\"i\":0}}]}'></pre>\n"); +add("wt2html", "Preprocessor precedence, 13: broken language converter in external link", "<ul data-parsoid='{\"dsr\":[0,160,0,0]}'><li data-parsoid='{\"dsr\":[0,43,1,0]}'> <a rel=\"mw:ExtLink\" href=\"http://example.com/-{foo\" data-parsoid='{\"targetOff\":28,\"contentOffsets\":[28,42],\"dsr\":[2,43,26,1]}'>Example in URL</a></li>\n<li data-parsoid='{\"dsr\":[44,97,1,0]}'> <a rel=\"mw:ExtLink\" href=\"http://example.com\" data-parsoid='{\"targetOff\":66,\"contentOffsets\":[66,96],\"dsr\":[46,97,20,1]}'>Example in -{link} description</a></li>\n<li data-parsoid='{\"dsr\":[98,160,1,0]}'> <a rel=\"mw:ExtLink\" href=\"http://example.com/-{foo\" about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"targetOff\":133,\"contentOffsets\":[133,157],\"dsr\":[100,160,null,null],\"pi\":[[{\"k\":\"1\"}]]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"[http://example.com/-{foo Breaks template, however]\"}},\"i\":0}}]}'>Breaks template, however</a></li></ul>"); +add("wt2html", "Preprocessor precedence, 14: broken language converter in comment", "<ul data-parsoid='{\"dsr\":[0,115,0,0]}'><li data-parsoid='{\"dsr\":[0,32,1,0]}'> <!--{{foo}}--> ...should be ok</li>\n<li data-parsoid='{\"dsr\":[33,66,1,0]}'> <!---{{foo}}--> ...extra dashes</li>\n<li data-parsoid='{\"dsr\":[67,115,1,0]}'> <span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[69,99,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo<!-- -{bar} -->bat\"}},\"i\":0}}]}'>foo</span><span about=\"#mwt1\"><!-- -{bar} --></span><span about=\"#mwt1\">bat</span> ...should be ok</li></ul>"); +add("wt2html", "Preprocessor precedence, 15: broken brace markup in headings", "<meta property=\"mw:PageProp/notoc\" data-parsoid='{\"src\":\"__NOTOC__\",\"magicSrc\":\"__NOTOC__\",\"dsr\":[0,9,null,null]}'/> <meta property=\"mw:PageProp/noeditsection\" data-parsoid='{\"src\":\"__NOEDITSECTION__\",\"magicSrc\":\"__NOEDITSECTION__\",\"dsr\":[10,27,null,null]}'/>\n<h3 id=\"1_foo.5Bbar_1\" data-parsoid='{\"dsr\":[28,45,3,3]}'>1 foo[bar 1</h3>\n<p data-parsoid='{\"dsr\":[46,47,0,0]}'>1</p>\n<h3 id=\"2_foo.5B.5Bbar_2\" data-parsoid='{\"dsr\":[48,66,3,3]}'>2 foo[[bar 2</h3>\n<p data-parsoid='{\"dsr\":[67,68,0,0]}'>2</p>\n<h3 id=\"3_foo.7Bbar_3\" data-parsoid='{\"dsr\":[69,86,3,3]}'>3 foo{bar 3</h3>\n<p data-parsoid='{\"dsr\":[87,88,0,0]}'>3</p>\n<h3 id=\"4_foo.7B.7Bbar_4\" data-parsoid='{\"dsr\":[89,107,3,3]}'>4 foo{{bar 4</h3>\n<p data-parsoid='{\"dsr\":[108,109,0,0]}'>4</p>\n<h3 id=\"5_foo.7B.7B.7Bbar_5\" data-parsoid='{\"dsr\":[110,129,3,3]}'>5 foo{{{bar 5</h3>\n<p data-parsoid='{\"dsr\":[130,131,0,0]}'>5</p>\n<h3 id=\"6_foo-.7Bbar_6\" data-parsoid='{\"dsr\":[132,150,3,3]}'>6 foo-{bar 6</h3>\n<p data-parsoid='{\"dsr\":[151,152,0,0]}'>6</p>"); add("wt2html", "Templates: 2. Inside a block tag", "<div data-parsoid='{\"stx\":\"html\",\"dsr\":[0,23,5,6]}'><span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[5,17,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"Foo\"}},\"i\":0}}]}'>Foo</span></div>\n<blockquote data-parsoid='{\"stx\":\"html\",\"dsr\":[24,61,12,13]}'><span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[36,48,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"Foo\"}},\"i\":0}}]}'>Foo</span></blockquote>"); add("wt2html", "Templates: HTML Tag: 2. Generation of HTML attr. value", "<div style=\"'color:red;'\" about=\"#mwt2\" typeof=\"mw:ExpandedAttrs\" data-parsoid='{\"stx\":\"html\",\"a\":{\"style\":\"'color:red;'\"},\"sa\":{\"style\":\"{{echo|'color:red;'}}\"},\"dsr\":[0,42,33,6]}' data-mw='{\"attribs\":[[{\"txt\":\"style\"},{\"html\":\"<span about=\\\"#mwt1\\\" typeof=\\\"mw:Transclusion\\\" data-parsoid='{\\\"pi\\\":[[{\\\"k\\\":\\\"1\\\"}]],\\\"dsr\\\":[11,32,null,null]}' data-mw='{\\\"parts\\\":[{\\\"template\\\":{\\\"target\\\":{\\\"wt\\\":\\\"echo\\\",\\\"href\\\":\\\"./Template:Echo\\\"},\\\"params\\\":{\\\"1\\\":{\\\"wt\\\":\\\"&#39;color:red;&#39;\\\"}},\\\"i\\\":0}}]}'>'color:red;'</span>\"}]]}'>foo</div>"); add("wt2html", "Templates: HTML Tag: 3. Generation of HTML attr key and value", "<div style=\"'color:red;'\" about=\"#mwt3\" typeof=\"mw:ExpandedAttrs\" data-parsoid='{\"stx\":\"html\",\"a\":{\"style\":\"'color:red;'\"},\"sa\":{\"style\":\"{{echo|'color:red;'}}\"},\"dsr\":[0,51,42,6]}' data-mw='{\"attribs\":[[{\"txt\":\"style\",\"html\":\"<span about=\\\"#mwt2\\\" typeof=\\\"mw:Transclusion\\\" data-parsoid='{\\\"pi\\\":[[{\\\"k\\\":\\\"1\\\"}]],\\\"dsr\\\":[5,19,null,null]}' data-mw='{\\\"parts\\\":[{\\\"template\\\":{\\\"target\\\":{\\\"wt\\\":\\\"echo\\\",\\\"href\\\":\\\"./Template:Echo\\\"},\\\"params\\\":{\\\"1\\\":{\\\"wt\\\":\\\"style\\\"}},\\\"i\\\":0}}]}'>style</span>\"},{\"html\":\"<span about=\\\"#mwt1\\\" typeof=\\\"mw:Transclusion\\\" data-parsoid='{\\\"pi\\\":[[{\\\"k\\\":\\\"1\\\"}]],\\\"dsr\\\":[20,41,null,null]}' data-mw='{\\\"parts\\\":[{\\\"template\\\":{\\\"target\\\":{\\\"wt\\\":\\\"echo\\\",\\\"href\\\":\\\"./Template:Echo\\\"},\\\"params\\\":{\\\"1\\\":{\\\"wt\\\":\\\"&#39;color:red;&#39;\\\"}},\\\"i\\\":0}}]}'>'color:red;'</span>\"}]]}'>foo</div>"); @@ -202,6 +210,8 @@ add("wt2html", "Partly disable title conversion if variant == main language code", "<p data-parsoid='{\"dsr\":[0,23,0,0]}'>-{T|zh-cn:CN;zh-tw:TW}-</p>"); add("wt2html", "Partly disable title conversion if variant == main language code, more", "<p data-parsoid='{\"dsr\":[0,8,0,0]}'>-{T|TW}-</p>"); add("wt2html", "Raw output of variant escape tags (R flag)", "<p data-parsoid='{\"dsr\":[0,32,0,0]}'>Raw: -{R|zh:China;zh-tw:Taiwan}-</p>"); +add("wt2html", "Nested markup inside raw output of variant escape tags (R flag)", "<p data-parsoid='{\"dsr\":[0,57,0,0]}'>Nested raw: -{R|nested -{zh:China;zh-tw:Taiwan}- nested}-</p>"); +add("wt2html", "Templates inside raw output of variant escape tags (R flag)", "<p data-parsoid='{\"dsr\":[0,46,0,0]}'>Nested raw: -{R|nested <span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[23,34,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"hi\"}},\"i\":0}}]}'>hi</span> templates}-</p>"); add("wt2html", "Strings evaluating false shouldn't be ignored by Language converter (T51072)", "<p data-parsoid='{\"dsr\":[0,35,0,0]}'>-{zh-cn:0;zh-sg:1;zh-tw:2;zh-hk:3}-</p>"); add("wt2html", "Conversion rules from [numeric-only string] to [something else] (T48634)", "<p data-parsoid='{\"dsr\":[0,95,0,0]}'>-{H|0=>zh-cn:B}--{H|0=>zh-cn:C;0=>zh-cn:D}--{H|0=>zh-hans:A}-012345-{A|zh-tw:0;zh-cn:E;}-012345</p>"); add("wt2html", "Bidirectional converter rule entries with an empty value should be ignored (T53551)", "<p data-parsoid='{\"dsr\":[0,29,0,0]}'>-{H|zh-cn:foo;zh-tw:;}-foobar</p>"); @@ -288,6 +298,11 @@ add("wt2wt", "T2553: link with two variables in a piped link", "{|\n|[[{{{1}}}<nowiki>|</nowiki>{{{2}}}]]\n|}"); add("wt2wt", "Abort table cell attribute parsing on wikilink", "{|\n| testing [[one|two]]<nowiki> | three </nowiki>|| four\n| testing one two | three || four\n| testing=\"[[one|two]]<nowiki>\" | three </nowiki>|| four\n|}"); add("wt2wt", "2. includeonly in html attr value", "<span id=\"<noinclude>v1</noinclude><includeonly>v2</includeonly>\">bar</span>\n<span id=\"<noinclude>"v1"</noinclude><includeonly>"v2"</includeonly>\">bar</span>\n"); +add("wt2wt", "Preprocessor precedence 1: link is rightmost opening", "<nowiki>{{</nowiki>[[Foo|<nowiki>bar}}</nowiki>]]\n\nBut close-brace is not a valid character in a link title:\n{{<nowiki>[[Foo}}|bar]]</nowiki>\n\nHowever, we can still tell this was handled as a link in the preprocessor:\n{{echo|[[Foo}}|bar]]|bat}}\n"); +add("wt2wt", "Preprocessor precedence 3: language converter is rightmost opening", "{{echo|hi}}\n\n<nowiki>{{-{R|echo|hi}}</nowiki>}-\n\n[[-{R|raw]]}-\n"); +add("wt2wt", "Preprocessor precedence 6: broken link is rightmost opening", "<nowiki>{{echo|[[Foo}}</nowiki>\n\n<nowiki>{{echo|[[Foo|bar|bat=baz}}</nowiki>\n"); +add("wt2wt", "Preprocessor precedence 7: broken template is rightmost opening", "<nowiki>[[Foo|{{echo|Bar]]</nowiki>\n\n[[Foo|{{echo|<nowiki>Bar]]-x</nowiki>}}-y]]-z\n\nCareful: linktrails can move the end of the wikilink:\n[[Foo|{{echo|<nowiki>y']]a</nowiki>}}l]]l\n"); +add("wt2wt", "Preprocessor precedence, 15: broken brace markup in headings", "__NOTOC__ __NOEDITSECTION__\n===1 foo[bar 1===\n1\n===2 foo[[bar 2===\n2\n===3 foo{bar 3===\n3\n===<nowiki>4 foo{{bar 4</nowiki>===\n4\n===<nowiki>5 foo{{{bar 5</nowiki>===\n5\n===6 foo-{bar 6===\n6\n"); add("wt2wt", "1. Table tag in SOL posn. should get reparsed correctly with valid TSR", "{{echo|}}\n{| width=\"100%\"\n|foo\n|}"); add("wt2wt", "Templates: HTML Tag: 2. Generation of HTML attr. value", "<div style=\"{{echo|'color:red;'}}\">foo</div>"); add("wt2wt", "Templates: HTML Tag: 3. Generation of HTML attr key and value", "<div {{echo|style}}=\"{{echo|'color:red;'}}\">foo</div>"); @@ -416,6 +431,9 @@ add("html2html", "Self-closed noinclude, includeonly, onlyinclude tags", "\n"); add("html2html", "T8563: Section extraction for section shown by <includeonly>", "<p data-parsoid='{\"dsr\":[0,32,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[0,32,8,9]}'>==Section T-2==</span></p>"); add("html2html", "T8563: Section extraction for section suppressed by <includeonly>", "<p data-parsoid='{\"dsr\":[0,30,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[0,30,8,9]}'>==Section 1==</span></p>"); +add("html2html", "Preprocessor precedence 1: link is rightmost opening", "<p data-parsoid='{\"dsr\":[0,54,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[0,19,8,9]}'>{{</span><a rel=\"mw:WikiLink\" href=\"./Wiki/Foo\" title=\"Wiki/Foo\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Foo\"},\"sa\":{\"href\":\"wiki/Foo\"},\"dsr\":[19,54,11,2]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[30,52,8,9]}'>bar}}</span></a></p>\n\n<p data-parsoid='{\"dsr\":[56,146,0,0]}'>But close-brace is not a valid character in a link title:\n{{<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[116,146,8,9]}'>[[Foo}}|bar]]</span></p>\n\n<p data-parsoid='{\"dsr\":[148,253,0,0]}'>However, we can still tell this was handled as a link in the preprocessor:\n<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[223,253,8,9]}'>[[Foo}}|bar]]</span></p>\n"); +add("html2html", "Preprocessor precedence 7: broken template is rightmost opening", "<p data-parsoid='{\"dsr\":[0,40,0,0]}'><a rel=\"mw:WikiLink\" href=\"./Wiki/Foo\" title=\"Wiki/Foo\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Foo\"},\"sa\":{\"href\":\"wiki/Foo\"},\"dsr\":[0,40,11,2]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[11,38,8,9]}'>{{echo|Bar</span></a></p>\n\n<p data-parsoid='{\"dsr\":[42,66,0,0]}'><a rel=\"mw:WikiLink\" href=\"./Wiki/Foo\" title=\"Wiki/Foo\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Foo\"},\"sa\":{\"href\":\"wiki/Foo\"},\"dsr\":[42,58,11,2]}'>Bar</a>-x-y]]-z</p>\n\n<p data-parsoid='{\"dsr\":[68,142,0,0]}'>Careful: linktrails can move the end of the wikilink:\n<a rel=\"mw:WikiLink\" href=\"./Wiki/Foo\" title=\"Wiki/Foo\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Foo\"},\"sa\":{\"href\":\"wiki/Foo\"},\"dsr\":[122,139,11,2]}'>y'al</a>]]l</p>\n"); +add("html2html", "Preprocessor precedence 12: broken language converter closed by brace.", "<p data-parsoid='{\"dsr\":[0,52,0,0]}'>This form breaks the template, which is unfortunate:</p>\n\n<ul data-parsoid='{\"dsr\":[54,94,0,0]}'><li data-parsoid='{\"dsr\":[54,94,1,0]}'> <span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[56,94,8,9]}'>{{echo|foo-{bar}bat}}</span></li></ul>\n\n<p data-parsoid='{\"dsr\":[96,188,0,0]}'>But if the broken language converter markup is inside an extension tag, nothing bad happens:</p>\n\n<ul data-parsoid='{\"dsr\":[190,253,0,0]}'><li data-parsoid='{\"dsr\":[190,204,1,0]}'> foo-{bar}bat</li>\n<li data-parsoid='{\"dsr\":[205,219,1,0]}'> foo-{bar}bat</li>\n<li data-parsoid='{\"dsr\":[220,236,1,0]}'> foo-{bar}bat </li>\n<li data-parsoid='{\"dsr\":[237,253,1,0]}'> foo-{bar}bat </li></ul>\n\n<pre data-parsoid='{\"dsr\":[255,282,1,0]}'>'foo-{bar}bat'\narray (\n)</pre>\n\n<pre data-parsoid='{\"dsr\":[284,311,1,0]}'>'foo-{bar}bat'\narray (\n)</pre>\n"); add("html2html", "Templates: Links: 1. Simple example", "<p data-parsoid='{\"dsr\":[0,16,0,0]}'><a rel=\"mw:WikiLink\" href=\"./Wiki/Foo\" title=\"Wiki/Foo\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Foo\"},\"sa\":{\"href\":\"wiki/Foo\"},\"dsr\":[0,16,11,2]}'>bar</a></p>\n"); add("html2html", "Templates: Links: 2. Generation of link href", "<p data-parsoid='{\"dsr\":[0,16,0,0]}'><a rel=\"mw:WikiLink\" href=\"./Wiki/Foo\" title=\"Wiki/Foo\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Foo\"},\"sa\":{\"href\":\"wiki/Foo\"},\"dsr\":[0,16,11,2]}'>bar</a></p>\n"); add("html2html", "Templates: Links: 3. Generation of part of a link href", "<p data-parsoid='{\"dsr\":[0,16,0,0]}'><a rel=\"mw:WikiLink\" href=\"./Wiki/Foo\" title=\"Wiki/Foo\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Foo\"},\"sa\":{\"href\":\"wiki/Foo\"},\"dsr\":[0,16,11,2]}'>bar</a></p>\n\n<p data-parsoid='{\"dsr\":[18,72,0,0]}'>[/index.php?title=Foobar&action=edit&redlink=1 Foobar]</p>\n\n<p data-parsoid='{\"dsr\":[74,134,0,0]}'>[/index.php?title=Foobarbaz&action=edit&redlink=1 Foobarbaz]</p>\n\n<p data-parsoid='{\"dsr\":[136,187,0,0]}'>[/index.php?title=Foobar&action=edit&redlink=1 bar]</p>\n\n<p data-parsoid='{\"dsr\":[189,243,0,0]}'>[/index.php?title=Foobar&action=edit&redlink=1 Foobar]</p>\n\n<p data-parsoid='{\"dsr\":[245,296,0,0]}'>[/index.php?title=Foobar&action=edit&redlink=1 bar]</p>\n"); @@ -468,7 +486,7 @@ add("html2html", "CSS line continuation 1", "<div style=\" \" data-parsoid='{\"stx\":\"html\",\"a\":{\"style\":\" \"},\"sa\":{\"style\":\"/* insecure input */\"},\"dsr\":[0,40,34,6]}'></div>\n"); add("html2html", "CSS line continuation 2", "<div style=\" \" data-parsoid='{\"stx\":\"html\",\"a\":{\"style\":\" \"},\"sa\":{\"style\":\"/* invalid control char */\"},\"dsr\":[0,46,40,6]}'></div>\n"); add("html2html", "Parser hook: nested tags", "<pre typeof=\"mw:Extension/tag\" about=\"#mwt3\" data-parsoid='{\"dsr\":[0,16,2,2]}' data-mw='{\"name\":\"tag\",\"attrs\":{},\"body\":{\"extsrc\":\"<tag>\"}}'></pre><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[16,39,8,9]}'></tag></span>"); -add("html2html", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata", "<div itemscope=\"\" data-parsoid='{\"stx\":\"html\",\"dsr\":[0,244,18,6]}'>\n\t<p data-parsoid='{\"dsr\":[20,141,0,0]}'><meta itemprop=\"hello\" content=\"world\" />\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" content=\"5\" /></p>\n\n\t<p data-parsoid='{\"dsr\":[144,237,0,0]}'><a rel=\"mw:ExtLink\" href=\"http://example.org\" data-parsoid='{\"targetOff\":163,\"contentOffsets\":[163,163],\"dsr\":[144,164,19,1]}'></a>\n\t<link rel=\"stylesheet\" href=\"http://example.org\">\n\t<a rel=\"mw:ExtLink\" href=\"http://example.org\" data-parsoid='{\"targetOff\":236,\"contentOffsets\":[236,236],\"dsr\":[217,237,19,1]}'></a></p>\n</div>\n"); +add("html2html", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata", "<div itemscope=\"\" data-parsoid='{\"stx\":\"html\",\"dsr\":[0,244,18,6]}'>\n\t<p data-parsoid='{\"dsr\":[20,236,0,0]}'><meta itemprop=\"hello\" content=\"world\" />\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" content=\"5\" />\n\t<a rel=\"mw:ExtLink\" href=\"http://example.org\" data-parsoid='{\"targetOff\":162,\"contentOffsets\":[162,162],\"dsr\":[143,163,19,1]}'></a>\n\t<link rel=\"stylesheet\" href=\"http://example.org\">\n\t<a rel=\"mw:ExtLink\" href=\"http://example.org\" data-parsoid='{\"targetOff\":235,\"contentOffsets\":[235,235],\"dsr\":[216,236,19,1]}'></a></p>\n\n</div>\n"); add("html2html", "HTML ordered list item with parameters oddity", "<ol data-parsoid='{\"dsr\":[0,5,0,0]}'><li data-parsoid='{\"dsr\":[0,5,1,0]}'> One</li></ol>\n"); add("html2html", "Fuzz testing: Parser14", "<h2 id=\"onmouseover.3D\" data-parsoid='{\"dsr\":[0,18,2,2]}'> onmouseover= </h2>\n<p data-parsoid='{\"dsr\":[19,26,0,0]}'>http://</p>\n<div id=\"toc\" class=\"toc\" data-parsoid='{\"stx\":\"html\",\"dsr\":[27,218,26,6]}'>\n<div id=\"toctitle\" class=\"toctitle\" data-parsoid='{\"stx\":\"html\",\"dsr\":[54,112,36,6]}'>\n<h2 id=\"Contents\" data-parsoid='{\"dsr\":[91,105,2,2]}'> Contents </h2>\n</div>\n\n<ul data-parsoid='{\"dsr\":[114,210,0,0]}'><li data-parsoid='{\"dsr\":[114,210,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Main_Page#onmouseover.3D\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main_Page#onmouseover.3D\"},\"sa\":{\"href\":\"#onmouseover.3D\"},\"dsr\":[116,210,18,2]}'><span class=\"tocnumber\" data-parsoid='{\"stx\":\"html\",\"dsr\":[134,166,24,7]}'>1</span> <span class=\"toctext\" data-parsoid='{\"stx\":\"html\",\"dsr\":[167,208,22,7]}'>onmouseover=</span></a></li></ul>\n\n</div>\n"); add("html2html", "Special page transclusion", "<ul data-parsoid='{\"dsr\":[0,24,0,0]}'><li data-parsoid='{\"dsr\":[0,24,1,0]}'> <a rel=\"mw:WikiLink\" href=\"./Wiki/Xyzzyx\" title=\"Wiki/Xyzzyx\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Xyzzyx\"},\"sa\":{\"href\":\"wiki/Xyzzyx\"},\"dsr\":[2,24,14,2]}'>Xyzzyx</a></li></ul>\n"); @@ -814,6 +832,20 @@ add("html2wt", "2. includeonly in html attr value", "<span id=\"v1\">bar</span>\n<span id=\"v1\">bar</span>\n"); add("html2wt", "3. includeonly in part of an attr value", "<span style=\"color:red;\">bar</span>\n"); add("html2wt", "4. includeonly in table attributes", "{|\n|a\n|}\n"); +add("html2wt", "Preprocessor precedence 1: link is rightmost opening", "<nowiki>{{</nowiki>[[wiki/Foo|<nowiki>bar}}</nowiki>]]\n\nBut close-brace is not a valid character in a link title:\n{{<nowiki>[[Foo}}|bar]]</nowiki>\n\nHowever, we can still tell this was handled as a link in the preprocessor:\n<nowiki>[[Foo}}|bar]]</nowiki>\n"); +add("html2wt", "Preprocessor precedence 2: template is rightmost opening", "-foo}--\n"); +add("html2wt", "Preprocessor precedence 3: language converter is rightmost opening", "hi\n\n<nowiki>{{echo|hi}}</nowiki>\n\n<nowiki>[[raw]]</nowiki>\n"); +add("html2wt", "Preprocessor precedence 4: left-most angle bracket", ""); +add("html2wt", "Preprocessor precedence 5: tplarg takes precedence over template", "* Bar\n"); +add("html2wt", "Preprocessor precedence 6: broken link is rightmost opening", "<nowiki>{{echo|[[Foo}}</nowiki>\n\n<nowiki>{{echo|[[Foo|bar|bat=baz}}</nowiki>\n"); +add("html2wt", "Preprocessor precedence 7: broken template is rightmost opening", "[[wiki/Foo|<nowiki>{{echo|Bar</nowiki>]]\n\n[[wiki/Foo|Bar]]-x-y]]-z\n\nCareful: linktrails can move the end of the wikilink:\n[[wiki/Foo|y'al]]]]l\n"); +add("html2wt", "Preprocessor precedence 9: groups of braces", "; 4\n: {Four}\n; 5\n: \n* Bar\n; 6\n: Four\n; 7\n: {Bullet}\n"); +add("html2wt", "Preprocessor precedence 10: groups of braces with leading dash", "; 1\n: raw\n; 2\n: -\n* Bar-\n; 3\n: -Three-\n; 4\n: raw2\n; 5\n: -\n* Bar-\n; 6\n: -Three-\n; 7\n: raw2\n"); +add("html2wt", "Preprocessor precedence 11: found during visual diff testing", "<span>-<span>-x</span></span>\n\n--x\n\n-x\n"); +add("html2wt", "Preprocessor precedence 12: broken language converter closed by brace.", "This form breaks the template, which is unfortunate:\n\n* <nowiki>{{echo|foo-{bar}bat}}</nowiki>\n\nBut if the broken language converter markup is inside an extension tag, nothing bad happens:\n\n* foo-{bar}bat\n* foo-{bar}bat\n* foo-{bar}bat \n* foo-{bar}bat \n\n 'foo-{bar}bat'\n array (\n )\n\n 'foo-{bar}bat'\n array (\n )\n"); +add("html2wt", "Preprocessor precedence, 13: broken language converter in external link", "* [http://example.com/-{foo Example in URL]\n* [http://example.com Example in -{link} description]\n* <nowiki>{{echo|</nowiki>[http://example.com/-{foo Breaks template, however]<nowiki>}}</nowiki>\n"); +add("html2wt", "Preprocessor precedence, 14: broken language converter in comment", "* ...should be ok\n* ...extra dashes\n* foobat ...should be ok\n"); +add("html2wt", "Preprocessor precedence, 15: broken brace markup in headings", "=== 1 foo[bar 1 ===\n1\n\n=== 2 foo[[bar 2 ===\n2\n\n=== 3 foo{bar 3 ===\n3\n\n=== <nowiki>4 foo{{bar 4</nowiki> ===\n4\n\n=== <nowiki>5 foo{{{bar 5</nowiki> ===\n5\n\n=== 6 foo-{bar 6 ===\n6\n"); add("html2wt", "Templates: Template Name/Arg clash: 1. Use of positional param", "foo\n"); add("html2wt", "Templates: Template Name/Arg clash: 2. Use of named param", "foo\n"); add("html2wt", "Templates: Template Name/Arg clash: 3. Use of named param with empty input", "quote\n"); @@ -942,7 +974,7 @@ add("html2wt", "Nested template calls", "(My parameter is: param)\n"); add("html2wt", "Sanitizer: Closing of open tags", "<s></s>\n{|\n|}\n"); add("html2wt", "Sanitizer: Closing of open but not closed tags", "<s>foo</s>\n"); -add("html2wt", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata", "<div itemscope=\"\">\n\t<meta itemprop=\"hello\" content=\"world\" />\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" content=\"5\" />\n\n\t[http://example.org]\n\t<link rel=\"stylesheet\" href=\"http://example.org\">\n\t[http://example.org]\n</div>\n"); +add("html2wt", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata", "<div itemscope=\"\">\n\t<meta itemprop=\"hello\" content=\"world\" />\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" content=\"5\" />\n\t[http://example.org]\n\t<link rel=\"stylesheet\" href=\"http://example.org\">\n\t[http://example.org]\n\n</div>\n"); add("html2wt", "Language converter: output gets cut off unexpectedly (T7757)", "this bit is safe: }-\n\nbut if we add a conversion instance: xxx\n\nthen we get cut off here: }-\n\nall additional text is vanished\n"); add("html2wt", "Self closed html pairs (T7487)", "<center><font id=\"bug\"></font>Centered text</center>\n<div><font id=\"bug2\"></font>In div text</div>"); add("html2wt", "Punctuation: nbsp before exclamation", "C'est graveĀ !\n"); @@ -1024,6 +1056,8 @@ add("html2wt", "Partly disable title conversion if variant == main language code", "ZH\n"); add("html2wt", "Partly disable title conversion if variant == main language code, more", "ZH\n"); add("html2wt", "Raw output of variant escape tags (R flag)", "Raw: zh:China;zh-tw:Taiwan\n"); +add("html2wt", "Nested markup inside raw output of variant escape tags (R flag)", "Nested raw: nested Taiwan nested\n"); +add("html2wt", "Templates inside raw output of variant escape tags (R flag)", "Nested raw: nested hi templates\n"); add("html2wt", "Strings evaluating false shouldn't be ignored by Language converter (T51072)", "0\n"); add("html2wt", "Conversion rules from [numeric-only string] to [something else] (T48634)", "D12345EE12345\n"); add("html2wt", "Bidirectional converter rule entries with an empty value should be ignored (T53551)", "foobar\n"); @@ -1550,6 +1584,72 @@ add("selser", "2. includeonly in html attr value [[4,2,[2]]]", "6pbenncdmszto6ryjc093xhn7xbhuxr\n<span id=<noinclude>\"v1\"</noinclude><includeonly>\"v2\"</includeonly>>k35cezvnuuymbo6rbar</span>"); add("selser", "2. includeonly in html attr value [1]", "<span id=\"<noinclude>v1</noinclude><includeonly>v2</includeonly>\">bar</span>\n<span id=<noinclude>\"v1\"</noinclude><includeonly>\"v2\"</includeonly>>bar</span>"); add("selser", "2. includeonly in html attr value [[3,0,0]]", "\n<span id=<noinclude>\"v1\"</noinclude><includeonly>\"v2\"</includeonly>>bar</span>"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [[2,3],3,0,3,0]", "<nowiki>5x51vhp11yp3c8fr{{</nowiki>\n\nBut close-brace is not a valid character in a link title:\n{{[[Foo}}|bar]]\n\nHowever, we can still tell this was handled as a link in the preprocessor:\n{{echo|[[Foo}}|bar]]|bat}}"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [2,0,[4],3,0]", "yv55io4dk4piizfr\n\n{{[[Foo|bar}}]]\n\ngop9s1t0yng919k9\n\nHowever, we can still tell this was handled as a link in the preprocessor:\n{{echo|[[Foo}}|bar]]|bat}}"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [[0,[3]],0,2,3,1]", "<nowiki>{{</nowiki>[[Foo|<nowiki/>]]\n\nbe4aurss02cpu8fr\n\nBut close-brace is not a valid character in a link title:\n{{[[Foo}}|bar]]\n\nHowever, we can still tell this was handled as a link in the preprocessor:\n{{echo|[[Foo}}|bar]]|bat}}"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [1,3,0,2,1]", "<nowiki>{{</nowiki>[[Foo|bar}}]]\n\nBut close-brace is not a valid character in a link title:\n{{[[Foo}}|bar]]\n\n5iuzjooswse5ewmi\n\nHowever, we can still tell this was handled as a link in the preprocessor:\n{{echo|[[Foo}}|bar]]|bat}}"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [[4,[4]],2,0,0,3]", "0asx49kakgoxn7b9[[Foo|bxm226mzjqg833di]]\n\nyeq8audh7yv0wwmi\n\nBut close-brace is not a valid character in a link title:\n{{[[Foo}}|bar]]\n"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [[0,[2]],2,2,4,3]", "<nowiki>{{</nowiki>[[Foo|<nowiki>7bx2qj30vfxyldibar}}</nowiki>]]\n\ni3ck683io4cuwhfr\n\n2bk1pyhwzcdz33di\n\nBut close-brace is not a valid character in a link title:\n{{[[Foo}}|bar]]\n\niyha6zs1mrt3xr\n"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [1,3,0,4,3]", "<nowiki>{{</nowiki>[[Foo|bar}}]]\n\nBut close-brace is not a valid character in a link title:\n{{[[Foo}}|bar]]\n\n7davkk7pw4lpu8fr\n"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [2,0,0,4,0]", "rtfszr70fg6kzkt9\n\n{{[[Foo|bar}}]]\n\nBut close-brace is not a valid character in a link title:\n{{[[Foo}}|bar]]\n\nhgrb06zj0grpb9\n\nHowever, we can still tell this was handled as a link in the preprocessor:\n{{echo|[[Foo}}|bar]]|bat}}"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [[0,2],0,1,2,4]", "<nowiki>{{bw2p1n47eux9wwmi</nowiki>[[Foo|bar}}]]\n\nBut close-brace is not a valid character in a link title:\n{{<nowiki>[[Foo}}|bar]]</nowiki>\n\n3abgoa0n6d2t9\n\n6c1yb2qmck1n61or\n"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [2,2,4,4,0]", "szqvfu39f18dj9k9\n\n{{[[Foo|bar}}]]\n\ng35u13uvv0ftj4i\n\nipp7qr6xtqs0dx6r\n\n9apeb93nqy6i529\n\nHowever, we can still tell this was handled as a link in the preprocessor:\n{{echo|[[Foo}}|bar]]|bat}}"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [2,0,3,0,3]", "o88atqwa25tdquxr\n\n{{[[Foo|bar}}]]\n"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [[3,[3]],2,0,3,0]", "[[Foo|<nowiki/>]]\n\n6qizjzpjtixdpldi\n\nBut close-brace is not a valid character in a link title:\n{{[[Foo}}|bar]]\n\nHowever, we can still tell this was handled as a link in the preprocessor:\n{{echo|[[Foo}}|bar]]|bat}}"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [[3,1],3,0,0,4]", "[[Foo|<nowiki>bar}}</nowiki>]]\n\nBut close-brace is not a valid character in a link title:\n{{[[Foo}}|bar]]\n\nyy1buak9080bpgb9\n"); +add("selser", "Preprocessor precedence 1: link is rightmost opening [2,0,2,2,[2,0]]", "n2zsmdjvp5cul3di\n\n{{[[Foo|bar}}]]\n\nedq332zsqrsk0529\n\nBut close-brace is not a valid character in a link title:\n{{[[Foo}}|bar]]\n\ncvhwoyjhtnh4cxr\n\nhh6n5ql3kmaemiHowever, we can still tell this was handled as a link in the preprocessor:\n{{echo|[[Foo}}|bar]]|bat}}"); +add("selser", "Preprocessor precedence 3: language converter is rightmost opening [0,2,0,0,0]", "{{echo|hi}}\n\nva04f1gp68cnxw29\n\n{{-{R|echo|hi}}}-\n\n[[-{R|raw]]}-"); +add("selser", "Preprocessor precedence 3: language converter is rightmost opening [0,3,0,4,4]", "{{echo|hi}}\n\n{{-{R|echo|hi}}}-\n\nk3pwv1h8g7qa1yvi\n\nidkrll1su3kmaemi\n"); +add("selser", "Preprocessor precedence 3: language converter is rightmost opening [0,0,0,2,[3]]", "{{echo|hi}}\n\n{{-{R|echo|hi}}}-\n\namzr3fwi7nbz9f6r\n"); +add("selser", "Preprocessor precedence 3: language converter is rightmost opening [0,0,2,4,4]", "{{echo|hi}}\n\ngwp8q729p9tqpvi\n\n{{-{R|echo|hi}}}-\n\n4zbw3d8k476kzkt9\n\nver43507a7g2pgb9\n"); +add("selser", "Preprocessor precedence 3: language converter is rightmost opening [0,0,2,0,2]", "{{echo|hi}}\n\nf7nsj8vcses714i\n\n{{-{R|echo|hi}}}-\n\ni4km7dbzjm01kyb9\n\n[[-{R|raw]]}-"); +add("selser", "Preprocessor precedence 3: language converter is rightmost opening [0,4,2,0,2]", "{{echo|hi}}\n\nycktq3q4iusg7gb9\n\noke3c6rkyg8ehfr\n\n{{-{R|echo|hi}}}-\n\ny4kbzuv7hvuhxgvi\n\n[[-{R|raw]]}-"); +add("selser", "Preprocessor precedence 3: language converter is rightmost opening [0,3,2,0,[4]]", "{{echo|hi}}\n\nkbzyzyko463fecdi\n\n{{-{R|echo|hi}}}-\n\njbn15p5jvo647vi"); +add("selser", "Preprocessor precedence 3: language converter is rightmost opening [0,2,0,3,[3]]", "{{echo|hi}}\n\nrxecvsr74dlyds4i\n\n{{-{R|echo|hi}}}-\n"); +add("selser", "Preprocessor precedence 3: language converter is rightmost opening [0,0,0,0,4]", "{{echo|hi}}\n\n{{-{R|echo|hi}}}-\n\n0ber8ar2w7firudi\n"); +add("selser", "Preprocessor precedence 3: language converter is rightmost opening [0,3,2,2,[4]]", "{{echo|hi}}\n\nsfgdnrz9pjyycik9\n\n{{-{R|echo|hi}}}-\n\nmecss0mbq8flayvi\n\nuo7y8p8lkiwo2yb9"); +add("selser", "Preprocessor precedence 6: broken link is rightmost opening [0,0,3]", "{{echo|[[Foo}}\n"); +add("selser", "Preprocessor precedence 6: broken link is rightmost opening [0,3,0]", "{{echo|[[Foo}}\n\n{{echo|[[Foo|bar|bat=baz}}"); +add("selser", "Preprocessor precedence 6: broken link is rightmost opening [0,0,[3]]", "{{echo|[[Foo}}\n"); +add("selser", "Preprocessor precedence 6: broken link is rightmost opening [0,2,0]", "{{echo|[[Foo}}\n\n3s8fm3tqvqxs9k9\n\n{{echo|[[Foo|bar|bat=baz}}"); +add("selser", "Preprocessor precedence 6: broken link is rightmost opening [2,3,[2]]", "lhmyfomhbsm7vi\n\n{{echo|[[Foo}}\n\n<nowiki>f8cib7uwbx4j9k9{{echo|[[Foo|bar|bat=baz}}</nowiki>"); +add("selser", "Preprocessor precedence 6: broken link is rightmost opening [2,0,0]", "k8qbcipyxk7ta9k9\n\n{{echo|[[Foo}}\n\n{{echo|[[Foo|bar|bat=baz}}"); +add("selser", "Preprocessor precedence 6: broken link is rightmost opening [4,3,0]", "mp6b1ezl8c0g4x6r\n\n{{echo|[[Foo|bar|bat=baz}}"); +add("selser", "Preprocessor precedence 6: broken link is rightmost opening [2,2,3]", "m74xbbdndlgl23xr\n\n{{echo|[[Foo}}\n\nfvb31uh1grx561or\n"); +add("selser", "Preprocessor precedence 6: broken link is rightmost opening [2,3,[4]]", "rq5ttbrdxodbcsor\n\n{{echo|[[Foo}}\n\nevl77pvhks6k1emi"); +add("selser", "Preprocessor precedence 6: broken link is rightmost opening [4,0,0]", "z0bgoxxsfxb3mcxr\n\n{{echo|[[Foo|bar|bat=baz}}"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [[4],3,2,0,1]", "edh58vxvkeobhuxr\n\n8e4a5i81nczkhuxr\n\n[[Foo|{{echo|Bar]]-x}}-y]]-z\n\nCareful: linktrails can move the end of the wikilink:\n[[Foo|{{echo|y']]a}}l]]l"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [3,4,[2,3],0,3]", "jin3kku67cj9vn29\n\nqxvjam6pr3rz4cxr[[Foo|{{echo|Bar]]-x}}-y]]\n"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [0,2,3,0,1]", "[[Foo|{{echo|Bar]]\n\n66hsi9jpyfd2t9\n\nCareful: linktrails can move the end of the wikilink:\n[[Foo|{{echo|y']]a}}l]]l"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [3,2,2,4,[0,1]]", "z5nfl2usn24q85mi\n\no7oy7a7iz83hm2t9\n\n[[Foo|{{echo|Bar]]-x}}-y]]-z\n\nxeyy2l8w3nwgsyvi\n\nCareful: linktrails can move the end of the wikilink:\n[[Foo|{{echo|<nowiki>y']]a</nowiki>}}l]]l"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [2,0,2,0,3]", "kys5ok5qi11qbyb9\n\n[[Foo|{{echo|Bar]]\n\nd2eeos4yk9t6s9k9\n\n[[Foo|{{echo|Bar]]-x}}-y]]-z\n"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [0,0,4,3,0]", "[[Foo|{{echo|Bar]]\n\ndn50jx2qo512a9k9\n\nCareful: linktrails can move the end of the wikilink:\n[[Foo|{{echo|y']]a}}l]]l"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [3,0,[[0,2],0],2,[4,1]]", "\n[[Foo|{{echo|Bar]]-x}}ynyv3ixaj2botj4i-y]]-z\n\nlx6kwc49fanyiudi\n\n2nevov39a1tw3ik9[[Foo|{{echo|<nowiki>y']]a</nowiki>}}l]]l"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [1,0,[[0,4],0],3,2]", "<nowiki>[[Foo|{{echo|Bar]]</nowiki>\n\n[[Foo|{{echo|Bar]]-x}}3qlv3i114b249529]]-z\n\n3pklhxllsiiqw7b9\n\nCareful: linktrails can move the end of the wikilink:\n[[Foo|{{echo|y']]a}}l]]l"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [0,2,[[0,2],2],0,1]", "[[Foo|{{echo|Bar]]\n\n215uh4vl7gory66r\n\n[[Foo|{{echo|<nowiki>Bar]]-x</nowiki>}}imi007dkolissjor-y]]1uh8c188rgzj8aor-z\n\nCareful: linktrails can move the end of the wikilink:\n[[Foo|{{echo|<nowiki>y']]a</nowiki>}}l]]l"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [2,2,[[0,3],0],3,[4,1]]", "vynfc7n0bzlivn29\n\n[[Foo|{{echo|Bar]]\n\neor0mn90z3tprpb9\n\n[[Foo|{{echo|<nowiki>Bar]]-x</nowiki>}}]]-z\n\nya3il5w5s4d0lik9[[Foo|{{echo|<nowiki>y']]a</nowiki>}}l]]l"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [1,3,2,3,1]", "<nowiki>[[Foo|{{echo|Bar]]</nowiki>\n\n7db51z58zuns714i\n\n[[Foo|{{echo|Bar]]-x}}-y]]-z\n\nCareful: linktrails can move the end of the wikilink:\n[[Foo|{{echo|y']]a}}l]]l"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [4,0,2,0,[0,4]]", "r2fp677jkkyphkt9\n\nr72i2veqyg44pldi\n\n[[Foo|{{echo|Bar]]-x}}-y]]-z\n\nCareful: linktrails can move the end of the wikilink:\ngtaihg4vnvz08uxr\n"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [1,3,2,0,3]", "<nowiki>[[Foo|{{echo|Bar]]</nowiki>\n\n38n6kfczp4g3nmi\n\n[[Foo|{{echo|Bar]]-x}}-y]]-z\n"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [0,4,2,2,3]", "[[Foo|{{echo|Bar]]\n\na6f0ku7cztr19k9\n\nsmjrlr7ry60cc8fr\n\n[[Foo|{{echo|Bar]]-x}}-y]]-z\n\n2dr7kzl19bpgb9\n"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [4,0,[2,0],0,2]", "yem8qk3jr8cfecdi\n\nudjlrn6ne14f5hfr[[Foo|{{echo|Bar]]-x}}-y]]-z\n\n49u57nhpztdibe29\n\nCareful: linktrails can move the end of the wikilink:\n[[Foo|{{echo|y']]a}}l]]l"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [0,0,[4,0],0,3]", "[[Foo|{{echo|Bar]]\n\na97nh2udj8umcxr-z\n"); +add("selser", "Preprocessor precedence 7: broken template is rightmost opening [2,0,[[0,2],4],4,1]", "yfnjs6r4hs62yb9\n\n[[Foo|{{echo|Bar]]\n\n[[Foo|{{echo|Bar]]-x}}gctn314xxg30udi-y]]<nowiki/>e30pw3ehs93vj9k9\n\nda7imrq8f5abgldi\n\nCareful: linktrails can move the end of the wikilink:\n[[Foo|{{echo|<nowiki>y']]a</nowiki>}}l]]l"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [1,3,2,2,0,3,[3],0,3,0,3,4,3,4,[2],2,2,4,[4],0,1,4,[3],0,0,4,1]", "__NOTOC__\n\n5uor98w6wfljif6r\n\n__NOEDITSECTION__\n\nrfqnvkh14509t3xr\n\n===1 foo[bar 1===\n\ndwfhbbsja5lv7vi\n\nvis9cncqlqcqsemi\n\ndknxgdgw56jhh0k93\n\nip6ipw6dhmnghkt9\n\n1gwj326dck1n61or\n\n===4 foo{{bar 4===\n8mv6tp0zmloez5mi\n\nrt4kp29kv8wipb9\n===<nowiki>5 foo{{{bar 5</nowiki>===\n5ae35cvzy8n0zfr\n\n===6 foo-{bar 6===\nzxgol9zcyhiod2t9\n\n6"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [3,3,0,3,0,3,1,0,4,2,4,2,[2],2,[4],0,0,2,2,4,2,0,[4],3,[3],2,1]", "__NOEDITSECTION__\n===1 foo[bar 1===\n1\nl8g5gsup1395dn29\n\nqwpsz89ajrf3whfr\n\nmoq1txayq5s714i\n\n7gjxzgm0nqni2j4i\n\n===fsk4d64bc1gfzuxr3 foo{bar 3===\ns04spc17cfcx47vi\nee2y76eitd0io1or\n===4 foo{{bar 4===\n1fwcj7vzgb40lik9\nei3qxn77g1n0cnmi\n\n4\n\na7p0g1max81zia4i\n\n2kk6wzqhg3a3jtt9\n\n===5 foo{{{bar 5===\nqrhhqcqg6xg30udi\n===<nowiki/>===\nljngnw41y8jgu8fr\n6"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [2,0,0,0,0,0,3,3,[2],0,2,2,4,3,[4],4,1,3,0,0,0,0,1,0,[2],3,1]", "yhf7qbrsdv3ac3di\n\n__NOTOC__ __NOEDITSECTION__\n===1 foo[bar 1===\n===ho1830by92ievcxr2 foo[[bar 2===\n9347i0rjpv81714i\n\n2\n\njtgrsajvqvtsatt9\n\ndby2kgs9dnxko6r\n\n66zkxdbnb445nrk9\n\n4spsb2q6qbm7k3xr\n\n===<nowiki>4 foo{{bar 4</nowiki>===\n4\n===5 foo{{{bar 5===\n5\n===3dgmhf9b2xsqncdi6 foo-{bar 6===\n6"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [1,0,4,0,2,0,4,0,2,0,4,3,4,2,2,3,0,4,0,0,3,2,2,0,0,0,0]", "__NOTOC__ \n\n3j80xp6du35o2yb9\n\n06kn6ct5gh7zxgvi\n\n===1 foo[bar 1===\nb1446nabveryhkt9\n\nix2l8aouejdims4i\n\n===2 foo[[bar 2===\nzwsxpzx5rg5mte29\n\ndczxvpgyf52hjjor\n\nxdmbawdvk70t3xr\n\nl7i1pg78xr0pmn29\n\n3\n===4 foo{{bar 4===\ne3cso5k1yfaxxbt9\n\n4\n20texgim9yynwmi\n\n9nyg4vte71zto6r\n\n5\n===6 foo-{bar 6===\n6"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [0,0,0,3,1,0,4,3,0,0,0,3,[2],2,0,0,[2],3,4,0,0,4,3,4,4,0,2]", "__NOTOC__ __NOEDITSECTION__\n===1 foo[bar 1===\nl8yfup101thuxr\n\n===2 foo[[bar 2===\n2\n===0r08vub7zvbzkt93 foo{bar 3===\nomxifso8n96647vi\n3\n===<nowiki>3lvg2w8sdk21emi4 foo{{bar 4</nowiki>===\nvk8h1yaky81o47vi\n\n===5 foo{{{bar 5===\nlsh7qm7rg8hbyb9\n\nc5j9cfw8i1xrms4i\n\nukw1p5u6e0t138fr\n8xociq7beh0ssjor\n\n6"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [0,4,2,0,1,2,2,0,1,3,0,0,2,0,3,0,[3],0,0,0,0,3,[2],4,[3],0,[3]]", "__NOTOC__\n\n1050drzdzq8bbj4i\n\n0c5nom553lrkvs4i\n\n__NOEDITSECTION__\n===1 foo[bar 1===\nprgxl7f7ezdgf1or\nod3aj6zcq7kz9f6r\n\n1\n===2 foo[[bar 2===\n2\n0sqgoe1s6475vcxr\n\n===3 foo{bar 3===\n\n===<nowiki/>===\n4\n===5 foo{{{bar 5===\nk2dkeo1cy4cjif6r5\n\np3t3ce6t3v2w3ik9\n\n===<nowiki/>===\n"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [3,0,0,3,2,4,0,0,[2],0,[3],2,2,0,2,2,4,0,1,4,0,0,4,2,4,0,0]", " __NOEDITSECTION__\n\nphyiwbj9o7k6s9k9\n\n===1 foo[bar 1===\npv84tthxd1qt1emi\n\n1\n===cdjiqvhb3dzsq0k92 foo[[bar 2===\n\nhvna4hx8vz4ims4i\n\n8emi3zjjx5qoxbt9\n\n===3 foo{bar 3===\n2ze1cac167kwewmi\n\n3\n\nmmyunjby2hfzjjor\n\ndbfz8zdt3k81tt9\n\n4\n\nhbn6q2uxggddvx6r\n\n===5 foo{{{bar 5===\njziu8kulus7nwmi\n\nqcyvzzgm42a10pb9\n\n0j01ch835769lik9\n\n6"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [0,0,0,2,1,3,0,0,0,2,0,2,0,0,2,2,0,0,3,4,0,3,0,4,[2],0,3]", "__NOTOC__ __NOEDITSECTION__\n\ndea071l7z8q9qkt9\n\n===1 foo[bar 1===\n1\n===2 foo[[bar 2===\n7203votl66layvi\n2\n\ni4rz95rxxyeyu8fr\n\n===3 foo{bar 3===\nbqmc00xydmsa714i\n\n3\n\n94qlidk2tfrh33di\n\n===4 foo{{bar 4===\nin7ld8bj5fmyrpb9\n\n===5 foo{{{bar 5===\n5\n\n1ecq8jgmxc9mgqfr\n\n===tkiibalmu8up7gb96 foo-{bar 6===\n"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [0,0,1,0,0,0,0,2,[3],0,2,0,2,2,[2],4,0,0,0,3,3,0,0,4,0,0,[4]]", "__NOTOC__ __NOEDITSECTION__\n===1 foo[bar 1===\n1\n\n4wm0lpl7kk4t2o6r\n\n===<nowiki/>===\nf7gc7ocvykl0udi\n\n2\n\nhav9i750xpa2a9k9\n\n===3 foo{bar 3===\nrxgohr7xrlpojemi\n6tlivosf4h4obt93\n\n7gyys1jrsbn019k9\n\n===4 foo{{bar 4===\n4\n\n5\n\ndipv7we9er9kke29\n\n===6 foo-{bar 6===\n45eyc9hdq7fzuxr"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [0,3,0,3,0,0,3,0,1,3,0,0,[3],3,4,0,0,2,2,4,4,4,[4],0,[2],0,4]", "__NOTOC____NOEDITSECTION__\n===1 foo[bar 1===\n\n===2 foo[[bar 2===\n2\n===<nowiki/>===\nf0gy9tkl4jbp4x6r\n\n===4 foo{{bar 4===\npm87dbq4tufpqfr\njt8dmtwvwwylow29\n\n4\n\n86yk5xfylgpbvs4i\n\n4lroxj6y6s3v7vi\n\nv0livumcujo47vi\n\njrd2g4mg0hwa5rk9\n===49rxxolzt30afw296 foo-{bar 6===\njx9o28c1ml1munmi\n"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [3,4,0,0,2,0,0,0,0,0,0,0,2,4,4,3,1,0,4,2,0,0,1,2,2,2,0]", "mhem5jjtdzkw3ik9\n\n__NOEDITSECTION__\n\nou05e6mmasoo5hfr\n\n===1 foo[bar 1===\n1\n===2 foo[[bar 2===\n2\n\nvt9cvmjcfke7y14i\n\n===3 foo{bar 3===\nogxobf52rydb1emi\n\nabvml8s8pgjsjor\n\n===<nowiki>4 foo{{bar 4</nowiki>===\neucz56asipidaemi\n\nu5me7ss5tsc92j4i\n\n===5 foo{{{bar 5===\n5\n\nh2n0itkhisgfzuxr\n\n2zmb3pe5s960f6r\n\n===6 foo-{bar 6===\nkpd2wt4izgn1att9\n6"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [0,0,0,0,2,4,1,2,[4],0,2,4,4,2,2,2,0,4,[2],3,[4],0,0,0,1,3,0]", "__NOTOC__ __NOEDITSECTION__\n\n3lml5l0ffajor\n\n===1 foo[bar 1===\nps695r2lvt8d7vi\n\n1\n\n6di8qnsukhb0529\n\n===7hpaygrsve7b9===\nsj2h0dupqzi79zfr\n\n2\n\nahcf6hmhsnp9o1or\n\nmmj0s7p5z53a0pb9\n\nn16761lrku6gk3xr\n\nc07wsubbj7pbvs4i\n\n3\n\ntfmi59i9pi6vquxr\n\n===4 foo{{bar 4===\nqybbayd15ekit3xr\n\nnyeyql867eukgldi4\n===2zkwj58waikvs4i===\n5\n===6 foo-{bar 6===\n6"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [4,2,0,3,1,0,0,0,0,0,3,0,2,3,[2],4,3,2,[4],0,0,4,0,2,3,0,4]", "noebq35loutedn29\n\nzr4nim02czg833di \n\n__NOEDITSECTION__\n===1 foo[bar 1===\n1\n===2 foo[[bar 2===\n\n7i78pm3o291f9a4i\n\n===3 foo{bar 3===\nc88rnazfv866flxr3\n\nxgsqfrrutx2edn29\n\nshkroli4nytit3xr\nfhekhofk6vnasjor\n===5 foo{{{bar 5===\nnbhsr6hga1kmx6r\n\n5\n\n1vsgh3y51rqhyqfr\n\n0xlldh6fwe6a8aor\n"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [4,2,0,0,0,3,2,3,2,4,2,0,4,4,[2],0,0,3,0,0,0,0,4,3,3,0,[3]]", "k0xun6iy919k9\n\nt95dbzfr8t5oecdi \n\n__NOEDITSECTION__\n===1 foo[bar 1===\nsea9fmelzg1oflxr\n\n1\n\n9550jhvdg1cbx1or\n\n===2 foo[[bar 2===\ng2zjhur8u3bd42t9\n\n9azh69qskrjrwwmi\n\n2\n6aykxdwp2a5ah5mi\n\njcyu5xcay49ozuxr\n\nexxxe57wqo7p66r3\n===4 foo{{bar 4===\n4\n===5 foo{{{bar 5===\n0a4dxfha26vtpgb9\n"); +add("selser", "Preprocessor precedence, 15: broken brace markup in headings [0,4,3,2,0,0,[3],0,0,2,[3],4,3,0,1,0,0,3,[3],0,1,2,0,4,4,0,0]", "__NOTOC__\n\ne4sdf53wat2wqaor\n\n4rf79s1kox9od2t9\n\n===1 foo[bar 1===\n\n===2 foo[[bar 2===\nu6bu02g5z9w9udi\n\ntq6zuoftl9dx6r\n\n3\n===4 foo{{bar 4===\n===<nowiki>5 foo{{{bar 5</nowiki>===\nxzk6i81ir78k6gvi\n5\n\n5605r76ztdoq1tt9\n\nf3vse8od3e2n8kt9\n\n6"); add("selser", "1. Table tag in SOL posn. should get reparsed correctly with valid TSR [0,[0,3]]", "{{echo|}}{| width = '100%'\n|}"); add("selser", "1. Table tag in SOL posn. should get reparsed correctly with valid TSR [0,[0,[0,2]]]", "{{echo|}}{| width = '100%'\n|foo<!--7w2da44bn7idaemi-->\n|}"); add("selser", "1. Table tag in SOL posn. should get reparsed correctly with valid TSR [0,1]", "{{echo|}}{| width=\"100%\" data-foobar=\"t98xv1gnmkhp8pvi\"\n|foo\n|}"); diff --git a/tests/parserTests.json b/tests/parserTests.json index 3e11b75..c281459 100644 --- a/tests/parserTests.json +++ b/tests/parserTests.json @@ -2,8 +2,8 @@ "parserTests.txt": { "repo": "/wikimedia/mediawiki/", "path": "tests/parser/parserTests.txt", - "expectedSHA1": "ce0665cff572231b0a7d5cae5ef280a4322a6377", - "latestCommit": "f9de807e28c5194ef4e2ddbcf31375041816fab6" + "expectedSHA1": "602e38c02173fda03fb799c15016b20004a708be", + "latestCommit": "b9280829efcb8c842b8e096e420117275cde1a45" }, "citeParserTests.txt": { "repo": "/wikimedia/mediawiki-extensions-Cite/", diff --git a/tests/parserTests.txt b/tests/parserTests.txt index c2054bd..69fee30 100644 --- a/tests/parserTests.txt +++ b/tests/parserTests.txt @@ -11856,6 +11856,326 @@ !!end ### +### Preprocessor precedence tests +### See: https://www.mediawiki.org/wiki/Preprocessor_ABNF +### +##{{[[-{{{{{{[[Foo|bar}}]]}-}}}}}]] +!! test +Preprocessor precedence 1: link is rightmost opening +!! wikitext +{{[[Foo|bar}}]] + +But close-brace is not a valid character in a link title: +{{[[Foo}}|bar]] + +However, we can still tell this was handled as a link in the preprocessor: +{{echo|[[Foo}}|bar]]|bat}} +!! html +<p>{{<a href="/wiki/Foo" title="Foo">bar}}</a> +</p><p>But close-brace is not a valid character in a link title: +{{[[Foo}}|bar]] +</p><p>However, we can still tell this was handled as a link in the preprocessor: +[[Foo}}|bar]] +</p> +!! end + +!! test +Preprocessor precedence 2: template is rightmost opening +!! options +language=zh +!! wikitext +-{{echo|foo}-}}- +!! html +<p>-foo}-- +</p> +!! end + +!! test +Preprocessor precedence 3: language converter is rightmost opening +!! options +language=zh +!! wikitext +{{echo|hi}} + +{{-{R|echo|hi}}}- + +[[-{R|raw]]}- +!! html +<p>hi +</p><p>{{echo|hi}} +</p><p>[[raw]] +</p> +!! end + +!! test +Preprocessor precedence 4: left-most angle bracket +!! options +language=zh +!! wikitext +<!--{raw}--> +!! html +!! end + +!! article +Template:Precedence5 +!! text +{{{{{1}}}}} +!! endarticle + +!! test +Preprocessor precedence 5: tplarg takes precedence over template +!! wikitext +{{Precedence5|Bullet}} +!! html +<ul><li> Bar</li></ul> + +!! end + +!! test +Preprocessor precedence 6: broken link is rightmost opening +!! wikitext +{{echo|[[Foo}} + +{{echo|[[Foo|bar|bat=baz}} +!! html +<p>{{echo|[[Foo}} +</p><p>{{echo|[[Foo|bar|bat=baz}} +</p> +!! end + +# This next test exposes a difference between PHP and Parsoid: +# Given [[Foo|{{echo|Bar]]x}}y]]z: +# 1) Both PHP and Parsoid ignore the `]]` inside the `echo` in the +# "preprocessor" stage. The `{{echo` extends until the `x}}`, and the +# outer `[[Foo` extends until the `y]]` +# 2a) But then the PHP preprocessor emits `[[Foo|Bar]]xy]]z` as an +# intermediate result (after template expansion), and link processing +# happens on this intermediate result, which moves the wikilink +# boundary leftward to `[[Foo|Bar]]` +# 2b) Parsoid works in a single step, so it's going to keep the +# wikilink as extending to the `y]]` +# 3a) Then PHP does linktrail processing which slurps up the trailing +# `xy` inside the link. +# 3b) Parsoid will do linktrail processing to slurp up the trailing +# `z` inside the link. +# This is "correct" behavior. Parsoid's basic worldview is that the +# `]]` inside the template shouldn't be allowed to leak out to affect +# the surrounding wikilink. PHP may match Parsoid (in the future) +# if you use {{#balance}} (T114445). + +!! test +Preprocessor precedence 7: broken template is rightmost opening +!! wikitext +[[Foo|{{echo|Bar]] + +[[Foo|{{echo|Bar]]-x}}-y]]-z + +Careful: linktrails can move the end of the wikilink: +[[Foo|{{echo|y']]a}}l]]l +!! html +<p><a href="/wiki/Foo" title="Foo">{{echo|Bar</a> +</p><p><a href="/wiki/Foo" title="Foo">Bar</a>-x-y]]-z +</p><p>Careful: linktrails can move the end of the wikilink: +<a href="/wiki/Foo" title="Foo">y'al</a>]]l +</p> +!! end + +!! test +Preprocessor precedence 8: broken language converter is rightmost opening +!! options +language=zh +!! wikitext +[[Foo-{R|raw]] +!! html +<p>[[Foo-{R|raw]] +</p> +!! end + +!! article +Template:Preprocessor_precedence_9 +!! text +;4: {{{{1}}}} +;5: {{{{{2}}}}} +;6: {{{{{{3}}}}}} +;7: {{{{{{{4}}}}}}} +!! endarticle + +!! test +Preprocessor precedence 9: groups of braces +!! wikitext +{{Preprocessor precedence 9|Four|Bullet|1|2}} +!! html +<dl><dt>4</dt> +<dd> {Four}</dd> +<dt>5</dt> +<dd> </dd></dl> +<ul><li> Bar</li></ul> +<dl><dt>6</dt> +<dd> Four</dd> +<dt>7</dt> +<dd> {Bullet}</dd></dl> + +!! end + +!! article +Template:Preprocessor_precedence_10 +!! text +;1: -{R|raw}- +;2: -{{Bullet}}- +;3: -{{{1}}}- +;4: -{{{{2}}}}- +;5: -{{{{{3}}}}}- +;6: -{{{{{{4}}}}}}- +;7: -{{{{{{{5}}}}}}}- +!! endarticle + +!! test +Preprocessor precedence 10: groups of braces with leading dash +!! options +language=zh +!! wikitext +{{Preprocessor precedence 10|Three|raw2|Bullet|1|2}} +!! html +<dl><dt>1</dt> +<dd> raw</dd> +<dt>2</dt> +<dd> -</dd></dl> +<ul><li> Bar-</li></ul> +<dl><dt>3</dt> +<dd> -Three-</dd> +<dt>4</dt> +<dd> raw2</dd> +<dt>5</dt> +<dd> -</dd></dl> +<ul><li> Bar-</li></ul> +<dl><dt>6</dt> +<dd> -Three-</dd> +<dt>7</dt> +<dd> raw2</dd></dl> + +!! end + +!! test +Preprocessor precedence 11: found during visual diff testing +!! wikitext +{{#tag:span|-{{#tag:span|-{{echo|x}}}}}} + +{{echo|-{{echo|-{{echo|x}}}}}} + +{{echo|-{{echo|x}}}} +!! html +<p><span>-<span>-x</span></span> +</p><p>--x +</p><p>-x +</p> +!! end + +!! test +Preprocessor precedence 12: broken language converter closed by brace. +!! wikitext +This form breaks the template, which is unfortunate: +* {{echo|foo-{bar}bat}} + +But if the broken language converter markup is inside an extension +tag, nothing bad happens: +* <nowiki>foo-{bar}bat</nowiki> +* {{echo|<nowiki>foo-{bar}bat</nowiki>}} +* <pre>foo-{bar}bat</pre> +* {{echo|<pre>foo-{bar}bat</pre>}} + +<tag>foo-{bar}bat</tag> +{{echo|<tag>foo-{bar}bat</tag>}} + +!! html+tidy +<p>This form breaks the template, which is unfortunate:</p> +<ul> +<li>{{echo|foo-{bar}bat}}</li> +</ul> +<p>But if the broken language converter markup is inside an extension tag, nothing bad happens:</p> +<ul> +<li>foo-{bar}bat</li> +<li>foo-{bar}bat</li> +<li> +<pre> +foo-{bar}bat +</pre></li> +<li> +<pre> +foo-{bar}bat +</pre></li> +</ul> +<pre> +'foo-{bar}bat' +array ( +) +</pre> +<pre> +'foo-{bar}bat' +array ( +) +</pre> +!! end + +!! test +Preprocessor precedence, 13: broken language converter in external link +!! wikitext +* [http://example.com/-{foo Example in URL] +* [http://example.com Example in -{link} description] +* {{echo|[http://example.com/-{foo Breaks template, however]}} +!! html+tidy +<ul> +<li><a rel="nofollow" class="external text" href="http://example.com/-{foo">Example in URL</a></li> +<li><a rel="nofollow" class="external text" href="http://example.com">Example in -{link} description</a></li> +<li>{{echo|<a rel="nofollow" class="external text" href="http://example.com/-{foo">Breaks template, however</a>}}</li> +</ul> +!! end + +!! test +Preprocessor precedence, 14: broken language converter in comment +!! wikitext +* <!--{{foo}}--> ...should be ok +* <!---{{foo}}--> ...extra dashes +* {{echo|foo<!-- -{bar} -->bat}} ...should be ok +!! html+tidy +<ul> +<li>...should be ok</li> +<li>...extra dashes</li> +<li>foobat ...should be ok</li> +</ul> +!! end + +!! test +Preprocessor precedence, 15: broken brace markup in headings +!! wikitext +__NOTOC__ __NOEDITSECTION__ +===1 foo[bar 1=== +1 +===2 foo[[bar 2=== +2 +===3 foo{bar 3=== +3 +===4 foo{{bar 4=== +4 +===5 foo{{{bar 5=== +5 +===6 foo-{bar 6=== +6 +!! html+tidy +<h3><span class="mw-headline" id="1_foo.5Bbar_1">1 foo[bar 1</span></h3> +<p>1</p> +<h3><span class="mw-headline" id="2_foo.5B.5Bbar_2">2 foo[[bar 2</span></h3> +<p>2</p> +<h3><span class="mw-headline" id="3_foo.7Bbar_3">3 foo{bar 3</span></h3> +<p>3</p> +<h3><span class="mw-headline" id="4_foo.7B.7Bbar_4">4 foo{{bar 4</span></h3> +<p>4</p> +<h3><span class="mw-headline" id="5_foo.7B.7B.7Bbar_5">5 foo{{{bar 5</span></h3> +<p>5</p> +<h3><span class="mw-headline" id="6_foo-.7Bbar_6">6 foo-{bar 6</span></h3> +<p>6</p> +!! end + +### ### Token Stream Patcher tests ### ### These tests won't always pass wt2wt and other modes because @@ -17567,10 +17887,10 @@ <p> <meta itemprop="hello" content="world" /> <meta http-equiv="refresh" content="5"> <meta itemprop="hello" content="5" /> -</p> <link itemprop="hello" href="http://example.org" /> <link rel="stylesheet" href="<a rel="nofollow" class="external free" href="http://example.org">http://example.org</a>"> <link itemprop="hello" href="http://example.org" /> +</p> </div> !! end @@ -20961,6 +21281,28 @@ !! end !! test +Nested markup inside raw output of variant escape tags (R flag) +!! options +language=zh variant=zh-tw +!! wikitext +Nested raw: -{R|nested -{zh:China;zh-tw:Taiwan}- nested}- +!! html +<p>Nested raw: nested Taiwan nested +</p> +!! end + +!! test +Templates inside raw output of variant escape tags (R flag) +!! options +language=zh variant=zh-tw +!! wikitext +Nested raw: -{R|nested {{echo|hi}} templates}- +!! html +<p>Nested raw: nested hi templates +</p> +!! end + +!! test Strings evaluating false shouldn't be ignored by Language converter (T51072) !! options language=zh variant=zh-cn @@ -21127,12 +21469,10 @@ </p> !! end -# FIXME: This test is currently broken in the PHP parser T153761 !! test T146304: Don't break template parsing if language converter markup is in the parameter. !! options language=sr variant=sr-ec -disabled !! wikitext {{echo|-{R|foo}-}} !! html/php -- To view, visit https://gerrit.wikimedia.org/r/355265 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5c61781149bb8e598ccd7b6664f63cc42a346a8c Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/services/parsoid Gerrit-Branch: master Gerrit-Owner: C. Scott Ananian <canan...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits