rdftk_iri 0.1.9

This crate provides an implementation of the IRI and URI specifications.
Documentation
{
  "tests": {
    "desc": "A collection of URL test cases, compiled from Webkit's /fast/url tests, Julian Reschke, and other sources.",
    "group": [
      {
        "name": "anchor",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/anchor.js",
        "desc": "Test cases from Webkit's fast/url/anchor.js",
        "test": [
          {
            "id": "1",
            "name": "A U+0020 space in the fragment",
            "url": "http://www.example.com/#hello, world",
            "expect_url": "http://www.example.com/#hello, world",
            "does_not_parse": true
          },
          {
            "id": "2",
            "name": "Percent-encoding in the fragment",
            "url": "http://www.example.com/#%c2%a9",
            "expect_url": "http://www.example.com/#%c2%a9"
          },
          {
            "id": "3",
            "name": "Unicode surrogates",
            "url": "http://www.example.com/#\ud800\udf00ss",
            "expect_url": "http://www.example.com/#\ud800\udf00ss"
          },
          {
            "id": "4",
            "name": "illegal percent-encoding",
            "url": "http://www.example.com/#%41%a",
            "expect_url": "http://www.example.com/#%41%a"
          },
          {
            "id": "5",
            "name": "Illegal Unicode half-surrogate U+D800",
            "ignored": true
          },
          {
            "id": "6",
            "name": "Illegal Unicode U+FDD0 in the fragment",
            "ignored": true
          },
          {
            "id": "7",
            "name": "An extra U+0023 NUMBER SIGN in middle of the fragment",
            "url": "http://www.example.com/#asdf#qwer",
            "expect_url": "http://www.example.com/#asdf#qwer",
            "does_not_parse": true
          },
          {
            "id": "8",
            "name": "An extra U+0023 NUMBER SIGN at the start of fragment",
            "url": "http://www.example.com/##asdf",
            "expect_url": "http://www.example.com/##asdf",
            "does_not_parse": true
          },
          {
            "id": "9",
            "name": "Extra white space characters",
            "url": "http://www.example.com/#a\u000Ab\u000Dc\u0009d",
            "expect_url": "http://www.example.com/#abcd",
            "ignored": true
          }
        ]
      },
      {
        "name": "file-http-base",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/file-http-base.js",
        "desc": "Test cases from Webkit's fast/url/file-http-base.js",
        "test": [
          {
            "id": "10",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file:c:\\\\foo\\\\bar.html",
            "expect_rel": "file:///C:/foo/bar.html"
          },
          {
            "id": "11",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "  File:c|////foo\\\\bar.html",
            "expect_rel": "file:///C:////foo/bar.html"
          },
          {
            "id": "12",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file:",
            "expect_rel": "file:///"
          },
          {
            "id": "13",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file:UNChost/path",
            "expect_rel": "file://unchost/path"
          },
          {
            "id": "14",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "c:\\\\foo\\\\bar",
            "expect_rel": "file:///C:/foo/bar"
          },
          {
            "id": "15",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "C|/foo/bar",
            "expect_rel": "file:///C:/foo/bar"
          },
          {
            "id": "16",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "/C|\\\\foo\\\\bar",
            "expect_rel": "file:///C:/foo/bar"
          },
          {
            "id": "17",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "//C|/foo/bar",
            "expect_rel": "file:///C:/foo/bar"
          },
          {
            "id": "18",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "//server/file",
            "expect_rel": "file://server/file"
          },
          {
            "id": "19",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "\\\\\\\\server\\\\file",
            "expect_rel": "file://server/file"
          },
          {
            "id": "20",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "/\\\\server/file",
            "expect_rel": "file://server/file"
          },
          {
            "id": "21",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file:c:foo/bar.html",
            "expect_rel": "file:///C:/foo/bar.html"
          },
          {
            "id": "22",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file:/\\\\/\\\\C:\\\\\\\\//foo\\\\bar.html",
            "expect_rel": "file:///C:////foo/bar.html"
          },
          {
            "id": "23",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file:///foo/bar.txt",
            "expect_rel": "file:///foo/bar.txt"
          },
          {
            "id": "24",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "FILE:/\\\\/\\\\7:\\\\\\\\//foo\\\\bar.html",
            "expect_rel": "file://7:////foo/bar.html"
          },
          {
            "id": "25",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file:filer/home\\\\me",
            "expect_rel": "file://filer/home/me"
          },
          {
            "id": "26",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file:///C:/foo/../../../bar.html",
            "expect_rel": "file:///C:/bar.html"
          },
          {
            "id": "27",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file:///C:/asdf#\\%c2",
            "expect_rel": "file:///C:/asdf#\\%ef\\%bf\\%bd"
          },
          {
            "id": "28",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file:///home/me",
            "expect_rel": "file:///home/me"
          },
          {
            "id": "29",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file:c:\\\\foo\\\\bar.html",
            "expect_rel": "file:///c:/foo/bar.html"
          },
          {
            "id": "30",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file:c|//foo\\\\bar.html",
            "expect_rel": "file:///c%7C//foo/bar.html"
          },
          {
            "id": "31",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "//",
            "expect_rel": "file:///"
          },
          {
            "id": "32",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "///",
            "expect_rel": "file:///"
          },
          {
            "id": "33",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "///test",
            "expect_rel": "file:///test"
          },
          {
            "id": "34",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file://test",
            "expect_rel": "file://test/"
          },
          {
            "id": "35",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file://localhost/",
            "expect_rel": "file://localhost/"
          },
          {
            "id": "36",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "rel": "file://localhost/test",
            "expect_rel": "file://localhost/test"
          }
        ]
      },
      {
        "name": "file",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/file.js",
        "desc": "Test cases from Webkit's fast/url/file.js",
        "test": [
          {
            "id": "37",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file:c:\\\\foo\\\\bar.html",
            "expect_rel": "file:///C:/foo/bar.html"
          },
          {
            "id": "38",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "  File:c|////foo\\\\bar.html",
            "expect_rel": "file:///C:////foo/bar.html"
          },
          {
            "id": "39",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file:",
            "expect_rel": "file:///"
          },
          {
            "id": "40",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file:UNChost/path",
            "expect_rel": "file://unchost/path"
          },
          {
            "id": "41",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "c:\\\\foo\\\\bar",
            "expect_rel": "file:///C:/foo/bar"
          },
          {
            "id": "42",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "C|/foo/bar",
            "expect_rel": "file:///C:/foo/bar"
          },
          {
            "id": "43",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "/C|\\\\foo\\\\bar",
            "expect_rel": "file:///C:/foo/bar"
          },
          {
            "id": "44",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "//C|/foo/bar",
            "expect_rel": "file:///C:/foo/bar"
          },
          {
            "id": "45",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "//server/file",
            "expect_rel": "file://server/file"
          },
          {
            "id": "46",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "\\\\\\\\server\\\\file",
            "expect_rel": "file://server/file"
          },
          {
            "id": "47",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "/\\\\server/file",
            "expect_rel": "file://server/file"
          },
          {
            "id": "48",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file:c:foo/bar.html",
            "expect_rel": "file:///C:/foo/bar.html"
          },
          {
            "id": "49",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file:/\\\\/\\\\C:\\\\\\\\//foo\\\\bar.html",
            "expect_rel": "file:///C:////foo/bar.html"
          },
          {
            "id": "50",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file:///foo/bar.txt",
            "expect_rel": "file:///foo/bar.txt"
          },
          {
            "id": "51",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "FILE:/\\\\/\\\\7:\\\\\\\\//foo\\\\bar.html",
            "expect_rel": "file://7:////foo/bar.html"
          },
          {
            "id": "52",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file:filer/home\\\\me",
            "expect_rel": "file://filer/home/me"
          },
          {
            "id": "53",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file:///C:/foo/../../../bar.html",
            "expect_rel": "file:///C:/bar.html"
          },
          {
            "id": "54",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file:///C:/asdf#\\%c2",
            "expect_rel": "file:///C:/asdf#\\%ef\\%bf\\%bd"
          },
          {
            "id": "55",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file:///home/me",
            "expect_rel": "file:///home/me"
          },
          {
            "id": "56",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file:c:\\\\foo\\\\bar.html",
            "expect_rel": "file:///c:/foo/bar.html"
          },
          {
            "id": "57",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file:c|//foo\\\\bar.html",
            "expect_rel": "file:///c%7C//foo/bar.html"
          },
          {
            "id": "58",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "//",
            "expect_rel": "file:///"
          },
          {
            "id": "59",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "///",
            "expect_rel": "file:///"
          },
          {
            "id": "60",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "///test",
            "expect_rel": "file:///test"
          },
          {
            "id": "61",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file://test",
            "expect_rel": "file://test/"
          },
          {
            "id": "62",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file://localhost/",
            "expect_rel": "file://localhost/"
          },
          {
            "id": "63",
            "name": "",
            "base": "file:///tmp/mock/path",
            "rel": "file://localhost/test",
            "expect_rel": "file://localhost/test"
          }
        ]
      },
      {
        "name": "host",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/host.js",
        "desc": "Test cases from Webkit's fast/url/host.js",
        "test": [
          {
            "id": "64",
            "name": "",
            "url": "http://GoOgLe.CoM",
            "expect_url": "http://google.com"
          },
          {
            "id": "65",
            "name": "",
            "url": "http://Goo%20 goo%7C|.com",
            "expect_url": "http://goo%20%20goo%7C%7C.com"
          },
          {
            "id": "66",
            "name": "",
            "url": "http://GOO\u00a0\u3000goo.com",
            "expect_url": "http://goo%20%20goo.com"
          },
          {
            "id": "67",
            "name": "",
            "url": "http://GOO\u200b\u2060\ufeffgoo.com",
            "expect_url": "http://googoo.com"
          },
          {
            "id": "68",
            "name": "",
            "url": "http://www.foo\u3002\" + \"bar.com",
            "expect_url": "http://www.foo.bar.com"
          },
          {
            "id": "69",
            "name": "",
            "url": "http://\ufdd0zyx.com",
            "expect_url": "http://%EF%BF%BDzyx.com"
          },
          {
            "id": "70",
            "name": "",
            "url": "http://%ef%b7%90zyx.com",
            "expect_url": "http://%EF%BF%BDzyx.com"
          },
          {
            "id": "71",
            "name": "",
            "url": "http://\uff27\uff4f.com",
            "expect_url": "http://go.com"
          },
          {
            "id": "72",
            "name": "",
            "url": "http://\uff05\uff14\uff11.com",
            "expect_url": "http://a.com"
          },
          {
            "id": "73",
            "name": "",
            "url": "http://%ef%bc%85%ef%bc%94%ef%bc%91.com",
            "expect_url": "http://a.com"
          },
          {
            "id": "74",
            "name": "",
            "url": "http://\uff05\uff10\uff10.com",
            "expect_url": "http://%00.com"
          },
          {
            "id": "75",
            "name": "",
            "url": "http://%ef%bc%85%ef%bc%90%ef%bc%90.com",
            "expect_url": "http://%00.com"
          },
          {
            "id": "76",
            "name": "",
            "url": "http://\u4f60\u597d\u4f60\u597d",
            "expect_url": "http://xn--6qqa088eba"
          },
          {
            "id": "77",
            "name": "",
            "url": "http://%E4%BD%A0%E5%A5%BD\u4f60\u597d",
            "expect_url": "http://xn--6qqa088eba"
          },
          {
            "id": "78",
            "name": "",
            "url": "http://%zz%66%a",
            "expect_url": "http://%25zzf%25a"
          },
          {
            "id": "79",
            "name": "",
            "url": "http://%25",
            "expect_url": "http://%25"
          },
          {
            "id": "80",
            "name": "",
            "url": "http://hello%00",
            "expect_url": "http://hello%00"
          },
          {
            "id": "81",
            "name": "",
            "url": "http://%30%78%63%30%2e%30%32%35%30.01",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "82",
            "name": "",
            "url": "http://%30%78%63%30%2e%30%32%35%30.01%2e",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "83",
            "name": "",
            "url": "http://%3g%78%63%30%2e%30%32%35%30%2E.01",
            "expect_url": "http://%253gxc0.0250..01"
          },
          {
            "id": "84",
            "name": "",
            "url": "http://192.168.0.1 hello",
            "expect_url": "http://192.168.0.1%20hello"
          },
          {
            "id": "85",
            "name": "",
            "url": "http://\uff10\uff38\uff43\uff10\uff0e\uff10\uff12\uff15\uff10\uff0e\uff10\uff11",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "86",
            "name": "",
            "url": "http://192.168.0.257",
            "expect_url": "http://192.168.0.257"
          },
          {
            "id": "87",
            "name": "",
            "url": "http://[google.com]",
            "expect_url": "http://[google.com]"
          },
          {
            "id": "88",
            "name": "",
            "url": "http://\u0442(",
            "expect_url": "http://xn--%28-7ed"
          },
          {
            "id": "89",
            "name": "",
            "url": "http://go\\@ogle.com",
            "expect_url": "http://go@ogle.com"
          },
          {
            "id": "90",
            "name": "",
            "url": "http://go/@ogle.com",
            "expect_url": "http://go@ogle.com"
          },
          {
            "id": "91",
            "name": "",
            "url": "http://www.lookout.net::==80::==443::",
            "expect_url": "http://lookout.net"
          },
          {
            "id": "92",
            "name": "",
            "url": "http://www.lookout.net::80::443",
            "expect_url": "http://lookout.net"
          },
          {
            "id": "93",
            "name": "",
            "url": "http://\\",
            "expect_url": "http://\\"
          },
          {
            "id": "94",
            "name": "",
            "url": "http://\\\\/",
            "expect_url": "http://."
          },
          {
            "id": "95",
            "name": "",
            "url": "http://\\./",
            "expect_url": "http://."
          },
          {
            "id": "96",
            "name": "",
            "url": "http:////:@/",
            "expect_url": "http://."
          },
          {
            "id": "97",
            "name": "",
            "url": "http://\\google.com/foo",
            "expect_url": "http://google.com/foo"
          },
          {
            "id": "98",
            "name": "",
            "url": "http://\\\\google.com/foo",
            "expect_url": "http://google.com/foo"
          },
          {
            "id": "99",
            "name": "",
            "url": "http:////asdf@/",
            "expect_url": "http://."
          },
          {
            "id": "100",
            "name": "",
            "url": "http:////:81",
            "expect_url": "http://."
          },
          {
            "id": "101",
            "name": "",
            "url": "http://://",
            "expect_url": "http://."
          },
          {
            "id": "102",
            "name": "",
            "url": "http://c:",
            "expect_url": "http://."
          },
          {
            "id": "103",
            "name": "",
            "url": "http://xxxx:",
            "expect_url": "http://."
          },
          {
            "id": "104",
            "name": "",
            "url": "http://.:.",
            "expect_url": "http://."
          },
          {
            "id": "105",
            "name": "",
            "url": "http://////@google.com/",
            "expect_url": "http://."
          },
          {
            "id": "106",
            "name": "",
            "url": "http://@google.com",
            "expect_url": "http://google.com"
          }
        ]
      },
      {
        "name": "idna2003",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/idna2003.js",
        "desc": "Test cases from Webkit's fast/url/idna2003.js",
        "test": [
          {
            "id": "107",
            "name": "",
            "url": "http://fa\u00DF.de",
            "expect_url": "http://fass.de"
          },
          {
            "id": "108",
            "name": "",
            "url": "http://\u03B2\u03CC\u03BB\u03BF\u03C2.com",
            "expect_url": "http://xn--nxasmq6b.com"
          },
          {
            "id": "109",
            "name": "",
            "url": "http://\u0DC1\u0DCA\u200D\u0DBB\u0DD3.com",
            "expect_url": "http://xn--10cl1a0b.com"
          },
          {
            "id": "110",
            "name": "",
            "url": "http://\u0646\u0627\u0645\u0647\u200C\u0627\u06CC.com",
            "expect_url": "http://xn--mgba3gch31f.com"
          },
          {
            "id": "111",
            "name": "",
            "url": "http://www.loo\u0138out.net",
            "expect_url": "http://www.xn--looout-5bb.net"
          },
          {
            "id": "112",
            "name": "",
            "url": "http://\u15EF\u15EF\u15EF.lookout.net",
            "expect_url": "http://xn--1qeaa.lookout.net"
          },
          {
            "id": "113",
            "name": "",
            "url": "http://www.lookout.\u0441\u043E\u043C",
            "expect_url": "http://www.lookout.xn--l1adi"
          },
          {
            "id": "114",
            "name": "",
            "url": "http://www.lookout.net\uFF1A80",
            "expect_url": "http://www.lookout.net:80"
          },
          {
            "id": "115",
            "name": "",
            "url": "http://www\u2025lookout.net",
            "expect_url": "http://www..lookout.net"
          },
          {
            "id": "116",
            "name": "",
            "url": "http://www.lookout\u2027net",
            "expect_url": "http://www.xn--lookoutnet-406e"
          },
          {
            "id": "117",
            "name": "",
            "url": "http://www.loo\u0138out.net",
            "expect_url": "http://www.xn--looout-5bb.net"
          },
          {
            "id": "118",
            "name": "",
            "url": "http://www.lookout.net\u2A7480",
            "expect_url": "http://www.lookout.net::%3D80"
          },
          {
            "id": "119",
            "name": "",
            "url": "http://www\u00A0.lookout.net",
            "expect_url": "http://www%20.lookout.net"
          },
          {
            "id": "120",
            "name": "",
            "url": "http://\u1680lookout.net",
            "expect_url": "http://%E1%9A%80lookout.net"
          },
          {
            "id": "121",
            "name": "",
            "url": "http://\u001Flookout.net",
            "expect_url": "http://%1Flookout.net"
          },
          {
            "id": "122",
            "name": "",
            "url": "http://look\u06DDout.net",
            "expect_url": "http://look%DB%9Dout.net"
          },
          {
            "id": "123",
            "name": "",
            "url": "http://look\u180Eout.net",
            "expect_url": "http://look%E1%A0%8Eout.net"
          },
          {
            "id": "124",
            "name": "",
            "url": "http://look\u2060out.net",
            "expect_url": "http://look%E2%81%A0out.net"
          },
          {
            "id": "125",
            "name": "",
            "url": "http://look\uFEFFout.net",
            "expect_url": "http://look%EF%BB%BFout.net"
          },
          {
            "id": "126",
            "name": "",
            "url": "http://look\uD83F\uDFFEout.net",
            "expect_url": "http://look%F0%9F%BF%BEout.net"
          },
          {
            "id": "127",
            "name": "",
            "ignored": true
          },
          {
            "id": "128",
            "name": "",
            "url": "http://look\uFFFAout.net",
            "expect_url": "http://look%EF%BF%BAout.net"
          },
          {
            "id": "129",
            "name": "",
            "url": "http://look\u2FF0out.net",
            "expect_url": "http://look%E2%BF%B0out.net"
          },
          {
            "id": "130",
            "name": "",
            "url": "http://look\u0341out.net",
            "expect_url": "http://look%CD%81out.net"
          },
          {
            "id": "131",
            "name": "",
            "url": "http://look\u202Eout.net",
            "expect_url": "http://look%E2%80%AEout.net"
          },
          {
            "id": "132",
            "name": "",
            "url": "http://look\u206Bout.net",
            "expect_url": "http://look%E2%81%ABout.net"
          },
          {
            "id": "133",
            "name": "",
            "url": "http://look\uDB40\uDC01out.net",
            "expect_url": "http://look%F3%A0%80%81out.net"
          },
          {
            "id": "134",
            "name": "",
            "url": "http://look\uDB40\uDC20out.net",
            "expect_url": "http://look%F3%A0%80%A0out.net"
          },
          {
            "id": "135",
            "name": "",
            "url": "http://look\u05BEout.net",
            "expect_url": "http://look%D6%BEout.net"
          }
        ]
      },
      {
        "name": "idna2008",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/idna2008.js",
        "desc": "Test cases from Webkit's fast/url/idna2008.js",
        "test": [
          {
            "id": "136",
            "name": "",
            "url": "http://B\u00FCcher.de",
            "expect_url": "http://xn--bcher-kva.de"
          },
          {
            "id": "137",
            "name": "",
            "url": "http://fa\u00DF.de",
            "expect_url": "http://xn--fa-hia.de"
          },
          {
            "id": "138",
            "name": "",
            "url": "http://\u03B2\u03CC\u03BB\u03BF\u03C2.com",
            "expect_url": "http://xn--nxasmm1c.com"
          },
          {
            "id": "139",
            "name": "",
            "url": "http://\u0DC1\u0DCA\u200D\u0DBB\u0DD3.com",
            "expect_url": "http://xn--10cl1a0b660p.com"
          },
          {
            "id": "140",
            "name": "",
            "url": "http://\u0646\u0627\u0645\u0647\u200C\u0627\u06CC.com",
            "expect_url": "http://xn--mgba3gch31f060k.com"
          },
          {
            "id": "141",
            "name": "",
            "url": "http://\u2665.net",
            "expect_url": "http://\uFFFD.net"
          },
          {
            "id": "142",
            "name": "",
            "url": "http://\u0378.net",
            "expect_url": "http://\uFFFD.net"
          },
          {
            "id": "143",
            "name": "",
            "url": "http://\u04C0.com",
            "expect_url": "http://\uFFFD.com"
          },
          {
            "id": "144",
            "name": "",
            "url": "http://\uD87E\uDC68.com",
            "expect_url": "http://\uFFFD.com"
          },
          {
            "id": "145",
            "name": "",
            "url": "http://\u2183.com",
            "expect_url": "http://\uFFFD.com"
          },
          {
            "id": "146",
            "name": "",
            "url": "http://look\u034Fout.net",
            "expect_url": "http://lookout.net"
          },
          {
            "id": "147",
            "name": "",
            "url": "http://gOoGle.com",
            "expect_url": "http://google.com"
          },
          {
            "id": "148",
            "name": "",
            "url": "http://\u09dc.com",
            "expect_url": "http://\u09A1\u09BC.com"
          },
          {
            "id": "149",
            "name": "",
            "url": "http://\u1E9E.com",
            "expect_url": "http://ss.com"
          },
          {
            "id": "150",
            "name": "",
            "url": "http://\u1E9E.foo.com",
            "expect_url": "http://ss.foo.com"
          },
          {
            "id": "151",
            "name": "",
            "ignored": true,
            "scheme": "http://",
            "rel": "-foo.bar.com"
          },
          {
            "id": "152",
            "name": "",
            "ignored": true,
            "scheme": "http://",
            "rel": "foo-.bar.com"
          },
          {
            "id": "153",
            "name": "",
            "ignored": true,
            "scheme": "http://",
            "rel": "ab--cd.com"
          },
          {
            "id": "154",
            "name": "",
            "ignored": true,
            "scheme": "http://",
            "rel": "xn--0.com"
          },
          {
            "id": "155",
            "name": "",
            "url": "http://foo\u0300.bar.com",
            "expect_url": "http://foo%CC%80.bar.com"
          }
        ]
      },
      {
        "name": "ipv4",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/ipv4.js",
        "desc": "Test cases from Webkit's fast/url/ipv4.js",
        "test": [
          {
            "id": "156",
            "name": "",
            "url": "http://.",
            "expect_url": "http://"
          },
          {
            "id": "157",
            "name": "",
            "url": "http://192.168.0.1",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "158",
            "name": "",
            "url": "http://0300.0250.00.01",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "159",
            "name": "",
            "url": "http://0xC0.0Xa8.0x0.0x1",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "160",
            "name": "",
            "url": "http://192.168.9.com",
            "expect_url": "http://"
          },
          {
            "id": "161",
            "name": "",
            "url": "http://19a.168.0.1",
            "expect_url": "http://"
          },
          {
            "id": "162",
            "name": "",
            "url": "http://0308.0250.00.01",
            "expect_url": "http://"
          },
          {
            "id": "163",
            "name": "",
            "url": "http://0xCG.0xA8.0x0.0x1",
            "expect_url": "http://"
          },
          {
            "id": "164",
            "name": "",
            "url": "http://192",
            "expect_url": "http://0.0.0.192"
          },
          {
            "id": "165",
            "name": "",
            "url": "http://0xC0a80001",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "166",
            "name": "",
            "url": "http://030052000001",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "167",
            "name": "",
            "url": "http://000030052000001",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "168",
            "name": "",
            "url": "http://192.168",
            "expect_url": "http://192.0.0.168"
          },
          {
            "id": "169",
            "name": "",
            "url": "http://192.0x00A80001",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "170",
            "name": "",
            "url": "http://0xc0.052000001",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "171",
            "name": "",
            "url": "http://192.168.1",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "172",
            "name": "",
            "url": "http://192.168.0.0.1",
            "expect_url": "http://"
          },
          {
            "id": "173",
            "name": "",
            "url": "http://192.168.0.1.",
            "expect_url": "http://192.168.0.1"
          },
          {
            "id": "174",
            "name": "",
            "url": "http://192.168.0.1. hello",
            "expect_url": "http://"
          },
          {
            "id": "175",
            "name": "",
            "url": "http://192.168.0.1..",
            "expect_url": "http://"
          },
          {
            "id": "176",
            "name": "",
            "url": "http://192.168..1",
            "expect_url": "http://"
          },
          {
            "id": "177",
            "name": "",
            "url": "http://0x100.0",
            "expect_url": "http://"
          },
          {
            "id": "178",
            "name": "",
            "url": "http://0x100.0.0",
            "expect_url": "http://"
          },
          {
            "id": "179",
            "name": "",
            "url": "http://0x100.0.0.0",
            "expect_url": "http://"
          },
          {
            "id": "180",
            "name": "",
            "url": "http://0.0x100.0.0",
            "expect_url": "http://"
          },
          {
            "id": "181",
            "name": "",
            "url": "http://0.0.0x100.0",
            "expect_url": "http://"
          },
          {
            "id": "182",
            "name": "",
            "url": "http://0.0.0.0x100",
            "expect_url": "http://"
          },
          {
            "id": "183",
            "name": "",
            "url": "http://0.0.0x10000",
            "expect_url": "http://"
          },
          {
            "id": "184",
            "name": "",
            "url": "http://0.0x1000000",
            "expect_url": "http://"
          },
          {
            "id": "185",
            "name": "",
            "url": "http://0x100000000",
            "expect_url": "http://"
          },
          {
            "id": "186",
            "name": "",
            "url": "http://0xFF.0",
            "expect_url": "http://255.0.0.0",
            "expect_rel": ""
          },
          {
            "id": "187",
            "name": "",
            "url": "http://0xFF.0.0",
            "expect_url": "http://255.0.0.0"
          },
          {
            "id": "188",
            "name": "",
            "url": "http://0xFF.0.0.0",
            "expect_url": "http://255.0.0.0"
          },
          {
            "id": "189",
            "name": "",
            "url": "http://0.0xFF.0.0",
            "expect_url": "http://0.255.0.0"
          },
          {
            "id": "190",
            "name": "",
            "url": "http://0.0.0xFF.0",
            "expect_url": "http://0.0.255.0"
          },
          {
            "id": "191",
            "name": "",
            "url": "http://0.0.0.0xFF",
            "expect_url": "http://0.0.0.255"
          },
          {
            "id": "192",
            "name": "",
            "url": "http://0.0.0xFFFF",
            "expect_url": "http://0.0.255.255"
          },
          {
            "id": "193",
            "name": "",
            "url": "http://0.0xFFFFFF",
            "expect_url": "http://0.255.255.255"
          },
          {
            "id": "194",
            "name": "",
            "url": "http://0xFFFFFFFF",
            "expect_url": "http://255.255.255.255"
          },
          {
            "id": "195",
            "name": "",
            "url": "http://276.256.0xf1a2.077777",
            "expect_url": "http://"
          },
          {
            "id": "196",
            "name": "",
            "url": "http://192.168.0.257",
            "expect_url": "http://"
          },
          {
            "id": "197",
            "name": "",
            "url": "http://192.168.0xa20001",
            "expect_url": "http://"
          },
          {
            "id": "198",
            "name": "",
            "url": "http://192.015052000001",
            "expect_url": "http://"
          },
          {
            "id": "199",
            "name": "",
            "url": "http://0X12C0a80001",
            "expect_url": "http://"
          },
          {
            "id": "200",
            "name": "",
            "url": "http://276.1.2",
            "expect_url": "http://"
          },
          {
            "id": "201",
            "name": "",
            "url": "http://192.168.0.1 hello",
            "expect_url": "http://"
          },
          {
            "id": "202",
            "name": "",
            "url": "http://0000000000000300.0x00000000000000fF.00000000000000001",
            "expect_url": "http://192.255.0.1"
          },
          {
            "id": "203",
            "name": "",
            "url": "http://0000000000000300.0xffffffffFFFFFFFF.3022415481470977",
            "expect_url": "http://"
          },
          {
            "id": "204",
            "name": "",
            "url": "http://00000000000000000001",
            "expect_url": "http://0.0.0.1"
          },
          {
            "id": "205",
            "name": "",
            "url": "http://0000000000000000100000000000000001",
            "expect_url": "http://"
          },
          {
            "id": "206",
            "name": "",
            "url": "http://0.0.0.000000000000000000z",
            "expect_url": "http://"
          },
          {
            "id": "207",
            "name": "",
            "url": "http://0.0.0.100000000000000000z",
            "expect_url": "http://"
          },
          {
            "id": "208",
            "name": "",
            "url": "http://0.00.0x.0x0",
            "expect_url": "http://0.0.0.0"
          }
        ]
      },
      {
        "name": "ipv6",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/ipv6.js",
        "desc": "Test cases from Webkit's fast/url/ipv6.js",
        "test": [
          {
            "id": "209",
            "name": "",
            "url": "http://[",
            "expect_url": "http://"
          },
          {
            "id": "210",
            "name": "",
            "url": "http://[:",
            "expect_url": "http://"
          },
          {
            "id": "211",
            "name": "",
            "url": "http://]",
            "expect_url": "http://"
          },
          {
            "id": "212",
            "name": "",
            "url": "http://:]",
            "expect_url": "http://"
          },
          {
            "id": "213",
            "name": "",
            "url": "http://[]",
            "expect_url": "http://"
          },
          {
            "id": "214",
            "name": "",
            "url": "http://[:]",
            "expect_url": "http://"
          },
          {
            "id": "215",
            "name": "",
            "url": "http://2001:db8::1",
            "expect_url": "http://"
          },
          {
            "id": "216",
            "name": "",
            "url": "http://[2001:db8::1",
            "expect_url": "http://"
          },
          {
            "id": "217",
            "name": "",
            "url": "http://2001:db8::1]",
            "expect_url": "http://"
          },
          {
            "id": "218",
            "name": "",
            "url": "http://[::]",
            "expect_url": "http://[::]"
          },
          {
            "id": "219",
            "name": "",
            "url": "http://[::1]",
            "expect_url": "http://[::1]"
          },
          {
            "id": "220",
            "name": "",
            "url": "http://[1::]",
            "expect_url": "http://[1::]"
          },
          {
            "id": "221",
            "name": "",
            "url": "http://[::192.168.0.1]",
            "expect_url": "http://[::c0a8:1]"
          },
          {
            "id": "222",
            "name": "",
            "url": "http://[::ffff:192.168.0.1]",
            "expect_url": "http://[::ffff:c0a8:1]"
          },
          {
            "id": "223",
            "name": "",
            "url": "http://[000:01:02:003:004:5:6:007]",
            "expect_url": "http://[0:1:2:3:4:5:6:7]"
          },
          {
            "id": "224",
            "name": "",
            "url": "http://[A:b:c:DE:fF:0:1:aC]",
            "expect_url": "http://[a:b:c:de:ff:0:1:ac]"
          },
          {
            "id": "225",
            "name": "",
            "url": "http://[1:0:0:2::3:0]",
            "expect_url": "http://[1::2:0:0:3:0]"
          },
          {
            "id": "226",
            "name": "",
            "url": "http://[1::2:0:0:3:0]",
            "expect_url": "http://[1::2:0:0:3:0]"
          },
          {
            "id": "227",
            "name": "",
            "url": "http://[::eeee:192.168.0.1]",
            "expect_url": "http://"
          },
          {
            "id": "228",
            "name": "",
            "url": "http://[2001::192.168.0.1]",
            "expect_url": "http://"
          },
          {
            "id": "229",
            "name": "",
            "url": "http://[1:2:192.168.0.1:5:6]",
            "expect_url": "http://"
          },
          {
            "id": "230",
            "name": "",
            "url": "http://[::ffff:192.1.2]",
            "expect_url": "http://[::ffff:c001:2]"
          },
          {
            "id": "231",
            "name": "",
            "url": "http://[::ffff:0xC0.0Xa8.0x0.0x1]",
            "expect_url": "http://[::ffff:c0a8:1]"
          },
          {
            "id": "232",
            "name": "",
            "url": "http://[0:0::0:0:8]",
            "expect_url": "http://[::8]"
          },
          {
            "id": "233",
            "name": "",
            "url": "http://[2001:db8::1]",
            "expect_url": "http://[2001:db8::1]"
          },
          {
            "id": "234",
            "name": "",
            "url": "http://[2001::db8::1]",
            "expect_url": "http://"
          },
          {
            "id": "235",
            "name": "",
            "url": "http://[2001:db8:::1]",
            "expect_url": "http://"
          },
          {
            "id": "236",
            "name": "",
            "url": "http://[:::]",
            "expect_url": "http://"
          },
          {
            "id": "237",
            "name": "",
            "url": "http://[2001::.com]",
            "expect_url": "http://"
          },
          {
            "id": "238",
            "name": "",
            "url": "http://[::192.168.0.0.1]",
            "expect_url": "http://"
          },
          {
            "id": "239",
            "name": "",
            "url": "http://[::ffff:192.168.0.0.1]",
            "expect_url": "http://"
          },
          {
            "id": "240",
            "name": "",
            "url": "http://[1:2:3:4:5:6:7:8:9]",
            "expect_url": "http://"
          },
          {
            "id": "241",
            "name": "",
            "url": "http://[0:0:0:0:0:0:0:192.168.0.1]",
            "expect_url": "http://"
          },
          {
            "id": "242",
            "name": "",
            "url": "http://[1:2:3:4:5:6::192.168.0.1]",
            "expect_url": "http://"
          },
          {
            "id": "243",
            "name": "",
            "url": "http://[1:2:3:4:5:6::8]",
            "expect_url": "http://[1:2:3:4:5:6:0:8]"
          },
          {
            "id": "244",
            "name": "",
            "url": "http://[1:2:3:4:5:6:7:8:]",
            "expect_url": "http://"
          },
          {
            "id": "245",
            "name": "",
            "url": "http://[1:2:3:4:5:6:192.168.0.1:]",
            "expect_url": "http://"
          },
          {
            "id": "246",
            "name": "",
            "url": "http://[-1:2:3:4:5:6:7:8]",
            "expect_url": "http://"
          },
          {
            "id": "247",
            "name": "",
            "url": "http://[1::%1]",
            "expect_url": "http://"
          },
          {
            "id": "248",
            "name": "",
            "url": "http://[1::%eth0]",
            "expect_url": "http://"
          },
          {
            "id": "249",
            "name": "",
            "url": "http://[1::%]",
            "expect_url": "http://"
          },
          {
            "id": "250",
            "name": "",
            "url": "http://[%]",
            "expect_url": "http://"
          },
          {
            "id": "251",
            "name": "",
            "url": "http://[::%:]",
            "expect_url": "http://"
          },
          {
            "id": "252",
            "name": "",
            "url": "http://[:0:0::0:0:8]",
            "expect_url": "http://"
          },
          {
            "id": "253",
            "name": "",
            "url": "http://[0:0::0:0:8:]",
            "expect_url": "http://"
          },
          {
            "id": "254",
            "name": "",
            "url": "http://[:0:0::0:0:8:]",
            "expect_url": "http://"
          },
          {
            "id": "255",
            "name": "",
            "url": "http://[::192.168..1]",
            "expect_url": "http://"
          },
          {
            "id": "256",
            "name": "",
            "url": "http://[::1 hello]",
            "expect_url": "http://"
          }
        ]
      },
      {
        "name": "mailto",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/mailto.js",
        "desc": "Test cases from Webkit's fast/url/mailto.js",
        "test": [
          {
            "id": "257",
            "name": "",
            "url": "mailto:addr1",
            "expect_url": "mailto:addr1"
          },
          {
            "id": "258",
            "name": "",
            "url": "mailto:addr1@foo.com",
            "expect_url": "mailto:addr1@foo.com"
          },
          {
            "id": "259",
            "name": "",
            "url": "mailto:addr1 \\t ",
            "expect_url": "mailto:addr1"
          },
          {
            "id": "260",
            "name": "",
            "url": "mailto:addr1?to=jon",
            "expect_url": "mailto:addr1?to=jon"
          },
          {
            "id": "261",
            "name": "",
            "url": "mailto:addr1,addr2",
            "expect_url": "mailto:addr1,addr2"
          },
          {
            "id": "262",
            "name": "",
            "url": "mailto:addr1, addr2",
            "expect_url": "mailto:addr1, addr2"
          },
          {
            "id": "263",
            "name": "",
            "url": "mailto:addr1%2caddr2",
            "expect_url": "mailto:addr1%2caddr2"
          },
          {
            "id": "264",
            "name": "",
            "url": "mailto:\uD800\uDF00",
            "expect_url": "mailto:%F0%90%8C%80"
          },
          {
            "id": "265",
            "name": "",
            "url": "mailto:addr1?",
            "expect_url": "mailto:addr1?"
          }
        ]
      },
      {
        "name": "path-url",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/path-url.js",
        "desc": "Test cases from Webkit's fast/url/path-url.js",
        "test": [
          {
            "id": "266",
            "name": "",
            "url": "javascript:",
            "expect_url": "javascript:"
          },
          {
            "id": "267",
            "name": "",
            "url": "JavaScript:Foo",
            "expect_url": "javascript:Foo"
          }
        ]
      },
      {
        "name": "path",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/path.js",
        "desc": "Test cases from Webkit's fast/url/path.js",
        "test": [
          {
            "id": "268",
            "name": "",
            "url": "http://www.example.com/././foo",
            "expect_url": "http://www.example.com/foo"
          },
          {
            "id": "269",
            "name": "",
            "url": "http://www.example.com/./.foo",
            "expect_url": "http://www.example.com/.foo"
          },
          {
            "id": "270",
            "name": "",
            "url": "http://www.example.com/foo/.",
            "expect_url": "http://www.example.com/foo/"
          },
          {
            "id": "271",
            "name": "",
            "url": "http://www.example.com/foo/./",
            "expect_url": "http://www.example.com/foo/"
          },
          {
            "id": "272",
            "name": "",
            "url": "http://www.example.com/foo/bar/..",
            "expect_url": "http://www.example.com/foo/"
          },
          {
            "id": "273",
            "name": "",
            "url": "http://www.example.com/foo/bar/../",
            "expect_url": "http://www.example.com/foo/"
          },
          {
            "id": "274",
            "name": "",
            "url": "http://www.example.com/foo/..bar",
            "expect_url": "http://www.example.com/foo/..bar"
          },
          {
            "id": "275",
            "name": "",
            "url": "http://www.example.com/foo/bar/../ton",
            "expect_url": "http://www.example.com/foo/ton"
          },
          {
            "id": "276",
            "name": "",
            "url": "http://www.example.com/foo/bar/../ton/../../a",
            "expect_url": "http://www.example.com/a"
          },
          {
            "id": "277",
            "name": "",
            "url": "http://www.example.com/foo/../../..",
            "expect_url": "http://www.example.com/"
          },
          {
            "id": "278",
            "name": "",
            "url": "http://www.example.com/foo/../../../ton",
            "expect_url": "http://www.example.com/ton"
          },
          {
            "id": "279",
            "name": "",
            "url": "http://www.example.com/foo/%2e",
            "expect_url": "http://www.example.com/foo/"
          },
          {
            "id": "280",
            "name": "",
            "url": "http://www.example.com/foo/%2e%2",
            "expect_url": "http://www.example.com/foo/.%2"
          },
          {
            "id": "281",
            "name": "",
            "url": "http://www.example.com/foo/%2e./%2e%2e/.%2e/%2e.bar",
            "expect_url": "http://www.example.com/..bar"
          },
          {
            "id": "282",
            "name": "",
            "url": "http://www.example.com////../..",
            "expect_url": "http://www.example.com//"
          },
          {
            "id": "283",
            "name": "",
            "url": "http://www.example.com/foo/bar//../..",
            "expect_url": "http://www.example.com/foo/"
          },
          {
            "id": "284",
            "name": "",
            "url": "http://www.example.com/foo/bar//..",
            "expect_url": "http://www.example.com/foo/bar/"
          },
          {
            "id": "285",
            "name": "",
            "url": "http://www.example.com/foo/bar/..",
            "expect_url": "http://www.example.com/foo/"
          },
          {
            "id": "286",
            "name": "",
            "url": "http://www.example.com/foo",
            "expect_url": "http://www.example.com/foo"
          },
          {
            "id": "287",
            "name": "",
            "url": "http://www.example.com/%20foo",
            "expect_url": "http://www.example.com/%20foo"
          },
          {
            "id": "288",
            "name": "",
            "url": "http://www.example.com/foo%",
            "expect_url": "http://www.example.com/foo%"
          },
          {
            "id": "289",
            "name": "",
            "url": "http://www.example.com/foo%2",
            "expect_url": "http://www.example.com/foo%2"
          },
          {
            "id": "290",
            "name": "",
            "url": "http://www.example.com/foo%2zbar",
            "expect_url": "http://www.example.com/foo%2zbar"
          },
          {
            "id": "291",
            "name": "",
            "url": "http://www.example.com/foo%2\u00c2\u00a9zbar",
            "expect_url": "http://www.example.com/foo%2%C3%82%C2%A9zbar"
          },
          {
            "id": "292",
            "name": "",
            "url": "http://www.example.com/foo%41%7a",
            "expect_url": "http://www.example.com/fooAz"
          },
          {
            "id": "293",
            "name": "",
            "url": "http://www.example.com/foo\u0009\u0091%91",
            "expect_url": "http://www.example.com/foo%09%C2%91%91"
          },
          {
            "id": "294",
            "name": "",
            "url": "http://www.example.com/foo%00%51",
            "expect_url": "http://www.example.com/foo%00Q"
          },
          {
            "id": "295",
            "name": "",
            "url": "http://www.example.com/(%28:%3A%29)",
            "expect_url": "http://www.example.com/(%28:%3A%29)"
          },
          {
            "id": "296",
            "name": "",
            "url": "http://www.example.com/%3A%3a%3C%3c",
            "expect_url": "http://www.example.com/%3A%3a%3C%3c"
          },
          {
            "id": "297",
            "name": "",
            "url": "http://www.example.com/foo\\tbar",
            "expect_url": "http://www.example.com/foo%09bar"
          },
          {
            "id": "298",
            "name": "",
            "url": "http://www.example.com\\\\foo\\\\bar",
            "expect_url": "http://www.example.com/foo/bar"
          },
          {
            "id": "299",
            "name": "",
            "url": "http://www.example.com/%7Ffp3%3Eju%3Dduvgw%3Dd",
            "expect_url": "http://www.example.com/%7Ffp3%3Eju%3Dduvgw%3Dd"
          },
          {
            "id": "300",
            "name": "",
            "url": "http://www.example.com/@asdf%40",
            "expect_url": "http://www.example.com/@asdf%40"
          },
          {
            "id": "301",
            "name": "",
            "url": "http://www.example.com/\u4f60\u597d\u4f60\u597d",
            "expect_url": "http://www.example.com/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD"
          },
          {
            "id": "302",
            "name": "",
            "url": "http://www.example.com/\ufdd0zyx",
            "expect_url": "http://www.example.com/%EF%BF%BDzyx"
          },
          {
            "id": "303",
            "name": "",
            "url": "http://www.example.com/\u2025/foo",
            "expect_url": "http://www.example.com/%E2%80%A5/foo"
          },
          {
            "id": "304",
            "name": "",
            "ignored": true
          },
          {
            "id": "305",
            "name": "",
            "url": "http://www.example.com/\uFEFF/foo",
            "expect_url": "http://www.example.com/%EF%BB%BF/foo"
          },
          {
            "id": "306",
            "name": "",
            "url": "http://www.example.com/\u202E/foo/\u202D/bar",
            "expect_url": "http://www.example.com/%E2%80%AE/foo/%E2%80%AD/bar"
          },
          {
            "id": "307",
            "name": "",
            "url": "http://www.example.com\uFF0Ffoo/",
            "expect_url": "http://www.example.com/foo/"
          }
        ]
      },
      {
        "name": "port",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/port.js",
        "desc": "Test cases from Webkit's fast/url/port.js",
        "test": [
          {
            "id": "308",
            "name": "",
            "url": "http://www.example.com:as df",
            "expect_url": "http://www.example.com:as%20df"
          },
          {
            "id": "309",
            "name": "",
            "url": "http://www.example.com:-2",
            "expect_url": "http://www.example.com:-2"
          },
          {
            "id": "310",
            "name": "",
            "url": "http://www.example.com:80",
            "expect_url": "http://www.example.com"
          },
          {
            "id": "311",
            "name": "",
            "url": "http://www.example.com:8080",
            "expect_url": "http://www.example.com:8080"
          },
          {
            "id": "312",
            "name": "",
            "url": "http://www.example.com:",
            "expect_url": "http://www.example.com"
          },
          {
            "id": "313",
            "name": "",
            "url": "http://www.example.com:\u1369",
            "expect_url": "http://www.example.com:%E1%8D%A9"
          },
          {
            "id": "314",
            "name": "",
            "url": "http://www.example.com:\uD835\uDFD6",
            "expect_url": "http://www.example.com:%F0%9D%9F%96"
          }
        ]
      },
      {
        "name": "query",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/query.js",
        "desc": "Test cases from Webkit's fast/url/query.js",
        "test": [
          {
            "id": "315",
            "name": "",
            "url": "http://www.example.com/?foo=bar",
            "expect_url": "http://www.example.com/?foo=bar"
          },
          {
            "id": "316",
            "name": "",
            "url": "http://www.example.com/?as?df",
            "expect_url": "http://www.example.com/?as?df"
          },
          {
            "id": "317",
            "name": "",
            "url": "http://www.example.com/?\\%02hello%7f bye",
            "expect_url": "http://www.example.com/?%02hello%7F%20bye"
          },
          {
            "id": "318",
            "name": "",
            "url": "http://www.example.com/?%40%41123",
            "expect_url": "http://www.example.com/?%40%41123"
          },
          {
            "id": "319",
            "name": "",
            "url": "http://www.example.com/?q=\u4F60\u597D",
            "expect_url": "http://www.example.com/?q=%26%2320320%3B%26%2322909%3B"
          },
          {
            "id": "320",
            "name": "",
            "ignored": true
          },
          {
            "id": "321",
            "name": "",
            "url": "http://www.example.com/?q=<asdf>",
            "expect_url": "http://www.example.com/?q=%3Casdf%3E"
          },
          {
            "id": "322",
            "name": "",
            "url": "http://www.example.com/?q=\\\"asdf\\\"",
            "expect_url": "http://www.example.com/?q=%22asdf%22"
          }
        ]
      },
      {
        "name": "relative-unix",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/relative-unix.js",
        "desc": "Test cases from Webkit's fast/url/relative-unix.js",
        "test": [
          {
            "id": "323",
            "name": "",
            "base": "http://host/a",
            "rel": "\\\\\\\\Another\\\\path",
            "expect_rel": "http://another/path"
          },
          {
            "id": "324",
            "name": "",
            "base": "http://host/a",
            "rel": "/c:\\\\foo",
            "expect_rel": "http://host/c:/foo"
          },
          {
            "id": "325",
            "name": "",
            "base": "http://host/a",
            "rel": "//c:\\\\foo",
            "expect_rel": "http://c/foo"
          }
        ]
      },
      {
        "name": "relative-win",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/relative-win.js",
        "desc": "Test cases from Webkit's fast/url/relative-win.js",
        "test": [
          {
            "id": "326",
            "name": "",
            "base": "file:///C:/foo",
            "rel": "http://host/",
            "expect_rel": "http://host/"
          },
          {
            "id": "327",
            "name": "",
            "base": "file:///C:/foo",
            "rel": "bar",
            "expect_rel": "file:///C:/bar"
          },
          {
            "id": "328",
            "name": "",
            "base": "file:///C:/foo",
            "rel": "../../../bar.html",
            "expect_rel": "file:///C:/bar.html"
          },
          {
            "id": "329",
            "name": "",
            "base": "file:///C:/foo",
            "rel": "/../bar.html",
            "expect_rel": "file:///C:/bar.html"
          },
          {
            "id": "330",
            "name": "",
            "base": "http://host/a",
            "rel": "\\\\\\\\another\\\\path",
            "expect_rel": ""
          },
          {
            "id": "331",
            "name": "",
            "base": "file:///C:/something",
            "rel": "//c:/foo",
            "expect_rel": "file:///C:/foo"
          },
          {
            "id": "332",
            "name": "",
            "base": "file:///C:/something",
            "rel": "//localhost/c:/foo",
            "expect_rel": "file:///C:/foo"
          },
          {
            "id": "333",
            "name": "",
            "base": "file:///C:/foo",
            "rel": "c:",
            "expect_rel": ""
          },
          {
            "id": "334",
            "name": "",
            "base": "file:///C:/foo",
            "rel": "c:/foo",
            "expect_rel": ""
          },
          {
            "id": "335",
            "name": "",
            "base": "http://host/a",
            "rel": "c:\\\\foo",
            "expect_rel": ""
          },
          {
            "id": "336",
            "name": "",
            "base": "file:///C:/foo",
            "rel": "/z:/bar",
            "expect_rel": "file:///Z:/bar"
          },
          {
            "id": "337",
            "name": "",
            "base": "file:///C:/foo",
            "rel": "/bar",
            "expect_rel": "file:///C:/bar"
          },
          {
            "id": "338",
            "name": "",
            "base": "file://localhost/C:/foo",
            "rel": "/bar",
            "expect_rel": "file://localhost/C:/bar"
          },
          {
            "id": "339",
            "name": "",
            "base": "file:///C:/foo/com/",
            "rel": "/bar",
            "expect_rel": "file:///C:/bar"
          },
          {
            "id": "340",
            "name": "",
            "base": "file:///C:/something",
            "rel": "//somehost/path",
            "expect_rel": "file://somehost/path"
          },
          {
            "id": "341",
            "name": "",
            "base": "file:///C:/something",
            "rel": "/\\\\//somehost/path",
            "expect_rel": "file://somehost/path"
          }
        ]
      },
      {
        "name": "relative",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/relative.js",
        "desc": "Test cases from Webkit's fast/url/relative.js",
        "test": [
          {
            "id": "342",
            "name": "",
            "base": "http://host/a",
            "rel": "http://another/",
            "expect_rel": "http://another/"
          },
          {
            "id": "343",
            "name": "",
            "base": "http://host/a",
            "rel": "http:////another/",
            "expect_rel": "http://another/"
          },
          {
            "id": "344",
            "name": "",
            "base": "http://foo/bar",
            "expect_rel": "http://foo/bar"
          },
          {
            "id": "345",
            "name": "",
            "base": "http://foo/bar#ref",
            "expect_rel": "http://foo/bar"
          },
          {
            "id": "346",
            "name": "",
            "base": "http://foo/bar#",
            "expect_rel": "http://foo/bar"
          },
          {
            "id": "347",
            "name": "",
            "base": "http://foo/bar",
            "rel": "  another  ",
            "expect_rel": "http://foo/another"
          },
          {
            "id": "348",
            "name": "",
            "base": "http://foo/bar",
            "rel": "  .  ",
            "expect_rel": "http://foo/"
          },
          {
            "id": "349",
            "name": "",
            "base": "http://foo/bar",
            "rel": " \\t ",
            "expect_rel": "http://foo/bar"
          },
          {
            "id": "350",
            "name": "",
            "base": "http://host/a",
            "rel": "http:path",
            "expect_rel": "http://host/path"
          },
          {
            "id": "351",
            "name": "",
            "base": "http://host/a/",
            "rel": "http:path",
            "expect_rel": "http://host/a/path"
          },
          {
            "id": "352",
            "name": "",
            "base": "http://host/a",
            "rel": "http:/path",
            "expect_rel": "http://host/path"
          },
          {
            "id": "353",
            "name": "",
            "base": "http://host/a",
            "rel": "HTTP:/path",
            "expect_rel": "http://host/path"
          },
          {
            "id": "354",
            "name": "",
            "base": "http://host/a",
            "rel": "https:host2",
            "expect_rel": "https://host2/"
          },
          {
            "id": "355",
            "name": "",
            "base": "http://host/a",
            "rel": "htto:/host2",
            "expect_rel": "htto:/host2"
          },
          {
            "id": "356",
            "name": "",
            "base": "http://host/a",
            "rel": "/b/c/d",
            "expect_rel": "http://host/b/c/d"
          },
          {
            "id": "357",
            "name": "",
            "base": "http://host/a",
            "rel": "\\\\b\\\\c\\\\d",
            "expect_rel": "http://host/b/c/d"
          },
          {
            "id": "358",
            "name": "",
            "base": "http://host/a",
            "rel": "/b/../c",
            "expect_rel": "http://host/c"
          },
          {
            "id": "359",
            "name": "",
            "base": "http://host/a?b#c",
            "rel": "/b/../c",
            "expect_rel": "http://host/c"
          },
          {
            "id": "360",
            "name": "",
            "base": "http://host/a",
            "rel": "\\\\b/../c?x#y",
            "expect_rel": "http://host/c?x#y"
          },
          {
            "id": "361",
            "name": "",
            "base": "http://host/a?b#c",
            "rel": "/b/../c?x#y",
            "expect_rel": "http://host/c?x#y"
          },
          {
            "id": "362",
            "name": "",
            "base": "http://host/a",
            "rel": "b",
            "expect_rel": "http://host/b"
          },
          {
            "id": "363",
            "name": "",
            "base": "http://host/a",
            "rel": "bc/de",
            "expect_rel": "http://host/bc/de"
          },
          {
            "id": "364",
            "name": "",
            "base": "http://host/a/",
            "rel": "bc/de?query#ref",
            "expect_rel": "http://host/a/bc/de?query#ref"
          },
          {
            "id": "365",
            "name": "",
            "base": "http://host/a/",
            "rel": ".",
            "expect_rel": "http://host/a/"
          },
          {
            "id": "366",
            "name": "",
            "base": "http://host/a/",
            "rel": "..",
            "expect_rel": "http://host/"
          },
          {
            "id": "367",
            "name": "",
            "base": "http://host/a/",
            "rel": "./..",
            "expect_rel": "http://host/"
          },
          {
            "id": "368",
            "name": "",
            "base": "http://host/a/",
            "rel": "../.",
            "expect_rel": "http://host/"
          },
          {
            "id": "369",
            "name": "",
            "base": "http://host/a/",
            "rel": "././.",
            "expect_rel": "http://host/a/"
          },
          {
            "id": "370",
            "name": "",
            "base": "http://host/a?query#ref",
            "rel": "../../../foo",
            "expect_rel": "http://host/foo"
          },
          {
            "id": "371",
            "name": "",
            "base": "http://host/a",
            "rel": "?foo=bar",
            "expect_rel": "http://host/a?foo=bar"
          },
          {
            "id": "372",
            "name": "",
            "base": "http://host/a?x=y#z",
            "rel": "?",
            "expect_rel": "http://host/a?"
          },
          {
            "id": "373",
            "name": "",
            "base": "http://host/a?x=y#z",
            "rel": "?foo=bar#com",
            "expect_rel": "http://host/a?foo=bar#com"
          },
          {
            "id": "374",
            "name": "",
            "base": "http://host/a",
            "rel": "#ref",
            "expect_rel": "http://host/a#ref"
          },
          {
            "id": "375",
            "name": "",
            "base": "http://host/a#b",
            "rel": "#",
            "expect_rel": "http://host/a#"
          },
          {
            "id": "376",
            "name": "",
            "base": "http://host/a?foo=bar#hello",
            "rel": "#bye",
            "expect_rel": "http://host/a?foo=bar#bye"
          },
          {
            "id": "377",
            "name": "",
            "base": "data:foobar",
            "rel": "baz.html",
            "expect_rel": ""
          },
          {
            "id": "378",
            "name": "",
            "base": "data:foobar",
            "rel": "data:baz",
            "expect_rel": "data:baz"
          },
          {
            "id": "379",
            "name": "",
            "base": "data:foobar",
            "rel": "data:/base",
            "expect_rel": "data:/base"
          },
          {
            "id": "380",
            "name": "",
            "base": "data:foobar",
            "rel": "http://host/",
            "expect_rel": "http://host/"
          },
          {
            "id": "381",
            "name": "",
            "base": "data:foobar",
            "rel": "http:host",
            "expect_rel": "http://host/"
          },
          {
            "id": "382",
            "name": "",
            "base": "http://foo/bar",
            "rel": "./asd:fgh",
            "expect_rel": "http://foo/asd:fgh"
          },
          {
            "id": "383",
            "name": "",
            "base": "http://foo/bar",
            "rel": ":foo",
            "expect_rel": "http://foo/:foo"
          },
          {
            "id": "384",
            "name": "",
            "base": "http://foo/bar",
            "rel": " hello world",
            "expect_rel": "http://foo/hello%20world"
          },
          {
            "id": "385",
            "name": "",
            "base": "data:asdf",
            "rel": ":foo",
            "expect_rel": ""
          },
          {
            "id": "386",
            "name": "",
            "base": "http://host/a",
            "rel": ";foo",
            "expect_rel": "http://host/;foo"
          },
          {
            "id": "387",
            "name": "",
            "base": "http://host/a;",
            "rel": ";foo",
            "expect_rel": "http://host/;foo"
          },
          {
            "id": "388",
            "name": "",
            "base": "http://host/a",
            "rel": ";/../bar",
            "expect_rel": "http://host/bar"
          },
          {
            "id": "389",
            "name": "",
            "base": "http://host/a",
            "rel": "//another",
            "expect_rel": "http://another/"
          },
          {
            "id": "390",
            "name": "",
            "base": "http://host/a",
            "rel": "//another/path?query#ref",
            "expect_rel": "http://another/path?query#ref"
          },
          {
            "id": "391",
            "name": "",
            "base": "http://host/a",
            "rel": "///another/path",
            "expect_rel": "http://another/path"
          },
          {
            "id": "392",
            "name": "",
            "base": "http://host/a",
            "rel": "//Another\\\\path",
            "expect_rel": "http://another/path"
          },
          {
            "id": "393",
            "name": "",
            "base": "http://host/a",
            "rel": "//",
            "expect_rel": "http:"
          },
          {
            "id": "394",
            "name": "",
            "base": "http://host/a",
            "rel": "\\\\/another/path",
            "expect_rel": "http://another/path"
          },
          {
            "id": "395",
            "name": "",
            "base": "http://host/a",
            "rel": "/\\\\Another\\\\path",
            "expect_rel": "http://another/path"
          }
        ]
      },
      {
        "name": "scheme",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/scheme.js",
        "desc": "Test cases from Webkit's fast/url/scheme.js",
        "test": [
          {
            "id": "396",
            "name": "",
            "ignored": true,
            "scheme": "http://example.com/",
            "expect_scheme": "http://example.com/"
          },
          {
            "id": "397",
            "name": "",
            "ignored": true,
            "scheme": "HTTP://example.com/",
            "expect_scheme": "http://example.com/"
          }
        ]
      },
      {
        "name": "segments-from-data-url",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/segments-from-data-url.js",
        "desc": "Test cases from Webkit's fast/url/segments-from-data-url.js",
        "test": [
          {
            "id": "398",
            "name": "",
            "rel": "http://user:pass@foo:21/bar;par?b#c",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "foo",
            "expect_port": "21",
            "expect_path": "/bar;par",
            "expect_query": "?b",
            "expect_fragment": "#c"
          },
          {
            "id": "399",
            "name": "",
            "rel": "http:foo.com",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "foo.com",
            "expect_port": "0",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "400",
            "name": "",
            "rel": "\u0009   :foo.com   \u000A",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "401",
            "name": "",
            "rel": " foo.com  ",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "402",
            "name": "",
            "rel": "a:\u0009 foo.com",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "a:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": " foo.com",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "403",
            "name": "",
            "rel": "http://f:21/ b ? d # e ",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "f",
            "expect_port": "21",
            "expect_path": "/%20b%20",
            "expect_query": "?%20d%20",
            "expect_fragment": "# e"
          },
          {
            "id": "404",
            "name": "",
            "rel": "http://f:/c",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "f",
            "expect_port": "0",
            "expect_path": "/c",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "405",
            "name": "",
            "rel": "http://f:0/c",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "f",
            "expect_port": "0",
            "expect_path": "/c",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "406",
            "name": "",
            "rel": "http://f:00000000000000/c",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "f",
            "expect_port": "0",
            "expect_path": "/c",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "407",
            "name": "",
            "rel": "http://f:00000000000000000000080/c",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "f",
            "expect_port": "0",
            "expect_path": "/c",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "408",
            "name": "",
            "rel": "http://f:b/c",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "409",
            "name": "",
            "rel": "http://f: /c",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "410",
            "name": "",
            "rel": "http://f:\u000A/c",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "411",
            "name": "",
            "rel": "http://f:fifty-two/c",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "412",
            "name": "",
            "rel": "http://f:999999/c",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "413",
            "name": "",
            "rel": "http://f: 21 / b ? d # e ",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "414",
            "name": "",
            "rel": "",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "data:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "text/plain,baseURL",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "415",
            "name": "",
            "rel": "  \u0009",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "data:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "text/plain,baseURL",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "416",
            "name": "",
            "rel": ":foo.com/",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "417",
            "name": "",
            "rel": ":foo.com\\\\",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "418",
            "name": "",
            "rel": ":",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "419",
            "name": "",
            "rel": ":a",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "420",
            "name": "",
            "rel": ":/",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "421",
            "name": "",
            "rel": ":\\\\",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "422",
            "name": "",
            "rel": ":#",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "423",
            "name": "",
            "rel": "#",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "424",
            "name": "",
            "rel": "#/",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "425",
            "name": "",
            "rel": "#\\\\",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "426",
            "name": "",
            "rel": "#;?",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "427",
            "name": "",
            "rel": "?",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "428",
            "name": "",
            "rel": "/",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "429",
            "name": "",
            "rel": ":23",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "430",
            "name": "",
            "rel": "/:23",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "data:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "/:23",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "431",
            "name": "",
            "rel": "//",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "432",
            "name": "",
            "rel": "::",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "433",
            "name": "",
            "rel": "::23",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "434",
            "name": "",
            "rel": "foo://",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "foo:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "//",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "435",
            "name": "",
            "rel": "http://a:b@c:29/d",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "c",
            "expect_port": "29",
            "expect_path": "/d",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "436",
            "name": "",
            "rel": "http::@c:29",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "c",
            "expect_port": "29",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "437",
            "name": "",
            "rel": "http://&a:foo(b]c@d:2/",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "d",
            "expect_port": "2",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "438",
            "name": "",
            "rel": "http://::@c@d:2",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "d",
            "expect_port": "2",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "439",
            "name": "",
            "rel": "http://foo.com:b@d/",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "d",
            "expect_port": "0",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "440",
            "name": "",
            "rel": "http://foo.com/\\\\@",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "foo.com",
            "expect_port": "0",
            "expect_path": "//@",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "441",
            "name": "",
            "rel": "http:\\\\\\\\foo.com\\\\",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "foo.com",
            "expect_port": "0",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "442",
            "name": "",
            "rel": "http:\\\\\\\\a\\\\b:c\\\\d@foo.com\\\\",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "a",
            "expect_port": "0",
            "expect_path": "/b:c/d@foo.com/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "443",
            "name": "",
            "rel": "foo:/",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "foo:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "444",
            "name": "",
            "rel": "foo:/bar.com/",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "foo:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "/bar.com/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "445",
            "name": "",
            "rel": "foo://///////",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "foo:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "/////////",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "446",
            "name": "",
            "rel": "foo://///////bar.com/",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "foo:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "/////////bar.com/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "447",
            "name": "",
            "rel": "foo:////://///",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "foo:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "////://///",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "448",
            "name": "",
            "rel": "c:/foo",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "c:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "/foo",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "449",
            "name": "",
            "rel": "//foo/bar",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "450",
            "name": "",
            "rel": "http://foo/path;a??e#f#g",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "foo",
            "expect_port": "0",
            "expect_path": "/path;a",
            "expect_query": "??e",
            "expect_fragment": "#f#g"
          },
          {
            "id": "451",
            "name": "",
            "rel": "http://foo/abcd?efgh?ijkl",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "foo",
            "expect_port": "0",
            "expect_path": "/abcd",
            "expect_query": "?efgh?ijkl",
            "expect_fragment": ""
          },
          {
            "id": "452",
            "name": "",
            "rel": "http://foo/abcd#foo?bar",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "foo",
            "expect_port": "0",
            "expect_path": "/abcd",
            "expect_query": "",
            "expect_fragment": "#foo?bar"
          },
          {
            "id": "453",
            "name": "",
            "rel": "[61:24:74]:98",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "data:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "text/[61:24:74]:98",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "454",
            "name": "",
            "rel": "http://[61:27]:98",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "455",
            "name": "",
            "rel": "http:[61:27]/:foo",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "456",
            "name": "",
            "rel": "http://[1::2]:3:4",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "457",
            "name": "",
            "rel": "http://2001::1",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "458",
            "name": "",
            "rel": "http://[2001::1",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "459",
            "name": "",
            "rel": "http://2001::1]",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "460",
            "name": "",
            "rel": "http://2001::1]:80",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "461",
            "name": "",
            "rel": "http://[2001::1]",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "[2001::1]",
            "expect_port": "0",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "462",
            "name": "",
            "rel": "http://[2001::1]:80",
            "base": "data:text/plain,baseURL",
            "expect_scheme": "http:",
            "expect_host": "[2001::1]",
            "expect_port": "0",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "463",
            "name": "",
            "rel": "http://[[::]]",
            "base": "data:text/plain,baseURL",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          }
        ]
      },
      {
        "name": "segments",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/segments.js",
        "desc": "Test cases from Webkit's fast/url/segments.js",
        "test": [
          {
            "id": "464",
            "name": "",
            "rel": "http://user:pass@foo:21/bar;par?b#c",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "foo",
            "expect_port": "21",
            "expect_path": "/bar;par",
            "expect_query": "?b",
            "expect_fragment": "#c"
          },
          {
            "id": "465",
            "name": "",
            "rel": "http:foo.com",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/foo.com",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "466",
            "name": "",
            "rel": "\u0009   :foo.com   \u000A",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/:foo.com",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "467",
            "name": "",
            "rel": " foo.com  ",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/foo.com",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "468",
            "name": "",
            "rel": "a:\u0009 foo.com",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "a:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": " foo.com",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "469",
            "name": "",
            "rel": "http://f:21/ b ? d # e ",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "f",
            "expect_port": "21",
            "expect_path": "/%20b%20",
            "expect_query": "?%20d%20",
            "expect_fragment": "# e"
          },
          {
            "id": "470",
            "name": "",
            "rel": "http://f:/c",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "f",
            "expect_port": "0",
            "expect_path": "/c",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "471",
            "name": "",
            "rel": "http://f:0/c",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "f",
            "expect_port": "0",
            "expect_path": "/c",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "472",
            "name": "",
            "rel": "http://f:00000000000000/c",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "f",
            "expect_port": "0",
            "expect_path": "/c",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "473",
            "name": "",
            "rel": "http://f:00000000000000000000080/c",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "f",
            "expect_port": "0",
            "expect_path": "/c",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "474",
            "name": "",
            "rel": "http://f:b/c",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "475",
            "name": "",
            "rel": "http://f: /c",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "476",
            "name": "",
            "rel": "http://f:\u000A/c",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "477",
            "name": "",
            "rel": "http://f:fifty-two/c",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "478",
            "name": "",
            "rel": "http://f:999999/c",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "479",
            "name": "",
            "rel": "http://f: 21 / b ? d # e ",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "480",
            "name": "",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/bar",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "481",
            "name": "",
            "rel": "  \u0009",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/bar",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "482",
            "name": "",
            "rel": ":foo.com/",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/:foo.com/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "483",
            "name": "",
            "rel": ":foo.com\\\\",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/:foo.com/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "484",
            "name": "",
            "rel": ":",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/:",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "485",
            "name": "",
            "rel": ":a",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/:a",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "486",
            "name": "",
            "rel": ":/",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/:/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "487",
            "name": "",
            "rel": ":\\\\",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/:/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "488",
            "name": "",
            "rel": ":#",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/:",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "489",
            "name": "",
            "rel": "#",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/bar",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "490",
            "name": "",
            "rel": "#/",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/bar",
            "expect_query": "",
            "expect_fragment": "#/"
          },
          {
            "id": "491",
            "name": "",
            "rel": "#\\\\",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/bar",
            "expect_query": "",
            "expect_fragment": "#\\\\"
          },
          {
            "id": "492",
            "name": "",
            "rel": "#;?",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/bar",
            "expect_query": "",
            "expect_fragment": "#;?"
          },
          {
            "id": "493",
            "name": "",
            "rel": "?",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/bar",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "494",
            "name": "",
            "rel": "/",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "495",
            "name": "",
            "rel": ":23",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/:23",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "496",
            "name": "",
            "rel": "/:23",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/:23",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "497",
            "name": "",
            "rel": "//",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "498",
            "name": "",
            "rel": "::",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/::",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "499",
            "name": "",
            "rel": "::23",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/::23",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "500",
            "name": "",
            "rel": "foo://",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "foo:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "//",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "501",
            "name": "",
            "rel": "http://a:b@c:29/d",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "c",
            "expect_port": "29",
            "expect_path": "/d",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "502",
            "name": "",
            "rel": "http::@c:29",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/:@c:29",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "503",
            "name": "",
            "rel": "http://&a:foo(b]c@d:2/",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "d",
            "expect_port": "2",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "504",
            "name": "",
            "rel": "http://::@c@d:2",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "d",
            "expect_port": "2",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "505",
            "name": "",
            "rel": "http://foo.com:b@d/",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "d",
            "expect_port": "0",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "506",
            "name": "",
            "rel": "http://foo.com/\\\\@",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "foo.com",
            "expect_port": "0",
            "expect_path": "//@",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "507",
            "name": "",
            "rel": "http:\\\\\\\\foo.com\\\\",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "foo.com",
            "expect_port": "0",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "508",
            "name": "",
            "rel": "http:\\\\\\\\a\\\\b:c\\\\d@foo.com\\\\",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "a",
            "expect_port": "0",
            "expect_path": "/b:c/d@foo.com/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "509",
            "name": "",
            "rel": "foo:/",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "foo:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "510",
            "name": "",
            "rel": "foo:/bar.com/",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "foo:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "/bar.com/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "511",
            "name": "",
            "rel": "foo://///////",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "foo:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "/////////",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "512",
            "name": "",
            "rel": "foo://///////bar.com/",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "foo:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "/////////bar.com/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "513",
            "name": "",
            "rel": "foo:////://///",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "foo:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "////://///",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "514",
            "name": "",
            "rel": "c:/foo",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "c:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "/foo",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "515",
            "name": "",
            "rel": "//foo/bar",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "foo",
            "expect_port": "0",
            "expect_path": "/bar",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "516",
            "name": "",
            "rel": "http://foo/path;a??e#f#g",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "foo",
            "expect_port": "0",
            "expect_path": "/path;a",
            "expect_query": "??e",
            "expect_fragment": "#f#g"
          },
          {
            "id": "517",
            "name": "",
            "rel": "http://foo/abcd?efgh?ijkl",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "foo",
            "expect_port": "0",
            "expect_path": "/abcd",
            "expect_query": "?efgh?ijkl",
            "expect_fragment": ""
          },
          {
            "id": "518",
            "name": "",
            "rel": "http://foo/abcd#foo?bar",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "foo",
            "expect_port": "0",
            "expect_path": "/abcd",
            "expect_query": "",
            "expect_fragment": "#foo?bar"
          },
          {
            "id": "519",
            "name": "",
            "rel": "[61:24:74]:98",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/[61:24:74]:98",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "520",
            "name": "",
            "rel": "http://[61:27]:98",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "521",
            "name": "",
            "rel": "http:[61:27]/:foo",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "example.org",
            "expect_port": "0",
            "expect_path": "/foo/[61:27]/:foo",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "522",
            "name": "",
            "rel": "http://[1::2]:3:4",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "523",
            "name": "",
            "rel": "http://2001::1",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "524",
            "name": "",
            "rel": "http://[2001::1",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "525",
            "name": "",
            "rel": "http://2001::1]",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "526",
            "name": "",
            "rel": "http://2001::1]:80",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "527",
            "name": "",
            "rel": "http://[2001::1]",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "[2001::1]",
            "expect_port": "0",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "528",
            "name": "",
            "rel": "http://[2001::1]:80",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": "http:",
            "expect_host": "[2001::1]",
            "expect_port": "0",
            "expect_path": "/",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "529",
            "name": "",
            "rel": "http://[[::]]",
            "base": "http://www.example.com/foo/bar",
            "expect_scheme": ":",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          }
        ]
      },
      {
        "name": "standard-url",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/standard-url.js",
        "desc": "Test cases from Webkit's fast/url/standard-url.js",
        "test": [
          {
            "id": "530",
            "name": "",
            "url": "http://www.google.com/foo?bar=baz#",
            "expect_url": "http://www.google.com/foo?bar=baz#"
          },
          {
            "id": "531",
            "name": "",
            "url": "http://[www.google.com]/",
            "expect_url": "http://[www.google.com]/"
          },
          {
            "id": "532",
            "name": "",
            "url": "http:////////user:@google.com:99?foo",
            "expect_url": "http://user@google.com:99/?foo"
          },
          {
            "id": "533",
            "name": "",
            "url": "http://192.0x00A80001",
            "expect_url": "http://192.168.0.1/"
          },
          {
            "id": "534",
            "name": "",
            "url": "http://www/foo%2Ehtml",
            "expect_url": "http://www/foo.html"
          },
          {
            "id": "535",
            "name": "",
            "url": "http://user:pass@/",
            "expect_url": "http://user:pass@/"
          },
          {
            "id": "536",
            "name": "",
            "url": "http://%25DOMAIN:foobar@foodomain.com/",
            "expect_url": "http://%25DOMAIN:foobar@foodomain.com/"
          },
          {
            "id": "537",
            "name": "",
            "url": "http:\\\\\\\\www.google.com\\\\foo",
            "expect_url": "http://www.google.com/foo"
          },
          {
            "id": "538",
            "name": "",
            "ignored": true
          },
          {
            "id": "539",
            "name": "",
            "url": "http://foo:80/",
            "expect_url": "http://foo/"
          },
          {
            "id": "540",
            "name": "",
            "url": "http://foo:81/",
            "expect_url": "http://foo:81/"
          },
          {
            "id": "541",
            "name": "",
            "url": "httpa://foo:80/",
            "expect_url": "httpa://foo:80/"
          },
          {
            "id": "542",
            "name": "",
            "url": "http://foo:-80/",
            "expect_url": "http://foo:-80/"
          },
          {
            "id": "543",
            "name": "",
            "url": "https://foo:443/",
            "expect_url": "https://foo/"
          },
          {
            "id": "544",
            "name": "",
            "url": "https://foo:80/",
            "expect_url": "https://foo:80/"
          },
          {
            "id": "545",
            "name": "",
            "url": "ftp://foo:21/",
            "expect_url": "ftp://foo/"
          },
          {
            "id": "546",
            "name": "",
            "url": "ftp://foo:80/",
            "expect_url": "ftp://foo:80/"
          },
          {
            "id": "547",
            "name": "",
            "url": "gopher://foo:70/",
            "expect_url": "gopher://foo/"
          },
          {
            "id": "548",
            "name": "",
            "url": "gopher://foo:443/",
            "expect_url": "gopher://foo:443/"
          },
          {
            "id": "549",
            "name": "",
            "url": "ws://foo:80/",
            "expect_url": "ws://foo/"
          },
          {
            "id": "550",
            "name": "",
            "url": "ws://foo:81/",
            "expect_url": "ws://foo:81/"
          },
          {
            "id": "551",
            "name": "",
            "url": "ws://foo:443/",
            "expect_url": "ws://foo:443/"
          },
          {
            "id": "552",
            "name": "",
            "url": "ws://foo:815/",
            "expect_url": "ws://foo:815/"
          },
          {
            "id": "553",
            "name": "",
            "url": "wss://foo:80/",
            "expect_url": "wss://foo:80/"
          },
          {
            "id": "554",
            "name": "",
            "url": "wss://foo:81/",
            "expect_url": "wss://foo:81/"
          },
          {
            "id": "555",
            "name": "",
            "url": "wss://foo:443/",
            "expect_url": "wss://foo/"
          },
          {
            "id": "556",
            "name": "",
            "url": "wss://foo:815/",
            "expect_url": "wss://foo:815/"
          }
        ]
      },
      {
        "name": "trivial-segments",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/trivial-segments.js",
        "desc": "Test cases from Webkit's fast/url/trivial-segments.js",
        "test": [{
          "id": "557",
          "name": "",
          "rel": "http://example.com/",
          "base": "http://example.org/foo/bar",
          "expect_scheme": "http:",
          "expect_host": "example.com",
          "expect_port": "0",
          "expect_path": "/",
          "expect_query": "",
          "expect_fragment": ""
        }]
      },
      {
        "name": "trivial",
        "link": "http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/trivial.js",
        "desc": "Test cases from Webkit's fast/url/trivial.js",
        "test": [
          {
            "id": "558",
            "name": "",
            "base": "http://example.org/foo/bar",
            "rel": "http://example.com/",
            "expect_rel": "http://example.com/"
          },
          {
            "id": "559",
            "name": "",
            "base": "http://example.org/foo/bar",
            "rel": "/",
            "expect_rel": "http://example.org/"
          }
        ]
      },
      {
        "name": "normalization",
        "link": "#",
        "desc": "Test cases for normalization behaviors - see http://www.unicode.org/reports/tr15/ Figure 6 and RFC3987",
        "test": [
          {
            "id": "560",
            "name": "",
            "charset": "utf-8",
            "base": "http://www.example.com/",
            "rel": "résumé/résumé.html",
            "expect_rel": "résumé/résumé.html"
          },
          {
            "id": "561",
            "name": "",
            "charset": "utf-8",
            "base": "http://www.example.com/",
            "rel": "résumé.html",
            "expect_rel": "résumé.html"
          },
          {
            "id": "562",
            "name": "",
            "charset": "windows-1258",
            "base": "http://www.example.com/",
            "rel": "ViệtNam.html",
            "expect_rel": "ViệtNam.html"
          },
          {
            "id": "563",
            "name": "",
            "charset": "utf-8",
            "base": "http://www.example.com/",
            "rel": "\uFB01?\uFB01#\uFB01",
            "expect_rel": "\uFB01?\uFB01#\uFB01"
          },
          {
            "id": "564",
            "name": "",
            "charset": "utf-8",
            "base": "http://www.example.com/",
            "rel": "?résumé#résumé",
            "expect_rel": "?résumé#résumé"
          },
          {
            "id": "565",
            "name": "",
            "charset": "utf-8",
            "base": "http://www.example.com/",
            "rel": "2\u2075?2\u2075#2\u2075",
            "expect_rel": "2\u2075?2\u2075#2\u2075"
          },
          {
            "id": "566",
            "name": "",
            "charset": "windows-1258",
            "base": "http://www.example.com/",
            "rel": "?ViệtNam#ViệtNam",
            "expect_rel": "?ViệtNam#ViệtNam"
          },
          {
            "id": "567",
            "name": "",
            "charset": "windows-1258",
            "base": "http://www.example.com/",
            "rel": "foo?q=\u2665",
            "expect_rel": "foo?q=\u2665"
          },
          {
            "id": "568",
            "name": "",
            "charset": "utf-8",
            "base": "http://www.example.com/",
            "rel": "\u1E9B\u0323/?\u1E9B\u0323#\u1E9B\u0323",
            "expect_rel": "\u1E9B\u0323/?\u1E9B\u0323#\u1E9B\u0323"
          },
          {
            "id": "569",
            "name": "",
            "charset": "utf-8",
            "base": "http://www.example.com/",
            "rel": "\u212B/?\u212B#\u212B",
            "expect_rel": "\u1E9B\u0323/?\u1E9B\u0323#\u1E9B\u0323"
          },
          {
            "id": "570",
            "name": "",
            "charset": "utf-8",
            "base": "http://www.example.com/",
            "rel": "\u1E9B\u0323/?\u1E9B\u0323#\u1E9B\u0323",
            "expect_rel": "\u1E9B\u0323/?\u1E9B\u0323#\u1E9B\u0323"
          },
          {
            "id": "571",
            "name": "",
            "charset": "utf-8",
            "base": "http://www.example.com/",
            "rel": "\u1E0B\u0323/?\u1E0B\u0323#\u1E0B\u0323",
            "expect_rel": "\u1E0B\u0323/?\u1E0B\u0323#\u1E0B\u0323"
          }
        ]
      },
      {
        "name": "Test cases for whitespace handling",
        "link": "#",
        "desc": "Various references with white space",
        "test": [
          {
            "id": "572",
            "name": "",
            "url": "http://www.example.com/foo    bar/?   foo   =   bar     #    foo",
            "expect_url": "http://www.example.com/foo    bar/?   foo   =   bar     #    foo"
          },
          {
            "id": "573",
            "name": "",
            "url": "http://www.example.com/ ",
            "expect_url": "http://www.example.com/ "
          }
        ]
      },
      {
        "name": "Test cases for percent-encoding",
        "link": "#",
        "desc": "Test how percent-encoding is handled",
        "test": [
          {
            "id": "573",
            "name": "Test if delimeters such as \"?\" are unencoded",
            "charset": "utf-8",
            "url": "http://www.example.com/foo%3fbar",
            "expect_url": "http://www.example.com/foo?bar"
          },
          {
            "id": "574",
            "name": "Test if delimeters such as \"/\" are unencoded",
            "charset": "utf-8",
            "url": "http://www.example.com/foo%2fbar",
            "expect_url": "http://www.example.com/foo/bar"
          },
          {
            "id": "575",
            "name": "Test if entire string is unencoded",
            "charset": "utf-8",
            "url": "%68%74%74%70%3a%2f%2f%77%77%77%2e%65%78%61%6d%70%6c%65%2e%63%6f%6d%2f",
            "expect_url": "http://www.example.com/"
          },
          {
            "id": "576",
            "name": "Test if scheme gets unencoded",
            "charset": "utf-8",
            "url": "http%3a%2f%2f%77%77%77%2e%65%78%61%6d%70%6c%65%2e%63%6f%6d%2f",
            "expect_url": "http://www.example.com/"
          },
          {
            "id": "577",
            "name": "Test if authority and port gets unencoded",
            "charset": "utf-8",
            "url": "http://%77%77%77%2e%65%78%61%6d%70%6c%65%2e%63%6f%6d%3a%38%30",
            "expect_url": "http://www.example.com:80/"
          },
          {
            "id": "578",
            "name": "",
            "charset": "iso-8859-1",
            "url": "http://%A1%C1.com",
            "expect_url": "http://¡À.com"
          },
          {
            "id": "579",
            "name": "Test mixed encodings",
            "charset": "iso-8859-1",
            "url": "http://www.example.com/%A1%C1/?foo=%EF%BD%81",
            "expect_url": "http://www.example.com/%A1%C1/?foo=%EF%BD%81"
          },
          {
            "id": "580",
            "name": "Test mixed encodings",
            "charset": "iso-8859-1",
            "url": "http://www.example.com/%EF%BD%81/?foo=%A1%C1",
            "expect_url": "http://www.example.com/%EF%BD%81/?foo=%A1%C1",
            "comment": "."
          },
          {
            "id": "581",
            "name": "Test mixed encodings",
            "charset": "iso-8859-1",
            "url": "http://www.example.com/FOO/?foo=%A1%C1",
            "expect_url": "http://www.example.com/FOO/?foo=%A1%C1"
          },
          {
            "id": "582",
            "name": "Test mixed encodings",
            "charset": "iso-8859-1",
            "url": "http://www.example.com/%A1%C1/?foo=FOO",
            "expect_url": "http://www.example.com/%A1%C1/?foo=FOO"
          },
          {
            "id": "583",
            "name": "Test mixed encodings",
            "charset": "utf-8",
            "url": "http://www.example.com/FOO/?foo=%A1%C1",
            "expect_url": "http://www.example.com/FOO/?foo=%A1%C1"
          },
          {
            "id": "584",
            "name": "The Martin Dürst test",
            "charset": "iso-8859-1",
            "url": "http://www.example.com/D%FCrst",
            "expect_url": "http://www.example.com/D%FCrst"
          },
          {
            "id": "585",
            "name": "The Martin Dürst test",
            "charset": "iso-8859-1",
            "url": "http://www.example.com/D%C3%BCrst",
            "expect_url": "http://www.example.com/D%C3%BCrst"
          },
          {
            "id": "586",
            "name": "The Martin Dürst test",
            "charset": "iso-8859-1",
            "url": "http://www.example.com/?D%FCrst",
            "expect_url": "http://www.example.com/?D%FCrst"
          },
          {
            "id": "587",
            "name": "The Martin Dürst test",
            "charset": "iso-8859-1",
            "url": "http://www.example.com/?D%C3%BCrst",
            "expect_url": "http://www.example.com/?D%C3%BCrst"
          }
        ]
      },
      {
        "name": "Miscellaneous test cases",
        "link": "#",
        "desc": "Misc test cases",
        "test": [
          {
            "id": "588",
            "name": "",
            "url": "http://user%40example.com",
            "expect_url": "http://user@example.com",
            "expect_scheme": "http:",
            "expect_host": "example.com",
            "expect_port": "80",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "589",
            "name": "",
            "url": "http://user%3Ainfo%40",
            "expect_url": "http://user:info@",
            "expect_scheme": "http:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "590",
            "name": "",
            "url": "http://user@",
            "expect_url": "http://user@",
            "expect_scheme": "http:",
            "expect_host": "",
            "expect_port": "0",
            "expect_path": "",
            "expect_query": "",
            "expect_fragment": ""
          },
          {
            "id": "594",
            "name": "",
            "url": "$:foo/bar",
            "expect_url": "$:",
            "expect_scheme": "$:",
            "expect_host": "foo",
            "expect_port": "0",
            "expect_path": "bar",
            "expect_query": "",
            "expect_fragment": ""
          }
        ]
      }
    ]
  }
}