jenkins-bot has submitted this change and it was merged. Change subject: Remove smart nowikier ......................................................................
Remove smart nowikier * Nowikis are expected to be rare and the original use case (which might have been valid back in the day) of trying to reduce the number of nowiki wrappers is no longer relevant. Change-Id: I7aa00ee0020c5f69c3acb1cab069ceab77b75ab4 --- M lib/wts.escapeWikitext.js M tests/parserTests-blacklist.js M tests/parserTests.txt 3 files changed, 42 insertions(+), 68 deletions(-) Approvals: Subramanya Sastry: Looks good to me, approved jenkins-bot: Verified diff --git a/lib/wts.escapeWikitext.js b/lib/wts.escapeWikitext.js index 9ec7c2c..e60eb82 100644 --- a/lib/wts.escapeWikitext.js +++ b/lib/wts.escapeWikitext.js @@ -379,8 +379,9 @@ /* ---------------------------------------------------------------- * This function attempts to wrap smallest escapable units into * nowikis (which can potentially add multiple nowiki pairs in a - * single string). However, it does attempt to coalesce adjacent - * nowiki segments into a single nowiki wrapper. + * single string). The idea here is that since this should all be + * text, anything that tokenizes to another construct needs to be + * wrapped. * * Full-wrapping is enabled in the following cases: * - origText has url triggers (RFC, ISBN, etc.) @@ -391,15 +392,13 @@ var match = origText.match(/^((?:.*?|[\r\n]+[^\r\n]|[~]{3,5})*?)((?:\r?\n)*)$/); var text = match[1]; var nls = match[2]; - var nowikisAdded = false; - - // console.warn("SOL: " + sol + "; text: " + text); if (fullWrap) { return "<nowiki>" + text + "</nowiki>" + nls; } else { var buf = ''; var inNowiki = false; + var nowikisAdded = false; var tokensWithoutClosingTag = new Set([ // These token types don't come with a closing tag 'listItem', 'td', 'tr', @@ -414,40 +413,22 @@ var tokens = this.tokenizeStr(text, sol); tokens.pop(); - // Add nowikis intelligently - var smartNowikier = function(open, close, str, i, numToks) { - // Max length of string that gets "unnecessarily" - // sucked into a nowiki (40 is an arbitrary number) - var maxExcessWrapLength = 40; - - // If we are being asked to close a nowiki - // without opening one, we open a nowiki. - // - // Ex: "</s>" will parse to an end-tag - if (open || (close && !inNowiki)) { - if (!inNowiki) { - buf += "<nowiki>"; - inNowiki = true; - nowikisAdded = true; - } + var nowikiWrap = function(str, close) { + if (!inNowiki) { + buf += '<nowiki>'; + inNowiki = true; + nowikisAdded = true; } - buf += str; - if (close) { - if ((i < numToks - 1 && tokens[i + 1].constructor === String && tokens[i + 1].length >= maxExcessWrapLength) || - (i === numToks - 2 && tokens[i + 1].constructor === String)) { - buf += "</nowiki>"; - inNowiki = false; - } + buf += '</nowiki>'; + inNowiki = false; } }; for (var i = 0, n = tokens.length; i < n; i++) { var t = tokens[i]; var tsr = (t.dataAttribs || {}).tsr; - - // console.warn("SOL: " + sol + "; T[" + i + "]=" + JSON.stringify(t)); // Ignore display hacks, so text like "A : B" doesn't produce // an unnecessary nowiki. @@ -459,22 +440,17 @@ case String: if (t.length > 0) { t = escapeNowikiTags(t); - if ((sol && t.match(/^ /)) || t.match(/\n /)) { - if (inNowiki) { - smartNowikier(true, true, t, i, n); - } else { - var x = t.split(/(^|\n) /g); - buf += x[0]; - for (var k = 1; k < x.length - 1; k += 2) { - buf += x[k]; - if (k !== 1 || x[k] === '\n' || sol) { - buf += '<nowiki> </nowiki>'; - } else { - buf += ' '; - } - buf += x[k + 1]; + if (!inNowiki && ((sol && t.match(/^ /)) || t.match(/\n /))) { + var x = t.split(/(^|\n) /g); + buf += x[0]; + for (var k = 1; k < x.length - 1; k += 2) { + buf += x[k]; + if (k !== 1 || x[k] === '\n' || sol) { + nowikiWrap(' ', true); + } else { + buf += ' '; } - nowikisAdded = true; + buf += x[k + 1]; } } else { buf += t; @@ -496,20 +472,20 @@ case pd.TagTk: // Treat tokens with missing tags as self-closing tokens // for the purpose of minimal nowiki escaping - var closeNowiki = tokensWithoutClosingTag.has(t.name); - smartNowikier(true, closeNowiki, text.substring(tsr[0], tsr[1]), i, n); + var close = tokensWithoutClosingTag.has(t.name); + nowikiWrap(text.substring(tsr[0], tsr[1]), close); sol = false; break; case pd.EndTagTk: - smartNowikier(false, true, text.substring(tsr[0], tsr[1]), i, n); + nowikiWrap(text.substring(tsr[0], tsr[1]), true); sol = false; break; case pd.SelfclosingTagTk: if (t.name !== 'meta' || !/^mw:(TSRMarker|EmptyLine)$/.test(t.getAttribute('typeof'))) { // Don't bother with marker or empty-line metas - smartNowikier(true, true, text.substring(tsr[0], tsr[1]), i, n); + nowikiWrap(text.substring(tsr[0], tsr[1]), true); } sol = false; break; @@ -518,16 +494,14 @@ // close any unclosed nowikis if (inNowiki) { - buf += "</nowiki>"; + buf += '</nowiki>'; } // Make sure nowiki is always added // Ex: "foo]]" won't tokenize into tags at all if (!nowikisAdded) { buf = ''; - buf += "<nowiki>"; - buf += text; - buf += "</nowiki>"; + nowikiWrap(text, true); } buf += nls; diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js index 99855e0..bfafb55 100644 --- a/tests/parserTests-blacklist.js +++ b/tests/parserTests-blacklist.js @@ -370,7 +370,7 @@ add("wt2wt", "Templates: HTML Tables: 5. Proper fostering of categories from inside", "[[Category:foo1]]<table><tr><td>foo</td></tr></table>\n<!--Two categories (Bug 50330)-->\n[[Category:bar1]][[Category:bar2]]<table><tr><td>foo</td></tr></table>"); add("wt2wt", "Allow empty links in image captions (Bug 60753)", "[[File:Foobar.jpg|thumb|Caption [[Link1]]\n<nowiki>[[]]</nowiki>\n[[Link2]]\n]]"); add("wt2wt", "Image with multiple widths -- use last", "[[File:Foobar.jpg|300px|caption]]\n"); -add("wt2wt", "Render invalid page names as plain text (bug 51090)", "<nowiki>[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n[[foo~~~bar]]\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]</nowiki>\n\n[[{{echo|./../foo}}|bar]]\n[[{{echo|foo/.}}|bar]]\n[[{{echo|foo/..}}|bar]]\n[[{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}]]\n[[{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}]]\n[[{{echo|foo}bar}}]]\n[[{{echo|foo[bar}}]]\n[[{{echo|foo]bar}}]]\n[[{{echo|foo<bar}}]]\n"); +add("wt2wt", "Render invalid page names as plain text (bug 51090)", "<nowiki>[[./../foo|bar]]</nowiki>\n<nowiki>[[foo�|bar]]</nowiki>\n<nowiki>[[foo/.|bar]]</nowiki>\n<nowiki>[[foo/..|bar]]</nowiki>\n<nowiki>[[foo~~~bar]]</nowiki>\n<nowiki>[[foo>bar]]</nowiki>\n[[foo[bar]]\n<nowiki>[[.]]</nowiki>\n<nowiki>[[..]]</nowiki>\n<nowiki>[[foo././bar]]</nowiki>\n\n[[{{echo|./../foo}}|bar]]\n[[{{echo|foo/.}}|bar]]\n[[{{echo|foo/..}}|bar]]\n[[{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}]]\n[[{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}]]\n[[{{echo|foo}bar}}]]\n[[{{echo|foo[bar}}]]\n[[{{echo|foo]bar}}]]\n[[{{echo|foo<bar}}]]\n"); add("wt2wt", "Handling of sections up to level 6 and beyond", "= Level 1 Heading=\n== Level 2 Heading==\n=== Level 3 Heading===\n==== Level 4 Heading====\n===== Level 5 Heading=====\n====== Level 6 Heading======\n======<nowiki>= Level 7 Heading=</nowiki>======\n======<nowiki>== Level 8 Heading==</nowiki>======\n======<nowiki>=== Level 9 Heading===</nowiki>======\n======<nowiki>==== Level 10 Heading====</nowiki>======\n"); add("wt2wt", "div with single-quoted attribute", "<div id=\"rock\">HTML rocks</div>"); add("wt2wt", "div with unquoted attribute", "<div id=\"rock\">HTML rocks</div>"); @@ -391,7 +391,7 @@ add("wt2wt", "Opera -o-link CSS", "<div title=\"data:text/html,<img src=1 onerror=alert(1)>\" style=\"-o-link:attr(title);-o-link-source:current\">X</div>"); add("wt2wt", "Table attribute legitimate extension", "{|\n! style=\"<nowiki>color:blue</nowiki>\" + | status\n|}"); add("wt2wt", "Table attribute safety", "{|\n! style=\"<nowiki>border-width:expression(0+alert(document.cookie))</nowiki>\" + | status\n|}"); -add("wt2wt", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata", "<div itemscope=\"\">\n\t<nowiki><meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n</div>"); +add("wt2wt", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata", "<div itemscope=\"\">\n\t<nowiki><meta itemprop=\"hello\" content=\"world\"></nowiki>\n\t<nowiki><meta http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><link itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n</div>"); add("wt2wt", "Fuzz testing: Parser13", "{| \n| http://a|\n|}"); add("wt2wt", "Fuzz testing: Parser14-table", "==a==\n{| style=\"__TOC__\"\n|}"); add("wt2wt", "Fuzz testing: Parser16", "{|\n!https://||||||\n|}"); @@ -430,7 +430,7 @@ add("wt2wt", "Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out", "{|\n|<small>foo\n\nbar\n|}\n\n{|\n|<small>foo<small>\n|}"); add("wt2wt", "Empty TD followed by TD with tpl-generated attribute", "{|\n|-\n|\n| {{echo|style='color:red'}} |foo\n|}"); add("wt2wt", "Improperly nested inline or quotes tags with whitespace in between", "<span> <s>x</span> </s>\n''' ''x'''''<nowiki/>'' ''\n"); -add("wt2wt", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost)", "<nowiki> </nowiki><nowiki>|| ||</nowiki>\n<table>\n<tr><td> a\n</table>"); +add("wt2wt", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost)", "<nowiki> </nowiki><nowiki>||</nowiki> <nowiki>||</nowiki>\n<table>\n<tr><td> a\n</table>"); add("wt2wt", "Table in fosterable position", "{{OpenTable}}\n<div>\n{|\n|}\n"); add("wt2wt", "Image: upright option is ignored on inline and frame images (parsoid)", "[[File:Foobar.jpg|500x500px|caption]]\n"); @@ -549,7 +549,7 @@ add("html2html", "Image: caption containing a table", "<figure typeof=\"mw:Image/Thumb\" data-parsoid='{\"optList\":[{\"ck\":\"thumbnail\",\"ak\":\"thumb\"},{\"ck\":\"width\",\"ak\":\"200x200px\"},{\"ck\":\"bogus\",\"ak\":\"This is an example image thumbnail caption with a table\\n{\"},{\"ck\":\"bogus\",\"ak\":\"\\n\\n!Foo !Bar\\n\"},{\"ck\":\"bogus\",\"ak\":\"-\\n\"},{\"ck\":\"bogus\",\"ak\":\"Foo1 \\n\"},{\"ck\":\"bogus\",\"ak\":\"Bar1\"},{\"ck\":\"caption\",\"ak\":\"}\\nand some more text.\"}],\"dsr\":[0,143,2,2]}'><a href=\"./File:Foobar.jpg\" data-parsoid='{\"a\":{\"href\":\"./File:Foobar.jpg\"},\"sa\":{},\"dsr\":[2,null,null,null]}'><img resource=\"./File:Foobar.jpg\" src=\"//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg\" data-file-width=\"1941\" data-file-height=\"220\" data-file-type=\"bitmap\" height=\"23\" width=\"200\" data-parsoid='{\"a\":{\"resource\":\"./File:Foobar.jpg\",\"height\":\"23\",\"width\":\"200\"},\"sa\":{\"resource\":\"File:Foobar.jpg\"}}'/></a><figcaption data-parsoid='{\"dsr\":[null,141,null,null]}'>}\nand some more text.</figcaption></figure>\n"); add("html2html", "Subpage link", "<p data-parsoid='{\"dsr\":[0,38,0,0]}'><a rel=\"mw:WikiLink\" href=\"./Wiki/Subpage_test/subpage\" title=\"Wiki/Subpage test/subpage\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Subpage_test/subpage\"},\"sa\":{\"href\":\"wiki/Subpage test/subpage\"},\"dsr\":[0,38,28,2]}'>/subpage</a></p>\n"); add("html2html", "Subpage noslash link", "<p data-parsoid='{\"dsr\":[0,37,0,0]}'><a rel=\"mw:WikiLink\" href=\"./Wiki/Subpage_test/subpage\" title=\"Wiki/Subpage test/subpage\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Subpage_test/subpage\"},\"sa\":{\"href\":\"wiki/Subpage test/subpage\"},\"dsr\":[0,37,28,2]}'>subpage</a></p>\n"); -add("html2html", "Render invalid page names as plain text (bug 51090)", "<p data-parsoid='{\"dsr\":[0,141,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[0,141,8,9]}'>[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n[[foo~~~bar]]\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]</span></p>\n\n<p data-parsoid='{\"dsr\":[143,389,0,0]}'>[[<span about=\"#mwt34\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[145,162,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"./../foo\"}},\"i\":0}}]}'>./../foo</span>|bar]]\n[[<span about=\"#mwt35\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[171,185,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo/.\"}},\"i\":0}}]}'>foo/.</span>|bar]]\n[[<span about=\"#mwt36\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[194,209,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo/..\"}},\"i\":0}}]}'>foo/..</span>|bar]]\n[[<span about=\"#mwt37\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[218,237,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo~~~~bar\"}},\"i\":0}}]}'>foo~~~~bar</span>]]\n[[<span about=\"#mwt38\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[242,258,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo>bar\"}},\"i\":0}}]}'>foo>bar</span>]]\n[[<span about=\"#mwt39\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[263,282,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo././bar\"}},\"i\":0}}]}'>foo././bar</span>]]\n[[<span about=\"#mwt40\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[287,303,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo{bar\"}},\"i\":0}}]}'>foo{bar</span>]]\n[[<span about=\"#mwt41\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[308,324,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo}bar\"}},\"i\":0}}]}'>foo}bar</span>]]\n[[<span about=\"#mwt42\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[329,345,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo[bar\"}},\"i\":0}}]}'>foo[bar</span>]]\n[[<span about=\"#mwt43\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[350,366,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo]bar\"}},\"i\":0}}]}'>foo]bar</span>]]\n[[<span about=\"#mwt44\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[371,387,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo<bar\"}},\"i\":0}}]}'>foo<bar</span>]]</p>\n"); +add("html2html", "Render invalid page names as plain text (bug 51090)", "<p data-parsoid='{\"dsr\":[0,277,0,0]}'><span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[0,33,8,9]}'>[[./../foo|bar]]</span>\n<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[34,63,8,9]}'>[[foo�|bar]]</span>\n<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[64,94,8,9]}'>[[foo/.|bar]]</span>\n<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[95,126,8,9]}'>[[foo/..|bar]]</span>\n<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[127,157,8,9]}'>[[foo~~~bar]]</span>\n<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[158,186,8,9]}'>[[foo>bar]]</span>\n[[foo[bar]]\n<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[199,221,8,9]}'>[[.]]</span>\n<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[222,245,8,9]}'>[[..]]</span>\n<span typeof=\"mw:Nowiki\" data-parsoid='{\"dsr\":[246,277,8,9]}'>[[foo././bar]]</span></p>\n\n<p data-parsoid='{\"dsr\":[279,525,0,0]}'>[[<span about=\"#mwt34\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[281,298,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"./../foo\"}},\"i\":0}}]}'>./../foo</span>|bar]]\n[[<span about=\"#mwt35\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[307,321,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo/.\"}},\"i\":0}}]}'>foo/.</span>|bar]]\n[[<span about=\"#mwt36\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[330,345,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo/..\"}},\"i\":0}}]}'>foo/..</span>|bar]]\n[[<span about=\"#mwt37\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[354,373,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo~~~~bar\"}},\"i\":0}}]}'>foo~~~~bar</span>]]\n[[<span about=\"#mwt38\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[378,394,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo>bar\"}},\"i\":0}}]}'>foo>bar</span>]]\n[[<span about=\"#mwt39\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[399,418,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo././bar\"}},\"i\":0}}]}'>foo././bar</span>]]\n[[<span about=\"#mwt40\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[423,439,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo{bar\"}},\"i\":0}}]}'>foo{bar</span>]]\n[[<span about=\"#mwt41\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[444,460,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo}bar\"}},\"i\":0}}]}'>foo}bar</span>]]\n[[<span about=\"#mwt42\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[465,481,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo[bar\"}},\"i\":0}}]}'>foo[bar</span>]]\n[[<span about=\"#mwt43\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[486,502,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo]bar\"}},\"i\":0}}]}'>foo]bar</span>]]\n[[<span about=\"#mwt44\" typeof=\"mw:Transclusion\" data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[507,523,null,null]}' data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo<bar\"}},\"i\":0}}]}'>foo<bar</span>]]</p>\n"); add("html2html", "Disabled subpages", "<p data-parsoid='{\"dsr\":[0,58,0,0]}'>[/index.php?title=/subpage&action=edit&redlink=1 /subpage]</p>\n"); add("html2html", "BUG 561: {{/Subpage}}", "<p data-parsoid='{\"dsr\":[0,66,0,0]}'>[/index.php?title=Page/Subpage&action=edit&redlink=1 Page/Subpage]</p>\n"); add("html2html", "Link to category", "<p data-parsoid='{\"dsr\":[0,72,0,0]}'><a rel=\"mw:WikiLink\" href=\"./Wiki/Category:MediaWiki_User's_Guide\" title=\"Wiki/Category:MediaWiki User's Guide\" data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Category:MediaWiki_User's_Guide\"},\"sa\":{\"href\":\"wiki/Category:MediaWiki User's Guide\"},\"dsr\":[0,72,39,2]}'>Category:MediaWiki User's Guide</a></p>\n"); @@ -1118,7 +1118,7 @@ add("html2wt", "Parsoid-specific image handling - caption with a template in it", "[[File:Foobar.jpg|thumb|200x200px|This caption has a {{echo|transclusion}} in it.]]\n"); add("html2wt", "Subpage link", "[[wiki/Subpage test/subpage|/subpage]]\n"); add("html2wt", "Subpage noslash link", "[[wiki/Subpage test/subpage|subpage]]\n"); -add("html2wt", "Render invalid page names as plain text (bug 51090)", "<nowiki>[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n[[foo~~~bar]]\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]</nowiki>\n\n[[{{echo|./../foo}}|bar]]\n[[{{echo|foo/.}}|bar]]\n[[{{echo|foo/..}}|bar]]\n[[{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}]]\n[[{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}]]\n[[{{echo|foo}bar}}]]\n[[{{echo|foo[bar}}]]\n[[{{echo|foo]bar}}]]\n[[{{echo|foo<bar}}]]\n"); +add("html2wt", "Render invalid page names as plain text (bug 51090)", "<nowiki>[[./../foo|bar]]</nowiki>\n<nowiki>[[foo�|bar]]</nowiki>\n<nowiki>[[foo/.|bar]]</nowiki>\n<nowiki>[[foo/..|bar]]</nowiki>\n<nowiki>[[foo~~~bar]]</nowiki>\n<nowiki>[[foo>bar]]</nowiki>\n[[foo[bar]]\n<nowiki>[[.]]</nowiki>\n<nowiki>[[..]]</nowiki>\n<nowiki>[[foo././bar]]</nowiki>\n\n[[{{echo|./../foo}}|bar]]\n[[{{echo|foo/.}}|bar]]\n[[{{echo|foo/..}}|bar]]\n[[{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}]]\n[[{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}]]\n[[{{echo|foo}bar}}]]\n[[{{echo|foo[bar}}]]\n[[{{echo|foo]bar}}]]\n[[{{echo|foo<bar}}]]\n"); add("html2wt", "Disabled subpages", "[/index.php?title=/subpage&action=edit&redlink=1 /subpage]\n"); add("html2wt", "BUG 561: {{/Subpage}}", "[/index.php?title=Page/Subpage&action=edit&redlink=1 Page/Subpage]\n"); add("html2wt", "Link to category", "[[wiki/Category:MediaWiki User's Guide|Category:MediaWiki User's Guide]]\n"); @@ -1910,7 +1910,7 @@ add("selser", "Render invalid page names as plain text (bug 51090) [0,0,1]", "[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n[[foo~~~bar]]\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]\n\n[[{{echo|./../foo}}|bar]]\n[[{{echo|foo/.}}|bar]]\n[[{{echo|foo/..}}|bar]]\n[[{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}]]\n[[{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}]]\n[[{{echo|foo}bar}}]]\n[[{{echo|foo[bar}}]]\n[[{{echo|foo]bar}}]]\n[[{{echo|foo<bar}}]]"); add("selser", "Render invalid page names as plain text (bug 51090) [2,2,[3,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0]]", "pwgl4v8r9af6flxr\n\n[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n[[foo~~~bar]]\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]\n\nhtc0s57znl9v0a4i\n\n{{echo|./../foo}}{{echo|foo/.}}|bar]]\n[[{{echo|foo/..}}|bar]]\n[[{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}]]\n[[{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}]]\n[[{{echo|foo}bar}}]]\n[[{{echo|foo[bar}}{{echo|foo]bar}}]]\n[[{{echo|foo<bar}}]]"); add("selser", "Render invalid page names as plain text (bug 51090) [0,3,2]", "[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n[[foo~~~bar]]\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]\n\ngkfu6gduolqmpldi\n\n[[{{echo|./../foo}}|bar]]\n[[{{echo|foo/.}}|bar]]\n[[{{echo|foo/..}}|bar]]\n[[{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}]]\n[[{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}]]\n[[{{echo|foo}bar}}]]\n[[{{echo|foo[bar}}]]\n[[{{echo|foo]bar}}]]\n[[{{echo|foo<bar}}]]"); -add("selser", "Render invalid page names as plain text (bug 51090) [[2],0,[4,0,2,0,0,0,2,0,0,0,0,0,0,0,4,0,0,0,0,0,4,0,3]]", "8sctlarbskfswcdi<nowiki>[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n[[foo~~~bar]]\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]</nowiki>\n\nfxzu21euibpgb9{{echo|./../foo}}k3i4gi7d5yst6gvi|bar]]\n[[{{echo|foo/.}}|bar]]\n[[{{echo|foo/..}}<nowiki>7zyih9glwodmquxr|bar]]\n[[</nowiki>{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}]]\n[[{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}3e27dqprn1k2zkt9{{echo|foo}bar}}]]\n[[{{echo|foo[bar}}]]\n[[{{echo|foo]bar}}xof8d4gk7hw7b9{{echo|foo<bar}}\n"); +add("selser", "Render invalid page names as plain text (bug 51090) [[2],0,[4,0,2,0,0,0,2,0,0,0,0,0,0,0,4,0,0,0,0,0,4,0,3]]", "8sctlarbskfswcdi<nowiki>[[./../foo|bar]]</nowiki>\n<nowiki>[[foo�|bar]]</nowiki>\n<nowiki>[[foo/.|bar]]</nowiki>\n<nowiki>[[foo/..|bar]]</nowiki>\n<nowiki>[[foo~~~bar]]</nowiki>\n<nowiki>[[foo>bar]]</nowiki>\n[[foo[bar]]\n<nowiki>[[.]]</nowiki>\n<nowiki>[[..]]</nowiki>\n<nowiki>[[foo././bar]]</nowiki>\n\nfxzu21euibpgb9{{echo|./../foo}}k3i4gi7d5yst6gvi|bar]]\n[[{{echo|foo/.}}|bar]]\n[[{{echo|foo/..}}<nowiki>7zyih9glwodmquxr|bar]]\n[[</nowiki>{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}]]\n[[{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}3e27dqprn1k2zkt9{{echo|foo}bar}}]]\n[[{{echo|foo[bar}}]]\n[[{{echo|foo]bar}}xof8d4gk7hw7b9{{echo|foo<bar}}\n"); add("selser", "Render invalid page names as plain text (bug 51090) [0,0,4]", "[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n[[foo~~~bar]]\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]\n\n5cifaj4uowyaatt9\n"); add("selser", "Render invalid page names as plain text (bug 51090) [0,0,2]", "[[./../foo|bar]]\n[[foo�|bar]]\n[[foo/.|bar]]\n[[foo/..|bar]]\n[[foo~~~bar]]\n[[foo>bar]]\n[[foo[bar]]\n[[.]]\n[[..]]\n[[foo././bar]]\n\nff48sg2pipqwu3di\n\n[[{{echo|./../foo}}|bar]]\n[[{{echo|foo/.}}|bar]]\n[[{{echo|foo/..}}|bar]]\n[[{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}]]\n[[{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}]]\n[[{{echo|foo}bar}}]]\n[[{{echo|foo[bar}}]]\n[[{{echo|foo]bar}}]]\n[[{{echo|foo<bar}}]]"); add("selser", "Render invalid page names as plain text (bug 51090) [[4],3,[0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,4,0,0,0,0,0,2]]", "a8exokpi7bricnmi\n\n[[{{echo|./../foo}}<nowiki>yjmnkmy2satt9|bar]]\n[[</nowiki>{{echo|foo/.}}|bar]]\n[[{{echo|foo/..}}|bar]]\n[[{{echo|foo~~~~bar}}]]\n[[{{echo|foo>bar}}<nowiki>naobmwo11fnipb9]]\n[[</nowiki>{{echo|foo././bar}}]]\n[[{{echo|foo{bar}}]]\n[[{{echo|foo}bar}}rksixalimh392j4i{{echo|foo[bar}}]]\n[[{{echo|foo]bar}}]]\n[[{{echo|foo<bar}}<nowiki>xmch4v09b9m2huxr]]</nowiki>"); @@ -2051,16 +2051,16 @@ add("selser", "Table attribute safety [[0,[2,0]]]", "{|\n<!--hopuq8owdrv8to6r-->!+ style=\"<nowiki>border-width:expression(0+alert(document.cookie))</nowiki>\"| status\n|}"); add("selser", "Table attribute safety [[0,[0,3]]]", "{|\n!+ style=\"<nowiki>border-width:expression(0+alert(document.cookie))</nowiki>\"| status\n|}"); add("selser", "Table attribute safety [[0,[1,2]]]", "{|\n!+ style=\"<nowiki>border-width:expression(0+alert(document.cookie))</nowiki>\"| status<!--skyjeiq2kwr0be29-->\n|}"); -add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[0,1,4]]", "<div itemscope>\n\t<nowiki><meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n9lxnoixxq085b3xr</div>"); +add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[0,1,4]]", "<div itemscope>\n\t<nowiki><meta itemprop=\"hello\" content=\"world\"></nowiki>\n\t<nowiki><meta http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><link itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n9lxnoixxq085b3xr</div>"); add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[2,0,2]]", "<div itemscope>1tq4nuxaexcu9pb9\n\t<meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\">\nkcbq6pis8m2t9\n</div>"); add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [2]", "rcydl379jopkqpvi<div itemscope>\n\t<meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\">\n</div>"); -add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[0,[2],2]]", "<div itemscope>\n\t047cgm8enksrwwmi<nowiki><meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n4pny61gu2tx7ds4i\n</div>"); -add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[4,1,0]]", "<div itemscope>spu0tptv3lwka9k9\n<nowiki><meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n</div>"); +add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[0,[2],2]]", "<div itemscope>\n\t047cgm8enksrwwmi<nowiki><meta itemprop=\"hello\" content=\"world\"></nowiki>\n\t<nowiki><meta http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><link itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n4pny61gu2tx7ds4i\n</div>"); +add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[4,1,0]]", "<div itemscope>spu0tptv3lwka9k9\n<nowiki><meta itemprop=\"hello\" content=\"world\"></nowiki>\n\t<nowiki><meta http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><link itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n</div>"); add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[4,[3],0]]", "<div itemscope>99wejgddgaybke29\n</div>"); add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[0,0,4]]", "<div itemscope>\n\t<meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\">\new3jgq2guzhncdi</div>"); -add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[2,1,0]]", "<div itemscope>px2m4ecth1qyqfr\n\t<nowiki><meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n</div>"); -add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[0,1,0]]", "<div itemscope>\n\t<nowiki><meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n</div>"); -add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[0,[2],0]]", "<div itemscope>\n\tx3hbyea8xovtpgb9<nowiki><meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n</div>"); +add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[2,1,0]]", "<div itemscope>px2m4ecth1qyqfr\n\t<nowiki><meta itemprop=\"hello\" content=\"world\"></nowiki>\n\t<nowiki><meta http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><link itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n</div>"); +add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[0,1,0]]", "<div itemscope>\n\t<nowiki><meta itemprop=\"hello\" content=\"world\"></nowiki>\n\t<nowiki><meta http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><link itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n</div>"); +add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[0,[2],0]]", "<div itemscope>\n\tx3hbyea8xovtpgb9<nowiki><meta itemprop=\"hello\" content=\"world\"></nowiki>\n\t<nowiki><meta http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\"></nowiki>\n\t<nowiki><link itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" href=\"{{SERVER}}\"></nowiki>\n\t<nowiki><link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\"></nowiki>\n</div>"); add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [1]", "<div itemscope=\"\" data-foobar=\"q8adwgvp6owjc3di\">\n\t<meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\">\n</div>"); add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[2,2,0]]", "<div itemscope>tphlnpjbn019k9\n\tzfr328x4l016pqfr\n<meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\">\n</div>"); add("selser", "Sanitizer: Validating that <meta> and <link> work, but only for Microdata [[3,0,4]]", "<div itemscope>\n<meta itemprop=\"hello\" content=\"world\">\n\t<meta http-equiv=\"refresh\" content=\"5\">\n\t<meta itemprop=\"hello\" http-equiv=\"refresh\" content=\"5\">\n\t<link itemprop=\"hello\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" href=\"{{SERVER}}\">\n\t<link rel=\"stylesheet\" itemprop=\"hello\" href=\"{{SERVER}}\">\naqpwsr7leatyy14i</div>"); @@ -2467,7 +2467,7 @@ add("selser", "Improperly nested inline or quotes tags with whitespace in between [[[0,3],[3],0,3,0]]", "<span> </span></s>\n ''"); add("selser", "Improperly nested inline or quotes tags with whitespace in between [[[2,1],[3],3,[0,3],0]]", "<span>i9p8te7ufdmquxr <s data-foobar=\"xoximjgruc95dn29\">x</span></s>''' ''' ''"); add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [0,4,[2,[[4],2]]]", "\n\neyvglbq1wiykfbt9<table><!--yjj7q4l8vy22o6r-->\n<tr><td>c2kzihajh6oxyldi</td><!--u6dd8p15d8guv7vi-->\n</table>"); -add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [1,3,[2,[[4],3]]]", "<nowiki> </nowiki><nowiki>|| ||</nowiki><table><!--07pdt8u7nxvcmcxr-->\n<tr><td>w6cuullrqw0wl8fr</td>\n</table>"); +add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [1,3,[2,[[4],3]]]", "<nowiki> </nowiki><nowiki>||</nowiki> <nowiki>||</nowiki><table><!--07pdt8u7nxvcmcxr-->\n<tr><td>w6cuullrqw0wl8fr</td>\n</table>"); add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [3,2,2]", "r7yvmnw0lwstt9\njvym2daxe28adcxr<table>\n<tr> || ||\n<td> a\n</table>"); add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [3,2,1]", "mk36x4nnqo7p66r\n<table data-foobar=\"j76ebe3ig8u59udi\">\n<tr> || ||\n<td> a\n</table>"); add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [0,3,[2,2]]", "<table><!--20ybuhlylvnjc3di-->\n<!--ia2m4awxfye97ldi--><tr><td> a\n</table>"); @@ -2479,7 +2479,7 @@ add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [0,3,4]", "\n\n9k078dwzmb6e0zfr\n"); add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [[3],0,2]", "\n79u7w8mk0qyc766r<table>\n<tr> || ||\n<td> a\n</table>"); add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [0,0,2]", "\n17g7ad7yjq1zia4i<table>\n<tr> || ||\n<td> a\n</table>"); -add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [1,0,1]", "<nowiki> </nowiki><nowiki>|| ||</nowiki>\n<table data-foobar=\"734xmyt3rp5jyvi\">\n<tr> || ||\n<td> a\n</table>"); +add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [1,0,1]", "<nowiki> </nowiki><nowiki>||</nowiki> <nowiki>||</nowiki>\n<table data-foobar=\"734xmyt3rp5jyvi\">\n<tr> || ||\n<td> a\n</table>"); add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [2,0,[0,3]]", "z8xg0t8oxy8k6gvi\n\n\n<table></table>"); add("selser", "2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost) [2,2,[2,[3,2]]]", "4p9b5ylwp6gpsyvi\n\n\n\n52u735k3ah96n7b9\n<table><!--u4n4phdgngffxbt9-->\n<!--ox538fcmtef2bj4i-->\n</table>"); add("selser", "Table in fosterable position 5", "{{OpenTable}}\n<div>\n{|\n|}\n"); diff --git a/tests/parserTests.txt b/tests/parserTests.txt index 8f7cedf..94e7268 100644 --- a/tests/parserTests.txt +++ b/tests/parserTests.txt @@ -1459,7 +1459,7 @@ !! html <p>* </nowiki> tag</p> !! wikitext -<nowiki>* </nowiki></nowiki> tag +<nowiki>*</nowiki> <nowiki></nowiki></nowiki> tag !! end !! test -- To view, visit https://gerrit.wikimedia.org/r/227481 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I7aa00ee0020c5f69c3acb1cab069ceab77b75ab4 Gerrit-PatchSet: 4 Gerrit-Project: mediawiki/services/parsoid Gerrit-Branch: master Gerrit-Owner: Arlolra <abrea...@wikimedia.org> Gerrit-Reviewer: Arlolra <abrea...@wikimedia.org> Gerrit-Reviewer: Cscott <canan...@wikimedia.org> Gerrit-Reviewer: Subramanya Sastry <ssas...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits