• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1promise_test(() => fetch("resources/toascii.json").then(res => res.json()).then(runTests), "Loading data…");
2
3function makeURL(type, input) {
4  input = "https://" + input + "/x"
5  if(type === "url") {
6    return new URL(input)
7  } else {
8    const url = document.createElement(type)
9    url.href = input
10    return url
11  }
12}
13
14function runTests(tests) {
15  for(var i = 0, l = tests.length; i < l; i++) {
16    let hostTest = tests[i]
17    if (typeof hostTest === "string") {
18      continue // skip comments
19    }
20    const typeName = { "url": "URL", "a": "<a>", "area": "<area>" }
21    ;["url", "a", "area"].forEach((type) => {
22      test(() => {
23        if(hostTest.output !== null) {
24          const url = makeURL("url", hostTest.input)
25          assert_equals(url.host, hostTest.output)
26          assert_equals(url.hostname, hostTest.output)
27          assert_equals(url.pathname, "/x")
28          assert_equals(url.href, "https://" + hostTest.output + "/x")
29        } else {
30          if(type === "url") {
31            assert_throws(new TypeError, () => makeURL("url", hostTest.input))
32          } else {
33            const url = makeURL(type, hostTest.input)
34            assert_equals(url.host, "")
35            assert_equals(url.hostname, "")
36            assert_equals(url.pathname, "")
37            assert_equals(url.href, "https://" + hostTest.input + "/x")
38          }
39        }
40      }, hostTest.input + " (using " + typeName[type] + ")")
41      ;["host", "hostname"].forEach((val) => {
42        test(() => {
43          const url = makeURL(type, "x")
44          url[val] = hostTest.input
45          if(hostTest.output !== null) {
46            assert_equals(url[val], hostTest.output)
47          } else {
48            assert_equals(url[val], "x")
49          }
50        }, hostTest.input + " (using " + typeName[type] + "." + val + ")")
51      })
52    })
53  }
54}
55