-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bug 1811454 [wpt PR 38080] - URL: run IdnaTestV2.txt in WPT, a=testonly
Automatic update from web-platform-tests URL: run a subset of IdnaTestV2.txt in WPT This excludes various tests for now due to the open issues mentioned at the top of IdnaTestV2-parser.py. For whatwg/url#341. -- wpt-commits: 9216115f5621b04a27e0f2e9bbf1ce44dd7d3b9e wpt-pr: 38080
- Loading branch information
1 parent
677f9c5
commit 6bfbc11
Showing
4 changed files
with
9,970 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
promise_test(() => fetch("resources/IdnaTestV2.json").then(res => res.json()).then(runTests), "Loading data…"); | ||
|
||
// Performance impact of this seems negligible (performance.now() diff in WebKit went from 48 to 52) | ||
// and there was a preference to let more non-ASCII hit the parser. | ||
function encodeHostEndingCodePoints(input) { | ||
let output = ""; | ||
for (const codePoint of input) { | ||
if ([":", "/", "?", "#", "\\"].includes(codePoint)) { | ||
output += encodeURIComponent(codePoint); | ||
} else { | ||
output += codePoint; | ||
} | ||
} | ||
return output; | ||
} | ||
|
||
function runTests(idnaTests) { | ||
for (const idnaTest of idnaTests) { | ||
if (typeof idnaTest === "string") { | ||
continue // skip comments | ||
} | ||
if (idnaTest.input === "") { | ||
continue // cannot test empty string input through new URL() | ||
} | ||
// Percent-encode the input such that ? and equivalent code points do not end up counting as | ||
// part of the URL, but are parsed through the host parser instead. | ||
const encodedInput = encodeHostEndingCodePoints(idnaTest.input); | ||
|
||
test(() => { | ||
if (idnaTest.output === null) { | ||
assert_throws_js(TypeError, () => new URL(`https://${encodedInput}/x`)); | ||
} else { | ||
const url = new URL(`https://${encodedInput}/x`); | ||
assert_equals(url.host, idnaTest.output); | ||
assert_equals(url.hostname, idnaTest.output); | ||
assert_equals(url.pathname, "/x"); | ||
assert_equals(url.href, `https://${idnaTest.output}/x`); | ||
} | ||
}, `ToASCII("${idnaTest.input}")${idnaTest.comment ? " " + idnaTest.comment : ""}`); | ||
} | ||
} |
Oops, something went wrong.