Subramanya Sastry has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/160795

Change subject: (Bug 70894) Fix bugs serializing modified wikilinks
......................................................................

(Bug 70894) Fix bugs serializing modified wikilinks

* Added a new parser test.
* Also found a missing /g/ flag on a regexp replace. A number
  of previously blacklisted tests change their output because
  of this. The new output is correct.
* One test has a html2html regression -- known since the
  html2wt serializes it as a simple [[..]] wikilink which
  loses the "_" in the content string. An alternative is to
  test content-string and link-target post "_" normalization
  and serialize as a piped link.

Change-Id: I61cf366c481591f21d92983b941bc87e4923cd15
---
M lib/wts.LinkHandler.js
M tests/parserTests-blacklist.js
M tests/parserTests.txt
3 files changed, 31 insertions(+), 19 deletions(-)


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

diff --git a/lib/wts.LinkHandler.js b/lib/wts.LinkHandler.js
index 41ce7c7..8666eee 100644
--- a/lib/wts.LinkHandler.js
+++ b/lib/wts.LinkHandler.js
@@ -444,7 +444,8 @@
                                if (!target.modified && 
!linkData.contentModified) {
                                        linkTarget = target.value;
                                } else {
-                                       escapedRes = 
escapeWikiLinkContentString(linkData.content.string,
+                                       linkTarget = 
linkData.content.string.replace(/^(\.\.?\/)*/, '').replace(/_/g, ' ');
+                                       escapedRes = 
escapeWikiLinkContentString(linkTarget,
                                                        state, node);
                                        linkTarget = addColonEscape(this.env, 
escapedRes.linkTarget, linkData);
                                        if (linkData.isInterwikiLang && 
!/^[:]/.test(linkTarget) &&
@@ -490,7 +491,7 @@
                                if (target.modified || !target.fromsrc) {
                                        linkTarget = 
linkTarget.replace(/^(\.\.?\/)*/, '');
                                        if (!linkData.isInterwiki) {
-                                               linkTarget = 
linkTarget.replace('_', ' ');
+                                               linkTarget = 
linkTarget.replace(/_/g, ' ');
                                        }
                                        escapedRes = 
escapeWikiLinkContentString(linkTarget,
                                                state, node);
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index 0185852..58e298c 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -719,13 +719,14 @@
 add("html2html", "Missing image with uploads disabled", "<p 
data-parsoid='{\"dsr\":[0,40,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/File:Foobaz.jpg\" title=\"Wiki/File:Foobaz.jpg\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/File:Foobaz.jpg\"},\"sa\":{\"href\":\"wiki/File:Foobaz.jpg\"},\"dsr\":[0,40,23,2]}'>File:Foobaz.jpg</a></p>\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", "Relative subpage noslash link", "<p 
data-parsoid='{\"dsr\":[0,37,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"../../../../Subpage_test/1/2/subpage/\" title=\"Subpage 
test/1/2/subpage/\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"../../../../Subpage_test/1/2/subpage/\"},\"sa\":{\"href\":\"Subpage
 test/1/2/subpage/\"},\"dsr\":[0,37,28,2]}'>subpage</a></p>\n\n<p 
data-parsoid='{\"dsr\":[39,67,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"../../../../Subpage_test/1/2/subpage\" title=\"Subpage 
test/1/2/subpage\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"../../../../Subpage_test/1/2/subpage\"},\"sa\":{\"href\":\"Subpage
 test/1/2/subpage\"},\"dsr\":[39,67,2,2]}'>Subpage test/1/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,423,0,0]}'>[[<span about=\"#mwt34\" 
typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"./../foo\"}},\"i\":0}}]}'
 
data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[145,162,null,null]}'>./../foo</span>|bar]]\n[[<span
 about=\"#mwt35\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo/.\"}},\"i\":0}}]}'
 
data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[171,185,null,null]}'>foo/.</span>|bar]]\n[[<span
 about=\"#mwt36\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo/..\"}},\"i\":0}}]}'
 
data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[194,209,null,null]}'>foo/..</span>|bar]]\n[[<span
 about=\"#mwt37\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo~~~~bar\"}},\"i\":0}}]}'
 
data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[218,237,null,null]}'>foo~~~~bar</span>]]\n[[<span
 about=\"#mwt38\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo>bar\"}},\"i\":0}}]}'
 
data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[242,258,null,null]}'>foo>bar</span>]]\n[[<span
 about=\"#mwt39\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo././bar\"}},\"i\":0}}]}'
 
data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[263,282,null,null]}'>foo././bar</span>]]\n[[<span
 about=\"#mwt40\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo{bar\"}},\"i\":0}}]}'
 
data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[287,303,null,null]}'>foo{bar</span>]]\n[[<span
 about=\"#mwt41\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo}bar\"}},\"i\":0}}]}'
 
data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[308,324,null,null]}'>foo}bar</span>]]\n[[<span
 typeof=\"mw:Transclusion mw:Nowiki\" about=\"#mwt42\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&lt;nowiki>foo[bar&lt;/nowiki>\"}},\"i\":0}}]}'
 
data-parsoid='{\"dsr\":[329,362,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>foo[bar</span>]]\n[[<span
 typeof=\"mw:Transclusion mw:Nowiki\" about=\"#mwt43\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&lt;nowiki>foo]bar&lt;/nowiki>\"}},\"i\":0}}]}'
 
data-parsoid='{\"dsr\":[367,400,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>foo]bar</span>]]\n[[<span
 about=\"#mwt44\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo&lt;bar\"}},\"i\":0}}]}'
 
data-parsoid='{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[405,421,null,null]}'>foo&lt;bar</span>]]</p>\n");
 add("html2html", "Disabled subpages", "<p 
data-parsoid='{\"dsr\":[0,58,0,0]}'>[/index.php?title=/subpage&amp;action=edit&amp;redlink=1
 /subpage]</p>\n");
 add("html2html", "BUG 561: {{/Subpage}}", "<p 
data-parsoid='{\"dsr\":[0,66,0,0]}'>[/index.php?title=Page/Subpage&amp;action=edit&amp;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&#39;s_Guide\"},\"sa\":{\"href\":\"wiki/Category:MediaWiki
 User&#39;s_Guide\"},\"dsr\":[0,72,39,2]}'>Category:MediaWiki User's 
Guide</a></p>\n");
-add("html2html", "Simple category", "<p data-parsoid='{\"dsr\":[0,63,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&#39;s_Guide\"},\"sa\":{\"href\":\"wiki/Category:MediaWiki
 User&#39;s_Guide\"},\"dsr\":[0,63,39,2]}'>MediaWiki User's Guide</a></p>");
-add("html2html", "Category with different sort key", "<p 
data-parsoid='{\"dsr\":[0,63,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&#39;s_Guide\"},\"sa\":{\"href\":\"wiki/Category:MediaWiki
 User&#39;s_Guide\"},\"dsr\":[0,63,39,2]}'>MediaWiki User's Guide</a></p>");
-add("html2html", "Category with identical sort key", "<p 
data-parsoid='{\"dsr\":[0,63,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&#39;s_Guide\"},\"sa\":{\"href\":\"wiki/Category:MediaWiki
 User&#39;s_Guide\"},\"dsr\":[0,63,39,2]}'>MediaWiki User's Guide</a></p>");
+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&#39;s_Guide\"},\"sa\":{\"href\":\"wiki/Category:MediaWiki
 User&#39;s Guide\"},\"dsr\":[0,72,39,2]}'>Category:MediaWiki User's 
Guide</a></p>\n");
+add("html2html", "Simple category", "<p data-parsoid='{\"dsr\":[0,63,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&#39;s_Guide\"},\"sa\":{\"href\":\"wiki/Category:MediaWiki
 User&#39;s Guide\"},\"dsr\":[0,63,39,2]}'>MediaWiki User's Guide</a></p>");
+add("html2html", "Category with different sort key", "<p 
data-parsoid='{\"dsr\":[0,63,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&#39;s_Guide\"},\"sa\":{\"href\":\"wiki/Category:MediaWiki
 User&#39;s Guide\"},\"dsr\":[0,63,39,2]}'>MediaWiki User's Guide</a></p>");
+add("html2html", "Category with identical sort key", "<p 
data-parsoid='{\"dsr\":[0,63,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&#39;s_Guide\"},\"sa\":{\"href\":\"wiki/Category:MediaWiki
 User&#39;s Guide\"},\"dsr\":[0,63,39,2]}'>MediaWiki User's Guide</a></p>");
 add("html2html", "Category with empty sort key", "<p 
data-parsoid='{\"dsr\":[0,75,0,0]}'><span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[0,75,8,9]}'>[[Category:MediaWiki User's Guide|MediaWiki 
User's Guide]]</span></p>");
 add("html2html", "Category with empty sort key and parentheses", "<p 
data-parsoid='{\"dsr\":[0,43,0,0]}'><span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[0,43,8,9]}'>[[Category:Foo (bar)|Foo]]</span></p>");
 add("html2html", "Category with link tail", "<p 
data-parsoid='{\"dsr\":[0,39,0,0]}'>123<span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[3,36,8,9]}'>[[Category:Foo]]</span>456</p>");
@@ -868,7 +869,7 @@
 add("html2html", "Link to a section of a variant of this title shouldn't be 
parsed as self-link", "<p data-parsoid='{\"dsr\":[0,129,0,0]}'><strong 
class=\"selflink\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[0,38,25,9]}'>Dуна</strong> is a 
self-link while <a rel=\"mw:WikiLink\" href=\"./Wiki/Дуна\" title=\"Wiki/Дуна\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Дуна\"},\"sa\":{\"href\":\"wiki/Дуна\"},\"dsr\":[60,82,12,2]}'>Dunа#Foo</a>
 and <a rel=\"mw:WikiLink\" href=\"./Wiki/Дуна\" title=\"Wiki/Дуна\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Дуна\"},\"sa\":{\"href\":\"wiki/Дуна\"},\"dsr\":[87,109,12,2]}'>Dуна#Foo</a>
 are not self-links.</p>\n");
 add("html2html", "Link to pages in language variants", "<p 
data-parsoid='{\"dsr\":[0,56,0,0]}'>Main Page can be written as <a 
rel=\"mw:WikiLink\" href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[28,56,17,2]}'>Маин Паге</a></p>\n");
 add("html2html", "Multiple links to pages in language variants", "<p 
data-parsoid='{\"dsr\":[0,113,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[0,28,17,2]}'>Main Page</a> can be written as <a 
rel=\"mw:WikiLink\" href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[47,75,17,2]}'>Маин Паге</a> same as <a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[84,112,17,2]}'>Маин Паге</a>.</p>\n");
-add("html2html", "Simple category in language variants", "<p 
data-parsoid='{\"dsr\":[0,65,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Категорија:MediaWiki_User's_Guide\" 
title=\"Wiki/Категорија:MediaWiki User's Guide\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Категорија:MediaWiki_User&#39;s_Guide\"},\"sa\":{\"href\":\"wiki/Категорија:MediaWiki
 User&#39;s_Guide\"},\"dsr\":[0,65,41,2]}'>MediaWiki User's Guide</a></p>");
+add("html2html", "Simple category in language variants", "<p 
data-parsoid='{\"dsr\":[0,65,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Категорија:MediaWiki_User's_Guide\" 
title=\"Wiki/Категорија:MediaWiki User's Guide\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Категорија:MediaWiki_User&#39;s_Guide\"},\"sa\":{\"href\":\"wiki/Категорија:MediaWiki
 User&#39;s Guide\"},\"dsr\":[0,65,41,2]}'>MediaWiki User's Guide</a></p>");
 add("html2html", "Don't convert blue categorylinks to another variant (bug 
33210)", "<p data-parsoid='{\"dsr\":[0,23,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Category:分类\" title=\"Wiki/Category:分类\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Category:分类\"},\"sa\":{\"href\":\"wiki/Category:分类\"},\"dsr\":[0,23,19,2]}'>分类</a></p>");
 add("html2html", "Prevent conversion of links with -{}- tags (language 
variants)", "<p data-parsoid='{\"dsr\":[0,28,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[0,28,17,2]}'>Main Page</a></p>\n");
 add("html2html", "-{}- tags within headlines (within html for 
parserConvert())", "<h2 data-parsoid='{\"dsr\":[0,249,2,2]}'> <span 
class=\"mw-headline\" id=\"-.7BNaslov.7D-\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[3,62,46,7]}'>Naslov</span><span 
class=\"mw-editsection\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[62,246,29,7]}'><span 
class=\"mw-editsection-bracket\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[91,136,37,7]}'>[</span>[/index.php?title=Parser_test&amp;action=edit&amp;section=1
 уреди]<span class=\"mw-editsection-bracket\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[194,239,37,7]}'>]</span></span> 
</h2>\n");
@@ -887,8 +888,8 @@
 add("html2html", "Edit comment with link", "<p 
data-parsoid='{\"dsr\":[0,45,0,0]}'>I like the <a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[11,39,17,2]}'>Main Page</a> a lot</p>");
 add("html2html", "Edit comment with link and link text", "<p 
data-parsoid='{\"dsr\":[0,46,0,0]}'>I like the <a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[11,40,17,2]}'>best pages</a> a lot</p>");
 add("html2html", "Edit comment with link and link text with suffix", "<p 
data-parsoid='{\"dsr\":[0,46,0,0]}'>I like the <a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page\"},\"sa\":{\"href\":\"wiki/Main
 Page\"},\"dsr\":[11,40,17,2]}'>best pages</a> a lot</p>");
-add("html2html", "Edit comment with section link (non-local, eg in history 
list)", "<p data-parsoid='{\"dsr\":[0,131,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page#External_links\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page#External_links\"},\"sa\":{\"href\":\"wiki/Main
 Page#External_links\"},\"dsr\":[0,35,32,2]}'>→</a>‎<span dir=\"auto\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[36,131,17,7]}'><span 
class=\"autocomment\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[53,102,26,7]}'>External links: </span> 
removed bogus entries</span></p>");
-add("html2html", "Edit comment with section link and text before it 
(non-local, eg in history list)", "<p 
data-parsoid='{\"dsr\":[0,148,0,0]}'>pre-comment text <a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page#External_links\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page#External_links\"},\"sa\":{\"href\":\"wiki/Main
 Page#External_links\"},\"dsr\":[17,52,32,2]}'>→</a>‎<span dir=\"auto\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[53,148,17,7]}'><span 
class=\"autocomment\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[70,119,26,7]}'>External links: </span> 
removed bogus entries</span></p>");
+add("html2html", "Edit comment with section link (non-local, eg in history 
list)", "<p data-parsoid='{\"dsr\":[0,131,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page#External_links\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page#External_links\"},\"sa\":{\"href\":\"wiki/Main
 Page#External links\"},\"dsr\":[0,35,32,2]}'>→</a>‎<span dir=\"auto\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[36,131,17,7]}'><span 
class=\"autocomment\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[53,102,26,7]}'>External links: </span> 
removed bogus entries</span></p>");
+add("html2html", "Edit comment with section link and text before it 
(non-local, eg in history list)", "<p 
data-parsoid='{\"dsr\":[0,148,0,0]}'>pre-comment text <a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page#External_links\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page#External_links\"},\"sa\":{\"href\":\"wiki/Main
 Page#External links\"},\"dsr\":[17,52,32,2]}'>→</a>‎<span dir=\"auto\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[53,148,17,7]}'><span 
class=\"autocomment\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[70,119,26,7]}'>External links: </span> 
removed bogus entries</span></p>");
 add("html2html", "Edit comment with section link (local, eg in diff view)", 
"<p data-parsoid='{\"dsr\":[0,115,0,0]}'>[#External_links →]‎<span dir=\"auto\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[20,115,17,7]}'><span 
class=\"autocomment\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[37,86,26,7]}'>External links: </span> 
removed bogus entries</span></p>");
 add("html2html", "Edit comment with subpage link (bug 14080)", "<p 
data-parsoid='{\"dsr\":[0,57,0,0]}'>Poked at a <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\":[11,49,28,2]}'>/subpage</a> here...</p>");
 add("html2html", "Edit comment with subpage link and link text (bug 14080)", 
"<p data-parsoid='{\"dsr\":[0,65,0,0]}'>Poked at a <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\":[11,57,28,2]}'>neat little page</a> here...</p>");
@@ -896,7 +897,7 @@
 add("html2html", "Edit comment with bare anchor link (local, as on diff)", 
"<ol data-parsoid='{\"dsr\":[0,8,0,0]}'><li 
data-parsoid='{\"dsr\":[0,8,1,0]}'>section</li></ol>");
 add("html2html", "Edit comment with bare anchor link (non-local, as on 
history)", "<p data-parsoid='{\"dsr\":[0,35,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page#section\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page#section\"},\"sa\":{\"href\":\"wiki/Main
 Page#section\"},\"dsr\":[0,35,25,2]}'>#section</a></p>");
 add("html2html", "Anchor starting with underscore", "<p 
data-parsoid='{\"dsr\":[0,11,0,0]}'>[#_ref One]</p>\n");
-add("html2html", "Space normalisation on autocomment (bug 22784)", "<p 
data-parsoid='{\"dsr\":[0,106,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page#hello_world\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page#hello_world\"},\"sa\":{\"href\":\"wiki/Main
 Page#hello_world\"},\"dsr\":[0,32,29,2]}'>→</a>‎<span dir=\"auto\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[33,106,17,7]}'><span 
class=\"autocomment\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[50,99,26,7]}'>__hello__world__</span></span></p>");
+add("html2html", "Space normalisation on autocomment (bug 22784)", "<p 
data-parsoid='{\"dsr\":[0,106,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Wiki/Main_Page#hello_world\" title=\"Wiki/Main Page\" 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Wiki/Main_Page#hello_world\"},\"sa\":{\"href\":\"wiki/Main
 Page#hello world\"},\"dsr\":[0,32,29,2]}'>→</a>‎<span dir=\"auto\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[33,106,17,7]}'><span 
class=\"autocomment\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[50,99,26,7]}'>__hello__world__</span></span></p>");
 add("html2html", "percent-encoding and + signs in comments (Bug 26410)", "<p 
data-parsoid='{\"dsr\":[0,128,0,0]}'>[/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1
 ABC3D% ++] [/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1 
+%20]</p>");
 add("html2html", "Verify that displaytitle works (bug #22501) no 
displaytitle", "<p data-parsoid='{\"dsr\":[0,11,0,0]}'>Parser test</p>\n\n<p 
data-parsoid='{\"dsr\":[13,38,0,0]}'>this is not the the title</p>\n");
 add("html2html", "Verify that displaytitle works (bug #22501) 
RestrictDisplayTitle=false", "<p 
data-parsoid='{\"dsr\":[0,8,0,0]}'>whatever</p>\n\n<p 
data-parsoid='{\"dsr\":[10,35,0,0]}'>this is not the the title</p>\n");
@@ -1093,7 +1094,7 @@
 add("html2wt", "Bracketed external links with template-generated invalid 
target", "[http:/example.com title]\n");
 add("html2wt", "Bug 2702: 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''''', even bold''']\n'''''Now '''''[http://example.com 
'''''both''''']\n");
 add("html2wt", "External link containing double-single-quotes in text embedded 
in italics (bug 4598 sanity check)", "''Some ''[http://example.com/ ''pretty 
''italics'' and stuff'']''!''\n");
-add("html2wt", "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]]<span>.</span>\n");
+add("html2wt", "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]]<span>.</span>\n");
 add("html2wt", "External link with comments in link text", 
"[http://www.google.com Google ]\n");
 add("html2wt", "URL-encoding in URL functions (single parameter)", 
"/index.php?title=Some_page&amp=&\n");
 add("html2wt", "URL-encoding in URL functions (multiple parameters)", 
"/index.php?title=Some_page&q=?&amp=&\n");
@@ -1431,11 +1432,11 @@
 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|<nowiki>foo[bar</nowiki>}}]]\n[[{{echo|<nowiki>foo]bar</nowiki>}}]]\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");
-add("html2wt", "Simple category", "[[wiki/Category:MediaWiki 
User's_Guide|MediaWiki User's Guide]]");
+add("html2wt", "Link to category", "[[wiki/Category:MediaWiki User's 
Guide|Category:MediaWiki User's Guide]]\n");
+add("html2wt", "Simple category", "[[wiki/Category:MediaWiki User's 
Guide|MediaWiki User's Guide]]");
 add("html2wt", "PAGESINCATEGORY invalid title fatal (r33546 fix)", "0\n");
-add("html2wt", "Category with different sort key", "[[wiki/Category:MediaWiki 
User's_Guide|MediaWiki User's Guide]]");
-add("html2wt", "Category with identical sort key", "[[wiki/Category:MediaWiki 
User's_Guide|MediaWiki User's Guide]]");
+add("html2wt", "Category with different sort key", "[[wiki/Category:MediaWiki 
User's Guide|MediaWiki User's Guide]]");
+add("html2wt", "Category with identical sort key", "[[wiki/Category:MediaWiki 
User's Guide|MediaWiki User's Guide]]");
 add("html2wt", "Category with empty sort key", "<nowiki>[[Category:MediaWiki 
User's Guide|MediaWiki User's Guide]]</nowiki>");
 add("html2wt", "Category with empty sort key and parentheses", 
"<nowiki>[[Category:Foo (bar)|Foo]]</nowiki>");
 add("html2wt", "Category with link tail", 
"123<nowiki>[[Category:Foo]]</nowiki>456");
@@ -1659,7 +1660,7 @@
 add("html2wt", "Simple template in language variants", "This is a test 
template\n");
 add("html2wt", "Template with explicit namespace in language variants", "This 
is a test template\n");
 add("html2wt", "Basic test for template parameter in language variants", "This 
is a test template with parameter foo\n");
-add("html2wt", "Simple category in language variants", 
"[[wiki/Категорија:MediaWiki User's_Guide|MediaWiki User's Guide]]");
+add("html2wt", "Simple category in language variants", 
"[[wiki/Категорија:MediaWiki User's Guide|MediaWiki User's Guide]]");
 add("html2wt", "Don't convert blue categorylinks to another variant (bug 
33210)", "[[wiki/Category:分类|分类]]");
 add("html2wt", "Stripping -{}- tags (language variants)", "Latin proverb: Ne 
nuntium necare\n");
 add("html2wt", "Prevent conversion with -{}- tags (language variants)", 
"Латински: Ne nuntium necare\n");
@@ -1715,8 +1716,8 @@
 add("html2wt", "Edit comment with link", "I like the [[wiki/Main Page|Main 
Page]] a lot");
 add("html2wt", "Edit comment with link and link text", "I like the [[wiki/Main 
Page|best pages]] a lot");
 add("html2wt", "Edit comment with link and link text with suffix", "I like the 
[[wiki/Main Page|best pages]] a lot");
-add("html2wt", "Edit comment with section link (non-local, eg in history 
list)", "[[wiki/Main Page#External_links|→]]‎<span dir=\"auto\"><span 
class=\"autocomment\">External links: </span> removed bogus entries</span>");
-add("html2wt", "Edit comment with section link and text before it (non-local, 
eg in history list)", "pre-comment text [[wiki/Main 
Page#External_links|→]]‎<span dir=\"auto\"><span class=\"autocomment\">External 
links: </span> removed bogus entries</span>");
+add("html2wt", "Edit comment with section link (non-local, eg in history 
list)", "[[wiki/Main Page#External links|→]]‎<span dir=\"auto\"><span 
class=\"autocomment\">External links: </span> removed bogus entries</span>");
+add("html2wt", "Edit comment with section link and text before it (non-local, 
eg in history list)", "pre-comment text [[wiki/Main Page#External 
links|→]]‎<span dir=\"auto\"><span class=\"autocomment\">External links: 
</span> removed bogus entries</span>");
 add("html2wt", "Edit comment with section link (local, eg in diff view)", 
"[#External_links →]‎<span dir=\"auto\"><span class=\"autocomment\">External 
links: </span> removed bogus entries</span>");
 add("html2wt", "Edit comment with subpage link (bug 14080)", "Poked at a 
[[wiki/Subpage test/subpage|/subpage]] here...");
 add("html2wt", "Edit comment with subpage link and link text (bug 14080)", 
"Poked at a [[wiki/Subpage test/subpage|neat little page]] here...");
@@ -1724,7 +1725,7 @@
 add("html2wt", "Edit comment with bare anchor link (local, as on diff)", 
"#section");
 add("html2wt", "Edit comment with bare anchor link (non-local, as on 
history)", "[[wiki/Main Page#section|#section]]");
 add("html2wt", "Anchor starting with underscore", "[#_ref One]\n");
-add("html2wt", "Space normalisation on autocomment (bug 22784)", "[[wiki/Main 
Page#hello_world|→]]‎<span dir=\"auto\"><span 
class=\"autocomment\">__hello__world__</span></span>");
+add("html2wt", "Space normalisation on autocomment (bug 22784)", "[[wiki/Main 
Page#hello world|→]]‎<span dir=\"auto\"><span 
class=\"autocomment\">__hello__world__</span></span>");
 add("html2wt", "percent-encoding and + signs in comments (Bug 26410)", 
"[/index.php?title=ABC3D%25_%2B%2B&action=edit&redlink=1 ABC3D% ++] 
[/index.php?title=ABC3D%25_%2B%2B&action=edit&redlink=1 +%20]");
 add("html2wt", "Verify that displaytitle works (bug #22501) no displaytitle", 
"Parser test\n\nthis is not the the title\n");
 add("html2wt", "Verify that displaytitle works (bug #22501) 
RestrictDisplayTitle=false", "whatever\n\nthis is not the the title\n");
diff --git a/tests/parserTests.txt b/tests/parserTests.txt
index 41d1536..8528c77 100644
--- a/tests/parserTests.txt
+++ b/tests/parserTests.txt
@@ -12599,6 +12599,16 @@
 !! end
 
 !! test
+Normalize hrefs properly before testing for invalid link targets (bug 70894)
+!! options
+parsoid=html2wt
+!! html
+<link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne"/>
+!! wikitext
+[[Category:Toxine bactérienne]]
+!! end
+
+!! test
 Parsoid: Defaultsort
 !! options
 parsoid

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I61cf366c481591f21d92983b941bc87e4923cd15
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to