{
  "useragent": "Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 Edge/12.0",
  "constructor": [
    {
      "input": "http://example\t.\norg",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://user:pass@foo:21/bar;par?b#c",
      "base": "http://example.org/foo/bar",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http:foo.com",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/foo.com",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/foo.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "\t   :foo.com   \n",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/:foo.com",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/:foo.com",
      "search": "",
      "hash": ""
    },
    {
      "input": " foo.com  ",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/foo.com",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/foo.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "a:\t foo.com",
      "base": "http://example.org/foo/bar",
      "href": "file:///a:%20foo.com",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/a:%20foo.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://f:21/ b ? d # e ",
      "base": "http://example.org/foo/bar",
      "href": "http://f:21/%20b%20? d # e",
      "protocol": "http:",
      "hostname": "f",
      "port": "21",
      "pathname": "/%20b%20",
      "search": "? d ",
      "hash": "# e"
    },
    {
      "input": "http://f:/c",
      "base": "http://example.org/foo/bar",
      "href": "http://f/c",
      "protocol": "http:",
      "hostname": "f",
      "port": "",
      "pathname": "/c",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://f:0/c",
      "base": "http://example.org/foo/bar",
      "href": "http://f:0/c",
      "protocol": "http:",
      "hostname": "f",
      "port": "0",
      "pathname": "/c",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://f:00000000000000/c",
      "base": "http://example.org/foo/bar",
      "href": "http://f:0/c",
      "protocol": "http:",
      "hostname": "f",
      "port": "0",
      "pathname": "/c",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://f:00000000000000000000080/c",
      "base": "http://example.org/foo/bar",
      "href": "http://f/c",
      "protocol": "http:",
      "hostname": "f",
      "port": "",
      "pathname": "/c",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://f:b/c",
      "base": "http://example.org/foo/bar",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://f: /c",
      "base": "http://example.org/foo/bar",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://f:\n/c",
      "base": "http://example.org/foo/bar",
      "href": "http://f/c",
      "protocol": "http:",
      "hostname": "f",
      "port": "",
      "pathname": "/c",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://f:fifty-two/c",
      "base": "http://example.org/foo/bar",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://f:999999/c",
      "base": "http://example.org/foo/bar",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://f: 21 / b ? d # e ",
      "base": "http://example.org/foo/bar",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/",
      "search": "",
      "hash": ""
    },
    {
      "input": "  \t",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/",
      "search": "",
      "hash": ""
    },
    {
      "input": ":foo.com/",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/:foo.com/",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/:foo.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": ":foo.com\\",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/:foo.com/",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/:foo.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": ":",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/:",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/:",
      "search": "",
      "hash": ""
    },
    {
      "input": ":a",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/:a",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/:a",
      "search": "",
      "hash": ""
    },
    {
      "input": ":/",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/:/",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/:/",
      "search": "",
      "hash": ""
    },
    {
      "input": ":\\",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/:/",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/:/",
      "search": "",
      "hash": ""
    },
    {
      "input": ":#",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/:#",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/:",
      "search": "",
      "hash": "#"
    },
    {
      "input": "#",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/bar#",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/bar",
      "search": "",
      "hash": "#"
    },
    {
      "input": "#/",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/bar#/",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/bar",
      "search": "",
      "hash": "#/"
    },
    {
      "input": "#\\",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/bar#\\",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/bar",
      "search": "",
      "hash": "#\\"
    },
    {
      "input": "#;?",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/bar#;?",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/bar",
      "search": "",
      "hash": "#;?"
    },
    {
      "input": "?",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/bar?",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/bar",
      "search": "?",
      "hash": ""
    },
    {
      "input": "/",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": ":23",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/:23",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/:23",
      "search": "",
      "hash": ""
    },
    {
      "input": "/:23",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/:23",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/:23",
      "search": "",
      "hash": ""
    },
    {
      "input": "::",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/::",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/::",
      "search": "",
      "hash": ""
    },
    {
      "input": "::23",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/::23",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/::23",
      "search": "",
      "hash": ""
    },
    {
      "input": "foo://",
      "base": "http://example.org/foo/bar",
      "href": "foo:///",
      "protocol": "foo:",
      "hostname": "",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://a:b@c:29/d",
      "base": "http://example.org/foo/bar",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http::@c:29",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/:@c:29",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/:@c:29",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://&a:foo(b]c@d:2/",
      "base": "http://example.org/foo/bar",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http://::@c@d:2",
      "base": "http://example.org/foo/bar",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http://foo.com:b@d/",
      "base": "http://example.org/foo/bar",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http://foo.com/\\@",
      "base": "http://example.org/foo/bar",
      "href": "http://foo.com//@",
      "protocol": "http:",
      "hostname": "foo.com",
      "port": "",
      "pathname": "//@",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:\\\\foo.com\\",
      "base": "http://example.org/foo/bar",
      "href": "http://foo.com/",
      "protocol": "http:",
      "hostname": "foo.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:\\\\a\\b:c\\d@foo.com\\",
      "base": "http://example.org/foo/bar",
      "href": "http://a/b:c/d@foo.com/",
      "protocol": "http:",
      "hostname": "a",
      "port": "",
      "pathname": "/b:c/d@foo.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "foo:/",
      "base": "http://example.org/foo/bar",
      "href": "foo:/",
      "protocol": "foo:",
      "hostname": "",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "foo:/bar.com/",
      "base": "http://example.org/foo/bar",
      "href": "foo:/bar.com/",
      "protocol": "foo:",
      "hostname": "",
      "port": "",
      "pathname": "/bar.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "foo://///////",
      "base": "http://example.org/foo/bar",
      "href": "foo://///////",
      "protocol": "foo:",
      "hostname": "",
      "port": "",
      "pathname": "///////",
      "search": "",
      "hash": ""
    },
    {
      "input": "foo://///////bar.com/",
      "base": "http://example.org/foo/bar",
      "href": "foo://///////bar.com/",
      "protocol": "foo:",
      "hostname": "",
      "port": "",
      "pathname": "///////bar.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "foo:////://///",
      "base": "http://example.org/foo/bar",
      "href": "foo:////://///",
      "protocol": "foo:",
      "hostname": "",
      "port": "",
      "pathname": "//://///",
      "search": "",
      "hash": ""
    },
    {
      "input": "c:/foo",
      "base": "http://example.org/foo/bar",
      "href": "file:///c:/foo",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/c:/foo",
      "search": "",
      "hash": ""
    },
    {
      "input": "//foo/bar",
      "base": "http://example.org/foo/bar",
      "href": "http://foo/bar",
      "protocol": "http:",
      "hostname": "foo",
      "port": "",
      "pathname": "/bar",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://foo/path;a??e#f#g",
      "base": "http://example.org/foo/bar",
      "href": "http://foo/path;a??e#f#g",
      "protocol": "http:",
      "hostname": "foo",
      "port": "",
      "pathname": "/path;a",
      "search": "??e",
      "hash": "#f#g"
    },
    {
      "input": "http://foo/abcd?efgh?ijkl",
      "base": "http://example.org/foo/bar",
      "href": "http://foo/abcd?efgh?ijkl",
      "protocol": "http:",
      "hostname": "foo",
      "port": "",
      "pathname": "/abcd",
      "search": "?efgh?ijkl",
      "hash": ""
    },
    {
      "input": "http://foo/abcd#foo?bar",
      "base": "http://example.org/foo/bar",
      "href": "http://foo/abcd#foo?bar",
      "protocol": "http:",
      "hostname": "foo",
      "port": "",
      "pathname": "/abcd",
      "search": "",
      "hash": "#foo?bar"
    },
    {
      "input": "[61:24:74]:98",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/[61:24:74]:98",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/[61:24:74]:98",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:[61:27]/:foo",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/[61:27]/:foo",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/[61:27]/:foo",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://[1::2]:3:4",
      "base": "http://example.org/foo/bar",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://2001::1",
      "base": "http://example.org/foo/bar",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://2001::1]",
      "base": "http://example.org/foo/bar",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://2001::1]:80",
      "base": "http://example.org/foo/bar",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://[2001::1]",
      "base": "http://example.org/foo/bar",
      "href": "http://[2001::1]/",
      "protocol": "http:",
      "hostname": "2001::1",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://[2001::1]:80",
      "base": "http://example.org/foo/bar",
      "href": "http://[2001::1]/",
      "protocol": "http:",
      "hostname": "2001::1",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:/example.com/",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/example.com/",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ftp:/example.com/",
      "base": "http://example.org/foo/bar",
      "href": "ftp:/example.com/",
      "protocol": "ftp:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "https:/example.com/",
      "base": "http://example.org/foo/bar",
      "href": "https:/example.com/",
      "protocol": "https:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "madeupscheme:/example.com/",
      "base": "http://example.org/foo/bar",
      "href": "madeupscheme:/example.com/",
      "protocol": "madeupscheme:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "file:/example.com/",
      "base": "http://example.org/foo/bar",
      "href": "file:/example.com/",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ftps:/example.com/",
      "base": "http://example.org/foo/bar",
      "href": "ftps:/example.com/",
      "protocol": "ftps:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "gopher:/example.com/",
      "base": "http://example.org/foo/bar",
      "href": "gopher:/example.com/",
      "protocol": "gopher:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ws:/example.com/",
      "base": "http://example.org/foo/bar",
      "href": "ws:/example.com/",
      "protocol": "ws:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "wss:/example.com/",
      "base": "http://example.org/foo/bar",
      "href": "wss:/example.com/",
      "protocol": "wss:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "data:/example.com/",
      "base": "http://example.org/foo/bar",
      "href": "data:/example.com/",
      "protocol": "data:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "javascript:/example.com/",
      "base": "http://example.org/foo/bar",
      "href": "javascript:/example.com/",
      "protocol": "javascript:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "mailto:/example.com/",
      "base": "http://example.org/foo/bar",
      "href": "mailto:/example.com/",
      "protocol": "mailto:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:example.com/",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/example.com/",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ftp:example.com/",
      "base": "http://example.org/foo/bar",
      "href": "ftp:example.com/",
      "protocol": "ftp:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "https:example.com/",
      "base": "http://example.org/foo/bar",
      "href": "https:example.com/",
      "protocol": "https:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "madeupscheme:example.com/",
      "base": "http://example.org/foo/bar",
      "href": "madeupscheme:example.com/",
      "protocol": "madeupscheme:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ftps:example.com/",
      "base": "http://example.org/foo/bar",
      "href": "ftps:example.com/",
      "protocol": "ftps:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "gopher:example.com/",
      "base": "http://example.org/foo/bar",
      "href": "gopher:example.com/",
      "protocol": "gopher:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ws:example.com/",
      "base": "http://example.org/foo/bar",
      "href": "ws:example.com/",
      "protocol": "ws:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "wss:example.com/",
      "base": "http://example.org/foo/bar",
      "href": "wss:example.com/",
      "protocol": "wss:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "data:example.com/",
      "base": "http://example.org/foo/bar",
      "href": "data:example.com/",
      "protocol": "data:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "javascript:example.com/",
      "base": "http://example.org/foo/bar",
      "href": "javascript:example.com/",
      "protocol": "javascript:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "mailto:example.com/",
      "base": "http://example.org/foo/bar",
      "href": "mailto:example.com/",
      "protocol": "mailto:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "/a/b/c",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/a/b/c",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/a/b/c",
      "search": "",
      "hash": ""
    },
    {
      "input": "/a/ /c",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/a/%20/c",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/a/%20/c",
      "search": "",
      "hash": ""
    },
    {
      "input": "/a%2fc",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/a%2fc",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/a%2fc",
      "search": "",
      "hash": ""
    },
    {
      "input": "/a/%2f/c",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/a/%2f/c",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/a/%2f/c",
      "search": "",
      "hash": ""
    },
    {
      "input": "#β",
      "base": "http://example.org/foo/bar",
      "href": "http://example.org/foo/bar#β",
      "protocol": "http:",
      "hostname": "example.org",
      "port": "",
      "pathname": "/foo/bar",
      "search": "",
      "hash": "#β"
    },
    {
      "input": "data:text/html,test#test",
      "base": "http://example.org/foo/bar",
      "href": "data:text/html,test#test",
      "protocol": "data:",
      "hostname": "",
      "port": "",
      "pathname": "text/html,test#test",
      "search": "",
      "hash": ""
    },
    {
      "input": "file:c:\\foo\\bar.html",
      "base": "file:///tmp/mock/path",
      "href": "file:///tmp/mock/c:/foo/bar.html",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/tmp/mock/c:/foo/bar.html",
      "search": "",
      "hash": ""
    },
    {
      "input": "  File:c|////foo\\bar.html",
      "base": "file:///tmp/mock/path",
      "href": "file:///tmp/mock/c%7C////foo/bar.html",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/tmp/mock/c%7C////foo/bar.html",
      "search": "",
      "hash": ""
    },
    {
      "input": "C|/foo/bar",
      "base": "file:///tmp/mock/path",
      "href": "file:///tmp/mock/C%7C/foo/bar",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/tmp/mock/C%7C/foo/bar",
      "search": "",
      "hash": ""
    },
    {
      "input": "/C|\\foo\\bar",
      "base": "file:///tmp/mock/path",
      "href": "file:///C%7C/foo/bar",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/C%7C/foo/bar",
      "search": "",
      "hash": ""
    },
    {
      "input": "//C|/foo/bar",
      "base": "file:///tmp/mock/path",
      "href": "file://c%7C/foo/bar",
      "protocol": "file:",
      "hostname": "c%7C",
      "port": "",
      "pathname": "/foo/bar",
      "search": "",
      "hash": ""
    },
    {
      "input": "//server/file",
      "base": "file:///tmp/mock/path",
      "href": "file://server/file",
      "protocol": "file:",
      "hostname": "server",
      "port": "",
      "pathname": "/file",
      "search": "",
      "hash": ""
    },
    {
      "input": "\\\\server\\file",
      "base": "file:///tmp/mock/path",
      "href": "file://server/file",
      "protocol": "file:",
      "hostname": "server",
      "port": "",
      "pathname": "/file",
      "search": "",
      "hash": ""
    },
    {
      "input": "/\\server/file",
      "base": "file:///tmp/mock/path",
      "href": "file:///.//server/file",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/.//server/file",
      "search": "",
      "hash": ""
    },
    {
      "input": "file:///foo/bar.txt",
      "base": "file:///tmp/mock/path",
      "href": "file:///foo/bar.txt",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/foo/bar.txt",
      "search": "",
      "hash": ""
    },
    {
      "input": "file:///home/me",
      "base": "file:///tmp/mock/path",
      "href": "file:///home/me",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/home/me",
      "search": "",
      "hash": ""
    },
    {
      "input": "//",
      "base": "file:///tmp/mock/path",
      "href": "file:///.//",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/.//",
      "search": "",
      "hash": ""
    },
    {
      "input": "///",
      "base": "file:///tmp/mock/path",
      "href": "file:///.///",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/.///",
      "search": "",
      "hash": ""
    },
    {
      "input": "///test",
      "base": "file:///tmp/mock/path",
      "href": "file:///.///test",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/.///test",
      "search": "",
      "hash": ""
    },
    {
      "input": "file://test",
      "base": "file:///tmp/mock/path",
      "href": "file://test/",
      "protocol": "file:",
      "hostname": "test",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "file://localhost",
      "base": "file:///tmp/mock/path",
      "href": "file:///",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "file://localhost/",
      "base": "file:///tmp/mock/path",
      "href": "file:///",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "file://localhost/test",
      "base": "file:///tmp/mock/path",
      "href": "file:///test",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/test",
      "search": "",
      "hash": ""
    },
    {
      "input": "test",
      "base": "file:///tmp/mock/path",
      "href": "file:///tmp/mock/test",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/tmp/mock/test",
      "search": "",
      "hash": ""
    },
    {
      "input": "file:test",
      "base": "file:///tmp/mock/path",
      "href": "file:///tmp/mock/test",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/tmp/mock/test",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/././foo",
      "base": "about:blank",
      "href": "http://example.com/foo",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foo",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/./.foo",
      "base": "about:blank",
      "href": "http://example.com/.foo",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/.foo",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/.",
      "base": "about:blank",
      "href": "http://example.com/foo/",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foo/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/./",
      "base": "about:blank",
      "href": "http://example.com/foo/",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foo/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/bar/..",
      "base": "about:blank",
      "href": "http://example.com/foo/",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foo/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/bar/../",
      "base": "about:blank",
      "href": "http://example.com/foo/",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foo/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/..bar",
      "base": "about:blank",
      "href": "http://example.com/foo/..bar",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foo/..bar",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/bar/../ton",
      "base": "about:blank",
      "href": "http://example.com/foo/ton",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foo/ton",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/bar/../ton/../../a",
      "base": "about:blank",
      "href": "http://example.com/a",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/a",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/../../..",
      "base": "about:blank",
      "href": "http://example.com/",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/../../../ton",
      "base": "about:blank",
      "href": "http://example.com/ton",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/ton",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/%2e",
      "base": "about:blank",
      "href": "http://example.com/foo/",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foo/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/%2e%2",
      "base": "about:blank",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar",
      "base": "about:blank",
      "href": "http://example.com/..bar",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/..bar",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com////../..",
      "base": "about:blank",
      "href": "http://example.com//",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "//",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/bar//../..",
      "base": "about:blank",
      "href": "http://example.com/foo/",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foo/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo/bar//..",
      "base": "about:blank",
      "href": "http://example.com/foo/bar/",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foo/bar/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo",
      "base": "about:blank",
      "href": "http://example.com/foo",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foo",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/%20foo",
      "base": "about:blank",
      "href": "http://example.com/%20foo",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/%20foo",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo%",
      "base": "about:blank",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://example.com/foo%2",
      "base": "about:blank",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://example.com/foo%2zbar",
      "base": "about:blank",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://example.com/foo%2Â©zbar",
      "base": "about:blank",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://example.com/foo%41%7a",
      "base": "about:blank",
      "href": "http://example.com/fooAz",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/fooAz",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo\t%91",
      "base": "about:blank",
      "href": "http://example.com/foo%91",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foo%91",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo%00%51",
      "base": "about:blank",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://example.com/(%28:%3A%29)",
      "base": "about:blank",
      "href": "http://example.com/(%28:%3A%29)",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/(%28:%3A%29)",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/%3A%3a%3C%3c",
      "base": "about:blank",
      "href": "http://example.com/%3A%3a%3C%3c",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/%3A%3a%3C%3c",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/foo\tbar",
      "base": "about:blank",
      "href": "http://example.com/foobar",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/foobar",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com\\\\foo\\\\bar",
      "base": "about:blank",
      "href": "http://example.com//foo//bar",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "//foo//bar",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd",
      "base": "about:blank",
      "href": "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/%7Ffp3%3Eju%3Dduvgw%3Dd",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/@asdf%40",
      "base": "about:blank",
      "href": "http://example.com/@asdf%40",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/@asdf%40",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/你好你好",
      "base": "about:blank",
      "href": "http://example.com/你好你好",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/你好你好",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/‥/foo",
      "base": "about:blank",
      "href": "http://example.com/‥/foo",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/‥/foo",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/﻿/foo",
      "base": "about:blank",
      "href": "http://example.com/﻿/foo",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/﻿/foo",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example.com/‮/foo/‭/bar",
      "base": "about:blank",
      "href": "http://example.com/‮/foo/‭/bar",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/‮/foo/‭/bar",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://www.google.com/foo?bar=baz#",
      "base": "about:blank",
      "href": "http://www.google.com/foo?bar=baz#",
      "protocol": "http:",
      "hostname": "www.google.com",
      "port": "",
      "pathname": "/foo",
      "search": "?bar=baz",
      "hash": "#"
    },
    {
      "input": "http://www.google.com/foo?bar=baz# »",
      "base": "about:blank",
      "href": "http://www.google.com/foo?bar=baz# »",
      "protocol": "http:",
      "hostname": "www.google.com",
      "port": "",
      "pathname": "/foo",
      "search": "?bar=baz",
      "hash": "# »"
    },
    {
      "input": "http://[www.google.com]/",
      "base": "about:blank",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://www.google.com",
      "base": "about:blank",
      "href": "http://www.google.com/",
      "protocol": "http:",
      "hostname": "www.google.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://192.0x00A80001",
      "base": "about:blank",
      "href": "http://192.168.0.1/",
      "protocol": "http:",
      "hostname": "192.168.0.1",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://www/foo%2Ehtml",
      "base": "about:blank",
      "href": "http://www/foo.html",
      "protocol": "http:",
      "hostname": "www",
      "port": "",
      "pathname": "/foo.html",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://www/foo/%2E/html",
      "base": "about:blank",
      "href": "http://www/foo/html",
      "protocol": "http:",
      "hostname": "www",
      "port": "",
      "pathname": "/foo/html",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://user:pass@/",
      "base": "about:blank",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http://%25DOMAIN:foobar@foodomain.com/",
      "base": "about:blank",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http:\\\\www.google.com\\foo",
      "base": "about:blank",
      "href": "http://www.google.com/foo",
      "protocol": "http:",
      "hostname": "www.google.com",
      "port": "",
      "pathname": "/foo",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://foo:80/",
      "base": "about:blank",
      "href": "http://foo/",
      "protocol": "http:",
      "hostname": "foo",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://foo:81/",
      "base": "about:blank",
      "href": "http://foo:81/",
      "protocol": "http:",
      "hostname": "foo",
      "port": "81",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "httpa://foo:80/",
      "base": "about:blank",
      "href": "httpa://foo:80/",
      "protocol": "httpa:",
      "hostname": "foo",
      "port": "80",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://foo:-80/",
      "base": "about:blank",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "https://foo:443/",
      "base": "about:blank",
      "href": "https://foo/",
      "protocol": "https:",
      "hostname": "foo",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "https://foo:80/",
      "base": "about:blank",
      "href": "https://foo:80/",
      "protocol": "https:",
      "hostname": "foo",
      "port": "80",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ftp://foo:21/",
      "base": "about:blank",
      "href": "ftp://foo/",
      "protocol": "ftp:",
      "hostname": "foo",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ftp://foo:80/",
      "base": "about:blank",
      "href": "ftp://foo:80/",
      "protocol": "ftp:",
      "hostname": "foo",
      "port": "80",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "gopher://foo:70/",
      "base": "about:blank",
      "href": "gopher://foo/",
      "protocol": "gopher:",
      "hostname": "foo",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "gopher://foo:443/",
      "base": "about:blank",
      "href": "gopher://foo:443/",
      "protocol": "gopher:",
      "hostname": "foo",
      "port": "443",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ws://foo:80/",
      "base": "about:blank",
      "href": "ws://foo:80/",
      "protocol": "ws:",
      "hostname": "foo",
      "port": "80",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ws://foo:81/",
      "base": "about:blank",
      "href": "ws://foo:81/",
      "protocol": "ws:",
      "hostname": "foo",
      "port": "81",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ws://foo:443/",
      "base": "about:blank",
      "href": "ws://foo:443/",
      "protocol": "ws:",
      "hostname": "foo",
      "port": "443",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ws://foo:815/",
      "base": "about:blank",
      "href": "ws://foo:815/",
      "protocol": "ws:",
      "hostname": "foo",
      "port": "815",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "wss://foo:80/",
      "base": "about:blank",
      "href": "wss://foo:80/",
      "protocol": "wss:",
      "hostname": "foo",
      "port": "80",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "wss://foo:81/",
      "base": "about:blank",
      "href": "wss://foo:81/",
      "protocol": "wss:",
      "hostname": "foo",
      "port": "81",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "wss://foo:443/",
      "base": "about:blank",
      "href": "wss://foo:443/",
      "protocol": "wss:",
      "hostname": "foo",
      "port": "443",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "wss://foo:815/",
      "base": "about:blank",
      "href": "wss://foo:815/",
      "protocol": "wss:",
      "hostname": "foo",
      "port": "815",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:/example.com/",
      "base": "about:blank",
      "href": "http:/example.com/",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ftp:/example.com/",
      "base": "about:blank",
      "href": "ftp:/example.com/",
      "protocol": "ftp:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "https:/example.com/",
      "base": "about:blank",
      "href": "https:/example.com/",
      "protocol": "https:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "madeupscheme:/example.com/",
      "base": "about:blank",
      "href": "madeupscheme:/example.com/",
      "protocol": "madeupscheme:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "file:/example.com/",
      "base": "about:blank",
      "href": "file:///example.com/",
      "protocol": "file:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ftps:/example.com/",
      "base": "about:blank",
      "href": "ftps:/example.com/",
      "protocol": "ftps:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "gopher:/example.com/",
      "base": "about:blank",
      "href": "gopher:/example.com/",
      "protocol": "gopher:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ws:/example.com/",
      "base": "about:blank",
      "href": "ws:/example.com/",
      "protocol": "ws:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "wss:/example.com/",
      "base": "about:blank",
      "href": "wss:/example.com/",
      "protocol": "wss:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "data:/example.com/",
      "base": "about:blank",
      "href": "data:/example.com/",
      "protocol": "data:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "javascript:/example.com/",
      "base": "about:blank",
      "href": "javascript:/example.com/",
      "protocol": "javascript:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "mailto:/example.com/",
      "base": "about:blank",
      "href": "mailto:/example.com/",
      "protocol": "mailto:",
      "hostname": "",
      "port": "",
      "pathname": "/example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:example.com/",
      "base": "about:blank",
      "href": "http:example.com/",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ftp:example.com/",
      "base": "about:blank",
      "href": "ftp:example.com/",
      "protocol": "ftp:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "https:example.com/",
      "base": "about:blank",
      "href": "https:example.com/",
      "protocol": "https:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "madeupscheme:example.com/",
      "base": "about:blank",
      "href": "madeupscheme:example.com/",
      "protocol": "madeupscheme:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ftps:example.com/",
      "base": "about:blank",
      "href": "ftps:example.com/",
      "protocol": "ftps:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "gopher:example.com/",
      "base": "about:blank",
      "href": "gopher:example.com/",
      "protocol": "gopher:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "ws:example.com/",
      "base": "about:blank",
      "href": "ws:example.com/",
      "protocol": "ws:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "wss:example.com/",
      "base": "about:blank",
      "href": "wss:example.com/",
      "protocol": "wss:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "data:example.com/",
      "base": "about:blank",
      "href": "data:example.com/",
      "protocol": "data:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "javascript:example.com/",
      "base": "about:blank",
      "href": "javascript:example.com/",
      "protocol": "javascript:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "mailto:example.com/",
      "base": "about:blank",
      "href": "mailto:example.com/",
      "protocol": "mailto:",
      "hostname": "",
      "port": "",
      "pathname": "example.com/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:@www.example.com",
      "base": "about:blank",
      "href": "http:@www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "@www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:/@www.example.com",
      "base": "about:blank",
      "href": "http:/@www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "/@www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://@www.example.com",
      "base": "about:blank",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http:a:b@www.example.com",
      "base": "about:blank",
      "href": "http:a:b@www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "a:b@www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:/a:b@www.example.com",
      "base": "about:blank",
      "href": "http:/a:b@www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "/a:b@www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://a:b@www.example.com",
      "base": "about:blank",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http://@pple.com",
      "base": "about:blank",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http::b@www.example.com",
      "base": "about:blank",
      "href": "http::b@www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": ":b@www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:/:b@www.example.com",
      "base": "about:blank",
      "href": "http:/:b@www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "/:b@www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://:b@www.example.com",
      "base": "about:blank",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http:/:@/www.example.com",
      "base": "about:blank",
      "href": "http:/:@/www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "/:@/www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://user@/www.example.com",
      "base": "about:blank",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http:@/www.example.com",
      "base": "about:blank",
      "href": "http:@/www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "@/www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:/@/www.example.com",
      "base": "about:blank",
      "href": "http:/@/www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "/@/www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://@/www.example.com",
      "base": "about:blank",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "https:@/www.example.com",
      "base": "about:blank",
      "href": "https:@/www.example.com",
      "protocol": "https:",
      "hostname": "",
      "port": "",
      "pathname": "@/www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:a:b@/www.example.com",
      "base": "about:blank",
      "href": "http:a:b@/www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "a:b@/www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:/a:b@/www.example.com",
      "base": "about:blank",
      "href": "http:/a:b@/www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "/a:b@/www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://a:b@/www.example.com",
      "base": "about:blank",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http::@/www.example.com",
      "base": "about:blank",
      "href": "http::@/www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": ":@/www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:a:@www.example.com",
      "base": "about:blank",
      "href": "http:a:@www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "a:@www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:/a:@www.example.com",
      "base": "about:blank",
      "href": "http:/a:@www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "/a:@www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://a:@www.example.com",
      "base": "about:blank",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http://www.@pple.com",
      "base": "about:blank",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "http:@:www.example.com",
      "base": "about:blank",
      "href": "http:@:www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "@:www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http:/@:www.example.com",
      "base": "about:blank",
      "href": "http:/@:www.example.com",
      "protocol": "http:",
      "hostname": "",
      "port": "",
      "pathname": "/@:www.example.com",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://@:www.example.com",
      "base": "about:blank",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://:@www.example.com",
      "base": "about:blank",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "/",
      "base": "http://www.example.com/test",
      "href": "http://www.example.com/",
      "protocol": "http:",
      "hostname": "www.example.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "/test.txt",
      "base": "http://www.example.com/test",
      "href": "http://www.example.com/test.txt",
      "protocol": "http:",
      "hostname": "www.example.com",
      "port": "",
      "pathname": "/test.txt",
      "search": "",
      "hash": ""
    },
    {
      "input": ".",
      "base": "http://www.example.com/test",
      "href": "http://www.example.com/",
      "protocol": "http:",
      "hostname": "www.example.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "..",
      "base": "http://www.example.com/test",
      "href": "http://www.example.com/",
      "protocol": "http:",
      "hostname": "www.example.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "test.txt",
      "base": "http://www.example.com/test",
      "href": "http://www.example.com/test.txt",
      "protocol": "http:",
      "hostname": "www.example.com",
      "port": "",
      "pathname": "/test.txt",
      "search": "",
      "hash": ""
    },
    {
      "input": "./test.txt",
      "base": "http://www.example.com/test",
      "href": "http://www.example.com/test.txt",
      "protocol": "http:",
      "hostname": "www.example.com",
      "port": "",
      "pathname": "/test.txt",
      "search": "",
      "hash": ""
    },
    {
      "input": "../test.txt",
      "base": "http://www.example.com/test",
      "href": "http://www.example.com/test.txt",
      "protocol": "http:",
      "hostname": "www.example.com",
      "port": "",
      "pathname": "/test.txt",
      "search": "",
      "hash": ""
    },
    {
      "input": "../aaa/test.txt",
      "base": "http://www.example.com/test",
      "href": "http://www.example.com/aaa/test.txt",
      "protocol": "http:",
      "hostname": "www.example.com",
      "port": "",
      "pathname": "/aaa/test.txt",
      "search": "",
      "hash": ""
    },
    {
      "input": "../../test.txt",
      "base": "http://www.example.com/test",
      "href": "http://www.example.com/test.txt",
      "protocol": "http:",
      "hostname": "www.example.com",
      "port": "",
      "pathname": "/test.txt",
      "search": "",
      "hash": ""
    },
    {
      "input": "中/test.txt",
      "base": "http://www.example.com/test",
      "href": "http://www.example.com/中/test.txt",
      "protocol": "http:",
      "hostname": "www.example.com",
      "port": "",
      "pathname": "/中/test.txt",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://www.example2.com",
      "base": "http://www.example.com/test",
      "href": "http://www.example2.com/",
      "protocol": "http:",
      "hostname": "www.example2.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "//www.example2.com",
      "base": "http://www.example.com/test",
      "href": "http://www.example2.com/",
      "protocol": "http:",
      "hostname": "www.example2.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://ExAmPlE.CoM",
      "base": "http://other.com/",
      "href": "http://example.com/",
      "protocol": "http:",
      "hostname": "example.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://example example.com",
      "base": "http://other.com/",
      "href": "http://example%20example.com/",
      "protocol": "http:",
      "hostname": "example%20example.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://Goo%20 goo%7C|.com",
      "base": "http://other.com/",
      "href": "http://goo%20%20goo%7c%7c.com/",
      "protocol": "http:",
      "hostname": "goo%20%20goo%7c%7c.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://GOO 　goo.com",
      "base": "http://other.com/",
      "href-exception": "Unspecified error.",
      "protocol-exception": "Unspecified error.",
      "hostname-exception": "Unspecified error.",
      "port-exception": "Unspecified error.",
      "pathname-exception": "Unspecified error.",
      "search-exception": "Unspecified error.",
      "hash-exception": "Unspecified error."
    },
    {
      "input": "http://GOO​⁠﻿goo.com",
      "base": "http://other.com/",
      "href": "http://googoo.com/",
      "protocol": "http:",
      "hostname": "googoo.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://www.foo。bar.com",
      "base": "http://other.com/",
      "href": "http://www.foo.bar.com/",
      "protocol": "http:",
      "hostname": "www.foo.bar.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://﷐zyx.com",
      "base": "http://other.com/",
      "href-exception": "Unspecified error.",
      "protocol-exception": "Unspecified error.",
      "hostname-exception": "Unspecified error.",
      "port-exception": "Unspecified error.",
      "pathname-exception": "Unspecified error.",
      "search-exception": "Unspecified error.",
      "hash-exception": "Unspecified error."
    },
    {
      "input": "http://%ef%b7%90zyx.com",
      "base": "http://other.com/",
      "href": "http://%ef%b7%90zyx.com/",
      "protocol": "http:",
      "hostname": "%ef%b7%90zyx.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://Ｇｏ.com",
      "base": "http://other.com/",
      "href": "http://go.com/",
      "protocol": "http:",
      "hostname": "go.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://％４１.com",
      "base": "http://other.com/",
      "href-exception": "Unspecified error.",
      "protocol-exception": "Unspecified error.",
      "hostname-exception": "Unspecified error.",
      "port-exception": "Unspecified error.",
      "pathname-exception": "Unspecified error.",
      "search-exception": "Unspecified error.",
      "hash-exception": "Unspecified error."
    },
    {
      "input": "http://%ef%bc%85%ef%bc%94%ef%bc%91.com",
      "base": "http://other.com/",
      "href": "http://%ef%bc%85%ef%bc%94%ef%bc%91.com/",
      "protocol": "http:",
      "hostname": "%ef%bc%85%ef%bc%94%ef%bc%91.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://％００.com",
      "base": "http://other.com/",
      "href-exception": "Unspecified error.",
      "protocol-exception": "Unspecified error.",
      "hostname-exception": "Unspecified error.",
      "port-exception": "Unspecified error.",
      "pathname-exception": "Unspecified error.",
      "search-exception": "Unspecified error.",
      "hash-exception": "Unspecified error."
    },
    {
      "input": "http://%ef%bc%85%ef%bc%90%ef%bc%90.com",
      "base": "http://other.com/",
      "href": "http://%ef%bc%85%ef%bc%90%ef%bc%90.com/",
      "protocol": "http:",
      "hostname": "%ef%bc%85%ef%bc%90%ef%bc%90.com",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://你好你好",
      "base": "http://other.com/",
      "href": "http://你好你好/",
      "protocol": "http:",
      "hostname": "你好你好",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://%zz%66%a.com",
      "base": "http://other.com/",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://%25",
      "base": "http://other.com/",
      "href": "http://%25/",
      "protocol": "http:",
      "hostname": "%25",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://hello%00",
      "base": "http://other.com/",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://%30%78%63%30%2e%30%32%35%30.01",
      "base": "http://other.com/",
      "href": "http://0xc0.0250.01/",
      "protocol": "http:",
      "hostname": "0xc0.0250.01",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://%30%78%63%30%2e%30%32%35%30.01%2e",
      "base": "http://other.com/",
      "href": "http://0xc0.0250.01./",
      "protocol": "http:",
      "hostname": "0xc0.0250.01.",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://192.168.0.257",
      "base": "http://other.com/",
      "href": "http://192.168.0.257/",
      "protocol": "http:",
      "hostname": "192.168.0.257",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://%3g%78%63%30%2e%30%32%35%30%2E.01",
      "base": "http://other.com/",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://192.168.0.1 hello",
      "base": "http://other.com/",
      "href": "http://192.168.0.1%20hello/",
      "protocol": "http:",
      "hostname": "192.168.0.1%20hello",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://０Ｘｃ０．０２５０．０１",
      "base": "http://other.com/",
      "href": "http://0xc0.0250.01/",
      "protocol": "http:",
      "hostname": "0xc0.0250.01",
      "port": "",
      "pathname": "/",
      "search": "",
      "hash": ""
    },
    {
      "input": "http://[google.com]",
      "base": "http://other.com/",
      "href-exception": "Invalid argument.",
      "protocol-exception": "Invalid argument.",
      "hostname-exception": "Invalid argument.",
      "port-exception": "Invalid argument.",
      "pathname-exception": "Invalid argument.",
      "search-exception": "Invalid argument.",
      "hash-exception": "Invalid argument."
    },
    {
      "input": "http://foo:💩@example.com/bar",
      "base": "http://other.com/",
      "href-exception": "A security problem occurred.\r\n",
      "protocol-exception": "A security problem occurred.\r\n",
      "hostname-exception": "A security problem occurred.\r\n",
      "port-exception": "A security problem occurred.\r\n",
      "pathname-exception": "A security problem occurred.\r\n",
      "search-exception": "A security problem occurred.\r\n",
      "hash-exception": "A security problem occurred.\r\n"
    },
    {
      "input": "x",
      "base": "test:test",
      "href": "http://other.com/x",
      "protocol": "http:",
      "hostname": "other.com",
      "port": "",
      "pathname": "/x",
      "search": "",
      "hash": ""
    }
  ],
  "setters": {
    "href": [
      {
        "testname": "setAll",
        "url": "foo:",
        "value": "http://user:pass@host:99/path?search#hash",
        "tests": {
          "href_exception": "A security problem occurred.\r\n",
          "protocol_exception": "A security problem occurred.\r\n",
          "hostname_exception": "A security problem occurred.\r\n",
          "port_exception": "A security problem occurred.\r\n",
          "pathname_exception": "A security problem occurred.\r\n",
          "search_exception": "A security problem occurred.\r\n",
          "hash_exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "resetAll",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "foo:",
        "tests": {
          "href": "foo:",
          "protocol": "foo:",
          "hostname": "",
          "port": "",
          "pathname": "",
          "search": "",
          "hash": ""
        }
      },
      {
        "testname": "error",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "http://localhost:badport",
        "tests": {
          "href_exception": "Invalid argument.",
          "protocol_exception": "Invalid argument.",
          "hostname_exception": "Invalid argument.",
          "pathname_exception": "Invalid argument.",
          "search_exception": "Invalid argument.",
          "hash_exception": "Invalid argument."
        }
      }
    ],
    "protocol": [
      {
        "testname": "withColon",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "foo:blahblahblah",
        "tests": {
          "protocol": ":",
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "withoutColon",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "foo",
        "tests": {
          "protocol": ":",
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "empty",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "",
        "tests": {
          "protocol": ":",
          "exception": "A security problem occurred.\r\n"
        }
      }
    ],
    "username": [
      {
        "testname": "relative",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "fred",
        "tests": {
          "username": "fred",
          "href_exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "userColon",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "fred:secret",
        "tests": {
          "username": "fred:secret",
          "href_exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "mailto",
        "url": "mailto:someone@example.com",
        "value": "fred",
        "tests": {
          "href": "mailto:someone@example.com",
          "username": "fred"
        }
      }
    ],
    "password": [
      {
        "testname": "relative",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "secret",
        "tests": {
          "password": "secret",
          "href_exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "withHash",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "secret#blah",
        "tests": {
          "password": "secret#blah",
          "href_exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "mailto",
        "url": "mailto:someone@example.com",
        "value": "fred",
        "tests": {
          "href": "mailto:someone@example.com",
          "password": "fred"
        }
      }
    ],
    "host": [
      {
        "testname": "relative",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "example.com",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "hostColonPort",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "example.com:55",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "hostColonGarbage",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "example.com:blahblahblah",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "hostHash",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "example.com#55",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "mailto",
        "url": "mailto:someone@example.com",
        "value": "fred",
        "tests": {
          "href": "mailto:fredsomeone@example.com",
          "hostname": ""
        }
      }
    ],
    "hostname": [
      {
        "testname": "relative",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "example.com",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "hostnameColon",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "example.com:blahblahblah",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "mailto",
        "url": "mailto:someone@example.com",
        "value": "fred",
        "tests": {
          "href": "mailto:fredsomeone@example.com",
          "hostname": ""
        }
      }
    ],
    "port": [
      {
        "testname": "relative",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": 55,
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "portQuestion",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "55?blahblahblah",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "carriageReturn",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "5\n5",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "default",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": 80,
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "garbage",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "blahblahblah",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "file",
        "url": "file:///path",
        "value": 55,
        "tests": {
          "href": "file://:55/path",
          "port": ""
        }
      },
      {
        "testname": "mailto",
        "url": "mailto:someone@example.com",
        "value": 55,
        "tests": {
          "href": "mailto::55someone@example.com",
          "port": ""
        }
      }
    ],
    "pathname": [
      {
        "testname": "relative",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "fred",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "relativeSlash",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "/fred",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "relativeQuestion",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "fred?blahblahblah",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "file",
        "url": "file:///path",
        "value": "fred",
        "tests": {
          "href": "file:fred",
          "pathname": "/fred"
        }
      },
      {
        "testname": "mailto",
        "url": "mailto:someone@example.com",
        "value": "fred",
        "tests": {
          "href": "mailto:fred",
          "pathname": "fred"
        }
      }
    ],
    "search": [
      {
        "testname": "unadorned",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "fred",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "question",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "?fred",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "hash",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "fred#blah",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      }
    ],
    "hash": [
      {
        "testname": "unadorned",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "fred",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      },
      {
        "testname": "pound",
        "url": "http://user:pass@host:99/path?search#hash",
        "value": "#fred",
        "tests": {
          "exception": "A security problem occurred.\r\n"
        }
      }
    ]
  }
}
