Arlolra has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/371726 )

Change subject: T65143: Stop shuttling link content through tree building as 
dom fragment tokens
......................................................................

T65143: Stop shuttling link content through tree building as dom fragment tokens

Change-Id: Iccdbacc06d91eaaba50df0cda0698cb9156b5762
---
M lib/wt2html/tt/LinkHandler.js
M tests/parserTests-blacklist.js
M tests/parserTests.txt
3 files changed, 71 insertions(+), 48 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid 
refs/changes/26/371726/1

diff --git a/lib/wt2html/tt/LinkHandler.js b/lib/wt2html/tt/LinkHandler.js
index 50dd701..fa50190 100644
--- a/lib/wt2html/tt/LinkHandler.js
+++ b/lib/wt2html/tt/LinkHandler.js
@@ -395,7 +395,7 @@
  *
  * @return {Array} Content tokens
  */
-WikiLinkHandler.prototype.addLinkAttributesAndGetContent = function(newTk, 
token, target, buildDOMFragment) {
+WikiLinkHandler.prototype.addLinkAttributesAndGetContent = function(newTk, 
token, target) {
        var attribs = token.attribs;
        var dataAttribs = token.dataAttribs;
        var newAttrData = buildLinkAttrs(attribs, true, null, [new KV('rel', 
'mw:WikiLink')]);
@@ -443,14 +443,7 @@
                        }
                }
 
-               if (buildDOMFragment) {
-                       // content = [part 0, .. part l-1]
-                       // offsets = [start(part-0), end(part l-1)]
-                       var offsets = dataAttribs.tsr ? 
[content[0].srcOffsets[0], content[l - 1].srcOffsets[1]] : null;
-                       content = [ Util.getDOMFragmentToken(out, offsets, { 
noPWrapping: true, noPre: true, token: token }) ];
-               } else {
-                       content = out;
-               }
+               content = out;
        } else {
                newTk.dataAttribs.stx = 'simple';
                var morecontent = Util.decodeURI(target.href);
@@ -490,7 +483,7 @@
  */
 WikiLinkHandler.prototype.renderWikiLink = function(token, frame, cb, target) {
        var newTk = new TagTk('a');
-       var content = this.addLinkAttributesAndGetContent(newTk, token, target, 
true);
+       var content = this.addLinkAttributesAndGetContent(newTk, token, target);
 
        newTk.addNormalizedAttribute('href', this.env.makeLink(target.title), 
target.hrefSrc);
 
@@ -597,7 +590,7 @@
 
        var tokens = [];
        var newTk = new TagTk('a', [], token.dataAttribs);
-       var content = this.addLinkAttributesAndGetContent(newTk, token, target, 
true);
+       var content = this.addLinkAttributesAndGetContent(newTk, token, target);
 
        // We set an absolute link to the article in the other wiki/language
        var absHref = target.interwiki.url.replace("$1", target.href);
@@ -2095,8 +2088,6 @@
                } else {
                        aStart.addAttribute('href', hrefWithEntities);
                }
-
-               content = Util.getDOMFragmentToken(content, dataAttribs.tsr ? 
dataAttribs.contentOffsets : null, { noPWrapping: true, noPre: true, token: 
token });
 
                cb({
                        tokens: [aStart].concat(content, [new EndTagTk('a')]),
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index c939609..7f34d94 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -54,8 +54,10 @@
 add("wt2html", "6. Pre-blocks should extend across lines with leading WS even 
when there is no wrappable content", "<pre 
data-parsoid='{\"dsr\":[0,26,1,0]}'>a\n\n <!-- continue -->\nb</pre>\n\n<pre 
data-parsoid='{\"dsr\":[28,30,1,0]}'>c</pre>\n \n<p 
data-parsoid='{\"dsr\":[33,34,0,0]}'>d</p>");
 add("wt2html", "Definition lists: ignore colons inside tags", "<dl 
data-parsoid='{\"dsr\":[0,39,0,0]}'><dt data-parsoid='{\"dsr\":[0,39,1,0]}'>one 
<b data-parsoid='{\"stx\":\"html\",\"dsr\":[5,34,3,4]}'>two<span 
typeof=\"mw:DisplaySpace mw:Placeholder\" data-parsoid='{\"src\":\" 
\",\"isDisplayHack\":true,\"dsr\":[11,12,null,0]}'> </span>: tag <i 
data-parsoid='{\"stx\":\"html\",\"dsr\":[18,29,3,4]}'>fun:</i>:</b>: 
def</dt></dl>");
 add("wt2html", "Definition Lists: colons and tables 1", "<dl 
data-parsoid='{\"dsr\":[0,21,0,0]}'><dd 
data-parsoid='{\"dsr\":[0,10,1,0]}'><table 
data-parsoid='{\"dsr\":[1,10,2,2]}'>\n<tbody 
data-parsoid='{\"dsr\":[4,8,0,0]}'><tr 
data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[4,7,0,0]}'><td
 data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[4,7,1,0]}'> 
x</td></tr>\n</tbody></table></dd>\n<dd 
data-parsoid='{\"dsr\":[11,21,1,0]}'><table 
data-parsoid='{\"dsr\":[12,21,2,2]}'>\n<tbody 
data-parsoid='{\"dsr\":[15,19,0,0]}'><tr 
data-parsoid='{\"autoInsertedEnd\":true,\"autoInsertedStart\":true,\"dsr\":[15,18,0,0]}'><td
 data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[15,18,1,0]}'> 
y</td></tr>\n</tbody></table></dd></dl>");
-add("wt2html", "T4702: Mismatched <i>, <b> and <a> tags are invalid", "<p 
data-parsoid='{\"dsr\":[0,204,0,0]}'><i 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[0,29,2,0]}'><a 
rel=\"mw:ExtLink\" href=\"http://example.com\"; 
data-parsoid='{\"targetOff\":22,\"contentOffsets\":[22,28],\"dsr\":[2,29,20,1]}'>text<i
 data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[26,28,2,0]}'></i></a></i>\n<a 
rel=\"mw:ExtLink\" href=\"http://example.com\"; 
data-parsoid='{\"targetOff\":50,\"contentOffsets\":[50,57],\"dsr\":[30,58,20,1]}'><b
 data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[50,57,3,0]}'>text</b></a><b 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[58,61,3,0]}'></b>\n<i 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[62,106,2,0]}'>Something <a 
rel=\"mw:ExtLink\" href=\"http://example.com\"; 
data-parsoid='{\"targetOff\":94,\"contentOffsets\":[94,105],\"dsr\":[74,106,20,1]}'>in
 italic<i 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[103,105,2,0]}'></i></a></i>\n<i
 data-parsoid='{\"dsr\":[107,164,2,2]}'>Something <a rel=\"mw:ExtLink\" 
href=\"http://example.com\"; 
data-parsoid='{\"targetOff\":139,\"contentOffsets\":[139,160],\"dsr\":[119,161,20,1]}'>mixed<b
 data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[144,160,3,0]}'><i 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[147,160,2,0]}'>, even 
bold</i></b></a>'</i>\n<b 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[165,204,3,0]}'><i 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[168,204,2,0]}'>Now <a 
rel=\"mw:ExtLink\" href=\"http://example.com\"; 
data-parsoid='{\"targetOff\":194,\"contentOffsets\":[194,203],\"dsr\":[174,204,20,1]}'>both<b
 data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[198,203,3,0]}'><i 
data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[201,203,2,0]}'></i></b></a></i></b></p>");
-add("wt2html", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check)", "<p data-parsoid='{\"dsr\":[0,60,0,0]}'><i 
data-parsoid='{\"dsr\":[0,60,2,2]}'>Some <a rel=\"mw:ExtLink\" 
href=\"http://example.com/\"; 
data-parsoid='{\"targetOff\":28,\"contentOffsets\":[28,56],\"dsr\":[7,57,21,1]}'>pretty
 <i data-parsoid='{\"dsr\":[35,46,2,2]}'>italics</i> and stuff</a>!</i></p>");
+add("wt2html", "T4702: Mismatched <i>, <b> and <a> tags are invalid", "<p 
data-parsoid='{\"dsr\":[0,209,0,0]}'><i data-parsoid='{\"dsr\":[0,31,2,2]}'><a 
rel=\"mw:ExtLink\" href=\"http://example.com\"; 
data-parsoid='{\"targetOff\":22,\"contentOffsets\":[22,28],\"autoInsertedEnd\":true,\"dsr\":[2,29,20,0]}'>text</a></i>\n<a
 rel=\"mw:ExtLink\" href=\"http://example.com\"; 
data-parsoid='{\"targetOff\":50,\"contentOffsets\":[50,57],\"dsr\":[29,58,20,1]}'><b
 data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[50,57,3,0]}'>text</b></a>\n<i 
data-parsoid='{\"dsr\":[62,108,2,2]}'>Something <a rel=\"mw:ExtLink\" 
href=\"http://example.com\"; 
data-parsoid='{\"targetOff\":94,\"contentOffsets\":[94,105],\"autoInsertedEnd\":true,\"dsr\":[74,106,20,0]}'>in
 italic</a></i>\n<i data-parsoid='{\"dsr\":[106,163,2,2]}'>Something <a 
rel=\"mw:ExtLink\" href=\"http://example.com\"; 
data-parsoid='{\"targetOff\":139,\"contentOffsets\":[139,160],\"autoInsertedEnd\":true,\"dsr\":[119,161,20,0]}'>mixed</a></i><a
 rel=\"mw:ExtLink\" href=\"http://example.com\"; 
data-parsoid='{\"targetOff\":139,\"contentOffsets\":[139,160],\"autoInsertedStart\":true,\"dsr\":[146,161,0,1]}'><b
 data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[146,160,3,0]}'>, even 
bold</b></a>\n<i data-parsoid='{\"dsr\":[165,209,2,2]}'><b 
data-parsoid='{\"dsr\":[167,207,3,3]}'>Now <a rel=\"mw:ExtLink\" 
href=\"http://example.com\"; 
data-parsoid='{\"targetOff\":194,\"contentOffsets\":[194,203],\"autoInsertedEnd\":true,\"dsr\":[174,204,20,0]}'>both</a></b></i></p>");
+add("wt2html", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check)", "<p data-parsoid='{\"dsr\":[0,60,0,0]}'><i 
data-parsoid='{\"dsr\":[0,59,2,2]}'>Some <a rel=\"mw:ExtLink\" 
href=\"http://example.com/\"; 
data-parsoid='{\"targetOff\":28,\"contentOffsets\":[28,56],\"autoInsertedEnd\":true,\"dsr\":[7,57,21,0]}'>pretty
 </a></i><a rel=\"mw:ExtLink\" href=\"http://example.com/\"; 
data-parsoid='{\"targetOff\":28,\"contentOffsets\":[28,56],\"autoInsertedStart\":true,\"dsr\":[37,57,0,1]}'>italics<i
 data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[44,56,2,0]}'> and 
stuff</i></a><i 
data-parsoid='{\"autoInsertedStart\":true,\"dsr\":[57,60,0,2]}'>!</i></p>");
+add("wt2html", "External link containing double-single-quotes with no space 
separating the url from text in italics", "<p 
data-parsoid='{\"dsr\":[0,146,0,0]}'><a rel=\"mw:ExtLink\" 
href=\"http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm\"; 
data-parsoid='{\"targetOff\":56,\"contentOffsets\":[56,145],\"autoInsertedEnd\":true,\"dsr\":[0,146,56,0]}'><i
 data-parsoid='{\"dsr\":[56,82,2,2]}'>La muerte de Casagemas</i> (1901) en el 
sitio de </a><a rel=\"mw:WikiLink\" href=\"./Museo_Picasso_(París)\" 
title=\"Museo Picasso (París)\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Museo_Picasso_(París)\"},\"sa\":{\"href\":\"Museo
 Picasso (París)\"},\"dsr\":[105,145,24,2]}'>Museo Picasso</a>.</p>");
+add("wt2html", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check)", "<p data-parsoid='{\"dsr\":[0,47,0,0]}'><i 
data-parsoid='{\"dsr\":[0,46,2,2]}'>Some <a rel=\"mw:WikiLink\" href=\"./Link\" 
title=\"Link\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Link\"},\"sa\":{\"href\":\"Link\"},\"autoInsertedEnd\":true,\"dsr\":[7,44,7,0]}'>pretty
 </a></i><a rel=\"mw:WikiLink\" href=\"./Link\" title=\"Link\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Link\"},\"sa\":{\"href\":\"Link\"},\"autoInsertedStart\":true,\"dsr\":[23,44,0,2]}'>italics<i
 data-parsoid='{\"autoInsertedEnd\":true,\"dsr\":[30,42,2,0]}'> and 
stuff</i></a><i 
data-parsoid='{\"autoInsertedStart\":true,\"dsr\":[44,47,0,2]}'>!</i></p>");
 add("wt2html", "Self-link to numeric title", "<p 
data-parsoid='{\"dsr\":[0,5,0,0]}'><a rel=\"mw:WikiLink\" href=\"./0\" 
title=\"0\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./0\"},\"sa\":{\"href\":\"0\"},\"dsr\":[0,5,2,2]}'>0</a></p>");
 add("wt2html", "<nowiki> inside a link", "<p 
data-parsoid='{\"dsr\":[0,96,0,0]}'><a rel=\"mw:WikiLink\" href=\"./Main_Page\" 
title=\"Main Page\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main_Page\"},\"sa\":{\"href\":\"Main&lt;nowiki>
 Page&lt;/nowiki>\"},\"dsr\":[0,30,2,2]}'>Main Page</a> <a rel=\"mw:WikiLink\" 
href=\"./Main_Page\" title=\"Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Main_Page\"},\"sa\":{\"href\":\"Main
 Page\"},\"dsr\":[31,96,12,2]}'>the main page <span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[57,94,8,9]}'>[it's not very good]</span></a></p>");
 add("wt2html", "Interlanguage link with spacing", "<p 
data-parsoid='{\"dsr\":[0,14,0,0]}'>Blah blah blah</p>\n<link 
rel=\"mw:PageProp/Language\" 
href=\"http://zh.wikipedia.org/wiki/%20%20%20%20Chinese%20%20%20%20%20\"; 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"http://zh.wikipedia.org/wiki/%20%20%20%20Chinese%20%20%20%20%20\"},\"sa\":{\"href\":\";
   zh  :    Chinese     \"},\"dsr\":[15,43,null,null]}'/>");
@@ -228,7 +230,8 @@
 add("wt2wt", "T2289: literal \">\"-token in bracketed URL", 
"[http://www.example.com/ <b>html</b> stuff]\n");
 add("wt2wt", "T2289: literal double quote in bracketed URL", 
"[http://www.example.com/ \"hello\" stuff]\n");
 add("wt2wt", "External links: multiple legal whitespace is fine, Magnus. Don't 
break it please. (T7081)", "[http://www.example.com test]\n");
-add("wt2wt", "T4702: Mismatched <i>, <b> and <a> tags are invalid", 
"''[http://example.com text''<nowiki/>'']''\n[http://example.com 
'''text''']'''<nowiki/>'''\n''Something [http://example.com in 
italic''<nowiki/>'']''\n''Something [http://example.com mixed''''', even 
bold''''']'''\n'''''Now [http://example.com both'''''<nowiki/>''''']'''''\n");
+add("wt2wt", "T4702: Mismatched <i>, <b> and <a> tags are invalid", 
"''[http://example.com text]''\n[http://example.com '''text''']\n''Something 
[http://example.com in italic]''\n''Something [http://example.com 
mixed]''[http://example.com ''', even bold''']\n'''''Now [http://example.com 
both]'''''\n");
+add("wt2wt", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check)", "''Some [http://example.com/ pretty 
]''[http://example.com/ italics'' and stuff'']''!''\n");
 add("wt2wt", "External link containing double-single-quotes with no space 
separating the url from text in italics", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm ''La muerte de 
Casagemas'' (1901) en el sitio de ][[Museo Picasso (París)|Museo Picasso]].\n");
 add("wt2wt", "Unclosed and unmatched quotes", "'''''Bold italic text '''with 
bold deactivated''' in between.'''''\n\n'''''Bold italic text ''with italic 
deactivated'' in between.'''''\n\n'''Bold text..'''\n\n..spanning two 
paragraphs (should not work).'''<nowiki/>'''\n\n'''Bold tag left 
open'''\n\n''Italic tag left open''\n\nNormal text.\n\n<!-- Unmatching number 
of opening, closing tags: -->\n'''This year'<nowiki/>'''s election ''should'' 
beat '''last year''''s.\n\n''Tom'''s car is bigger than 
'''''<nowiki/>'''Susan'''s.\n\nPlain ''italic'''s plain\n");
 add("wt2wt", "A table with captions with non-default spaced attributes and a 
table row", "{|\n|+ style=\"color: red;\" |caption2\n|+ style=\"color: red;\" | 
caption3\n|-\n| foo\n|}");
@@ -241,6 +244,7 @@
 add("wt2wt", "Build table with pipe as data", "{| class=\"wikitable\"\n! 
header\n! second header\n|- style=\"color:red;\"\n| data || 
style=\"color:red;\" | second data\n|-\n| style=\"color:red;\" |<nowiki> data 
with | </nowiki>|| style=\"color:red;\" | second data with |\n|-\n||<nowiki> 
data with | </nowiki>||| second data with |\n|}");
 add("wt2wt", "Piped link with multiple pipe characters in link text", "[[Main 
Page|<nowiki>|The|Main|Page|</nowiki>]]\n");
 add("wt2wt", "Link containing \"#<\" and \"#>\" % as a hex sequences- these 
are valid section anchors", "[[%23%3c|#<]][[%23%3e|#>]]\n");
+add("wt2wt", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check)", "''Some [[Link|pretty ]]''[[Link|italics'' and 
stuff'']]''!''\n");
 add("wt2wt", "Parsoid-centric test: Whitespace in ext- and wiki-links should 
be preserved", "[[Foo|  bar]]\n\n[[Foo|  ''bar'']]\n\n[http://wp.org 
foo]\n\n[http://wp.org ''foo'']\n");
 add("wt2wt", "Handling html with a div self-closing tag", "<div title=\"\" 
/>\n<div title=\"\" />\n<div title=\"\" />\n<div title=\"bar\" />\n<div 
title=\"bar\" />\n<div title=\"bar/\">");
 add("wt2wt", "Handling html with a br self-closing tag", "<br title=\"\" 
/>\n<br title=\"\" />\n<br title=\"\" />\n<br title=\"bar\" />\n<br 
title=\"bar\" />\n<br title=\"bar/\">\n");
@@ -1126,38 +1130,50 @@
 add("selser", "External links: multiple legal whitespace is fine, Magnus. 
Don't break it please. (T7081) [2]", "17fhfw0\n\n[http://www.example.com  
test]");
 add("selser", "External links: multiple legal whitespace is fine, Magnus. 
Don't break it please. (T7081) [[2]]", "6srwd0[http://www.example.com  test]");
 add("selser", "External links: multiple legal whitespace is fine, Magnus. 
Don't break it please. (T7081) [1]", "[http://www.example.com  test]");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[3],0,0,0,0,[0,[3,1]],0,[4,3,2],0,3]]", "''<nowiki/>''\n[http://example.com 
'''text]'''\n''Something [http://example.com 
''<nowiki/>'']''\n''qkgn80o3zxsd'''\n");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid [2]", 
"1m5psig\n\n''[http://example.com text'']\n[http://example.com 
'''text]'''\n''Something [http://example.com in italic'']\n''Something 
[http://example.com mixed''''', even bold]'''\n'''''Now [http://example.com 
both''''']");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid [1]", 
"''[http://example.com text'']\n[http://example.com '''text]'''\n''Something 
[http://example.com in italic'']\n''Something [http://example.com mixed''''', 
even bold]'''\n'''''Now [http://example.com both''''']");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[[2,0]],3,[[2]],1,4,[0,3],0,[0,4,4],4,1]]", "''[http://example.com 
zyb9y3text'']''[http://example.com 
'''1qoymvgtext''']'''<nowiki/>'''bw748n''Something ''\n''Something 
adl0iw1pgmuwk''y4f27b'''''Now [http://example.com both''''']'''");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[4,0,4,2,0,1,0,3,0,2]]", "1jjctz5\npqo6mlxj4zfi'''\n''Something 
[http://example.com in italic'']''\n\n1nkqnry'''''Now [http://example.com 
both''''']");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[4,0,[2],3,3,1,2,3,0,[[0,[3,0]]]]]", "fq633s\n[http://example.com 
z6k6a5'''text]''Something [http://example.com in italic'']''1itz7sk\n\n'''''Now 
[http://example.com ''''']'''''");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[[2,0]],3,[[2]],3,0,4,4,3,0,2]]", "''[http://example.com 
1fl7zurtext'']''[http://example.com 
'''g2czgytext''']\ntkxlfzewz40l\nb43mrw'''''Now [http://example.com 
both''''']");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[2,0,[[2]],0,0,3,0,2,0,[[0,2]]]]", "1su8ozt''[http://example.com 
text'']\n[http://example.com '''1yotag2text''']'''\n\nkcfz7g''Something 
[http://example.com mixed''''', even bold]'''\n'''''Now 
medcd9[http://example.com both''''']'''''");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[0,0,[2],1,3,[4,[3,0]],4,[0,[3,4],2],0,[1]]]", "''[http://example.com 
text'']\n[http://example.com 
1k1dra5'''text]'''<nowiki/>'''''2sgkur[http://example.com 
'']''chob23''Something [http://example.com 8v224l]17aioqf'<nowiki/>''\n'''''Now 
[http://example.com both''''']'''''");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[[2,4]],3,[1],0,4,[0,[0,1]],3,2,0,[3]]]", "''[http://example.com 
1fdmvh4text2yfn7v]''[http://example.com '''text''']'''10j1en2''Something 
[http://example.com in italic''<nowiki/>'']''16etdql''Something 
[http://example.com mixed''''', even bold]'''\n'''<nowiki/>'''");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[3],3,[3],1,4,[3,2],0,[0,[0,2],4],0,[4]]]", 
"''<nowiki/>''[http://example.com]'''<nowiki/>'''5vl9nm''4r1rc2[http://example.com
 in italic'']''\n''Something [http://example.com mixedxdfvtk''''', even 
bold]1enu0jj''\n'''1cffq00'''");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[[0,2]],2,[4],2,0,[4,[3,2]],3,[0,[0,3],0],0,[4]]]", "''[http://example.com 
texto8ckan'']''z9uyf8\n[http://example.com 
y33u36]y3ygwe'''\n''6qo38u[http://example.com cxfvtc'']Something 
[http://example.com mixed]'''\n'''fnt2s9'''");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[1,2,2,0,2,[4,[0,4]],0,[0,[0,[[3]]],0],0,2]]", "''[http://example.com 
text'']''1dtvvhy\n1owq85s[http://example.com 
'''text]'''2ovole\n''1hkfcxq[http://example.com in italic4ylldq]''\n''Something 
[http://example.com mixed'''''<nowiki/>''''']'''\n1sxxa72'''''Now 
[http://example.com both''''']");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[1],0,[4],0,0,[0,4],4,[0,1,3],3,[[4,3]]]]", "''[http://example.com 
text'']''\n[http://example.com 18j7tcl]'''\n''Something 
d5uz25''1ceigdx''Something [http://example.com mixed''''', even 
bold]'''9akd2o'''''\n");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[3],0,1,0,0,[2,[3,0]],3,[3,2,4],2,[2]]]", "''<nowiki/>''\n[http://example.com 
'''text]'''\n''442ldxSomething [http://example.com '']a0udil[http://example.com 
mixed''''', even bold]pigbwn''pn85gv\n'''26be4p''Now [http://example.com 
both''''']'''");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[4,2,3,2,3,[4,0],0,[0,2,0],0,0]]", 
"19v8d1luol8sn\n1g90nho'''''1smcwbl[http://example.com in 
italic'']''\n''Something 11ylls1[http://example.com mixed''''', even 
bold]'''\n'''''Now [http://example.com both''''']");
-add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[4,0,[3],4,0,4,2,3,0,2]]", 
"3dbdof\n[http://example.com]nssqhn\n147922y1mii58r\nuafhnx'''''Now 
[http://example.com both''''']");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[0,1,1]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de 
Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo 
Picasso]].][[Museo Picasso (París)|Museo Picasso]]<span 
data-foobar=\"1rbr6np\">.</span>\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[3],0,0,0,0,3,1,[[4]],4,1]]", "''<nowiki/>''\n\n[http://example.com 
'''text]\n''Something [http://example.com in italic'']Something 
[http://example.com mixed''''', even bold]''[http://example.com 
'''qkgn80''']o3zxsd'''''Now [http://example.com both''''']''\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid [2]", 
"1m5psig\n\n''[http://example.com text'']\n[http://example.com 
'''text]'''\n''Something [http://example.com in italic'']\n''Something 
[http://example.com mixed''''', even bold]'''\n'''''Now [http://example.com 
both''''']\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid [1]", 
"''[http://example.com text'']\n[\n\n[http://example.com '''text]\n''Something 
[http://example.com in italic'']\n'\n\n''Something [http://example.com 
mixed''''', even bold]''''', even bold]\n'''''Now [http://example.com 
both''''']\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[[2]],0,3,0,[2,1],4,[0,3],0,4,4]]", "''[http://example.com 
zyb9y3text]''\n\n''1qoymvgSomething [http://example.com in 
italic]''bw748n''Something ''''', even bold]adl0iw1pgmuwk\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[4,0,4,2,[2,[4]],0,2,[[3]],4,3]]", "1jjctz5\npqo6mlxj4zfi\n''1el0agbSomething 
[http://example.com 1nkqnry]''\n1rinixi\n''Something [http://example.com 
mixed''''', even bold]''[http://example.com '''<nowiki/>''']h8dwsm\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[4,0,[2],4,2,2,1,3,0,[[0,[3]]]]]", "fq633s\n[http://example.com 
z6k6a5'''text]11m7n2d1itz7sk''Something [http://example.com in 
italic'']\n'f42e6n\n''Something [http://example.com mixed''''', even 
bold]''\n'''''Now [http://example.com]'''''\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[[2]],0,2,0,[2,3],0,4,4,4,[2]]]", "''[http://example.com 
1fl7zurtext]''\ng2czgy\n[http://example.com '''text]\n''tkxlfzSomething 
''\newz40lb43mrwt7trn6''dul3l9'''Now [http://example.com both]'''''\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[2,0,[[2]],0,[3,[3]],0,[0,[3]],[[2]],3,1]]", "1su8ozt''[http://example.com 
text'']\n[\n[http://example.com 
'''1yotag2text''']\n''[http://example.com]''\n''Something 
[http://example.com]''[http://example.com '''kcfz7g, even bold''']'''''Now 
[http://example.com both''''']''\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[4,4,3,4,[4,4],4,[0,2],0,0,4]]", 
"106sq2e1d5ekb51lygpny''pcy57tc7hw0n''d46fqw''Something 
16aivp2[http://example.com mixed''''', even bold]''''', even bold]\n1qw7gqk\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[0,0,[[3]],2,2,0,4,[3],0,3]]", "''[http://example.com 
text'']\n[\n[http://example.com '''<nowiki/>''']1k1dra5\n1b8stdb''Something 
[http://example.com in italic'']\n'\n2sgkur[http://example.com]\n";);
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[[2]],4,2,0,1,0,4,0,0,1]]", "''[http://example.com 
1fdmvh4text]''2yfn7v1wav9zj\n[http://example.com '''text]\n''Something 
[http://example.com in italic'']''\ndtol3h''', even bold]\n'''''Now 
[http://example.com both''''']''\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[3],3,[3],2,4,0,2,2,0,[[0,[3]]]]]", 
"''<nowiki/>''[http://example.com]uoaq0o\n5vl9nm\n4r1rc2\n''Something 
[http://example.com mixed''''', even bold]''xdfvtk''', even bold]\n'''''Now 
[http://example.com]'''''\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[0,2,1,0,4,3,[0,4],[3],3,3]]", "''[http://example.com 
text'']\n[o8ckan\n[http://example.com '''text]\ny33u36''Something 
y3ygwe''[http://example.com]\n";);
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[1,2,2,0,2,0,3,[[4]],0,0]]", "''[http://example.com 
text'']''1dtvvhy\n1owq85s\n[http://example.com '''text]\n2ovole''Something 
[http://example.com in italic'']\n'\n[http://example.com 
'''1hkfcxq''']\n'''''Now [http://example.com both''''']\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[1],0,[4],0,[0,[4]],4,[0,1],2,3,[[4,3]]]]", "''[http://example.com 
text]''\n[http://example.com 18j7tcl]\n''Something [http://example.com 
d5uz25]''1ceigdx''Something [http://example.com mixed]''9akd2o''', even 
bold]'''''tlx3li'''''\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[[3],0,1,0,[0,2],0,2,[3],0,3]]", "''<nowiki/>''\n[http://example.com 
'''text]\n''Something 442ldx[http://example.com in 
italic'']''\na0udil\n''Something [http://example.com mixed''''', even 
bold]''[http://example.com]\n";);
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[4,2,3,3,3,0,3,0,0,[[3,0]]]]", "19v8d1luol8sn\n\n''', even 
bold]\n'''''[http://example.com both''''']'''''\n");
+add("selser", "T4702: Mismatched <i>, <b> and <a> tags are invalid 
[[4,0,[3],4,[4,1],3,[3,2],[1],0,[4]]]", 
"3dbdof\n[http://example.com]nssqhn''147922y[http://example.com in 
italic]uafhnx[http://example.com mixed''''', even bold]''[http://example.com 
''', even bold''']\n''8gb3h8''\n");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [2]", "1tnbsk1\n\n''Some [http://example.com/ 
pretty ''italics'' and stuff]!''");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [[[0,4],2,[3]]]", "''Some 
50tv48''1vsikaqitalics'' and stuff]''<nowiki/>''");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [1]", "''Some [http://example.com/ pretty 
''italics'' and stuff]!'italics'' and stuff]!''");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [[4,4,0]]", "rfocwh1jski8w!''");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [[1,1,1]]", "''Some [http://example.com/ pretty 
''italics'' and stuff]''[http://example.com/ italics'' and stuff]''!''");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [[1,[4,[3]],4]]", "''Some [http://example.com/ 
pretty ''italics'' and stuff]''[http://example.com/ 
18rn4jf''<nowiki/>'']193kohg");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [[0,[3,[4]],3]]", "''Some [http://example.com/ 
pretty ''italics'' and stuff]!'[http://example.com/ ''s761lf'']\n");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [[4,[2,3],2]]", "wsao3t[http://example.com/ 
1hyx4e5italics]1du5yjy!''");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [[1,4,0]]", "''Some [http://example.com/ pretty 
''italics'' and stuff]''7eezfr!''");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [[2,4,3]]", "1jzh7ce''Some [http://example.com/ 
pretty ''italics'' and stuff]!'15dv3xp\n");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [[0,[2,3],1]]", "''Some [http://example.com/ 
pretty ''italics'' and stuff]!'[http://example.com/ 19brnfnitalics]''!''");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [[[2,3],[0,[4]],0]]", "''1avj5ujSome 
''[http://example.com/ italics''1pa1x6g'']!''");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [[[0,1],[2,0],0]]", "''Some 
[http://example.com/ pretty ]''[http://example.com/ dc6oycitalics'' and 
stuff]!''");
+add("selser", "External link containing double-single-quotes in text embedded 
in italics (T6598 sanity check) [[3,[2,2],0]]", "[http://example.com/ 
1uuwt2zitalics13vgbpw'' and stuff]!''");
+add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[0,1,2]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de 
Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo 
Picasso]].][[Museo Picasso (París)|Museo Picasso]]1rbr6np.");
 add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [2]", 
"1ehf2a5\n\n[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte 
de Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo 
Picasso]].]");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [1]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de 
Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo Picasso]].]\n");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[2,0,[2]]]", 
"7a8apf[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de 
Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo 
Picasso]].]4wkxto.\n");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[[[4],4],2,0]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm 
''t0j7dk''bc0354]692z0l\n");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[2,[3],[3]]]", 
"e6sxcx[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de 
Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo 
Picasso]].][[Museo Picasso (París)|<nowiki/>]]\n");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[0,0,4]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de 
Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo 
Picasso]].]<nowiki/>wn9za5");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[[4,0],0,2]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm 17uhaq0 (1901) en el 
sitio de ]1167r4g\n");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[[3,3],[4],0]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm][[Museo Picasso 
(París)|q6h2zv]]\n");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[[[2],0],2,0]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm ''7q2puaLa muerte de 
Casagemas'' (1901) en el sitio de ]1m5co9z\n");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[0,[3],2]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de 
Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo 
Picasso]].][[Museo Picasso (París)|<nowiki/>]]<nowiki/>b4d1d6\n");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[3,[3],2]]", "[[Museo Picasso 
(París)|<nowiki/>]]65ww3e\n");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[1,3,0]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm ''La muerte de 
Casagemas'' (1901) en el sitio de ]\n");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[4,0,3]]", "1jnda7a\n");
-add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[[1,2],2,4]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm ''La muerte de 
Casagemas''1svf0oe (1901) en el sitio de ]mqtmyg6n94l9");
+add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [1]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de 
Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo 
Picasso]].][[Museo Picasso (París)|Museo Picasso]]..");
+add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[2,0,0]]", 
"7a8apf[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de 
Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo 
Picasso]].][[Museo Picasso (París)|Museo Picasso]]..");
+add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[[[4],4],2,0]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm 
''t0j7dk''bc0354]692z0l[[Museo Picasso (París)|Museo Picasso]]..");
+add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[2,[3],0]]", 
"e6sxcx[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de 
Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo 
Picasso]].][[Museo Picasso (París)|<nowiki/>]].");
+add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[0,0,4]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de 
Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo 
Picasso]].][[Museo Picasso (París)|Museo Picasso]].<nowiki/>wn9za5");
+add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[[4,0],0,3]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm 17uhaq0 (1901) en el 
sitio de ][[Museo Picasso (París)|Museo Picasso]].\n");
+add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[[[2],0],2,0]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm ''7q2puaLa muerte de 
Casagemas'' (1901) en el sitio de ]1m5co9z[[Museo Picasso (París)|Museo 
Picasso]]..");
+add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[0,[3],3]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm''La muerte de 
Casagemas'' (1901) en el sitio de [[Museo Picasso (París)|Museo 
Picasso]].][[Museo Picasso (París)|<nowiki/>]]\n");
+add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[4,0,3]]", "1jnda7a[[Museo Picasso 
(París)|Museo Picasso]].\n");
+add("selser", "External link containing double-single-quotes with no space 
separating the url from text in italics [[[1,2],2,4]]", 
"[http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm ''La muerte de 
Casagemas''1svf0oe (1901) en el sitio de ]mqtmyg[[Museo Picasso (París)|Museo 
Picasso]].6n94l9");
 add("selser", "mw:ExtLink linking to a interwiki URL can be round-tripped 
losslessly (T94723) [[[4]]]", "[[wikipedia:European_Robin|1rmduf6]]");
 add("selser", "mw:ExtLink linking to a interwiki URL can be round-tripped 
losslessly (T94723) [[[2]]]", "[[wikipedia:European_Robin|134iwocEuropean 
Robin]]");
 add("selser", "Unclosed and unmatched quotes 
[[[0,0,4]],2,3,3,[1],0,4,0,1,2,[[2]],3,3,3,2,0,3,4,1,2,2]", "'''''Bold italic 
text '''with bold deactivatedmik1b''\n\n194mnir\n\n'''Bold 
text..'''\n\n1vh6b8p\n\n'''Bold tag left open\n\n118iayy\n\n''hxqm6fItalic tag 
left open''\n\n8zfmbl<!-- Unmatching number of opening, closing tags: 
-->\n\nv7yj6u\n\n''Tom'''s car is bigger than 
'''''<nowiki/>'''Susan'''s.\n\n1suii2h\n\n1qt3jiw\n\nPlain ''italic'''s plain");
@@ -1300,6 +1316,22 @@
 add("selser", "Link containing \"#<\" and \"#>\" % as a hex sequences- these 
are valid section anchors [1]", "[[%23%3c]][[%23%3e]]");
 add("selser", "Link containing \"#<\" and \"#>\" % as a hex sequences- these 
are valid section anchors [[1,0]]", "[[%23%3c|#<]][[%23%3e]]");
 add("selser", "Link containing \"#<\" and \"#>\" % as a hex sequences- these 
are valid section anchors [[1,2]]", "[[%23%3c|#<]]1g4ueid[[%23%3e]]");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[[3,3],1,3]]", "''<nowiki/>''[[Link|italics'' and 
stuff]]\n");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[2,[4,4],0]]", "3decrm''Some [[Link|pretty 
''italics'' and stuff]]!'[[Link|17jkjo91ex4ssc]]!''");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [2]", "18k5cgc\n\n''Some [[Link|pretty ''italics'' 
and stuff]]!''");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [1]", "''Some [[Link|pretty ''italics'' and 
stuff]]!'italics'' and stuff]]!''");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[1,1,[2]]]", "''Some [[Link|pretty ''italics'' 
and stuff]]''[[Link|italics'' and stuff]]''18a447h!''");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[[3,0],[3,3],1]]", "''[[Link|pretty ''italics'' 
and stuff]]''[[Link|<nowiki/>]]''!''");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[[3,1],2,0]]", "''[[Link|pretty 
]]''1gwt922italics'' and stuff]]!''");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[[2,0],[0,[4]],4]]", "''b9gaavSome [[Link|pretty 
''italics'' and stuff]]''[[Link|italics''8kpnup'']]<nowiki/>hgs8c8");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[[2,[4]],[0,[2]],0]]", "''p9wecgSome 
[[Link|1l6bc3i]]''[[Link|italics''16wde6 and stuff'']]!''");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[[0,[2]],4,2]]", "''Some [[Link|sws6kqpretty 
]]''1d52q27bpiv1h!''");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[[4,2],[4,3],1]]", "''ecmnek3we37u[[Link|pretty 
''italics'' and stuff]]''[[Link|cvkv1i]]''!''");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[[3,1],[3,1],0]]", "''[[Link|pretty ]]''[[Link|'' 
and stuff'']]!''");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[[3,0],[2,0],[2]]]", "''[[Link|pretty ''italics'' 
and stuff]]''[[Link|cuj46xitalics'' and stuff]]''15w73su!''");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[1,4,4]]", "''Some [[Link|pretty ''italics'' and 
stuff]]''1ccqkh86zfkop\n");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[[0,3],[2,0],4]]", "''Some 
''[[Link|16pgo9nitalics'' and stuff]]10i6y31");
+add("selser", "Link containing double-single-quotes '' in text embedded in 
italics (T6598 sanity check) [[[0,3],[4,0],1]]", "''Some ''[[Link|1jtx7bf'' and 
stuff]]''!''");
 add("selser", "2. Interaction of linktrail and template encapsulation [1]", 
"{{echo|Some [[Fool]]}}\n");
 add("selser", "Parsoid-centric test: Whitespace in ext- and wiki-links should 
be preserved [3,2,[[4,2]],3,4,3,2]", 
"175ks3d\n\n[[Foo|173exoy148kdsg''bar'']]\n\n6xbp9z\n\npyd6c8\n\n[http://wp.org 
  ''foo'']");
 add("selser", "Parsoid-centric test: Whitespace in ext- and wiki-links should 
be preserved [0,3,1,0,1,0,1]", "[[Foo|  bar]]\n\n[[Foo|  
''bar'']]\n\n[http://wp.org   foo]\n\n[http://wp.org   ''foo'']");
diff --git a/tests/parserTests.txt b/tests/parserTests.txt
index f6445bd..73762dd 100644
--- a/tests/parserTests.txt
+++ b/tests/parserTests.txt
@@ -5306,7 +5306,7 @@
 <p><a rel="nofollow" class="external text" href="http://example.com";></a><a 
href="/index.php?title=Wikilink&amp;action=edit&amp;redlink=1" class="new" 
title="Wikilink (page does not exist)">wikilink</a><a rel="nofollow" 
class="external text" href="http://example.com";> embedded in ext link</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:ExtLink" href="http://example.com";></a><a rel="mw:WikiLink" 
href="./Wikilink" title="Wikilink">wikilink</a><span> embedded in ext 
link</span></p>
+<p><a rel="mw:ExtLink" href="http://example.com";></a><a rel="mw:WikiLink" 
href="./Wikilink" title="Wikilink">wikilink</a> embedded in ext link</p>
 !! end
 
 !! test

-- 
To view, visit https://gerrit.wikimedia.org/r/371726
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iccdbacc06d91eaaba50df0cda0698cb9156b5762
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <abrea...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to