depolymerization

wire gateway for Bitcoin/Ethereum
Log | Files | Refs | Submodules | README | LICENSE

urltestdata.json (154994B)


      1 [
      2   "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/segments.js",
      3   "# AS OF https://github.com/jsdom/whatwg-url/commit/35f04dfd3048cf6362f4398745bb13375c5020c2",
      4   {
      5     "input": "http://example\t.\norg",
      6     "base": "http://example.org/foo/bar",
      7     "href": "http://example.org/",
      8     "origin": "http://example.org",
      9     "protocol": "http:",
     10     "username": "",
     11     "password": "",
     12     "host": "example.org",
     13     "hostname": "example.org",
     14     "port": "",
     15     "pathname": "/",
     16     "search": "",
     17     "hash": ""
     18   },
     19   {
     20     "input": "http://user:pass@foo:21/bar;par?b#c",
     21     "base": "http://example.org/foo/bar",
     22     "href": "http://user:pass@foo:21/bar;par?b#c",
     23     "origin": "http://foo:21",
     24     "protocol": "http:",
     25     "username": "user",
     26     "password": "pass",
     27     "host": "foo:21",
     28     "hostname": "foo",
     29     "port": "21",
     30     "pathname": "/bar;par",
     31     "search": "?b",
     32     "hash": "#c"
     33   },
     34   {
     35     "input": "https://test:@test",
     36     "base": "about:blank",
     37     "href": "https://test@test/",
     38     "origin": "https://test",
     39     "protocol": "https:",
     40     "username": "test",
     41     "password": "",
     42     "host": "test",
     43     "hostname": "test",
     44     "port": "",
     45     "pathname": "/",
     46     "search": "",
     47     "hash": ""
     48   },
     49   {
     50     "input": "https://:@test",
     51     "base": "about:blank",
     52     "href": "https://test/",
     53     "origin": "https://test",
     54     "protocol": "https:",
     55     "username": "",
     56     "password": "",
     57     "host": "test",
     58     "hostname": "test",
     59     "port": "",
     60     "pathname": "/",
     61     "search": "",
     62     "hash": ""
     63   },
     64   {
     65     "input": "non-special://test:@test/x",
     66     "base": "about:blank",
     67     "href": "non-special://test@test/x",
     68     "origin": "null",
     69     "protocol": "non-special:",
     70     "username": "test",
     71     "password": "",
     72     "host": "test",
     73     "hostname": "test",
     74     "port": "",
     75     "pathname": "/x",
     76     "search": "",
     77     "hash": ""
     78   },
     79   {
     80     "input": "non-special://:@test/x",
     81     "base": "about:blank",
     82     "href": "non-special://test/x",
     83     "origin": "null",
     84     "protocol": "non-special:",
     85     "username": "",
     86     "password": "",
     87     "host": "test",
     88     "hostname": "test",
     89     "port": "",
     90     "pathname": "/x",
     91     "search": "",
     92     "hash": ""
     93   },
     94   {
     95     "input": "http:foo.com",
     96     "base": "http://example.org/foo/bar",
     97     "href": "http://example.org/foo/foo.com",
     98     "origin": "http://example.org",
     99     "protocol": "http:",
    100     "username": "",
    101     "password": "",
    102     "host": "example.org",
    103     "hostname": "example.org",
    104     "port": "",
    105     "pathname": "/foo/foo.com",
    106     "search": "",
    107     "hash": ""
    108   },
    109   {
    110     "input": "\t   :foo.com   \n",
    111     "base": "http://example.org/foo/bar",
    112     "href": "http://example.org/foo/:foo.com",
    113     "origin": "http://example.org",
    114     "protocol": "http:",
    115     "username": "",
    116     "password": "",
    117     "host": "example.org",
    118     "hostname": "example.org",
    119     "port": "",
    120     "pathname": "/foo/:foo.com",
    121     "search": "",
    122     "hash": ""
    123   },
    124   {
    125     "input": " foo.com  ",
    126     "base": "http://example.org/foo/bar",
    127     "href": "http://example.org/foo/foo.com",
    128     "origin": "http://example.org",
    129     "protocol": "http:",
    130     "username": "",
    131     "password": "",
    132     "host": "example.org",
    133     "hostname": "example.org",
    134     "port": "",
    135     "pathname": "/foo/foo.com",
    136     "search": "",
    137     "hash": ""
    138   },
    139   {
    140     "input": "a:\t foo.com",
    141     "base": "http://example.org/foo/bar",
    142     "href": "a: foo.com",
    143     "origin": "null",
    144     "protocol": "a:",
    145     "username": "",
    146     "password": "",
    147     "host": "",
    148     "hostname": "",
    149     "port": "",
    150     "pathname": " foo.com",
    151     "search": "",
    152     "hash": ""
    153   },
    154   {
    155     "input": "http://f:21/ b ? d # e ",
    156     "base": "http://example.org/foo/bar",
    157     "href": "http://f:21/%20b%20?%20d%20#%20e",
    158     "origin": "http://f:21",
    159     "protocol": "http:",
    160     "username": "",
    161     "password": "",
    162     "host": "f:21",
    163     "hostname": "f",
    164     "port": "21",
    165     "pathname": "/%20b%20",
    166     "search": "?%20d%20",
    167     "hash": "#%20e"
    168   },
    169   {
    170     "input": "lolscheme:x x#x x",
    171     "base": "about:blank",
    172     "href": "lolscheme:x x#x%20x",
    173     "protocol": "lolscheme:",
    174     "username": "",
    175     "password": "",
    176     "host": "",
    177     "hostname": "",
    178     "port": "",
    179     "pathname": "x x",
    180     "search": "",
    181     "hash": "#x%20x"
    182   },
    183   {
    184     "input": "http://f:/c",
    185     "base": "http://example.org/foo/bar",
    186     "href": "http://f/c",
    187     "origin": "http://f",
    188     "protocol": "http:",
    189     "username": "",
    190     "password": "",
    191     "host": "f",
    192     "hostname": "f",
    193     "port": "",
    194     "pathname": "/c",
    195     "search": "",
    196     "hash": ""
    197   },
    198   {
    199     "input": "http://f:0/c",
    200     "base": "http://example.org/foo/bar",
    201     "href": "http://f:0/c",
    202     "origin": "http://f:0",
    203     "protocol": "http:",
    204     "username": "",
    205     "password": "",
    206     "host": "f:0",
    207     "hostname": "f",
    208     "port": "0",
    209     "pathname": "/c",
    210     "search": "",
    211     "hash": ""
    212   },
    213   {
    214     "input": "http://f:00000000000000/c",
    215     "base": "http://example.org/foo/bar",
    216     "href": "http://f:0/c",
    217     "origin": "http://f:0",
    218     "protocol": "http:",
    219     "username": "",
    220     "password": "",
    221     "host": "f:0",
    222     "hostname": "f",
    223     "port": "0",
    224     "pathname": "/c",
    225     "search": "",
    226     "hash": ""
    227   },
    228   {
    229     "input": "http://f:00000000000000000000080/c",
    230     "base": "http://example.org/foo/bar",
    231     "href": "http://f/c",
    232     "origin": "http://f",
    233     "protocol": "http:",
    234     "username": "",
    235     "password": "",
    236     "host": "f",
    237     "hostname": "f",
    238     "port": "",
    239     "pathname": "/c",
    240     "search": "",
    241     "hash": ""
    242   },
    243   {
    244     "input": "http://f:b/c",
    245     "base": "http://example.org/foo/bar",
    246     "failure": true
    247   },
    248   {
    249     "input": "http://f: /c",
    250     "base": "http://example.org/foo/bar",
    251     "failure": true
    252   },
    253   {
    254     "input": "http://f:\n/c",
    255     "base": "http://example.org/foo/bar",
    256     "href": "http://f/c",
    257     "origin": "http://f",
    258     "protocol": "http:",
    259     "username": "",
    260     "password": "",
    261     "host": "f",
    262     "hostname": "f",
    263     "port": "",
    264     "pathname": "/c",
    265     "search": "",
    266     "hash": ""
    267   },
    268   {
    269     "input": "http://f:fifty-two/c",
    270     "base": "http://example.org/foo/bar",
    271     "failure": true
    272   },
    273   {
    274     "input": "http://f:999999/c",
    275     "base": "http://example.org/foo/bar",
    276     "failure": true
    277   },
    278   {
    279     "input": "non-special://f:999999/c",
    280     "base": "http://example.org/foo/bar",
    281     "failure": true
    282   },
    283   {
    284     "input": "http://f: 21 / b ? d # e ",
    285     "base": "http://example.org/foo/bar",
    286     "failure": true
    287   },
    288   {
    289     "input": "",
    290     "base": "http://example.org/foo/bar",
    291     "href": "http://example.org/foo/bar",
    292     "origin": "http://example.org",
    293     "protocol": "http:",
    294     "username": "",
    295     "password": "",
    296     "host": "example.org",
    297     "hostname": "example.org",
    298     "port": "",
    299     "pathname": "/foo/bar",
    300     "search": "",
    301     "hash": ""
    302   },
    303   {
    304     "input": "  \t",
    305     "base": "http://example.org/foo/bar",
    306     "href": "http://example.org/foo/bar",
    307     "origin": "http://example.org",
    308     "protocol": "http:",
    309     "username": "",
    310     "password": "",
    311     "host": "example.org",
    312     "hostname": "example.org",
    313     "port": "",
    314     "pathname": "/foo/bar",
    315     "search": "",
    316     "hash": ""
    317   },
    318   {
    319     "input": ":foo.com/",
    320     "base": "http://example.org/foo/bar",
    321     "href": "http://example.org/foo/:foo.com/",
    322     "origin": "http://example.org",
    323     "protocol": "http:",
    324     "username": "",
    325     "password": "",
    326     "host": "example.org",
    327     "hostname": "example.org",
    328     "port": "",
    329     "pathname": "/foo/:foo.com/",
    330     "search": "",
    331     "hash": ""
    332   },
    333   {
    334     "input": ":foo.com\\",
    335     "base": "http://example.org/foo/bar",
    336     "href": "http://example.org/foo/:foo.com/",
    337     "origin": "http://example.org",
    338     "protocol": "http:",
    339     "username": "",
    340     "password": "",
    341     "host": "example.org",
    342     "hostname": "example.org",
    343     "port": "",
    344     "pathname": "/foo/:foo.com/",
    345     "search": "",
    346     "hash": ""
    347   },
    348   {
    349     "input": ":",
    350     "base": "http://example.org/foo/bar",
    351     "href": "http://example.org/foo/:",
    352     "origin": "http://example.org",
    353     "protocol": "http:",
    354     "username": "",
    355     "password": "",
    356     "host": "example.org",
    357     "hostname": "example.org",
    358     "port": "",
    359     "pathname": "/foo/:",
    360     "search": "",
    361     "hash": ""
    362   },
    363   {
    364     "input": ":a",
    365     "base": "http://example.org/foo/bar",
    366     "href": "http://example.org/foo/:a",
    367     "origin": "http://example.org",
    368     "protocol": "http:",
    369     "username": "",
    370     "password": "",
    371     "host": "example.org",
    372     "hostname": "example.org",
    373     "port": "",
    374     "pathname": "/foo/:a",
    375     "search": "",
    376     "hash": ""
    377   },
    378   {
    379     "input": ":/",
    380     "base": "http://example.org/foo/bar",
    381     "href": "http://example.org/foo/:/",
    382     "origin": "http://example.org",
    383     "protocol": "http:",
    384     "username": "",
    385     "password": "",
    386     "host": "example.org",
    387     "hostname": "example.org",
    388     "port": "",
    389     "pathname": "/foo/:/",
    390     "search": "",
    391     "hash": ""
    392   },
    393   {
    394     "input": ":\\",
    395     "base": "http://example.org/foo/bar",
    396     "href": "http://example.org/foo/:/",
    397     "origin": "http://example.org",
    398     "protocol": "http:",
    399     "username": "",
    400     "password": "",
    401     "host": "example.org",
    402     "hostname": "example.org",
    403     "port": "",
    404     "pathname": "/foo/:/",
    405     "search": "",
    406     "hash": ""
    407   },
    408   {
    409     "input": ":#",
    410     "base": "http://example.org/foo/bar",
    411     "href": "http://example.org/foo/:#",
    412     "origin": "http://example.org",
    413     "protocol": "http:",
    414     "username": "",
    415     "password": "",
    416     "host": "example.org",
    417     "hostname": "example.org",
    418     "port": "",
    419     "pathname": "/foo/:",
    420     "search": "",
    421     "hash": ""
    422   },
    423   {
    424     "input": "#",
    425     "base": "http://example.org/foo/bar",
    426     "href": "http://example.org/foo/bar#",
    427     "origin": "http://example.org",
    428     "protocol": "http:",
    429     "username": "",
    430     "password": "",
    431     "host": "example.org",
    432     "hostname": "example.org",
    433     "port": "",
    434     "pathname": "/foo/bar",
    435     "search": "",
    436     "hash": ""
    437   },
    438   {
    439     "input": "#/",
    440     "base": "http://example.org/foo/bar",
    441     "href": "http://example.org/foo/bar#/",
    442     "origin": "http://example.org",
    443     "protocol": "http:",
    444     "username": "",
    445     "password": "",
    446     "host": "example.org",
    447     "hostname": "example.org",
    448     "port": "",
    449     "pathname": "/foo/bar",
    450     "search": "",
    451     "hash": "#/"
    452   },
    453   {
    454     "input": "#\\",
    455     "base": "http://example.org/foo/bar",
    456     "href": "http://example.org/foo/bar#\\",
    457     "origin": "http://example.org",
    458     "protocol": "http:",
    459     "username": "",
    460     "password": "",
    461     "host": "example.org",
    462     "hostname": "example.org",
    463     "port": "",
    464     "pathname": "/foo/bar",
    465     "search": "",
    466     "hash": "#\\"
    467   },
    468   {
    469     "input": "#;?",
    470     "base": "http://example.org/foo/bar",
    471     "href": "http://example.org/foo/bar#;?",
    472     "origin": "http://example.org",
    473     "protocol": "http:",
    474     "username": "",
    475     "password": "",
    476     "host": "example.org",
    477     "hostname": "example.org",
    478     "port": "",
    479     "pathname": "/foo/bar",
    480     "search": "",
    481     "hash": "#;?"
    482   },
    483   {
    484     "input": "?",
    485     "base": "http://example.org/foo/bar",
    486     "href": "http://example.org/foo/bar?",
    487     "origin": "http://example.org",
    488     "protocol": "http:",
    489     "username": "",
    490     "password": "",
    491     "host": "example.org",
    492     "hostname": "example.org",
    493     "port": "",
    494     "pathname": "/foo/bar",
    495     "search": "",
    496     "hash": ""
    497   },
    498   {
    499     "input": "/",
    500     "base": "http://example.org/foo/bar",
    501     "href": "http://example.org/",
    502     "origin": "http://example.org",
    503     "protocol": "http:",
    504     "username": "",
    505     "password": "",
    506     "host": "example.org",
    507     "hostname": "example.org",
    508     "port": "",
    509     "pathname": "/",
    510     "search": "",
    511     "hash": ""
    512   },
    513   {
    514     "input": ":23",
    515     "base": "http://example.org/foo/bar",
    516     "href": "http://example.org/foo/:23",
    517     "origin": "http://example.org",
    518     "protocol": "http:",
    519     "username": "",
    520     "password": "",
    521     "host": "example.org",
    522     "hostname": "example.org",
    523     "port": "",
    524     "pathname": "/foo/:23",
    525     "search": "",
    526     "hash": ""
    527   },
    528   {
    529     "input": "/:23",
    530     "base": "http://example.org/foo/bar",
    531     "href": "http://example.org/:23",
    532     "origin": "http://example.org",
    533     "protocol": "http:",
    534     "username": "",
    535     "password": "",
    536     "host": "example.org",
    537     "hostname": "example.org",
    538     "port": "",
    539     "pathname": "/:23",
    540     "search": "",
    541     "hash": ""
    542   },
    543   {
    544     "input": "::",
    545     "base": "http://example.org/foo/bar",
    546     "href": "http://example.org/foo/::",
    547     "origin": "http://example.org",
    548     "protocol": "http:",
    549     "username": "",
    550     "password": "",
    551     "host": "example.org",
    552     "hostname": "example.org",
    553     "port": "",
    554     "pathname": "/foo/::",
    555     "search": "",
    556     "hash": ""
    557   },
    558   {
    559     "input": "::23",
    560     "base": "http://example.org/foo/bar",
    561     "href": "http://example.org/foo/::23",
    562     "origin": "http://example.org",
    563     "protocol": "http:",
    564     "username": "",
    565     "password": "",
    566     "host": "example.org",
    567     "hostname": "example.org",
    568     "port": "",
    569     "pathname": "/foo/::23",
    570     "search": "",
    571     "hash": ""
    572   },
    573   {
    574     "input": "foo://",
    575     "base": "http://example.org/foo/bar",
    576     "href": "foo://",
    577     "origin": "null",
    578     "protocol": "foo:",
    579     "username": "",
    580     "password": "",
    581     "host": "",
    582     "hostname": "",
    583     "port": "",
    584     "pathname": "",
    585     "search": "",
    586     "hash": ""
    587   },
    588   {
    589     "input": "http://a:b@c:29/d",
    590     "base": "http://example.org/foo/bar",
    591     "href": "http://a:b@c:29/d",
    592     "origin": "http://c:29",
    593     "protocol": "http:",
    594     "username": "a",
    595     "password": "b",
    596     "host": "c:29",
    597     "hostname": "c",
    598     "port": "29",
    599     "pathname": "/d",
    600     "search": "",
    601     "hash": ""
    602   },
    603   {
    604     "input": "http::@c:29",
    605     "base": "http://example.org/foo/bar",
    606     "href": "http://example.org/foo/:@c:29",
    607     "origin": "http://example.org",
    608     "protocol": "http:",
    609     "username": "",
    610     "password": "",
    611     "host": "example.org",
    612     "hostname": "example.org",
    613     "port": "",
    614     "pathname": "/foo/:@c:29",
    615     "search": "",
    616     "hash": ""
    617   },
    618   {
    619     "input": "http://&a:foo(b]c@d:2/",
    620     "base": "http://example.org/foo/bar",
    621     "href": "http://&a:foo(b%5Dc@d:2/",
    622     "origin": "http://d:2",
    623     "protocol": "http:",
    624     "username": "&a",
    625     "password": "foo(b%5Dc",
    626     "host": "d:2",
    627     "hostname": "d",
    628     "port": "2",
    629     "pathname": "/",
    630     "search": "",
    631     "hash": ""
    632   },
    633   {
    634     "input": "http://::@c@d:2",
    635     "base": "http://example.org/foo/bar",
    636     "href": "http://:%3A%40c@d:2/",
    637     "origin": "http://d:2",
    638     "protocol": "http:",
    639     "username": "",
    640     "password": "%3A%40c",
    641     "host": "d:2",
    642     "hostname": "d",
    643     "port": "2",
    644     "pathname": "/",
    645     "search": "",
    646     "hash": ""
    647   },
    648   {
    649     "input": "http://foo.com:b@d/",
    650     "base": "http://example.org/foo/bar",
    651     "href": "http://foo.com:b@d/",
    652     "origin": "http://d",
    653     "protocol": "http:",
    654     "username": "foo.com",
    655     "password": "b",
    656     "host": "d",
    657     "hostname": "d",
    658     "port": "",
    659     "pathname": "/",
    660     "search": "",
    661     "hash": ""
    662   },
    663   {
    664     "input": "http://foo.com/\\@",
    665     "base": "http://example.org/foo/bar",
    666     "href": "http://foo.com//@",
    667     "origin": "http://foo.com",
    668     "protocol": "http:",
    669     "username": "",
    670     "password": "",
    671     "host": "foo.com",
    672     "hostname": "foo.com",
    673     "port": "",
    674     "pathname": "//@",
    675     "search": "",
    676     "hash": ""
    677   },
    678   {
    679     "input": "http:\\\\foo.com\\",
    680     "base": "http://example.org/foo/bar",
    681     "href": "http://foo.com/",
    682     "origin": "http://foo.com",
    683     "protocol": "http:",
    684     "username": "",
    685     "password": "",
    686     "host": "foo.com",
    687     "hostname": "foo.com",
    688     "port": "",
    689     "pathname": "/",
    690     "search": "",
    691     "hash": ""
    692   },
    693   {
    694     "input": "http:\\\\a\\b:c\\d@foo.com\\",
    695     "base": "http://example.org/foo/bar",
    696     "href": "http://a/b:c/d@foo.com/",
    697     "origin": "http://a",
    698     "protocol": "http:",
    699     "username": "",
    700     "password": "",
    701     "host": "a",
    702     "hostname": "a",
    703     "port": "",
    704     "pathname": "/b:c/d@foo.com/",
    705     "search": "",
    706     "hash": ""
    707   },
    708   {
    709     "input": "foo:/",
    710     "base": "http://example.org/foo/bar",
    711     "href": "foo:/",
    712     "origin": "null",
    713     "protocol": "foo:",
    714     "username": "",
    715     "password": "",
    716     "host": "",
    717     "hostname": "",
    718     "port": "",
    719     "pathname": "/",
    720     "search": "",
    721     "hash": ""
    722   },
    723   {
    724     "input": "foo:/bar.com/",
    725     "base": "http://example.org/foo/bar",
    726     "href": "foo:/bar.com/",
    727     "origin": "null",
    728     "protocol": "foo:",
    729     "username": "",
    730     "password": "",
    731     "host": "",
    732     "hostname": "",
    733     "port": "",
    734     "pathname": "/bar.com/",
    735     "search": "",
    736     "hash": ""
    737   },
    738   {
    739     "input": "foo://///////",
    740     "base": "http://example.org/foo/bar",
    741     "href": "foo://///////",
    742     "origin": "null",
    743     "protocol": "foo:",
    744     "username": "",
    745     "password": "",
    746     "host": "",
    747     "hostname": "",
    748     "port": "",
    749     "pathname": "///////",
    750     "search": "",
    751     "hash": ""
    752   },
    753   {
    754     "input": "foo://///////bar.com/",
    755     "base": "http://example.org/foo/bar",
    756     "href": "foo://///////bar.com/",
    757     "origin": "null",
    758     "protocol": "foo:",
    759     "username": "",
    760     "password": "",
    761     "host": "",
    762     "hostname": "",
    763     "port": "",
    764     "pathname": "///////bar.com/",
    765     "search": "",
    766     "hash": ""
    767   },
    768   {
    769     "input": "foo:////://///",
    770     "base": "http://example.org/foo/bar",
    771     "href": "foo:////://///",
    772     "origin": "null",
    773     "protocol": "foo:",
    774     "username": "",
    775     "password": "",
    776     "host": "",
    777     "hostname": "",
    778     "port": "",
    779     "pathname": "//://///",
    780     "search": "",
    781     "hash": ""
    782   },
    783   {
    784     "input": "c:/foo",
    785     "base": "http://example.org/foo/bar",
    786     "href": "c:/foo",
    787     "origin": "null",
    788     "protocol": "c:",
    789     "username": "",
    790     "password": "",
    791     "host": "",
    792     "hostname": "",
    793     "port": "",
    794     "pathname": "/foo",
    795     "search": "",
    796     "hash": ""
    797   },
    798   {
    799     "input": "//foo/bar",
    800     "base": "http://example.org/foo/bar",
    801     "href": "http://foo/bar",
    802     "origin": "http://foo",
    803     "protocol": "http:",
    804     "username": "",
    805     "password": "",
    806     "host": "foo",
    807     "hostname": "foo",
    808     "port": "",
    809     "pathname": "/bar",
    810     "search": "",
    811     "hash": ""
    812   },
    813   {
    814     "input": "http://foo/path;a??e#f#g",
    815     "base": "http://example.org/foo/bar",
    816     "href": "http://foo/path;a??e#f#g",
    817     "origin": "http://foo",
    818     "protocol": "http:",
    819     "username": "",
    820     "password": "",
    821     "host": "foo",
    822     "hostname": "foo",
    823     "port": "",
    824     "pathname": "/path;a",
    825     "search": "??e",
    826     "hash": "#f#g"
    827   },
    828   {
    829     "input": "http://foo/abcd?efgh?ijkl",
    830     "base": "http://example.org/foo/bar",
    831     "href": "http://foo/abcd?efgh?ijkl",
    832     "origin": "http://foo",
    833     "protocol": "http:",
    834     "username": "",
    835     "password": "",
    836     "host": "foo",
    837     "hostname": "foo",
    838     "port": "",
    839     "pathname": "/abcd",
    840     "search": "?efgh?ijkl",
    841     "hash": ""
    842   },
    843   {
    844     "input": "http://foo/abcd#foo?bar",
    845     "base": "http://example.org/foo/bar",
    846     "href": "http://foo/abcd#foo?bar",
    847     "origin": "http://foo",
    848     "protocol": "http:",
    849     "username": "",
    850     "password": "",
    851     "host": "foo",
    852     "hostname": "foo",
    853     "port": "",
    854     "pathname": "/abcd",
    855     "search": "",
    856     "hash": "#foo?bar"
    857   },
    858   {
    859     "input": "[61:24:74]:98",
    860     "base": "http://example.org/foo/bar",
    861     "href": "http://example.org/foo/[61:24:74]:98",
    862     "origin": "http://example.org",
    863     "protocol": "http:",
    864     "username": "",
    865     "password": "",
    866     "host": "example.org",
    867     "hostname": "example.org",
    868     "port": "",
    869     "pathname": "/foo/[61:24:74]:98",
    870     "search": "",
    871     "hash": ""
    872   },
    873   {
    874     "input": "http:[61:27]/:foo",
    875     "base": "http://example.org/foo/bar",
    876     "href": "http://example.org/foo/[61:27]/:foo",
    877     "origin": "http://example.org",
    878     "protocol": "http:",
    879     "username": "",
    880     "password": "",
    881     "host": "example.org",
    882     "hostname": "example.org",
    883     "port": "",
    884     "pathname": "/foo/[61:27]/:foo",
    885     "search": "",
    886     "hash": ""
    887   },
    888   {
    889     "input": "http://[1::2]:3:4",
    890     "base": "http://example.org/foo/bar",
    891     "failure": true
    892   },
    893   {
    894     "input": "http://2001::1",
    895     "base": "http://example.org/foo/bar",
    896     "failure": true
    897   },
    898   {
    899     "input": "http://2001::1]",
    900     "base": "http://example.org/foo/bar",
    901     "failure": true
    902   },
    903   {
    904     "input": "http://2001::1]:80",
    905     "base": "http://example.org/foo/bar",
    906     "failure": true
    907   },
    908   {
    909     "input": "http://[2001::1]",
    910     "base": "http://example.org/foo/bar",
    911     "href": "http://[2001::1]/",
    912     "origin": "http://[2001::1]",
    913     "protocol": "http:",
    914     "username": "",
    915     "password": "",
    916     "host": "[2001::1]",
    917     "hostname": "[2001::1]",
    918     "port": "",
    919     "pathname": "/",
    920     "search": "",
    921     "hash": ""
    922   },
    923   {
    924     "input": "http://[::127.0.0.1]",
    925     "base": "http://example.org/foo/bar",
    926     "href": "http://[::7f00:1]/",
    927     "origin": "http://[::7f00:1]",
    928     "protocol": "http:",
    929     "username": "",
    930     "password": "",
    931     "host": "[::7f00:1]",
    932     "hostname": "[::7f00:1]",
    933     "port": "",
    934     "pathname": "/",
    935     "search": "",
    936     "hash": ""
    937   },
    938   {
    939     "input": "http://[0:0:0:0:0:0:13.1.68.3]",
    940     "base": "http://example.org/foo/bar",
    941     "href": "http://[::d01:4403]/",
    942     "origin": "http://[::d01:4403]",
    943     "protocol": "http:",
    944     "username": "",
    945     "password": "",
    946     "host": "[::d01:4403]",
    947     "hostname": "[::d01:4403]",
    948     "port": "",
    949     "pathname": "/",
    950     "search": "",
    951     "hash": ""
    952   },
    953   {
    954     "input": "http://[2001::1]:80",
    955     "base": "http://example.org/foo/bar",
    956     "href": "http://[2001::1]/",
    957     "origin": "http://[2001::1]",
    958     "protocol": "http:",
    959     "username": "",
    960     "password": "",
    961     "host": "[2001::1]",
    962     "hostname": "[2001::1]",
    963     "port": "",
    964     "pathname": "/",
    965     "search": "",
    966     "hash": ""
    967   },
    968   {
    969     "input": "http:/example.com/",
    970     "base": "http://example.org/foo/bar",
    971     "href": "http://example.org/example.com/",
    972     "origin": "http://example.org",
    973     "protocol": "http:",
    974     "username": "",
    975     "password": "",
    976     "host": "example.org",
    977     "hostname": "example.org",
    978     "port": "",
    979     "pathname": "/example.com/",
    980     "search": "",
    981     "hash": ""
    982   },
    983   {
    984     "input": "ftp:/example.com/",
    985     "base": "http://example.org/foo/bar",
    986     "href": "ftp://example.com/",
    987     "origin": "ftp://example.com",
    988     "protocol": "ftp:",
    989     "username": "",
    990     "password": "",
    991     "host": "example.com",
    992     "hostname": "example.com",
    993     "port": "",
    994     "pathname": "/",
    995     "search": "",
    996     "hash": ""
    997   },
    998   {
    999     "input": "https:/example.com/",
   1000     "base": "http://example.org/foo/bar",
   1001     "href": "https://example.com/",
   1002     "origin": "https://example.com",
   1003     "protocol": "https:",
   1004     "username": "",
   1005     "password": "",
   1006     "host": "example.com",
   1007     "hostname": "example.com",
   1008     "port": "",
   1009     "pathname": "/",
   1010     "search": "",
   1011     "hash": ""
   1012   },
   1013   {
   1014     "input": "madeupscheme:/example.com/",
   1015     "base": "http://example.org/foo/bar",
   1016     "href": "madeupscheme:/example.com/",
   1017     "origin": "null",
   1018     "protocol": "madeupscheme:",
   1019     "username": "",
   1020     "password": "",
   1021     "host": "",
   1022     "hostname": "",
   1023     "port": "",
   1024     "pathname": "/example.com/",
   1025     "search": "",
   1026     "hash": ""
   1027   },
   1028   {
   1029     "input": "file:/example.com/",
   1030     "base": "http://example.org/foo/bar",
   1031     "href": "file:///example.com/",
   1032     "protocol": "file:",
   1033     "username": "",
   1034     "password": "",
   1035     "host": "",
   1036     "hostname": "",
   1037     "port": "",
   1038     "pathname": "/example.com/",
   1039     "search": "",
   1040     "hash": ""
   1041   },
   1042   {
   1043     "input": "file://example:1/",
   1044     "base": "about:blank",
   1045     "failure": true
   1046   },
   1047   {
   1048     "input": "file://example:test/",
   1049     "base": "about:blank",
   1050     "failure": true
   1051   },
   1052   {
   1053     "input": "file://example%/",
   1054     "base": "about:blank",
   1055     "failure": true
   1056   },
   1057   {
   1058     "input": "file://[example]/",
   1059     "base": "about:blank",
   1060     "failure": true
   1061   },
   1062   {
   1063     "input": "ftps:/example.com/",
   1064     "base": "http://example.org/foo/bar",
   1065     "href": "ftps:/example.com/",
   1066     "origin": "null",
   1067     "protocol": "ftps:",
   1068     "username": "",
   1069     "password": "",
   1070     "host": "",
   1071     "hostname": "",
   1072     "port": "",
   1073     "pathname": "/example.com/",
   1074     "search": "",
   1075     "hash": ""
   1076   },
   1077   {
   1078     "input": "gopher:/example.com/",
   1079     "base": "http://example.org/foo/bar",
   1080     "href": "gopher:/example.com/",
   1081     "origin": "null",
   1082     "protocol": "gopher:",
   1083     "username": "",
   1084     "password": "",
   1085     "host": "",
   1086     "hostname": "",
   1087     "port": "",
   1088     "pathname": "/example.com/",
   1089     "search": "",
   1090     "hash": ""
   1091   },
   1092   {
   1093     "input": "ws:/example.com/",
   1094     "base": "http://example.org/foo/bar",
   1095     "href": "ws://example.com/",
   1096     "origin": "ws://example.com",
   1097     "protocol": "ws:",
   1098     "username": "",
   1099     "password": "",
   1100     "host": "example.com",
   1101     "hostname": "example.com",
   1102     "port": "",
   1103     "pathname": "/",
   1104     "search": "",
   1105     "hash": ""
   1106   },
   1107   {
   1108     "input": "wss:/example.com/",
   1109     "base": "http://example.org/foo/bar",
   1110     "href": "wss://example.com/",
   1111     "origin": "wss://example.com",
   1112     "protocol": "wss:",
   1113     "username": "",
   1114     "password": "",
   1115     "host": "example.com",
   1116     "hostname": "example.com",
   1117     "port": "",
   1118     "pathname": "/",
   1119     "search": "",
   1120     "hash": ""
   1121   },
   1122   {
   1123     "input": "data:/example.com/",
   1124     "base": "http://example.org/foo/bar",
   1125     "href": "data:/example.com/",
   1126     "origin": "null",
   1127     "protocol": "data:",
   1128     "username": "",
   1129     "password": "",
   1130     "host": "",
   1131     "hostname": "",
   1132     "port": "",
   1133     "pathname": "/example.com/",
   1134     "search": "",
   1135     "hash": ""
   1136   },
   1137   {
   1138     "input": "javascript:/example.com/",
   1139     "base": "http://example.org/foo/bar",
   1140     "href": "javascript:/example.com/",
   1141     "origin": "null",
   1142     "protocol": "javascript:",
   1143     "username": "",
   1144     "password": "",
   1145     "host": "",
   1146     "hostname": "",
   1147     "port": "",
   1148     "pathname": "/example.com/",
   1149     "search": "",
   1150     "hash": ""
   1151   },
   1152   {
   1153     "input": "mailto:/example.com/",
   1154     "base": "http://example.org/foo/bar",
   1155     "href": "mailto:/example.com/",
   1156     "origin": "null",
   1157     "protocol": "mailto:",
   1158     "username": "",
   1159     "password": "",
   1160     "host": "",
   1161     "hostname": "",
   1162     "port": "",
   1163     "pathname": "/example.com/",
   1164     "search": "",
   1165     "hash": ""
   1166   },
   1167   {
   1168     "input": "http:example.com/",
   1169     "base": "http://example.org/foo/bar",
   1170     "href": "http://example.org/foo/example.com/",
   1171     "origin": "http://example.org",
   1172     "protocol": "http:",
   1173     "username": "",
   1174     "password": "",
   1175     "host": "example.org",
   1176     "hostname": "example.org",
   1177     "port": "",
   1178     "pathname": "/foo/example.com/",
   1179     "search": "",
   1180     "hash": ""
   1181   },
   1182   {
   1183     "input": "ftp:example.com/",
   1184     "base": "http://example.org/foo/bar",
   1185     "href": "ftp://example.com/",
   1186     "origin": "ftp://example.com",
   1187     "protocol": "ftp:",
   1188     "username": "",
   1189     "password": "",
   1190     "host": "example.com",
   1191     "hostname": "example.com",
   1192     "port": "",
   1193     "pathname": "/",
   1194     "search": "",
   1195     "hash": ""
   1196   },
   1197   {
   1198     "input": "https:example.com/",
   1199     "base": "http://example.org/foo/bar",
   1200     "href": "https://example.com/",
   1201     "origin": "https://example.com",
   1202     "protocol": "https:",
   1203     "username": "",
   1204     "password": "",
   1205     "host": "example.com",
   1206     "hostname": "example.com",
   1207     "port": "",
   1208     "pathname": "/",
   1209     "search": "",
   1210     "hash": ""
   1211   },
   1212   {
   1213     "input": "madeupscheme:example.com/",
   1214     "base": "http://example.org/foo/bar",
   1215     "href": "madeupscheme:example.com/",
   1216     "origin": "null",
   1217     "protocol": "madeupscheme:",
   1218     "username": "",
   1219     "password": "",
   1220     "host": "",
   1221     "hostname": "",
   1222     "port": "",
   1223     "pathname": "example.com/",
   1224     "search": "",
   1225     "hash": ""
   1226   },
   1227   {
   1228     "input": "ftps:example.com/",
   1229     "base": "http://example.org/foo/bar",
   1230     "href": "ftps:example.com/",
   1231     "origin": "null",
   1232     "protocol": "ftps:",
   1233     "username": "",
   1234     "password": "",
   1235     "host": "",
   1236     "hostname": "",
   1237     "port": "",
   1238     "pathname": "example.com/",
   1239     "search": "",
   1240     "hash": ""
   1241   },
   1242   {
   1243     "input": "gopher:example.com/",
   1244     "base": "http://example.org/foo/bar",
   1245     "href": "gopher:example.com/",
   1246     "origin": "null",
   1247     "protocol": "gopher:",
   1248     "username": "",
   1249     "password": "",
   1250     "host": "",
   1251     "hostname": "",
   1252     "port": "",
   1253     "pathname": "example.com/",
   1254     "search": "",
   1255     "hash": ""
   1256   },
   1257   {
   1258     "input": "ws:example.com/",
   1259     "base": "http://example.org/foo/bar",
   1260     "href": "ws://example.com/",
   1261     "origin": "ws://example.com",
   1262     "protocol": "ws:",
   1263     "username": "",
   1264     "password": "",
   1265     "host": "example.com",
   1266     "hostname": "example.com",
   1267     "port": "",
   1268     "pathname": "/",
   1269     "search": "",
   1270     "hash": ""
   1271   },
   1272   {
   1273     "input": "wss:example.com/",
   1274     "base": "http://example.org/foo/bar",
   1275     "href": "wss://example.com/",
   1276     "origin": "wss://example.com",
   1277     "protocol": "wss:",
   1278     "username": "",
   1279     "password": "",
   1280     "host": "example.com",
   1281     "hostname": "example.com",
   1282     "port": "",
   1283     "pathname": "/",
   1284     "search": "",
   1285     "hash": ""
   1286   },
   1287   {
   1288     "input": "data:example.com/",
   1289     "base": "http://example.org/foo/bar",
   1290     "href": "data:example.com/",
   1291     "origin": "null",
   1292     "protocol": "data:",
   1293     "username": "",
   1294     "password": "",
   1295     "host": "",
   1296     "hostname": "",
   1297     "port": "",
   1298     "pathname": "example.com/",
   1299     "search": "",
   1300     "hash": ""
   1301   },
   1302   {
   1303     "input": "javascript:example.com/",
   1304     "base": "http://example.org/foo/bar",
   1305     "href": "javascript:example.com/",
   1306     "origin": "null",
   1307     "protocol": "javascript:",
   1308     "username": "",
   1309     "password": "",
   1310     "host": "",
   1311     "hostname": "",
   1312     "port": "",
   1313     "pathname": "example.com/",
   1314     "search": "",
   1315     "hash": ""
   1316   },
   1317   {
   1318     "input": "mailto:example.com/",
   1319     "base": "http://example.org/foo/bar",
   1320     "href": "mailto:example.com/",
   1321     "origin": "null",
   1322     "protocol": "mailto:",
   1323     "username": "",
   1324     "password": "",
   1325     "host": "",
   1326     "hostname": "",
   1327     "port": "",
   1328     "pathname": "example.com/",
   1329     "search": "",
   1330     "hash": ""
   1331   },
   1332   {
   1333     "input": "/a/b/c",
   1334     "base": "http://example.org/foo/bar",
   1335     "href": "http://example.org/a/b/c",
   1336     "origin": "http://example.org",
   1337     "protocol": "http:",
   1338     "username": "",
   1339     "password": "",
   1340     "host": "example.org",
   1341     "hostname": "example.org",
   1342     "port": "",
   1343     "pathname": "/a/b/c",
   1344     "search": "",
   1345     "hash": ""
   1346   },
   1347   {
   1348     "input": "/a/ /c",
   1349     "base": "http://example.org/foo/bar",
   1350     "href": "http://example.org/a/%20/c",
   1351     "origin": "http://example.org",
   1352     "protocol": "http:",
   1353     "username": "",
   1354     "password": "",
   1355     "host": "example.org",
   1356     "hostname": "example.org",
   1357     "port": "",
   1358     "pathname": "/a/%20/c",
   1359     "search": "",
   1360     "hash": ""
   1361   },
   1362   {
   1363     "input": "/a%2fc",
   1364     "base": "http://example.org/foo/bar",
   1365     "href": "http://example.org/a%2fc",
   1366     "origin": "http://example.org",
   1367     "protocol": "http:",
   1368     "username": "",
   1369     "password": "",
   1370     "host": "example.org",
   1371     "hostname": "example.org",
   1372     "port": "",
   1373     "pathname": "/a%2fc",
   1374     "search": "",
   1375     "hash": ""
   1376   },
   1377   {
   1378     "input": "/a/%2f/c",
   1379     "base": "http://example.org/foo/bar",
   1380     "href": "http://example.org/a/%2f/c",
   1381     "origin": "http://example.org",
   1382     "protocol": "http:",
   1383     "username": "",
   1384     "password": "",
   1385     "host": "example.org",
   1386     "hostname": "example.org",
   1387     "port": "",
   1388     "pathname": "/a/%2f/c",
   1389     "search": "",
   1390     "hash": ""
   1391   },
   1392   {
   1393     "input": "#β",
   1394     "base": "http://example.org/foo/bar",
   1395     "href": "http://example.org/foo/bar#%CE%B2",
   1396     "origin": "http://example.org",
   1397     "protocol": "http:",
   1398     "username": "",
   1399     "password": "",
   1400     "host": "example.org",
   1401     "hostname": "example.org",
   1402     "port": "",
   1403     "pathname": "/foo/bar",
   1404     "search": "",
   1405     "hash": "#%CE%B2"
   1406   },
   1407   {
   1408     "input": "data:text/html,test#test",
   1409     "base": "http://example.org/foo/bar",
   1410     "href": "data:text/html,test#test",
   1411     "origin": "null",
   1412     "protocol": "data:",
   1413     "username": "",
   1414     "password": "",
   1415     "host": "",
   1416     "hostname": "",
   1417     "port": "",
   1418     "pathname": "text/html,test",
   1419     "search": "",
   1420     "hash": "#test"
   1421   },
   1422   {
   1423     "input": "tel:1234567890",
   1424     "base": "http://example.org/foo/bar",
   1425     "href": "tel:1234567890",
   1426     "origin": "null",
   1427     "protocol": "tel:",
   1428     "username": "",
   1429     "password": "",
   1430     "host": "",
   1431     "hostname": "",
   1432     "port": "",
   1433     "pathname": "1234567890",
   1434     "search": "",
   1435     "hash": ""
   1436   },
   1437   "# Based on https://felixfbecker.github.io/whatwg-url-custom-host-repro/",
   1438   {
   1439     "input": "ssh://example.com/foo/bar.git",
   1440     "base": "http://example.org/",
   1441     "href": "ssh://example.com/foo/bar.git",
   1442     "origin": "null",
   1443     "protocol": "ssh:",
   1444     "username": "",
   1445     "password": "",
   1446     "host": "example.com",
   1447     "hostname": "example.com",
   1448     "port": "",
   1449     "pathname": "/foo/bar.git",
   1450     "search": "",
   1451     "hash": ""
   1452   },
   1453   "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/file.html",
   1454   {
   1455     "input": "file:c:\\foo\\bar.html",
   1456     "base": "file:///tmp/mock/path",
   1457     "href": "file:///c:/foo/bar.html",
   1458     "protocol": "file:",
   1459     "username": "",
   1460     "password": "",
   1461     "host": "",
   1462     "hostname": "",
   1463     "port": "",
   1464     "pathname": "/c:/foo/bar.html",
   1465     "search": "",
   1466     "hash": ""
   1467   },
   1468   {
   1469     "input": "  File:c|////foo\\bar.html",
   1470     "base": "file:///tmp/mock/path",
   1471     "href": "file:///c:////foo/bar.html",
   1472     "protocol": "file:",
   1473     "username": "",
   1474     "password": "",
   1475     "host": "",
   1476     "hostname": "",
   1477     "port": "",
   1478     "pathname": "/c:////foo/bar.html",
   1479     "search": "",
   1480     "hash": ""
   1481   },
   1482   {
   1483     "input": "C|/foo/bar",
   1484     "base": "file:///tmp/mock/path",
   1485     "href": "file:///C:/foo/bar",
   1486     "protocol": "file:",
   1487     "username": "",
   1488     "password": "",
   1489     "host": "",
   1490     "hostname": "",
   1491     "port": "",
   1492     "pathname": "/C:/foo/bar",
   1493     "search": "",
   1494     "hash": ""
   1495   },
   1496   {
   1497     "input": "/C|\\foo\\bar",
   1498     "base": "file:///tmp/mock/path",
   1499     "href": "file:///C:/foo/bar",
   1500     "protocol": "file:",
   1501     "username": "",
   1502     "password": "",
   1503     "host": "",
   1504     "hostname": "",
   1505     "port": "",
   1506     "pathname": "/C:/foo/bar",
   1507     "search": "",
   1508     "hash": ""
   1509   },
   1510   {
   1511     "input": "//C|/foo/bar",
   1512     "base": "file:///tmp/mock/path",
   1513     "href": "file:///C:/foo/bar",
   1514     "protocol": "file:",
   1515     "username": "",
   1516     "password": "",
   1517     "host": "",
   1518     "hostname": "",
   1519     "port": "",
   1520     "pathname": "/C:/foo/bar",
   1521     "search": "",
   1522     "hash": ""
   1523   },
   1524   {
   1525     "input": "//server/file",
   1526     "base": "file:///tmp/mock/path",
   1527     "href": "file://server/file",
   1528     "protocol": "file:",
   1529     "username": "",
   1530     "password": "",
   1531     "host": "server",
   1532     "hostname": "server",
   1533     "port": "",
   1534     "pathname": "/file",
   1535     "search": "",
   1536     "hash": ""
   1537   },
   1538   {
   1539     "input": "\\\\server\\file",
   1540     "base": "file:///tmp/mock/path",
   1541     "href": "file://server/file",
   1542     "protocol": "file:",
   1543     "username": "",
   1544     "password": "",
   1545     "host": "server",
   1546     "hostname": "server",
   1547     "port": "",
   1548     "pathname": "/file",
   1549     "search": "",
   1550     "hash": ""
   1551   },
   1552   {
   1553     "input": "/\\server/file",
   1554     "base": "file:///tmp/mock/path",
   1555     "href": "file://server/file",
   1556     "protocol": "file:",
   1557     "username": "",
   1558     "password": "",
   1559     "host": "server",
   1560     "hostname": "server",
   1561     "port": "",
   1562     "pathname": "/file",
   1563     "search": "",
   1564     "hash": ""
   1565   },
   1566   {
   1567     "input": "file:///foo/bar.txt",
   1568     "base": "file:///tmp/mock/path",
   1569     "href": "file:///foo/bar.txt",
   1570     "protocol": "file:",
   1571     "username": "",
   1572     "password": "",
   1573     "host": "",
   1574     "hostname": "",
   1575     "port": "",
   1576     "pathname": "/foo/bar.txt",
   1577     "search": "",
   1578     "hash": ""
   1579   },
   1580   {
   1581     "input": "file:///home/me",
   1582     "base": "file:///tmp/mock/path",
   1583     "href": "file:///home/me",
   1584     "protocol": "file:",
   1585     "username": "",
   1586     "password": "",
   1587     "host": "",
   1588     "hostname": "",
   1589     "port": "",
   1590     "pathname": "/home/me",
   1591     "search": "",
   1592     "hash": ""
   1593   },
   1594   {
   1595     "input": "//",
   1596     "base": "file:///tmp/mock/path",
   1597     "href": "file:///",
   1598     "protocol": "file:",
   1599     "username": "",
   1600     "password": "",
   1601     "host": "",
   1602     "hostname": "",
   1603     "port": "",
   1604     "pathname": "/",
   1605     "search": "",
   1606     "hash": ""
   1607   },
   1608   {
   1609     "input": "///",
   1610     "base": "file:///tmp/mock/path",
   1611     "href": "file:///",
   1612     "protocol": "file:",
   1613     "username": "",
   1614     "password": "",
   1615     "host": "",
   1616     "hostname": "",
   1617     "port": "",
   1618     "pathname": "/",
   1619     "search": "",
   1620     "hash": ""
   1621   },
   1622   {
   1623     "input": "///test",
   1624     "base": "file:///tmp/mock/path",
   1625     "href": "file:///test",
   1626     "protocol": "file:",
   1627     "username": "",
   1628     "password": "",
   1629     "host": "",
   1630     "hostname": "",
   1631     "port": "",
   1632     "pathname": "/test",
   1633     "search": "",
   1634     "hash": ""
   1635   },
   1636   {
   1637     "input": "file://test",
   1638     "base": "file:///tmp/mock/path",
   1639     "href": "file://test/",
   1640     "protocol": "file:",
   1641     "username": "",
   1642     "password": "",
   1643     "host": "test",
   1644     "hostname": "test",
   1645     "port": "",
   1646     "pathname": "/",
   1647     "search": "",
   1648     "hash": ""
   1649   },
   1650   {
   1651     "input": "file://localhost",
   1652     "base": "file:///tmp/mock/path",
   1653     "href": "file:///",
   1654     "protocol": "file:",
   1655     "username": "",
   1656     "password": "",
   1657     "host": "",
   1658     "hostname": "",
   1659     "port": "",
   1660     "pathname": "/",
   1661     "search": "",
   1662     "hash": ""
   1663   },
   1664   {
   1665     "input": "file://localhost/",
   1666     "base": "file:///tmp/mock/path",
   1667     "href": "file:///",
   1668     "protocol": "file:",
   1669     "username": "",
   1670     "password": "",
   1671     "host": "",
   1672     "hostname": "",
   1673     "port": "",
   1674     "pathname": "/",
   1675     "search": "",
   1676     "hash": ""
   1677   },
   1678   {
   1679     "input": "file://localhost/test",
   1680     "base": "file:///tmp/mock/path",
   1681     "href": "file:///test",
   1682     "protocol": "file:",
   1683     "username": "",
   1684     "password": "",
   1685     "host": "",
   1686     "hostname": "",
   1687     "port": "",
   1688     "pathname": "/test",
   1689     "search": "",
   1690     "hash": ""
   1691   },
   1692   {
   1693     "input": "test",
   1694     "base": "file:///tmp/mock/path",
   1695     "href": "file:///tmp/mock/test",
   1696     "protocol": "file:",
   1697     "username": "",
   1698     "password": "",
   1699     "host": "",
   1700     "hostname": "",
   1701     "port": "",
   1702     "pathname": "/tmp/mock/test",
   1703     "search": "",
   1704     "hash": ""
   1705   },
   1706   {
   1707     "input": "file:test",
   1708     "base": "file:///tmp/mock/path",
   1709     "href": "file:///tmp/mock/test",
   1710     "protocol": "file:",
   1711     "username": "",
   1712     "password": "",
   1713     "host": "",
   1714     "hostname": "",
   1715     "port": "",
   1716     "pathname": "/tmp/mock/test",
   1717     "search": "",
   1718     "hash": ""
   1719   },
   1720   "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/path.js",
   1721   {
   1722     "input": "http://example.com/././foo",
   1723     "base": "about:blank",
   1724     "href": "http://example.com/foo",
   1725     "origin": "http://example.com",
   1726     "protocol": "http:",
   1727     "username": "",
   1728     "password": "",
   1729     "host": "example.com",
   1730     "hostname": "example.com",
   1731     "port": "",
   1732     "pathname": "/foo",
   1733     "search": "",
   1734     "hash": ""
   1735   },
   1736   {
   1737     "input": "http://example.com/./.foo",
   1738     "base": "about:blank",
   1739     "href": "http://example.com/.foo",
   1740     "origin": "http://example.com",
   1741     "protocol": "http:",
   1742     "username": "",
   1743     "password": "",
   1744     "host": "example.com",
   1745     "hostname": "example.com",
   1746     "port": "",
   1747     "pathname": "/.foo",
   1748     "search": "",
   1749     "hash": ""
   1750   },
   1751   {
   1752     "input": "http://example.com/foo/.",
   1753     "base": "about:blank",
   1754     "href": "http://example.com/foo/",
   1755     "origin": "http://example.com",
   1756     "protocol": "http:",
   1757     "username": "",
   1758     "password": "",
   1759     "host": "example.com",
   1760     "hostname": "example.com",
   1761     "port": "",
   1762     "pathname": "/foo/",
   1763     "search": "",
   1764     "hash": ""
   1765   },
   1766   {
   1767     "input": "http://example.com/foo/./",
   1768     "base": "about:blank",
   1769     "href": "http://example.com/foo/",
   1770     "origin": "http://example.com",
   1771     "protocol": "http:",
   1772     "username": "",
   1773     "password": "",
   1774     "host": "example.com",
   1775     "hostname": "example.com",
   1776     "port": "",
   1777     "pathname": "/foo/",
   1778     "search": "",
   1779     "hash": ""
   1780   },
   1781   {
   1782     "input": "http://example.com/foo/bar/..",
   1783     "base": "about:blank",
   1784     "href": "http://example.com/foo/",
   1785     "origin": "http://example.com",
   1786     "protocol": "http:",
   1787     "username": "",
   1788     "password": "",
   1789     "host": "example.com",
   1790     "hostname": "example.com",
   1791     "port": "",
   1792     "pathname": "/foo/",
   1793     "search": "",
   1794     "hash": ""
   1795   },
   1796   {
   1797     "input": "http://example.com/foo/bar/../",
   1798     "base": "about:blank",
   1799     "href": "http://example.com/foo/",
   1800     "origin": "http://example.com",
   1801     "protocol": "http:",
   1802     "username": "",
   1803     "password": "",
   1804     "host": "example.com",
   1805     "hostname": "example.com",
   1806     "port": "",
   1807     "pathname": "/foo/",
   1808     "search": "",
   1809     "hash": ""
   1810   },
   1811   {
   1812     "input": "http://example.com/foo/..bar",
   1813     "base": "about:blank",
   1814     "href": "http://example.com/foo/..bar",
   1815     "origin": "http://example.com",
   1816     "protocol": "http:",
   1817     "username": "",
   1818     "password": "",
   1819     "host": "example.com",
   1820     "hostname": "example.com",
   1821     "port": "",
   1822     "pathname": "/foo/..bar",
   1823     "search": "",
   1824     "hash": ""
   1825   },
   1826   {
   1827     "input": "http://example.com/foo/bar/../ton",
   1828     "base": "about:blank",
   1829     "href": "http://example.com/foo/ton",
   1830     "origin": "http://example.com",
   1831     "protocol": "http:",
   1832     "username": "",
   1833     "password": "",
   1834     "host": "example.com",
   1835     "hostname": "example.com",
   1836     "port": "",
   1837     "pathname": "/foo/ton",
   1838     "search": "",
   1839     "hash": ""
   1840   },
   1841   {
   1842     "input": "http://example.com/foo/bar/../ton/../../a",
   1843     "base": "about:blank",
   1844     "href": "http://example.com/a",
   1845     "origin": "http://example.com",
   1846     "protocol": "http:",
   1847     "username": "",
   1848     "password": "",
   1849     "host": "example.com",
   1850     "hostname": "example.com",
   1851     "port": "",
   1852     "pathname": "/a",
   1853     "search": "",
   1854     "hash": ""
   1855   },
   1856   {
   1857     "input": "http://example.com/foo/../../..",
   1858     "base": "about:blank",
   1859     "href": "http://example.com/",
   1860     "origin": "http://example.com",
   1861     "protocol": "http:",
   1862     "username": "",
   1863     "password": "",
   1864     "host": "example.com",
   1865     "hostname": "example.com",
   1866     "port": "",
   1867     "pathname": "/",
   1868     "search": "",
   1869     "hash": ""
   1870   },
   1871   {
   1872     "input": "http://example.com/foo/../../../ton",
   1873     "base": "about:blank",
   1874     "href": "http://example.com/ton",
   1875     "origin": "http://example.com",
   1876     "protocol": "http:",
   1877     "username": "",
   1878     "password": "",
   1879     "host": "example.com",
   1880     "hostname": "example.com",
   1881     "port": "",
   1882     "pathname": "/ton",
   1883     "search": "",
   1884     "hash": ""
   1885   },
   1886   {
   1887     "input": "http://example.com/foo/%2e",
   1888     "base": "about:blank",
   1889     "href": "http://example.com/foo/",
   1890     "origin": "http://example.com",
   1891     "protocol": "http:",
   1892     "username": "",
   1893     "password": "",
   1894     "host": "example.com",
   1895     "hostname": "example.com",
   1896     "port": "",
   1897     "pathname": "/foo/",
   1898     "search": "",
   1899     "hash": ""
   1900   },
   1901   {
   1902     "input": "http://example.com/foo/%2e%2",
   1903     "base": "about:blank",
   1904     "href": "http://example.com/foo/%2e%2",
   1905     "origin": "http://example.com",
   1906     "protocol": "http:",
   1907     "username": "",
   1908     "password": "",
   1909     "host": "example.com",
   1910     "hostname": "example.com",
   1911     "port": "",
   1912     "pathname": "/foo/%2e%2",
   1913     "search": "",
   1914     "hash": ""
   1915   },
   1916   {
   1917     "input": "http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar",
   1918     "base": "about:blank",
   1919     "href": "http://example.com/%2e.bar",
   1920     "origin": "http://example.com",
   1921     "protocol": "http:",
   1922     "username": "",
   1923     "password": "",
   1924     "host": "example.com",
   1925     "hostname": "example.com",
   1926     "port": "",
   1927     "pathname": "/%2e.bar",
   1928     "search": "",
   1929     "hash": ""
   1930   },
   1931   {
   1932     "input": "http://example.com////../..",
   1933     "base": "about:blank",
   1934     "href": "http://example.com//",
   1935     "origin": "http://example.com",
   1936     "protocol": "http:",
   1937     "username": "",
   1938     "password": "",
   1939     "host": "example.com",
   1940     "hostname": "example.com",
   1941     "port": "",
   1942     "pathname": "//",
   1943     "search": "",
   1944     "hash": ""
   1945   },
   1946   {
   1947     "input": "http://example.com/foo/bar//../..",
   1948     "base": "about:blank",
   1949     "href": "http://example.com/foo/",
   1950     "origin": "http://example.com",
   1951     "protocol": "http:",
   1952     "username": "",
   1953     "password": "",
   1954     "host": "example.com",
   1955     "hostname": "example.com",
   1956     "port": "",
   1957     "pathname": "/foo/",
   1958     "search": "",
   1959     "hash": ""
   1960   },
   1961   {
   1962     "input": "http://example.com/foo/bar//..",
   1963     "base": "about:blank",
   1964     "href": "http://example.com/foo/bar/",
   1965     "origin": "http://example.com",
   1966     "protocol": "http:",
   1967     "username": "",
   1968     "password": "",
   1969     "host": "example.com",
   1970     "hostname": "example.com",
   1971     "port": "",
   1972     "pathname": "/foo/bar/",
   1973     "search": "",
   1974     "hash": ""
   1975   },
   1976   {
   1977     "input": "http://example.com/foo",
   1978     "base": "about:blank",
   1979     "href": "http://example.com/foo",
   1980     "origin": "http://example.com",
   1981     "protocol": "http:",
   1982     "username": "",
   1983     "password": "",
   1984     "host": "example.com",
   1985     "hostname": "example.com",
   1986     "port": "",
   1987     "pathname": "/foo",
   1988     "search": "",
   1989     "hash": ""
   1990   },
   1991   {
   1992     "input": "http://example.com/%20foo",
   1993     "base": "about:blank",
   1994     "href": "http://example.com/%20foo",
   1995     "origin": "http://example.com",
   1996     "protocol": "http:",
   1997     "username": "",
   1998     "password": "",
   1999     "host": "example.com",
   2000     "hostname": "example.com",
   2001     "port": "",
   2002     "pathname": "/%20foo",
   2003     "search": "",
   2004     "hash": ""
   2005   },
   2006   {
   2007     "input": "http://example.com/foo%",
   2008     "base": "about:blank",
   2009     "href": "http://example.com/foo%",
   2010     "origin": "http://example.com",
   2011     "protocol": "http:",
   2012     "username": "",
   2013     "password": "",
   2014     "host": "example.com",
   2015     "hostname": "example.com",
   2016     "port": "",
   2017     "pathname": "/foo%",
   2018     "search": "",
   2019     "hash": ""
   2020   },
   2021   {
   2022     "input": "http://example.com/foo%2",
   2023     "base": "about:blank",
   2024     "href": "http://example.com/foo%2",
   2025     "origin": "http://example.com",
   2026     "protocol": "http:",
   2027     "username": "",
   2028     "password": "",
   2029     "host": "example.com",
   2030     "hostname": "example.com",
   2031     "port": "",
   2032     "pathname": "/foo%2",
   2033     "search": "",
   2034     "hash": ""
   2035   },
   2036   {
   2037     "input": "http://example.com/foo%2zbar",
   2038     "base": "about:blank",
   2039     "href": "http://example.com/foo%2zbar",
   2040     "origin": "http://example.com",
   2041     "protocol": "http:",
   2042     "username": "",
   2043     "password": "",
   2044     "host": "example.com",
   2045     "hostname": "example.com",
   2046     "port": "",
   2047     "pathname": "/foo%2zbar",
   2048     "search": "",
   2049     "hash": ""
   2050   },
   2051   {
   2052     "input": "http://example.com/foo%2©zbar",
   2053     "base": "about:blank",
   2054     "href": "http://example.com/foo%2%C3%82%C2%A9zbar",
   2055     "origin": "http://example.com",
   2056     "protocol": "http:",
   2057     "username": "",
   2058     "password": "",
   2059     "host": "example.com",
   2060     "hostname": "example.com",
   2061     "port": "",
   2062     "pathname": "/foo%2%C3%82%C2%A9zbar",
   2063     "search": "",
   2064     "hash": ""
   2065   },
   2066   {
   2067     "input": "http://example.com/foo%41%7a",
   2068     "base": "about:blank",
   2069     "href": "http://example.com/foo%41%7a",
   2070     "origin": "http://example.com",
   2071     "protocol": "http:",
   2072     "username": "",
   2073     "password": "",
   2074     "host": "example.com",
   2075     "hostname": "example.com",
   2076     "port": "",
   2077     "pathname": "/foo%41%7a",
   2078     "search": "",
   2079     "hash": ""
   2080   },
   2081   {
   2082     "input": "http://example.com/foo\t\u0091%91",
   2083     "base": "about:blank",
   2084     "href": "http://example.com/foo%C2%91%91",
   2085     "origin": "http://example.com",
   2086     "protocol": "http:",
   2087     "username": "",
   2088     "password": "",
   2089     "host": "example.com",
   2090     "hostname": "example.com",
   2091     "port": "",
   2092     "pathname": "/foo%C2%91%91",
   2093     "search": "",
   2094     "hash": ""
   2095   },
   2096   {
   2097     "input": "http://example.com/foo%00%51",
   2098     "base": "about:blank",
   2099     "href": "http://example.com/foo%00%51",
   2100     "origin": "http://example.com",
   2101     "protocol": "http:",
   2102     "username": "",
   2103     "password": "",
   2104     "host": "example.com",
   2105     "hostname": "example.com",
   2106     "port": "",
   2107     "pathname": "/foo%00%51",
   2108     "search": "",
   2109     "hash": ""
   2110   },
   2111   {
   2112     "input": "http://example.com/(%28:%3A%29)",
   2113     "base": "about:blank",
   2114     "href": "http://example.com/(%28:%3A%29)",
   2115     "origin": "http://example.com",
   2116     "protocol": "http:",
   2117     "username": "",
   2118     "password": "",
   2119     "host": "example.com",
   2120     "hostname": "example.com",
   2121     "port": "",
   2122     "pathname": "/(%28:%3A%29)",
   2123     "search": "",
   2124     "hash": ""
   2125   },
   2126   {
   2127     "input": "http://example.com/%3A%3a%3C%3c",
   2128     "base": "about:blank",
   2129     "href": "http://example.com/%3A%3a%3C%3c",
   2130     "origin": "http://example.com",
   2131     "protocol": "http:",
   2132     "username": "",
   2133     "password": "",
   2134     "host": "example.com",
   2135     "hostname": "example.com",
   2136     "port": "",
   2137     "pathname": "/%3A%3a%3C%3c",
   2138     "search": "",
   2139     "hash": ""
   2140   },
   2141   {
   2142     "input": "http://example.com/foo\tbar",
   2143     "base": "about:blank",
   2144     "href": "http://example.com/foobar",
   2145     "origin": "http://example.com",
   2146     "protocol": "http:",
   2147     "username": "",
   2148     "password": "",
   2149     "host": "example.com",
   2150     "hostname": "example.com",
   2151     "port": "",
   2152     "pathname": "/foobar",
   2153     "search": "",
   2154     "hash": ""
   2155   },
   2156   {
   2157     "input": "http://example.com\\\\foo\\\\bar",
   2158     "base": "about:blank",
   2159     "href": "http://example.com//foo//bar",
   2160     "origin": "http://example.com",
   2161     "protocol": "http:",
   2162     "username": "",
   2163     "password": "",
   2164     "host": "example.com",
   2165     "hostname": "example.com",
   2166     "port": "",
   2167     "pathname": "//foo//bar",
   2168     "search": "",
   2169     "hash": ""
   2170   },
   2171   {
   2172     "input": "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd",
   2173     "base": "about:blank",
   2174     "href": "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd",
   2175     "origin": "http://example.com",
   2176     "protocol": "http:",
   2177     "username": "",
   2178     "password": "",
   2179     "host": "example.com",
   2180     "hostname": "example.com",
   2181     "port": "",
   2182     "pathname": "/%7Ffp3%3Eju%3Dduvgw%3Dd",
   2183     "search": "",
   2184     "hash": ""
   2185   },
   2186   {
   2187     "input": "http://example.com/@asdf%40",
   2188     "base": "about:blank",
   2189     "href": "http://example.com/@asdf%40",
   2190     "origin": "http://example.com",
   2191     "protocol": "http:",
   2192     "username": "",
   2193     "password": "",
   2194     "host": "example.com",
   2195     "hostname": "example.com",
   2196     "port": "",
   2197     "pathname": "/@asdf%40",
   2198     "search": "",
   2199     "hash": ""
   2200   },
   2201   {
   2202     "input": "http://example.com/你好你好",
   2203     "base": "about:blank",
   2204     "href": "http://example.com/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD",
   2205     "origin": "http://example.com",
   2206     "protocol": "http:",
   2207     "username": "",
   2208     "password": "",
   2209     "host": "example.com",
   2210     "hostname": "example.com",
   2211     "port": "",
   2212     "pathname": "/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD",
   2213     "search": "",
   2214     "hash": ""
   2215   },
   2216   {
   2217     "input": "http://example.com/‥/foo",
   2218     "base": "about:blank",
   2219     "href": "http://example.com/%E2%80%A5/foo",
   2220     "origin": "http://example.com",
   2221     "protocol": "http:",
   2222     "username": "",
   2223     "password": "",
   2224     "host": "example.com",
   2225     "hostname": "example.com",
   2226     "port": "",
   2227     "pathname": "/%E2%80%A5/foo",
   2228     "search": "",
   2229     "hash": ""
   2230   },
   2231   {
   2232     "input": "http://example.com//foo",
   2233     "base": "about:blank",
   2234     "href": "http://example.com/%EF%BB%BF/foo",
   2235     "origin": "http://example.com",
   2236     "protocol": "http:",
   2237     "username": "",
   2238     "password": "",
   2239     "host": "example.com",
   2240     "hostname": "example.com",
   2241     "port": "",
   2242     "pathname": "/%EF%BB%BF/foo",
   2243     "search": "",
   2244     "hash": ""
   2245   },
   2246   {
   2247     "input": "http://example.com/‮/foo/‭/bar",
   2248     "base": "about:blank",
   2249     "href": "http://example.com/%E2%80%AE/foo/%E2%80%AD/bar",
   2250     "origin": "http://example.com",
   2251     "protocol": "http:",
   2252     "username": "",
   2253     "password": "",
   2254     "host": "example.com",
   2255     "hostname": "example.com",
   2256     "port": "",
   2257     "pathname": "/%E2%80%AE/foo/%E2%80%AD/bar",
   2258     "search": "",
   2259     "hash": ""
   2260   },
   2261   "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/relative.js",
   2262   {
   2263     "input": "http://www.google.com/foo?bar=baz#",
   2264     "base": "about:blank",
   2265     "href": "http://www.google.com/foo?bar=baz#",
   2266     "origin": "http://www.google.com",
   2267     "protocol": "http:",
   2268     "username": "",
   2269     "password": "",
   2270     "host": "www.google.com",
   2271     "hostname": "www.google.com",
   2272     "port": "",
   2273     "pathname": "/foo",
   2274     "search": "?bar=baz",
   2275     "hash": ""
   2276   },
   2277   {
   2278     "input": "http://www.google.com/foo?bar=baz# »",
   2279     "base": "about:blank",
   2280     "href": "http://www.google.com/foo?bar=baz#%20%C2%BB",
   2281     "origin": "http://www.google.com",
   2282     "protocol": "http:",
   2283     "username": "",
   2284     "password": "",
   2285     "host": "www.google.com",
   2286     "hostname": "www.google.com",
   2287     "port": "",
   2288     "pathname": "/foo",
   2289     "search": "?bar=baz",
   2290     "hash": "#%20%C2%BB"
   2291   },
   2292   {
   2293     "input": "data:test# »",
   2294     "base": "about:blank",
   2295     "href": "data:test#%20%C2%BB",
   2296     "origin": "null",
   2297     "protocol": "data:",
   2298     "username": "",
   2299     "password": "",
   2300     "host": "",
   2301     "hostname": "",
   2302     "port": "",
   2303     "pathname": "test",
   2304     "search": "",
   2305     "hash": "#%20%C2%BB"
   2306   },
   2307   {
   2308     "input": "http://www.google.com",
   2309     "base": "about:blank",
   2310     "href": "http://www.google.com/",
   2311     "origin": "http://www.google.com",
   2312     "protocol": "http:",
   2313     "username": "",
   2314     "password": "",
   2315     "host": "www.google.com",
   2316     "hostname": "www.google.com",
   2317     "port": "",
   2318     "pathname": "/",
   2319     "search": "",
   2320     "hash": ""
   2321   },
   2322   {
   2323     "input": "http://192.0x00A80001",
   2324     "base": "about:blank",
   2325     "href": "http://192.168.0.1/",
   2326     "origin": "http://192.168.0.1",
   2327     "protocol": "http:",
   2328     "username": "",
   2329     "password": "",
   2330     "host": "192.168.0.1",
   2331     "hostname": "192.168.0.1",
   2332     "port": "",
   2333     "pathname": "/",
   2334     "search": "",
   2335     "hash": ""
   2336   },
   2337   {
   2338     "input": "http://www/foo%2Ehtml",
   2339     "base": "about:blank",
   2340     "href": "http://www/foo%2Ehtml",
   2341     "origin": "http://www",
   2342     "protocol": "http:",
   2343     "username": "",
   2344     "password": "",
   2345     "host": "www",
   2346     "hostname": "www",
   2347     "port": "",
   2348     "pathname": "/foo%2Ehtml",
   2349     "search": "",
   2350     "hash": ""
   2351   },
   2352   {
   2353     "input": "http://www/foo/%2E/html",
   2354     "base": "about:blank",
   2355     "href": "http://www/foo/html",
   2356     "origin": "http://www",
   2357     "protocol": "http:",
   2358     "username": "",
   2359     "password": "",
   2360     "host": "www",
   2361     "hostname": "www",
   2362     "port": "",
   2363     "pathname": "/foo/html",
   2364     "search": "",
   2365     "hash": ""
   2366   },
   2367   {
   2368     "input": "http://user:pass@/",
   2369     "base": "about:blank",
   2370     "failure": true
   2371   },
   2372   {
   2373     "input": "http://%25DOMAIN:foobar@foodomain.com/",
   2374     "base": "about:blank",
   2375     "href": "http://%25DOMAIN:foobar@foodomain.com/",
   2376     "origin": "http://foodomain.com",
   2377     "protocol": "http:",
   2378     "username": "%25DOMAIN",
   2379     "password": "foobar",
   2380     "host": "foodomain.com",
   2381     "hostname": "foodomain.com",
   2382     "port": "",
   2383     "pathname": "/",
   2384     "search": "",
   2385     "hash": ""
   2386   },
   2387   {
   2388     "input": "http:\\\\www.google.com\\foo",
   2389     "base": "about:blank",
   2390     "href": "http://www.google.com/foo",
   2391     "origin": "http://www.google.com",
   2392     "protocol": "http:",
   2393     "username": "",
   2394     "password": "",
   2395     "host": "www.google.com",
   2396     "hostname": "www.google.com",
   2397     "port": "",
   2398     "pathname": "/foo",
   2399     "search": "",
   2400     "hash": ""
   2401   },
   2402   {
   2403     "input": "http://foo:80/",
   2404     "base": "about:blank",
   2405     "href": "http://foo/",
   2406     "origin": "http://foo",
   2407     "protocol": "http:",
   2408     "username": "",
   2409     "password": "",
   2410     "host": "foo",
   2411     "hostname": "foo",
   2412     "port": "",
   2413     "pathname": "/",
   2414     "search": "",
   2415     "hash": ""
   2416   },
   2417   {
   2418     "input": "http://foo:81/",
   2419     "base": "about:blank",
   2420     "href": "http://foo:81/",
   2421     "origin": "http://foo:81",
   2422     "protocol": "http:",
   2423     "username": "",
   2424     "password": "",
   2425     "host": "foo:81",
   2426     "hostname": "foo",
   2427     "port": "81",
   2428     "pathname": "/",
   2429     "search": "",
   2430     "hash": ""
   2431   },
   2432   {
   2433     "input": "httpa://foo:80/",
   2434     "base": "about:blank",
   2435     "href": "httpa://foo:80/",
   2436     "origin": "null",
   2437     "protocol": "httpa:",
   2438     "username": "",
   2439     "password": "",
   2440     "host": "foo:80",
   2441     "hostname": "foo",
   2442     "port": "80",
   2443     "pathname": "/",
   2444     "search": "",
   2445     "hash": ""
   2446   },
   2447   {
   2448     "input": "http://foo:-80/",
   2449     "base": "about:blank",
   2450     "failure": true
   2451   },
   2452   {
   2453     "input": "https://foo:443/",
   2454     "base": "about:blank",
   2455     "href": "https://foo/",
   2456     "origin": "https://foo",
   2457     "protocol": "https:",
   2458     "username": "",
   2459     "password": "",
   2460     "host": "foo",
   2461     "hostname": "foo",
   2462     "port": "",
   2463     "pathname": "/",
   2464     "search": "",
   2465     "hash": ""
   2466   },
   2467   {
   2468     "input": "https://foo:80/",
   2469     "base": "about:blank",
   2470     "href": "https://foo:80/",
   2471     "origin": "https://foo:80",
   2472     "protocol": "https:",
   2473     "username": "",
   2474     "password": "",
   2475     "host": "foo:80",
   2476     "hostname": "foo",
   2477     "port": "80",
   2478     "pathname": "/",
   2479     "search": "",
   2480     "hash": ""
   2481   },
   2482   {
   2483     "input": "ftp://foo:21/",
   2484     "base": "about:blank",
   2485     "href": "ftp://foo/",
   2486     "origin": "ftp://foo",
   2487     "protocol": "ftp:",
   2488     "username": "",
   2489     "password": "",
   2490     "host": "foo",
   2491     "hostname": "foo",
   2492     "port": "",
   2493     "pathname": "/",
   2494     "search": "",
   2495     "hash": ""
   2496   },
   2497   {
   2498     "input": "ftp://foo:80/",
   2499     "base": "about:blank",
   2500     "href": "ftp://foo:80/",
   2501     "origin": "ftp://foo:80",
   2502     "protocol": "ftp:",
   2503     "username": "",
   2504     "password": "",
   2505     "host": "foo:80",
   2506     "hostname": "foo",
   2507     "port": "80",
   2508     "pathname": "/",
   2509     "search": "",
   2510     "hash": ""
   2511   },
   2512   {
   2513     "input": "gopher://foo:70/",
   2514     "base": "about:blank",
   2515     "href": "gopher://foo:70/",
   2516     "origin": "null",
   2517     "protocol": "gopher:",
   2518     "username": "",
   2519     "password": "",
   2520     "host": "foo:70",
   2521     "hostname": "foo",
   2522     "port": "70",
   2523     "pathname": "/",
   2524     "search": "",
   2525     "hash": ""
   2526   },
   2527   {
   2528     "input": "gopher://foo:443/",
   2529     "base": "about:blank",
   2530     "href": "gopher://foo:443/",
   2531     "origin": "null",
   2532     "protocol": "gopher:",
   2533     "username": "",
   2534     "password": "",
   2535     "host": "foo:443",
   2536     "hostname": "foo",
   2537     "port": "443",
   2538     "pathname": "/",
   2539     "search": "",
   2540     "hash": ""
   2541   },
   2542   {
   2543     "input": "ws://foo:80/",
   2544     "base": "about:blank",
   2545     "href": "ws://foo/",
   2546     "origin": "ws://foo",
   2547     "protocol": "ws:",
   2548     "username": "",
   2549     "password": "",
   2550     "host": "foo",
   2551     "hostname": "foo",
   2552     "port": "",
   2553     "pathname": "/",
   2554     "search": "",
   2555     "hash": ""
   2556   },
   2557   {
   2558     "input": "ws://foo:81/",
   2559     "base": "about:blank",
   2560     "href": "ws://foo:81/",
   2561     "origin": "ws://foo:81",
   2562     "protocol": "ws:",
   2563     "username": "",
   2564     "password": "",
   2565     "host": "foo:81",
   2566     "hostname": "foo",
   2567     "port": "81",
   2568     "pathname": "/",
   2569     "search": "",
   2570     "hash": ""
   2571   },
   2572   {
   2573     "input": "ws://foo:443/",
   2574     "base": "about:blank",
   2575     "href": "ws://foo:443/",
   2576     "origin": "ws://foo:443",
   2577     "protocol": "ws:",
   2578     "username": "",
   2579     "password": "",
   2580     "host": "foo:443",
   2581     "hostname": "foo",
   2582     "port": "443",
   2583     "pathname": "/",
   2584     "search": "",
   2585     "hash": ""
   2586   },
   2587   {
   2588     "input": "ws://foo:815/",
   2589     "base": "about:blank",
   2590     "href": "ws://foo:815/",
   2591     "origin": "ws://foo:815",
   2592     "protocol": "ws:",
   2593     "username": "",
   2594     "password": "",
   2595     "host": "foo:815",
   2596     "hostname": "foo",
   2597     "port": "815",
   2598     "pathname": "/",
   2599     "search": "",
   2600     "hash": ""
   2601   },
   2602   {
   2603     "input": "wss://foo:80/",
   2604     "base": "about:blank",
   2605     "href": "wss://foo:80/",
   2606     "origin": "wss://foo:80",
   2607     "protocol": "wss:",
   2608     "username": "",
   2609     "password": "",
   2610     "host": "foo:80",
   2611     "hostname": "foo",
   2612     "port": "80",
   2613     "pathname": "/",
   2614     "search": "",
   2615     "hash": ""
   2616   },
   2617   {
   2618     "input": "wss://foo:81/",
   2619     "base": "about:blank",
   2620     "href": "wss://foo:81/",
   2621     "origin": "wss://foo:81",
   2622     "protocol": "wss:",
   2623     "username": "",
   2624     "password": "",
   2625     "host": "foo:81",
   2626     "hostname": "foo",
   2627     "port": "81",
   2628     "pathname": "/",
   2629     "search": "",
   2630     "hash": ""
   2631   },
   2632   {
   2633     "input": "wss://foo:443/",
   2634     "base": "about:blank",
   2635     "href": "wss://foo/",
   2636     "origin": "wss://foo",
   2637     "protocol": "wss:",
   2638     "username": "",
   2639     "password": "",
   2640     "host": "foo",
   2641     "hostname": "foo",
   2642     "port": "",
   2643     "pathname": "/",
   2644     "search": "",
   2645     "hash": ""
   2646   },
   2647   {
   2648     "input": "wss://foo:815/",
   2649     "base": "about:blank",
   2650     "href": "wss://foo:815/",
   2651     "origin": "wss://foo:815",
   2652     "protocol": "wss:",
   2653     "username": "",
   2654     "password": "",
   2655     "host": "foo:815",
   2656     "hostname": "foo",
   2657     "port": "815",
   2658     "pathname": "/",
   2659     "search": "",
   2660     "hash": ""
   2661   },
   2662   {
   2663     "input": "http:/example.com/",
   2664     "base": "about:blank",
   2665     "href": "http://example.com/",
   2666     "origin": "http://example.com",
   2667     "protocol": "http:",
   2668     "username": "",
   2669     "password": "",
   2670     "host": "example.com",
   2671     "hostname": "example.com",
   2672     "port": "",
   2673     "pathname": "/",
   2674     "search": "",
   2675     "hash": ""
   2676   },
   2677   {
   2678     "input": "ftp:/example.com/",
   2679     "base": "about:blank",
   2680     "href": "ftp://example.com/",
   2681     "origin": "ftp://example.com",
   2682     "protocol": "ftp:",
   2683     "username": "",
   2684     "password": "",
   2685     "host": "example.com",
   2686     "hostname": "example.com",
   2687     "port": "",
   2688     "pathname": "/",
   2689     "search": "",
   2690     "hash": ""
   2691   },
   2692   {
   2693     "input": "https:/example.com/",
   2694     "base": "about:blank",
   2695     "href": "https://example.com/",
   2696     "origin": "https://example.com",
   2697     "protocol": "https:",
   2698     "username": "",
   2699     "password": "",
   2700     "host": "example.com",
   2701     "hostname": "example.com",
   2702     "port": "",
   2703     "pathname": "/",
   2704     "search": "",
   2705     "hash": ""
   2706   },
   2707   {
   2708     "input": "madeupscheme:/example.com/",
   2709     "base": "about:blank",
   2710     "href": "madeupscheme:/example.com/",
   2711     "origin": "null",
   2712     "protocol": "madeupscheme:",
   2713     "username": "",
   2714     "password": "",
   2715     "host": "",
   2716     "hostname": "",
   2717     "port": "",
   2718     "pathname": "/example.com/",
   2719     "search": "",
   2720     "hash": ""
   2721   },
   2722   {
   2723     "input": "file:/example.com/",
   2724     "base": "about:blank",
   2725     "href": "file:///example.com/",
   2726     "protocol": "file:",
   2727     "username": "",
   2728     "password": "",
   2729     "host": "",
   2730     "hostname": "",
   2731     "port": "",
   2732     "pathname": "/example.com/",
   2733     "search": "",
   2734     "hash": ""
   2735   },
   2736   {
   2737     "input": "ftps:/example.com/",
   2738     "base": "about:blank",
   2739     "href": "ftps:/example.com/",
   2740     "origin": "null",
   2741     "protocol": "ftps:",
   2742     "username": "",
   2743     "password": "",
   2744     "host": "",
   2745     "hostname": "",
   2746     "port": "",
   2747     "pathname": "/example.com/",
   2748     "search": "",
   2749     "hash": ""
   2750   },
   2751   {
   2752     "input": "gopher:/example.com/",
   2753     "base": "about:blank",
   2754     "href": "gopher:/example.com/",
   2755     "origin": "null",
   2756     "protocol": "gopher:",
   2757     "username": "",
   2758     "password": "",
   2759     "host": "",
   2760     "hostname": "",
   2761     "port": "",
   2762     "pathname": "/example.com/",
   2763     "search": "",
   2764     "hash": ""
   2765   },
   2766   {
   2767     "input": "ws:/example.com/",
   2768     "base": "about:blank",
   2769     "href": "ws://example.com/",
   2770     "origin": "ws://example.com",
   2771     "protocol": "ws:",
   2772     "username": "",
   2773     "password": "",
   2774     "host": "example.com",
   2775     "hostname": "example.com",
   2776     "port": "",
   2777     "pathname": "/",
   2778     "search": "",
   2779     "hash": ""
   2780   },
   2781   {
   2782     "input": "wss:/example.com/",
   2783     "base": "about:blank",
   2784     "href": "wss://example.com/",
   2785     "origin": "wss://example.com",
   2786     "protocol": "wss:",
   2787     "username": "",
   2788     "password": "",
   2789     "host": "example.com",
   2790     "hostname": "example.com",
   2791     "port": "",
   2792     "pathname": "/",
   2793     "search": "",
   2794     "hash": ""
   2795   },
   2796   {
   2797     "input": "data:/example.com/",
   2798     "base": "about:blank",
   2799     "href": "data:/example.com/",
   2800     "origin": "null",
   2801     "protocol": "data:",
   2802     "username": "",
   2803     "password": "",
   2804     "host": "",
   2805     "hostname": "",
   2806     "port": "",
   2807     "pathname": "/example.com/",
   2808     "search": "",
   2809     "hash": ""
   2810   },
   2811   {
   2812     "input": "javascript:/example.com/",
   2813     "base": "about:blank",
   2814     "href": "javascript:/example.com/",
   2815     "origin": "null",
   2816     "protocol": "javascript:",
   2817     "username": "",
   2818     "password": "",
   2819     "host": "",
   2820     "hostname": "",
   2821     "port": "",
   2822     "pathname": "/example.com/",
   2823     "search": "",
   2824     "hash": ""
   2825   },
   2826   {
   2827     "input": "mailto:/example.com/",
   2828     "base": "about:blank",
   2829     "href": "mailto:/example.com/",
   2830     "origin": "null",
   2831     "protocol": "mailto:",
   2832     "username": "",
   2833     "password": "",
   2834     "host": "",
   2835     "hostname": "",
   2836     "port": "",
   2837     "pathname": "/example.com/",
   2838     "search": "",
   2839     "hash": ""
   2840   },
   2841   {
   2842     "input": "http:example.com/",
   2843     "base": "about:blank",
   2844     "href": "http://example.com/",
   2845     "origin": "http://example.com",
   2846     "protocol": "http:",
   2847     "username": "",
   2848     "password": "",
   2849     "host": "example.com",
   2850     "hostname": "example.com",
   2851     "port": "",
   2852     "pathname": "/",
   2853     "search": "",
   2854     "hash": ""
   2855   },
   2856   {
   2857     "input": "ftp:example.com/",
   2858     "base": "about:blank",
   2859     "href": "ftp://example.com/",
   2860     "origin": "ftp://example.com",
   2861     "protocol": "ftp:",
   2862     "username": "",
   2863     "password": "",
   2864     "host": "example.com",
   2865     "hostname": "example.com",
   2866     "port": "",
   2867     "pathname": "/",
   2868     "search": "",
   2869     "hash": ""
   2870   },
   2871   {
   2872     "input": "https:example.com/",
   2873     "base": "about:blank",
   2874     "href": "https://example.com/",
   2875     "origin": "https://example.com",
   2876     "protocol": "https:",
   2877     "username": "",
   2878     "password": "",
   2879     "host": "example.com",
   2880     "hostname": "example.com",
   2881     "port": "",
   2882     "pathname": "/",
   2883     "search": "",
   2884     "hash": ""
   2885   },
   2886   {
   2887     "input": "madeupscheme:example.com/",
   2888     "base": "about:blank",
   2889     "href": "madeupscheme:example.com/",
   2890     "origin": "null",
   2891     "protocol": "madeupscheme:",
   2892     "username": "",
   2893     "password": "",
   2894     "host": "",
   2895     "hostname": "",
   2896     "port": "",
   2897     "pathname": "example.com/",
   2898     "search": "",
   2899     "hash": ""
   2900   },
   2901   {
   2902     "input": "ftps:example.com/",
   2903     "base": "about:blank",
   2904     "href": "ftps:example.com/",
   2905     "origin": "null",
   2906     "protocol": "ftps:",
   2907     "username": "",
   2908     "password": "",
   2909     "host": "",
   2910     "hostname": "",
   2911     "port": "",
   2912     "pathname": "example.com/",
   2913     "search": "",
   2914     "hash": ""
   2915   },
   2916   {
   2917     "input": "gopher:example.com/",
   2918     "base": "about:blank",
   2919     "href": "gopher:example.com/",
   2920     "origin": "null",
   2921     "protocol": "gopher:",
   2922     "username": "",
   2923     "password": "",
   2924     "host": "",
   2925     "hostname": "",
   2926     "port": "",
   2927     "pathname": "example.com/",
   2928     "search": "",
   2929     "hash": ""
   2930   },
   2931   {
   2932     "input": "ws:example.com/",
   2933     "base": "about:blank",
   2934     "href": "ws://example.com/",
   2935     "origin": "ws://example.com",
   2936     "protocol": "ws:",
   2937     "username": "",
   2938     "password": "",
   2939     "host": "example.com",
   2940     "hostname": "example.com",
   2941     "port": "",
   2942     "pathname": "/",
   2943     "search": "",
   2944     "hash": ""
   2945   },
   2946   {
   2947     "input": "wss:example.com/",
   2948     "base": "about:blank",
   2949     "href": "wss://example.com/",
   2950     "origin": "wss://example.com",
   2951     "protocol": "wss:",
   2952     "username": "",
   2953     "password": "",
   2954     "host": "example.com",
   2955     "hostname": "example.com",
   2956     "port": "",
   2957     "pathname": "/",
   2958     "search": "",
   2959     "hash": ""
   2960   },
   2961   {
   2962     "input": "data:example.com/",
   2963     "base": "about:blank",
   2964     "href": "data:example.com/",
   2965     "origin": "null",
   2966     "protocol": "data:",
   2967     "username": "",
   2968     "password": "",
   2969     "host": "",
   2970     "hostname": "",
   2971     "port": "",
   2972     "pathname": "example.com/",
   2973     "search": "",
   2974     "hash": ""
   2975   },
   2976   {
   2977     "input": "javascript:example.com/",
   2978     "base": "about:blank",
   2979     "href": "javascript:example.com/",
   2980     "origin": "null",
   2981     "protocol": "javascript:",
   2982     "username": "",
   2983     "password": "",
   2984     "host": "",
   2985     "hostname": "",
   2986     "port": "",
   2987     "pathname": "example.com/",
   2988     "search": "",
   2989     "hash": ""
   2990   },
   2991   {
   2992     "input": "mailto:example.com/",
   2993     "base": "about:blank",
   2994     "href": "mailto:example.com/",
   2995     "origin": "null",
   2996     "protocol": "mailto:",
   2997     "username": "",
   2998     "password": "",
   2999     "host": "",
   3000     "hostname": "",
   3001     "port": "",
   3002     "pathname": "example.com/",
   3003     "search": "",
   3004     "hash": ""
   3005   },
   3006   "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/segments-userinfo-vs-host.html",
   3007   {
   3008     "input": "http:@www.example.com",
   3009     "base": "about:blank",
   3010     "href": "http://www.example.com/",
   3011     "origin": "http://www.example.com",
   3012     "protocol": "http:",
   3013     "username": "",
   3014     "password": "",
   3015     "host": "www.example.com",
   3016     "hostname": "www.example.com",
   3017     "port": "",
   3018     "pathname": "/",
   3019     "search": "",
   3020     "hash": ""
   3021   },
   3022   {
   3023     "input": "http:/@www.example.com",
   3024     "base": "about:blank",
   3025     "href": "http://www.example.com/",
   3026     "origin": "http://www.example.com",
   3027     "protocol": "http:",
   3028     "username": "",
   3029     "password": "",
   3030     "host": "www.example.com",
   3031     "hostname": "www.example.com",
   3032     "port": "",
   3033     "pathname": "/",
   3034     "search": "",
   3035     "hash": ""
   3036   },
   3037   {
   3038     "input": "http://@www.example.com",
   3039     "base": "about:blank",
   3040     "href": "http://www.example.com/",
   3041     "origin": "http://www.example.com",
   3042     "protocol": "http:",
   3043     "username": "",
   3044     "password": "",
   3045     "host": "www.example.com",
   3046     "hostname": "www.example.com",
   3047     "port": "",
   3048     "pathname": "/",
   3049     "search": "",
   3050     "hash": ""
   3051   },
   3052   {
   3053     "input": "http:a:b@www.example.com",
   3054     "base": "about:blank",
   3055     "href": "http://a:b@www.example.com/",
   3056     "origin": "http://www.example.com",
   3057     "protocol": "http:",
   3058     "username": "a",
   3059     "password": "b",
   3060     "host": "www.example.com",
   3061     "hostname": "www.example.com",
   3062     "port": "",
   3063     "pathname": "/",
   3064     "search": "",
   3065     "hash": ""
   3066   },
   3067   {
   3068     "input": "http:/a:b@www.example.com",
   3069     "base": "about:blank",
   3070     "href": "http://a:b@www.example.com/",
   3071     "origin": "http://www.example.com",
   3072     "protocol": "http:",
   3073     "username": "a",
   3074     "password": "b",
   3075     "host": "www.example.com",
   3076     "hostname": "www.example.com",
   3077     "port": "",
   3078     "pathname": "/",
   3079     "search": "",
   3080     "hash": ""
   3081   },
   3082   {
   3083     "input": "http://a:b@www.example.com",
   3084     "base": "about:blank",
   3085     "href": "http://a:b@www.example.com/",
   3086     "origin": "http://www.example.com",
   3087     "protocol": "http:",
   3088     "username": "a",
   3089     "password": "b",
   3090     "host": "www.example.com",
   3091     "hostname": "www.example.com",
   3092     "port": "",
   3093     "pathname": "/",
   3094     "search": "",
   3095     "hash": ""
   3096   },
   3097   {
   3098     "input": "http://@pple.com",
   3099     "base": "about:blank",
   3100     "href": "http://pple.com/",
   3101     "origin": "http://pple.com",
   3102     "protocol": "http:",
   3103     "username": "",
   3104     "password": "",
   3105     "host": "pple.com",
   3106     "hostname": "pple.com",
   3107     "port": "",
   3108     "pathname": "/",
   3109     "search": "",
   3110     "hash": ""
   3111   },
   3112   {
   3113     "input": "http::b@www.example.com",
   3114     "base": "about:blank",
   3115     "href": "http://:b@www.example.com/",
   3116     "origin": "http://www.example.com",
   3117     "protocol": "http:",
   3118     "username": "",
   3119     "password": "b",
   3120     "host": "www.example.com",
   3121     "hostname": "www.example.com",
   3122     "port": "",
   3123     "pathname": "/",
   3124     "search": "",
   3125     "hash": ""
   3126   },
   3127   {
   3128     "input": "http:/:b@www.example.com",
   3129     "base": "about:blank",
   3130     "href": "http://:b@www.example.com/",
   3131     "origin": "http://www.example.com",
   3132     "protocol": "http:",
   3133     "username": "",
   3134     "password": "b",
   3135     "host": "www.example.com",
   3136     "hostname": "www.example.com",
   3137     "port": "",
   3138     "pathname": "/",
   3139     "search": "",
   3140     "hash": ""
   3141   },
   3142   {
   3143     "input": "http://:b@www.example.com",
   3144     "base": "about:blank",
   3145     "href": "http://:b@www.example.com/",
   3146     "origin": "http://www.example.com",
   3147     "protocol": "http:",
   3148     "username": "",
   3149     "password": "b",
   3150     "host": "www.example.com",
   3151     "hostname": "www.example.com",
   3152     "port": "",
   3153     "pathname": "/",
   3154     "search": "",
   3155     "hash": ""
   3156   },
   3157   {
   3158     "input": "http:/:@/www.example.com",
   3159     "base": "about:blank",
   3160     "failure": true
   3161   },
   3162   {
   3163     "input": "http://user@/www.example.com",
   3164     "base": "about:blank",
   3165     "failure": true
   3166   },
   3167   {
   3168     "input": "http:@/www.example.com",
   3169     "base": "about:blank",
   3170     "failure": true
   3171   },
   3172   {
   3173     "input": "http:/@/www.example.com",
   3174     "base": "about:blank",
   3175     "failure": true
   3176   },
   3177   {
   3178     "input": "http://@/www.example.com",
   3179     "base": "about:blank",
   3180     "failure": true
   3181   },
   3182   {
   3183     "input": "https:@/www.example.com",
   3184     "base": "about:blank",
   3185     "failure": true
   3186   },
   3187   {
   3188     "input": "http:a:b@/www.example.com",
   3189     "base": "about:blank",
   3190     "failure": true
   3191   },
   3192   {
   3193     "input": "http:/a:b@/www.example.com",
   3194     "base": "about:blank",
   3195     "failure": true
   3196   },
   3197   {
   3198     "input": "http://a:b@/www.example.com",
   3199     "base": "about:blank",
   3200     "failure": true
   3201   },
   3202   {
   3203     "input": "http::@/www.example.com",
   3204     "base": "about:blank",
   3205     "failure": true
   3206   },
   3207   {
   3208     "input": "http:a:@www.example.com",
   3209     "base": "about:blank",
   3210     "href": "http://a@www.example.com/",
   3211     "origin": "http://www.example.com",
   3212     "protocol": "http:",
   3213     "username": "a",
   3214     "password": "",
   3215     "host": "www.example.com",
   3216     "hostname": "www.example.com",
   3217     "port": "",
   3218     "pathname": "/",
   3219     "search": "",
   3220     "hash": ""
   3221   },
   3222   {
   3223     "input": "http:/a:@www.example.com",
   3224     "base": "about:blank",
   3225     "href": "http://a@www.example.com/",
   3226     "origin": "http://www.example.com",
   3227     "protocol": "http:",
   3228     "username": "a",
   3229     "password": "",
   3230     "host": "www.example.com",
   3231     "hostname": "www.example.com",
   3232     "port": "",
   3233     "pathname": "/",
   3234     "search": "",
   3235     "hash": ""
   3236   },
   3237   {
   3238     "input": "http://a:@www.example.com",
   3239     "base": "about:blank",
   3240     "href": "http://a@www.example.com/",
   3241     "origin": "http://www.example.com",
   3242     "protocol": "http:",
   3243     "username": "a",
   3244     "password": "",
   3245     "host": "www.example.com",
   3246     "hostname": "www.example.com",
   3247     "port": "",
   3248     "pathname": "/",
   3249     "search": "",
   3250     "hash": ""
   3251   },
   3252   {
   3253     "input": "http://www.@pple.com",
   3254     "base": "about:blank",
   3255     "href": "http://www.@pple.com/",
   3256     "origin": "http://pple.com",
   3257     "protocol": "http:",
   3258     "username": "www.",
   3259     "password": "",
   3260     "host": "pple.com",
   3261     "hostname": "pple.com",
   3262     "port": "",
   3263     "pathname": "/",
   3264     "search": "",
   3265     "hash": ""
   3266   },
   3267   {
   3268     "input": "http:@:www.example.com",
   3269     "base": "about:blank",
   3270     "failure": true
   3271   },
   3272   {
   3273     "input": "http:/@:www.example.com",
   3274     "base": "about:blank",
   3275     "failure": true
   3276   },
   3277   {
   3278     "input": "http://@:www.example.com",
   3279     "base": "about:blank",
   3280     "failure": true
   3281   },
   3282   {
   3283     "input": "http://:@www.example.com",
   3284     "base": "about:blank",
   3285     "href": "http://www.example.com/",
   3286     "origin": "http://www.example.com",
   3287     "protocol": "http:",
   3288     "username": "",
   3289     "password": "",
   3290     "host": "www.example.com",
   3291     "hostname": "www.example.com",
   3292     "port": "",
   3293     "pathname": "/",
   3294     "search": "",
   3295     "hash": ""
   3296   },
   3297   "# Others",
   3298   {
   3299     "input": "/",
   3300     "base": "http://www.example.com/test",
   3301     "href": "http://www.example.com/",
   3302     "origin": "http://www.example.com",
   3303     "protocol": "http:",
   3304     "username": "",
   3305     "password": "",
   3306     "host": "www.example.com",
   3307     "hostname": "www.example.com",
   3308     "port": "",
   3309     "pathname": "/",
   3310     "search": "",
   3311     "hash": ""
   3312   },
   3313   {
   3314     "input": "/test.txt",
   3315     "base": "http://www.example.com/test",
   3316     "href": "http://www.example.com/test.txt",
   3317     "origin": "http://www.example.com",
   3318     "protocol": "http:",
   3319     "username": "",
   3320     "password": "",
   3321     "host": "www.example.com",
   3322     "hostname": "www.example.com",
   3323     "port": "",
   3324     "pathname": "/test.txt",
   3325     "search": "",
   3326     "hash": ""
   3327   },
   3328   {
   3329     "input": ".",
   3330     "base": "http://www.example.com/test",
   3331     "href": "http://www.example.com/",
   3332     "origin": "http://www.example.com",
   3333     "protocol": "http:",
   3334     "username": "",
   3335     "password": "",
   3336     "host": "www.example.com",
   3337     "hostname": "www.example.com",
   3338     "port": "",
   3339     "pathname": "/",
   3340     "search": "",
   3341     "hash": ""
   3342   },
   3343   {
   3344     "input": "..",
   3345     "base": "http://www.example.com/test",
   3346     "href": "http://www.example.com/",
   3347     "origin": "http://www.example.com",
   3348     "protocol": "http:",
   3349     "username": "",
   3350     "password": "",
   3351     "host": "www.example.com",
   3352     "hostname": "www.example.com",
   3353     "port": "",
   3354     "pathname": "/",
   3355     "search": "",
   3356     "hash": ""
   3357   },
   3358   {
   3359     "input": "test.txt",
   3360     "base": "http://www.example.com/test",
   3361     "href": "http://www.example.com/test.txt",
   3362     "origin": "http://www.example.com",
   3363     "protocol": "http:",
   3364     "username": "",
   3365     "password": "",
   3366     "host": "www.example.com",
   3367     "hostname": "www.example.com",
   3368     "port": "",
   3369     "pathname": "/test.txt",
   3370     "search": "",
   3371     "hash": ""
   3372   },
   3373   {
   3374     "input": "./test.txt",
   3375     "base": "http://www.example.com/test",
   3376     "href": "http://www.example.com/test.txt",
   3377     "origin": "http://www.example.com",
   3378     "protocol": "http:",
   3379     "username": "",
   3380     "password": "",
   3381     "host": "www.example.com",
   3382     "hostname": "www.example.com",
   3383     "port": "",
   3384     "pathname": "/test.txt",
   3385     "search": "",
   3386     "hash": ""
   3387   },
   3388   {
   3389     "input": "../test.txt",
   3390     "base": "http://www.example.com/test",
   3391     "href": "http://www.example.com/test.txt",
   3392     "origin": "http://www.example.com",
   3393     "protocol": "http:",
   3394     "username": "",
   3395     "password": "",
   3396     "host": "www.example.com",
   3397     "hostname": "www.example.com",
   3398     "port": "",
   3399     "pathname": "/test.txt",
   3400     "search": "",
   3401     "hash": ""
   3402   },
   3403   {
   3404     "input": "../aaa/test.txt",
   3405     "base": "http://www.example.com/test",
   3406     "href": "http://www.example.com/aaa/test.txt",
   3407     "origin": "http://www.example.com",
   3408     "protocol": "http:",
   3409     "username": "",
   3410     "password": "",
   3411     "host": "www.example.com",
   3412     "hostname": "www.example.com",
   3413     "port": "",
   3414     "pathname": "/aaa/test.txt",
   3415     "search": "",
   3416     "hash": ""
   3417   },
   3418   {
   3419     "input": "../../test.txt",
   3420     "base": "http://www.example.com/test",
   3421     "href": "http://www.example.com/test.txt",
   3422     "origin": "http://www.example.com",
   3423     "protocol": "http:",
   3424     "username": "",
   3425     "password": "",
   3426     "host": "www.example.com",
   3427     "hostname": "www.example.com",
   3428     "port": "",
   3429     "pathname": "/test.txt",
   3430     "search": "",
   3431     "hash": ""
   3432   },
   3433   {
   3434     "input": "中/test.txt",
   3435     "base": "http://www.example.com/test",
   3436     "href": "http://www.example.com/%E4%B8%AD/test.txt",
   3437     "origin": "http://www.example.com",
   3438     "protocol": "http:",
   3439     "username": "",
   3440     "password": "",
   3441     "host": "www.example.com",
   3442     "hostname": "www.example.com",
   3443     "port": "",
   3444     "pathname": "/%E4%B8%AD/test.txt",
   3445     "search": "",
   3446     "hash": ""
   3447   },
   3448   {
   3449     "input": "http://www.example2.com",
   3450     "base": "http://www.example.com/test",
   3451     "href": "http://www.example2.com/",
   3452     "origin": "http://www.example2.com",
   3453     "protocol": "http:",
   3454     "username": "",
   3455     "password": "",
   3456     "host": "www.example2.com",
   3457     "hostname": "www.example2.com",
   3458     "port": "",
   3459     "pathname": "/",
   3460     "search": "",
   3461     "hash": ""
   3462   },
   3463   {
   3464     "input": "//www.example2.com",
   3465     "base": "http://www.example.com/test",
   3466     "href": "http://www.example2.com/",
   3467     "origin": "http://www.example2.com",
   3468     "protocol": "http:",
   3469     "username": "",
   3470     "password": "",
   3471     "host": "www.example2.com",
   3472     "hostname": "www.example2.com",
   3473     "port": "",
   3474     "pathname": "/",
   3475     "search": "",
   3476     "hash": ""
   3477   },
   3478   {
   3479     "input": "file:...",
   3480     "base": "http://www.example.com/test",
   3481     "href": "file:///...",
   3482     "protocol": "file:",
   3483     "username": "",
   3484     "password": "",
   3485     "host": "",
   3486     "hostname": "",
   3487     "port": "",
   3488     "pathname": "/...",
   3489     "search": "",
   3490     "hash": ""
   3491   },
   3492   {
   3493     "input": "file:..",
   3494     "base": "http://www.example.com/test",
   3495     "href": "file:///",
   3496     "protocol": "file:",
   3497     "username": "",
   3498     "password": "",
   3499     "host": "",
   3500     "hostname": "",
   3501     "port": "",
   3502     "pathname": "/",
   3503     "search": "",
   3504     "hash": ""
   3505   },
   3506   {
   3507     "input": "file:a",
   3508     "base": "http://www.example.com/test",
   3509     "href": "file:///a",
   3510     "protocol": "file:",
   3511     "username": "",
   3512     "password": "",
   3513     "host": "",
   3514     "hostname": "",
   3515     "port": "",
   3516     "pathname": "/a",
   3517     "search": "",
   3518     "hash": ""
   3519   },
   3520   "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/host.html",
   3521   "Basic canonicalization, uppercase should be converted to lowercase",
   3522   {
   3523     "input": "http://ExAmPlE.CoM",
   3524     "base": "http://other.com/",
   3525     "href": "http://example.com/",
   3526     "origin": "http://example.com",
   3527     "protocol": "http:",
   3528     "username": "",
   3529     "password": "",
   3530     "host": "example.com",
   3531     "hostname": "example.com",
   3532     "port": "",
   3533     "pathname": "/",
   3534     "search": "",
   3535     "hash": ""
   3536   },
   3537   {
   3538     "input": "http://example example.com",
   3539     "base": "http://other.com/",
   3540     "failure": true
   3541   },
   3542   {
   3543     "input": "http://Goo%20 goo%7C|.com",
   3544     "base": "http://other.com/",
   3545     "failure": true
   3546   },
   3547   {
   3548     "input": "http://[]",
   3549     "base": "http://other.com/",
   3550     "failure": true
   3551   },
   3552   {
   3553     "input": "http://[:]",
   3554     "base": "http://other.com/",
   3555     "failure": true
   3556   },
   3557   "U+3000 is mapped to U+0020 (space) which is disallowed",
   3558   {
   3559     "input": "http://GOO\u00a0\u3000goo.com",
   3560     "base": "http://other.com/",
   3561     "failure": true
   3562   },
   3563   "Other types of space (no-break, zero-width, zero-width-no-break) are name-prepped away to nothing. U+200B, U+2060, and U+FEFF, are ignored",
   3564   {
   3565     "input": "http://GOO\u200b\u2060\ufeffgoo.com",
   3566     "base": "http://other.com/",
   3567     "href": "http://googoo.com/",
   3568     "origin": "http://googoo.com",
   3569     "protocol": "http:",
   3570     "username": "",
   3571     "password": "",
   3572     "host": "googoo.com",
   3573     "hostname": "googoo.com",
   3574     "port": "",
   3575     "pathname": "/",
   3576     "search": "",
   3577     "hash": ""
   3578   },
   3579   "Leading and trailing C0 control or space",
   3580   {
   3581     "input": "\u0000\u001b\u0004\u0012 http://example.com/\u001f \u000d ",
   3582     "base": "about:blank",
   3583     "href": "http://example.com/",
   3584     "origin": "http://example.com",
   3585     "protocol": "http:",
   3586     "username": "",
   3587     "password": "",
   3588     "host": "example.com",
   3589     "hostname": "example.com",
   3590     "port": "",
   3591     "pathname": "/",
   3592     "search": "",
   3593     "hash": ""
   3594   },
   3595   "Ideographic full stop (full-width period for Chinese, etc.) should be treated as a dot. U+3002 is mapped to U+002E (dot)",
   3596   {
   3597     "input": "http://www.foo。bar.com",
   3598     "base": "http://other.com/",
   3599     "href": "http://www.foo.bar.com/",
   3600     "origin": "http://www.foo.bar.com",
   3601     "protocol": "http:",
   3602     "username": "",
   3603     "password": "",
   3604     "host": "www.foo.bar.com",
   3605     "hostname": "www.foo.bar.com",
   3606     "port": "",
   3607     "pathname": "/",
   3608     "search": "",
   3609     "hash": ""
   3610   },
   3611   "Invalid unicode characters should fail... U+FDD0 is disallowed; %ef%b7%90 is U+FDD0",
   3612   {
   3613     "input": "http://\ufdd0zyx.com",
   3614     "base": "http://other.com/",
   3615     "failure": true
   3616   },
   3617   "This is the same as previous but escaped",
   3618   {
   3619     "input": "http://%ef%b7%90zyx.com",
   3620     "base": "http://other.com/",
   3621     "failure": true
   3622   },
   3623   "U+FFFD",
   3624   {
   3625     "input": "https://\ufffd",
   3626     "base": "about:blank",
   3627     "failure": true
   3628   },
   3629   {
   3630     "input": "https://%EF%BF%BD",
   3631     "base": "about:blank",
   3632     "failure": true
   3633   },
   3634   {
   3635     "input": "https://x/\ufffd?\ufffd#\ufffd",
   3636     "base": "about:blank",
   3637     "href": "https://x/%EF%BF%BD?%EF%BF%BD#%EF%BF%BD",
   3638     "origin": "https://x",
   3639     "protocol": "https:",
   3640     "username": "",
   3641     "password": "",
   3642     "host": "x",
   3643     "hostname": "x",
   3644     "port": "",
   3645     "pathname": "/%EF%BF%BD",
   3646     "search": "?%EF%BF%BD",
   3647     "hash": "#%EF%BF%BD"
   3648   },
   3649   "Test name prepping, fullwidth input should be converted to ASCII and NOT IDN-ized. This is 'Go' in fullwidth UTF-8/UTF-16.",
   3650   {
   3651     "input": "http://Go.com",
   3652     "base": "http://other.com/",
   3653     "href": "http://go.com/",
   3654     "origin": "http://go.com",
   3655     "protocol": "http:",
   3656     "username": "",
   3657     "password": "",
   3658     "host": "go.com",
   3659     "hostname": "go.com",
   3660     "port": "",
   3661     "pathname": "/",
   3662     "search": "",
   3663     "hash": ""
   3664   },
   3665   "URL spec forbids the following. https://www.w3.org/Bugs/Public/show_bug.cgi?id=24257",
   3666   {
   3667     "input": "http://%41.com",
   3668     "base": "http://other.com/",
   3669     "failure": true
   3670   },
   3671   {
   3672     "input": "http://%ef%bc%85%ef%bc%94%ef%bc%91.com",
   3673     "base": "http://other.com/",
   3674     "failure": true
   3675   },
   3676   "...%00 in fullwidth should fail (also as escaped UTF-8 input)",
   3677   {
   3678     "input": "http://%00.com",
   3679     "base": "http://other.com/",
   3680     "failure": true
   3681   },
   3682   {
   3683     "input": "http://%ef%bc%85%ef%bc%90%ef%bc%90.com",
   3684     "base": "http://other.com/",
   3685     "failure": true
   3686   },
   3687   "Basic IDN support, UTF-8 and UTF-16 input should be converted to IDN",
   3688   {
   3689     "input": "http://你好你好",
   3690     "base": "http://other.com/",
   3691     "href": "http://xn--6qqa088eba/",
   3692     "origin": "http://xn--6qqa088eba",
   3693     "protocol": "http:",
   3694     "username": "",
   3695     "password": "",
   3696     "host": "xn--6qqa088eba",
   3697     "hostname": "xn--6qqa088eba",
   3698     "port": "",
   3699     "pathname": "/",
   3700     "search": "",
   3701     "hash": ""
   3702   },
   3703   {
   3704     "input": "https://faß.ExAmPlE/",
   3705     "base": "about:blank",
   3706     "href": "https://xn--fa-hia.example/",
   3707     "origin": "https://xn--fa-hia.example",
   3708     "protocol": "https:",
   3709     "username": "",
   3710     "password": "",
   3711     "host": "xn--fa-hia.example",
   3712     "hostname": "xn--fa-hia.example",
   3713     "port": "",
   3714     "pathname": "/",
   3715     "search": "",
   3716     "hash": ""
   3717   },
   3718   {
   3719     "input": "sc://faß.ExAmPlE/",
   3720     "base": "about:blank",
   3721     "href": "sc://fa%C3%9F.ExAmPlE/",
   3722     "origin": "null",
   3723     "protocol": "sc:",
   3724     "username": "",
   3725     "password": "",
   3726     "host": "fa%C3%9F.ExAmPlE",
   3727     "hostname": "fa%C3%9F.ExAmPlE",
   3728     "port": "",
   3729     "pathname": "/",
   3730     "search": "",
   3731     "hash": ""
   3732   },
   3733   "Invalid escaped characters should fail and the percents should be escaped. https://www.w3.org/Bugs/Public/show_bug.cgi?id=24191",
   3734   {
   3735     "input": "http://%zz%66%a.com",
   3736     "base": "http://other.com/",
   3737     "failure": true
   3738   },
   3739   "If we get an invalid character that has been escaped.",
   3740   {
   3741     "input": "http://%25",
   3742     "base": "http://other.com/",
   3743     "failure": true
   3744   },
   3745   {
   3746     "input": "http://hello%00",
   3747     "base": "http://other.com/",
   3748     "failure": true
   3749   },
   3750   "Escaped numbers should be treated like IP addresses if they are.",
   3751   {
   3752     "input": "http://%30%78%63%30%2e%30%32%35%30.01",
   3753     "base": "http://other.com/",
   3754     "href": "http://192.168.0.1/",
   3755     "origin": "http://192.168.0.1",
   3756     "protocol": "http:",
   3757     "username": "",
   3758     "password": "",
   3759     "host": "192.168.0.1",
   3760     "hostname": "192.168.0.1",
   3761     "port": "",
   3762     "pathname": "/",
   3763     "search": "",
   3764     "hash": ""
   3765   },
   3766   {
   3767     "input": "http://%30%78%63%30%2e%30%32%35%30.01%2e",
   3768     "base": "http://other.com/",
   3769     "href": "http://192.168.0.1/",
   3770     "origin": "http://192.168.0.1",
   3771     "protocol": "http:",
   3772     "username": "",
   3773     "password": "",
   3774     "host": "192.168.0.1",
   3775     "hostname": "192.168.0.1",
   3776     "port": "",
   3777     "pathname": "/",
   3778     "search": "",
   3779     "hash": ""
   3780   },
   3781   {
   3782     "input": "http://192.168.0.257",
   3783     "base": "http://other.com/",
   3784     "failure": true
   3785   },
   3786   "Invalid escaping in hosts causes failure",
   3787   {
   3788     "input": "http://%3g%78%63%30%2e%30%32%35%30%2E.01",
   3789     "base": "http://other.com/",
   3790     "failure": true
   3791   },
   3792   "A space in a host causes failure",
   3793   {
   3794     "input": "http://192.168.0.1 hello",
   3795     "base": "http://other.com/",
   3796     "failure": true
   3797   },
   3798   {
   3799     "input": "https://x x:12",
   3800     "base": "about:blank",
   3801     "failure": true
   3802   },
   3803   "Fullwidth and escaped UTF-8 fullwidth should still be treated as IP",
   3804   {
   3805     "input": "http://0Xc0.0250.01",
   3806     "base": "http://other.com/",
   3807     "href": "http://192.168.0.1/",
   3808     "origin": "http://192.168.0.1",
   3809     "protocol": "http:",
   3810     "username": "",
   3811     "password": "",
   3812     "host": "192.168.0.1",
   3813     "hostname": "192.168.0.1",
   3814     "port": "",
   3815     "pathname": "/",
   3816     "search": "",
   3817     "hash": ""
   3818   },
   3819   "Domains with empty labels",
   3820   {
   3821     "input": "http://./",
   3822     "base": "about:blank",
   3823     "href": "http://./",
   3824     "origin": "http://.",
   3825     "protocol": "http:",
   3826     "username": "",
   3827     "password": "",
   3828     "host": ".",
   3829     "hostname": ".",
   3830     "port": "",
   3831     "pathname": "/",
   3832     "search": "",
   3833     "hash": ""
   3834   },
   3835   {
   3836     "input": "http://../",
   3837     "base": "about:blank",
   3838     "href": "http://../",
   3839     "origin": "http://..",
   3840     "protocol": "http:",
   3841     "username": "",
   3842     "password": "",
   3843     "host": "..",
   3844     "hostname": "..",
   3845     "port": "",
   3846     "pathname": "/",
   3847     "search": "",
   3848     "hash": ""
   3849   },
   3850   {
   3851     "input": "http://0..0x300/",
   3852     "base": "about:blank",
   3853     "href": "http://0..0x300/",
   3854     "origin": "http://0..0x300",
   3855     "protocol": "http:",
   3856     "username": "",
   3857     "password": "",
   3858     "host": "0..0x300",
   3859     "hostname": "0..0x300",
   3860     "port": "",
   3861     "pathname": "/",
   3862     "search": "",
   3863     "hash": ""
   3864   },
   3865   "Broken IPv6",
   3866   {
   3867     "input": "http://[www.google.com]/",
   3868     "base": "about:blank",
   3869     "failure": true
   3870   },
   3871   {
   3872     "input": "http://[google.com]",
   3873     "base": "http://other.com/",
   3874     "failure": true
   3875   },
   3876   {
   3877     "input": "http://[::1.2.3.4x]",
   3878     "base": "http://other.com/",
   3879     "failure": true
   3880   },
   3881   {
   3882     "input": "http://[::1.2.3.]",
   3883     "base": "http://other.com/",
   3884     "failure": true
   3885   },
   3886   {
   3887     "input": "http://[::1.2.]",
   3888     "base": "http://other.com/",
   3889     "failure": true
   3890   },
   3891   {
   3892     "input": "http://[::1.]",
   3893     "base": "http://other.com/",
   3894     "failure": true
   3895   },
   3896   "Misc Unicode",
   3897   {
   3898     "input": "http://foo:💩@example.com/bar",
   3899     "base": "http://other.com/",
   3900     "href": "http://foo:%F0%9F%92%A9@example.com/bar",
   3901     "origin": "http://example.com",
   3902     "protocol": "http:",
   3903     "username": "foo",
   3904     "password": "%F0%9F%92%A9",
   3905     "host": "example.com",
   3906     "hostname": "example.com",
   3907     "port": "",
   3908     "pathname": "/bar",
   3909     "search": "",
   3910     "hash": ""
   3911   },
   3912   "# resolving a fragment against any scheme succeeds",
   3913   {
   3914     "input": "#",
   3915     "base": "test:test",
   3916     "href": "test:test#",
   3917     "origin": "null",
   3918     "protocol": "test:",
   3919     "username": "",
   3920     "password": "",
   3921     "host": "",
   3922     "hostname": "",
   3923     "port": "",
   3924     "pathname": "test",
   3925     "search": "",
   3926     "hash": ""
   3927   },
   3928   {
   3929     "input": "#x",
   3930     "base": "mailto:x@x.com",
   3931     "href": "mailto:x@x.com#x",
   3932     "origin": "null",
   3933     "protocol": "mailto:",
   3934     "username": "",
   3935     "password": "",
   3936     "host": "",
   3937     "hostname": "",
   3938     "port": "",
   3939     "pathname": "x@x.com",
   3940     "search": "",
   3941     "hash": "#x"
   3942   },
   3943   {
   3944     "input": "#x",
   3945     "base": "data:,",
   3946     "href": "data:,#x",
   3947     "origin": "null",
   3948     "protocol": "data:",
   3949     "username": "",
   3950     "password": "",
   3951     "host": "",
   3952     "hostname": "",
   3953     "port": "",
   3954     "pathname": ",",
   3955     "search": "",
   3956     "hash": "#x"
   3957   },
   3958   {
   3959     "input": "#x",
   3960     "base": "about:blank",
   3961     "href": "about:blank#x",
   3962     "origin": "null",
   3963     "protocol": "about:",
   3964     "username": "",
   3965     "password": "",
   3966     "host": "",
   3967     "hostname": "",
   3968     "port": "",
   3969     "pathname": "blank",
   3970     "search": "",
   3971     "hash": "#x"
   3972   },
   3973   {
   3974     "input": "#",
   3975     "base": "test:test?test",
   3976     "href": "test:test?test#",
   3977     "origin": "null",
   3978     "protocol": "test:",
   3979     "username": "",
   3980     "password": "",
   3981     "host": "",
   3982     "hostname": "",
   3983     "port": "",
   3984     "pathname": "test",
   3985     "search": "?test",
   3986     "hash": ""
   3987   },
   3988   "# multiple @ in authority state",
   3989   {
   3990     "input": "https://@test@test@example:800/",
   3991     "base": "http://doesnotmatter/",
   3992     "href": "https://%40test%40test@example:800/",
   3993     "origin": "https://example:800",
   3994     "protocol": "https:",
   3995     "username": "%40test%40test",
   3996     "password": "",
   3997     "host": "example:800",
   3998     "hostname": "example",
   3999     "port": "800",
   4000     "pathname": "/",
   4001     "search": "",
   4002     "hash": ""
   4003   },
   4004   {
   4005     "input": "https://@@@example",
   4006     "base": "http://doesnotmatter/",
   4007     "href": "https://%40%40@example/",
   4008     "origin": "https://example",
   4009     "protocol": "https:",
   4010     "username": "%40%40",
   4011     "password": "",
   4012     "host": "example",
   4013     "hostname": "example",
   4014     "port": "",
   4015     "pathname": "/",
   4016     "search": "",
   4017     "hash": ""
   4018   },
   4019   "non-az-09 characters",
   4020   {
   4021     "input": "http://`{}:`{}@h/`{}?`{}",
   4022     "base": "http://doesnotmatter/",
   4023     "href": "http://%60%7B%7D:%60%7B%7D@h/%60%7B%7D?`{}",
   4024     "origin": "http://h",
   4025     "protocol": "http:",
   4026     "username": "%60%7B%7D",
   4027     "password": "%60%7B%7D",
   4028     "host": "h",
   4029     "hostname": "h",
   4030     "port": "",
   4031     "pathname": "/%60%7B%7D",
   4032     "search": "?`{}",
   4033     "hash": ""
   4034   },
   4035   "byte is ' and url is special",
   4036   {
   4037     "input": "http://host/?'",
   4038     "base": "about:blank",
   4039     "href": "http://host/?%27",
   4040     "origin": "http://host",
   4041     "protocol": "http:",
   4042     "username": "",
   4043     "password": "",
   4044     "host": "host",
   4045     "hostname": "host",
   4046     "port": "",
   4047     "pathname": "/",
   4048     "search": "?%27",
   4049     "hash": ""
   4050   },
   4051   {
   4052     "input": "notspecial://host/?'",
   4053     "base": "about:blank",
   4054     "href": "notspecial://host/?'",
   4055     "origin": "null",
   4056     "protocol": "notspecial:",
   4057     "username": "",
   4058     "password": "",
   4059     "host": "host",
   4060     "hostname": "host",
   4061     "port": "",
   4062     "pathname": "/",
   4063     "search": "?'",
   4064     "hash": ""
   4065   },
   4066   "# Credentials in base",
   4067   {
   4068     "input": "/some/path",
   4069     "base": "http://user@example.org/smth",
   4070     "href": "http://user@example.org/some/path",
   4071     "origin": "http://example.org",
   4072     "protocol": "http:",
   4073     "username": "user",
   4074     "password": "",
   4075     "host": "example.org",
   4076     "hostname": "example.org",
   4077     "port": "",
   4078     "pathname": "/some/path",
   4079     "search": "",
   4080     "hash": ""
   4081   },
   4082   {
   4083     "input": "",
   4084     "base": "http://user:pass@example.org:21/smth",
   4085     "href": "http://user:pass@example.org:21/smth",
   4086     "origin": "http://example.org:21",
   4087     "protocol": "http:",
   4088     "username": "user",
   4089     "password": "pass",
   4090     "host": "example.org:21",
   4091     "hostname": "example.org",
   4092     "port": "21",
   4093     "pathname": "/smth",
   4094     "search": "",
   4095     "hash": ""
   4096   },
   4097   {
   4098     "input": "/some/path",
   4099     "base": "http://user:pass@example.org:21/smth",
   4100     "href": "http://user:pass@example.org:21/some/path",
   4101     "origin": "http://example.org:21",
   4102     "protocol": "http:",
   4103     "username": "user",
   4104     "password": "pass",
   4105     "host": "example.org:21",
   4106     "hostname": "example.org",
   4107     "port": "21",
   4108     "pathname": "/some/path",
   4109     "search": "",
   4110     "hash": ""
   4111   },
   4112   "# a set of tests designed by zcorpan for relative URLs with unknown schemes",
   4113   {
   4114     "input": "i",
   4115     "base": "sc:sd",
   4116     "failure": true
   4117   },
   4118   {
   4119     "input": "i",
   4120     "base": "sc:sd/sd",
   4121     "failure": true
   4122   },
   4123   {
   4124     "input": "i",
   4125     "base": "sc:/pa/pa",
   4126     "href": "sc:/pa/i",
   4127     "origin": "null",
   4128     "protocol": "sc:",
   4129     "username": "",
   4130     "password": "",
   4131     "host": "",
   4132     "hostname": "",
   4133     "port": "",
   4134     "pathname": "/pa/i",
   4135     "search": "",
   4136     "hash": ""
   4137   },
   4138   {
   4139     "input": "i",
   4140     "base": "sc://ho/pa",
   4141     "href": "sc://ho/i",
   4142     "origin": "null",
   4143     "protocol": "sc:",
   4144     "username": "",
   4145     "password": "",
   4146     "host": "ho",
   4147     "hostname": "ho",
   4148     "port": "",
   4149     "pathname": "/i",
   4150     "search": "",
   4151     "hash": ""
   4152   },
   4153   {
   4154     "input": "i",
   4155     "base": "sc:///pa/pa",
   4156     "href": "sc:///pa/i",
   4157     "origin": "null",
   4158     "protocol": "sc:",
   4159     "username": "",
   4160     "password": "",
   4161     "host": "",
   4162     "hostname": "",
   4163     "port": "",
   4164     "pathname": "/pa/i",
   4165     "search": "",
   4166     "hash": ""
   4167   },
   4168   {
   4169     "input": "../i",
   4170     "base": "sc:sd",
   4171     "failure": true
   4172   },
   4173   {
   4174     "input": "../i",
   4175     "base": "sc:sd/sd",
   4176     "failure": true
   4177   },
   4178   {
   4179     "input": "../i",
   4180     "base": "sc:/pa/pa",
   4181     "href": "sc:/i",
   4182     "origin": "null",
   4183     "protocol": "sc:",
   4184     "username": "",
   4185     "password": "",
   4186     "host": "",
   4187     "hostname": "",
   4188     "port": "",
   4189     "pathname": "/i",
   4190     "search": "",
   4191     "hash": ""
   4192   },
   4193   {
   4194     "input": "../i",
   4195     "base": "sc://ho/pa",
   4196     "href": "sc://ho/i",
   4197     "origin": "null",
   4198     "protocol": "sc:",
   4199     "username": "",
   4200     "password": "",
   4201     "host": "ho",
   4202     "hostname": "ho",
   4203     "port": "",
   4204     "pathname": "/i",
   4205     "search": "",
   4206     "hash": ""
   4207   },
   4208   {
   4209     "input": "../i",
   4210     "base": "sc:///pa/pa",
   4211     "href": "sc:///i",
   4212     "origin": "null",
   4213     "protocol": "sc:",
   4214     "username": "",
   4215     "password": "",
   4216     "host": "",
   4217     "hostname": "",
   4218     "port": "",
   4219     "pathname": "/i",
   4220     "search": "",
   4221     "hash": ""
   4222   },
   4223   {
   4224     "input": "/i",
   4225     "base": "sc:sd",
   4226     "failure": true
   4227   },
   4228   {
   4229     "input": "/i",
   4230     "base": "sc:sd/sd",
   4231     "failure": true
   4232   },
   4233   {
   4234     "input": "/i",
   4235     "base": "sc:/pa/pa",
   4236     "href": "sc:/i",
   4237     "origin": "null",
   4238     "protocol": "sc:",
   4239     "username": "",
   4240     "password": "",
   4241     "host": "",
   4242     "hostname": "",
   4243     "port": "",
   4244     "pathname": "/i",
   4245     "search": "",
   4246     "hash": ""
   4247   },
   4248   {
   4249     "input": "/i",
   4250     "base": "sc://ho/pa",
   4251     "href": "sc://ho/i",
   4252     "origin": "null",
   4253     "protocol": "sc:",
   4254     "username": "",
   4255     "password": "",
   4256     "host": "ho",
   4257     "hostname": "ho",
   4258     "port": "",
   4259     "pathname": "/i",
   4260     "search": "",
   4261     "hash": ""
   4262   },
   4263   {
   4264     "input": "/i",
   4265     "base": "sc:///pa/pa",
   4266     "href": "sc:///i",
   4267     "origin": "null",
   4268     "protocol": "sc:",
   4269     "username": "",
   4270     "password": "",
   4271     "host": "",
   4272     "hostname": "",
   4273     "port": "",
   4274     "pathname": "/i",
   4275     "search": "",
   4276     "hash": ""
   4277   },
   4278   {
   4279     "input": "?i",
   4280     "base": "sc:sd",
   4281     "failure": true
   4282   },
   4283   {
   4284     "input": "?i",
   4285     "base": "sc:sd/sd",
   4286     "failure": true
   4287   },
   4288   {
   4289     "input": "?i",
   4290     "base": "sc:/pa/pa",
   4291     "href": "sc:/pa/pa?i",
   4292     "origin": "null",
   4293     "protocol": "sc:",
   4294     "username": "",
   4295     "password": "",
   4296     "host": "",
   4297     "hostname": "",
   4298     "port": "",
   4299     "pathname": "/pa/pa",
   4300     "search": "?i",
   4301     "hash": ""
   4302   },
   4303   {
   4304     "input": "?i",
   4305     "base": "sc://ho/pa",
   4306     "href": "sc://ho/pa?i",
   4307     "origin": "null",
   4308     "protocol": "sc:",
   4309     "username": "",
   4310     "password": "",
   4311     "host": "ho",
   4312     "hostname": "ho",
   4313     "port": "",
   4314     "pathname": "/pa",
   4315     "search": "?i",
   4316     "hash": ""
   4317   },
   4318   {
   4319     "input": "?i",
   4320     "base": "sc:///pa/pa",
   4321     "href": "sc:///pa/pa?i",
   4322     "origin": "null",
   4323     "protocol": "sc:",
   4324     "username": "",
   4325     "password": "",
   4326     "host": "",
   4327     "hostname": "",
   4328     "port": "",
   4329     "pathname": "/pa/pa",
   4330     "search": "?i",
   4331     "hash": ""
   4332   },
   4333   {
   4334     "input": "#i",
   4335     "base": "sc:sd",
   4336     "href": "sc:sd#i",
   4337     "origin": "null",
   4338     "protocol": "sc:",
   4339     "username": "",
   4340     "password": "",
   4341     "host": "",
   4342     "hostname": "",
   4343     "port": "",
   4344     "pathname": "sd",
   4345     "search": "",
   4346     "hash": "#i"
   4347   },
   4348   {
   4349     "input": "#i",
   4350     "base": "sc:sd/sd",
   4351     "href": "sc:sd/sd#i",
   4352     "origin": "null",
   4353     "protocol": "sc:",
   4354     "username": "",
   4355     "password": "",
   4356     "host": "",
   4357     "hostname": "",
   4358     "port": "",
   4359     "pathname": "sd/sd",
   4360     "search": "",
   4361     "hash": "#i"
   4362   },
   4363   {
   4364     "input": "#i",
   4365     "base": "sc:/pa/pa",
   4366     "href": "sc:/pa/pa#i",
   4367     "origin": "null",
   4368     "protocol": "sc:",
   4369     "username": "",
   4370     "password": "",
   4371     "host": "",
   4372     "hostname": "",
   4373     "port": "",
   4374     "pathname": "/pa/pa",
   4375     "search": "",
   4376     "hash": "#i"
   4377   },
   4378   {
   4379     "input": "#i",
   4380     "base": "sc://ho/pa",
   4381     "href": "sc://ho/pa#i",
   4382     "origin": "null",
   4383     "protocol": "sc:",
   4384     "username": "",
   4385     "password": "",
   4386     "host": "ho",
   4387     "hostname": "ho",
   4388     "port": "",
   4389     "pathname": "/pa",
   4390     "search": "",
   4391     "hash": "#i"
   4392   },
   4393   {
   4394     "input": "#i",
   4395     "base": "sc:///pa/pa",
   4396     "href": "sc:///pa/pa#i",
   4397     "origin": "null",
   4398     "protocol": "sc:",
   4399     "username": "",
   4400     "password": "",
   4401     "host": "",
   4402     "hostname": "",
   4403     "port": "",
   4404     "pathname": "/pa/pa",
   4405     "search": "",
   4406     "hash": "#i"
   4407   },
   4408   "# make sure that relative URL logic works on known typically non-relative schemes too",
   4409   {
   4410     "input": "about:/../",
   4411     "base": "about:blank",
   4412     "href": "about:/",
   4413     "origin": "null",
   4414     "protocol": "about:",
   4415     "username": "",
   4416     "password": "",
   4417     "host": "",
   4418     "hostname": "",
   4419     "port": "",
   4420     "pathname": "/",
   4421     "search": "",
   4422     "hash": ""
   4423   },
   4424   {
   4425     "input": "data:/../",
   4426     "base": "about:blank",
   4427     "href": "data:/",
   4428     "origin": "null",
   4429     "protocol": "data:",
   4430     "username": "",
   4431     "password": "",
   4432     "host": "",
   4433     "hostname": "",
   4434     "port": "",
   4435     "pathname": "/",
   4436     "search": "",
   4437     "hash": ""
   4438   },
   4439   {
   4440     "input": "javascript:/../",
   4441     "base": "about:blank",
   4442     "href": "javascript:/",
   4443     "origin": "null",
   4444     "protocol": "javascript:",
   4445     "username": "",
   4446     "password": "",
   4447     "host": "",
   4448     "hostname": "",
   4449     "port": "",
   4450     "pathname": "/",
   4451     "search": "",
   4452     "hash": ""
   4453   },
   4454   {
   4455     "input": "mailto:/../",
   4456     "base": "about:blank",
   4457     "href": "mailto:/",
   4458     "origin": "null",
   4459     "protocol": "mailto:",
   4460     "username": "",
   4461     "password": "",
   4462     "host": "",
   4463     "hostname": "",
   4464     "port": "",
   4465     "pathname": "/",
   4466     "search": "",
   4467     "hash": ""
   4468   },
   4469   "# unknown schemes and their hosts",
   4470   {
   4471     "input": "sc://ñ.test/",
   4472     "base": "about:blank",
   4473     "href": "sc://%C3%B1.test/",
   4474     "origin": "null",
   4475     "protocol": "sc:",
   4476     "username": "",
   4477     "password": "",
   4478     "host": "%C3%B1.test",
   4479     "hostname": "%C3%B1.test",
   4480     "port": "",
   4481     "pathname": "/",
   4482     "search": "",
   4483     "hash": ""
   4484   },
   4485   {
   4486     "input": "sc://\u0000/",
   4487     "base": "about:blank",
   4488     "failure": true
   4489   },
   4490   {
   4491     "input": "sc:// /",
   4492     "base": "about:blank",
   4493     "failure": true
   4494   },
   4495   {
   4496     "input": "sc://%/",
   4497     "base": "about:blank",
   4498     "href": "sc://%/",
   4499     "protocol": "sc:",
   4500     "username": "",
   4501     "password": "",
   4502     "host": "%",
   4503     "hostname": "%",
   4504     "port": "",
   4505     "pathname": "/",
   4506     "search": "",
   4507     "hash": ""
   4508   },
   4509   {
   4510     "input": "sc://@/",
   4511     "base": "about:blank",
   4512     "failure": true
   4513   },
   4514   {
   4515     "input": "sc://te@s:t@/",
   4516     "base": "about:blank",
   4517     "failure": true
   4518   },
   4519   {
   4520     "input": "sc://:/",
   4521     "base": "about:blank",
   4522     "failure": true
   4523   },
   4524   {
   4525     "input": "sc://:12/",
   4526     "base": "about:blank",
   4527     "failure": true
   4528   },
   4529   {
   4530     "input": "sc://[/",
   4531     "base": "about:blank",
   4532     "failure": true
   4533   },
   4534   {
   4535     "input": "sc://\\/",
   4536     "base": "about:blank",
   4537     "failure": true
   4538   },
   4539   {
   4540     "input": "sc://]/",
   4541     "base": "about:blank",
   4542     "failure": true
   4543   },
   4544   {
   4545     "input": "x",
   4546     "base": "sc://ñ",
   4547     "href": "sc://%C3%B1/x",
   4548     "origin": "null",
   4549     "protocol": "sc:",
   4550     "username": "",
   4551     "password": "",
   4552     "host": "%C3%B1",
   4553     "hostname": "%C3%B1",
   4554     "port": "",
   4555     "pathname": "/x",
   4556     "search": "",
   4557     "hash": ""
   4558   },
   4559   "# unknown schemes and backslashes",
   4560   {
   4561     "input": "sc:\\../",
   4562     "base": "about:blank",
   4563     "href": "sc:\\../",
   4564     "origin": "null",
   4565     "protocol": "sc:",
   4566     "username": "",
   4567     "password": "",
   4568     "host": "",
   4569     "hostname": "",
   4570     "port": "",
   4571     "pathname": "\\../",
   4572     "search": "",
   4573     "hash": ""
   4574   },
   4575   "# unknown scheme with path looking like a password",
   4576   {
   4577     "input": "sc::a@example.net",
   4578     "base": "about:blank",
   4579     "href": "sc::a@example.net",
   4580     "origin": "null",
   4581     "protocol": "sc:",
   4582     "username": "",
   4583     "password": "",
   4584     "host": "",
   4585     "hostname": "",
   4586     "port": "",
   4587     "pathname": ":a@example.net",
   4588     "search": "",
   4589     "hash": ""
   4590   },
   4591   "# unknown scheme with bogus percent-encoding",
   4592   {
   4593     "input": "wow:%NBD",
   4594     "base": "about:blank",
   4595     "href": "wow:%NBD",
   4596     "origin": "null",
   4597     "protocol": "wow:",
   4598     "username": "",
   4599     "password": "",
   4600     "host": "",
   4601     "hostname": "",
   4602     "port": "",
   4603     "pathname": "%NBD",
   4604     "search": "",
   4605     "hash": ""
   4606   },
   4607   {
   4608     "input": "wow:%1G",
   4609     "base": "about:blank",
   4610     "href": "wow:%1G",
   4611     "origin": "null",
   4612     "protocol": "wow:",
   4613     "username": "",
   4614     "password": "",
   4615     "host": "",
   4616     "hostname": "",
   4617     "port": "",
   4618     "pathname": "%1G",
   4619     "search": "",
   4620     "hash": ""
   4621   },
   4622   "# unknown scheme with non-URL characters in the path",
   4623   {
   4624     "input": "wow:\uFFFF",
   4625     "base": "about:blank",
   4626     "href": "wow:%EF%BF%BF",
   4627     "origin": "null",
   4628     "protocol": "wow:",
   4629     "username": "",
   4630     "password": "",
   4631     "host": "",
   4632     "hostname": "",
   4633     "port": "",
   4634     "pathname": "%EF%BF%BF",
   4635     "search": "",
   4636     "hash": ""
   4637   },
   4638   "Forbidden host code points",
   4639   {
   4640     "input": "http://a<b",
   4641     "base": "about:blank",
   4642     "failure": true
   4643   },
   4644   {
   4645     "input": "http://a>b",
   4646     "base": "about:blank",
   4647     "failure": true
   4648   },
   4649   {
   4650     "input": "http://a^b",
   4651     "base": "about:blank",
   4652     "failure": true
   4653   },
   4654   {
   4655     "input": "non-special://a<b",
   4656     "base": "about:blank",
   4657     "failure": true
   4658   },
   4659   {
   4660     "input": "non-special://a>b",
   4661     "base": "about:blank",
   4662     "failure": true
   4663   },
   4664   {
   4665     "input": "non-special://a^b",
   4666     "base": "about:blank",
   4667     "failure": true
   4668   },
   4669   "Allowed host code points",
   4670   {
   4671     "input": "http://\u001F!\"$&'()*+,-.;=_`{|}~/",
   4672     "base": "about:blank",
   4673     "href": "http://\u001F!\"$&'()*+,-.;=_`{|}~/",
   4674     "origin": "http://\u001F!\"$&'()*+,-.;=_`{|}~",
   4675     "protocol": "http:",
   4676     "username": "",
   4677     "password": "",
   4678     "host": "\u001F!\"$&'()*+,-.;=_`{|}~",
   4679     "hostname": "\u001F!\"$&'()*+,-.;=_`{|}~",
   4680     "port": "",
   4681     "pathname": "/",
   4682     "search": "",
   4683     "hash": ""
   4684   },
   4685   {
   4686     "input": "sc://\u001F!\"$&'()*+,-.;=_`{|}~/",
   4687     "base": "about:blank",
   4688     "href": "sc://%1F!\"$&'()*+,-.;=_`{|}~/",
   4689     "origin": "null",
   4690     "protocol": "sc:",
   4691     "username": "",
   4692     "password": "",
   4693     "host": "%1F!\"$&'()*+,-.;=_`{|}~",
   4694     "hostname": "%1F!\"$&'()*+,-.;=_`{|}~",
   4695     "port": "",
   4696     "pathname": "/",
   4697     "search": "",
   4698     "hash": ""
   4699   },
   4700   "# Hosts and percent-encoding",
   4701   {
   4702     "input": "ftp://example.com%80/",
   4703     "base": "about:blank",
   4704     "failure": true
   4705   },
   4706   {
   4707     "input": "ftp://example.com%A0/",
   4708     "base": "about:blank",
   4709     "failure": true
   4710   },
   4711   {
   4712     "input": "https://example.com%80/",
   4713     "base": "about:blank",
   4714     "failure": true
   4715   },
   4716   {
   4717     "input": "https://example.com%A0/",
   4718     "base": "about:blank",
   4719     "failure": true
   4720   },
   4721   {
   4722     "input": "ftp://%e2%98%83",
   4723     "base": "about:blank",
   4724     "href": "ftp://xn--n3h/",
   4725     "origin": "ftp://xn--n3h",
   4726     "protocol": "ftp:",
   4727     "username": "",
   4728     "password": "",
   4729     "host": "xn--n3h",
   4730     "hostname": "xn--n3h",
   4731     "port": "",
   4732     "pathname": "/",
   4733     "search": "",
   4734     "hash": ""
   4735   },
   4736   {
   4737     "input": "https://%e2%98%83",
   4738     "base": "about:blank",
   4739     "href": "https://xn--n3h/",
   4740     "origin": "https://xn--n3h",
   4741     "protocol": "https:",
   4742     "username": "",
   4743     "password": "",
   4744     "host": "xn--n3h",
   4745     "hostname": "xn--n3h",
   4746     "port": "",
   4747     "pathname": "/",
   4748     "search": "",
   4749     "hash": ""
   4750   },
   4751   "# tests from jsdom/whatwg-url designed for code coverage",
   4752   {
   4753     "input": "http://127.0.0.1:10100/relative_import.html",
   4754     "base": "about:blank",
   4755     "href": "http://127.0.0.1:10100/relative_import.html",
   4756     "origin": "http://127.0.0.1:10100",
   4757     "protocol": "http:",
   4758     "username": "",
   4759     "password": "",
   4760     "host": "127.0.0.1:10100",
   4761     "hostname": "127.0.0.1",
   4762     "port": "10100",
   4763     "pathname": "/relative_import.html",
   4764     "search": "",
   4765     "hash": ""
   4766   },
   4767   {
   4768     "input": "http://facebook.com/?foo=%7B%22abc%22",
   4769     "base": "about:blank",
   4770     "href": "http://facebook.com/?foo=%7B%22abc%22",
   4771     "origin": "http://facebook.com",
   4772     "protocol": "http:",
   4773     "username": "",
   4774     "password": "",
   4775     "host": "facebook.com",
   4776     "hostname": "facebook.com",
   4777     "port": "",
   4778     "pathname": "/",
   4779     "search": "?foo=%7B%22abc%22",
   4780     "hash": ""
   4781   },
   4782   {
   4783     "input": "https://localhost:3000/jqueryui@1.2.3",
   4784     "base": "about:blank",
   4785     "href": "https://localhost:3000/jqueryui@1.2.3",
   4786     "origin": "https://localhost:3000",
   4787     "protocol": "https:",
   4788     "username": "",
   4789     "password": "",
   4790     "host": "localhost:3000",
   4791     "hostname": "localhost",
   4792     "port": "3000",
   4793     "pathname": "/jqueryui@1.2.3",
   4794     "search": "",
   4795     "hash": ""
   4796   },
   4797   "# tab/LF/CR",
   4798   {
   4799     "input": "h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg",
   4800     "base": "about:blank",
   4801     "href": "http://host:9000/path?query#frag",
   4802     "origin": "http://host:9000",
   4803     "protocol": "http:",
   4804     "username": "",
   4805     "password": "",
   4806     "host": "host:9000",
   4807     "hostname": "host",
   4808     "port": "9000",
   4809     "pathname": "/path",
   4810     "search": "?query",
   4811     "hash": "#frag"
   4812   },
   4813   "# Stringification of URL.searchParams",
   4814   {
   4815     "input": "?a=b&c=d",
   4816     "base": "http://example.org/foo/bar",
   4817     "href": "http://example.org/foo/bar?a=b&c=d",
   4818     "origin": "http://example.org",
   4819     "protocol": "http:",
   4820     "username": "",
   4821     "password": "",
   4822     "host": "example.org",
   4823     "hostname": "example.org",
   4824     "port": "",
   4825     "pathname": "/foo/bar",
   4826     "search": "?a=b&c=d",
   4827     "searchParams": "a=b&c=d",
   4828     "hash": ""
   4829   },
   4830   {
   4831     "input": "??a=b&c=d",
   4832     "base": "http://example.org/foo/bar",
   4833     "href": "http://example.org/foo/bar??a=b&c=d",
   4834     "origin": "http://example.org",
   4835     "protocol": "http:",
   4836     "username": "",
   4837     "password": "",
   4838     "host": "example.org",
   4839     "hostname": "example.org",
   4840     "port": "",
   4841     "pathname": "/foo/bar",
   4842     "search": "??a=b&c=d",
   4843     "searchParams": "%3Fa=b&c=d",
   4844     "hash": ""
   4845   },
   4846   "# Scheme only",
   4847   {
   4848     "input": "http:",
   4849     "base": "http://example.org/foo/bar",
   4850     "href": "http://example.org/foo/bar",
   4851     "origin": "http://example.org",
   4852     "protocol": "http:",
   4853     "username": "",
   4854     "password": "",
   4855     "host": "example.org",
   4856     "hostname": "example.org",
   4857     "port": "",
   4858     "pathname": "/foo/bar",
   4859     "search": "",
   4860     "searchParams": "",
   4861     "hash": ""
   4862   },
   4863   {
   4864     "input": "http:",
   4865     "base": "https://example.org/foo/bar",
   4866     "failure": true
   4867   },
   4868   {
   4869     "input": "sc:",
   4870     "base": "https://example.org/foo/bar",
   4871     "href": "sc:",
   4872     "origin": "null",
   4873     "protocol": "sc:",
   4874     "username": "",
   4875     "password": "",
   4876     "host": "",
   4877     "hostname": "",
   4878     "port": "",
   4879     "pathname": "",
   4880     "search": "",
   4881     "searchParams": "",
   4882     "hash": ""
   4883   },
   4884   "# Percent encoding of fragments",
   4885   {
   4886     "input": "http://foo.bar/baz?qux#foo\bbar",
   4887     "base": "about:blank",
   4888     "href": "http://foo.bar/baz?qux#foo%08bar",
   4889     "origin": "http://foo.bar",
   4890     "protocol": "http:",
   4891     "username": "",
   4892     "password": "",
   4893     "host": "foo.bar",
   4894     "hostname": "foo.bar",
   4895     "port": "",
   4896     "pathname": "/baz",
   4897     "search": "?qux",
   4898     "searchParams": "qux=",
   4899     "hash": "#foo%08bar"
   4900   },
   4901   {
   4902     "input": "http://foo.bar/baz?qux#foo\"bar",
   4903     "base": "about:blank",
   4904     "href": "http://foo.bar/baz?qux#foo%22bar",
   4905     "origin": "http://foo.bar",
   4906     "protocol": "http:",
   4907     "username": "",
   4908     "password": "",
   4909     "host": "foo.bar",
   4910     "hostname": "foo.bar",
   4911     "port": "",
   4912     "pathname": "/baz",
   4913     "search": "?qux",
   4914     "searchParams": "qux=",
   4915     "hash": "#foo%22bar"
   4916   },
   4917   {
   4918     "input": "http://foo.bar/baz?qux#foo<bar",
   4919     "base": "about:blank",
   4920     "href": "http://foo.bar/baz?qux#foo%3Cbar",
   4921     "origin": "http://foo.bar",
   4922     "protocol": "http:",
   4923     "username": "",
   4924     "password": "",
   4925     "host": "foo.bar",
   4926     "hostname": "foo.bar",
   4927     "port": "",
   4928     "pathname": "/baz",
   4929     "search": "?qux",
   4930     "searchParams": "qux=",
   4931     "hash": "#foo%3Cbar"
   4932   },
   4933   {
   4934     "input": "http://foo.bar/baz?qux#foo>bar",
   4935     "base": "about:blank",
   4936     "href": "http://foo.bar/baz?qux#foo%3Ebar",
   4937     "origin": "http://foo.bar",
   4938     "protocol": "http:",
   4939     "username": "",
   4940     "password": "",
   4941     "host": "foo.bar",
   4942     "hostname": "foo.bar",
   4943     "port": "",
   4944     "pathname": "/baz",
   4945     "search": "?qux",
   4946     "searchParams": "qux=",
   4947     "hash": "#foo%3Ebar"
   4948   },
   4949   {
   4950     "input": "http://foo.bar/baz?qux#foo`bar",
   4951     "base": "about:blank",
   4952     "href": "http://foo.bar/baz?qux#foo%60bar",
   4953     "origin": "http://foo.bar",
   4954     "protocol": "http:",
   4955     "username": "",
   4956     "password": "",
   4957     "host": "foo.bar",
   4958     "hostname": "foo.bar",
   4959     "port": "",
   4960     "pathname": "/baz",
   4961     "search": "?qux",
   4962     "searchParams": "qux=",
   4963     "hash": "#foo%60bar"
   4964   },
   4965   "# IPv4 parsing (via https://github.com/nodejs/node/pull/10317)",
   4966   {
   4967     "input": "http://192.168.257",
   4968     "base": "http://other.com/",
   4969     "href": "http://192.168.1.1/",
   4970     "origin": "http://192.168.1.1",
   4971     "protocol": "http:",
   4972     "username": "",
   4973     "password": "",
   4974     "host": "192.168.1.1",
   4975     "hostname": "192.168.1.1",
   4976     "port": "",
   4977     "pathname": "/",
   4978     "search": "",
   4979     "hash": ""
   4980   },
   4981   {
   4982     "input": "http://192.168.257.com",
   4983     "base": "http://other.com/",
   4984     "href": "http://192.168.257.com/",
   4985     "origin": "http://192.168.257.com",
   4986     "protocol": "http:",
   4987     "username": "",
   4988     "password": "",
   4989     "host": "192.168.257.com",
   4990     "hostname": "192.168.257.com",
   4991     "port": "",
   4992     "pathname": "/",
   4993     "search": "",
   4994     "hash": ""
   4995   },
   4996   {
   4997     "input": "http://256",
   4998     "base": "http://other.com/",
   4999     "href": "http://0.0.1.0/",
   5000     "origin": "http://0.0.1.0",
   5001     "protocol": "http:",
   5002     "username": "",
   5003     "password": "",
   5004     "host": "0.0.1.0",
   5005     "hostname": "0.0.1.0",
   5006     "port": "",
   5007     "pathname": "/",
   5008     "search": "",
   5009     "hash": ""
   5010   },
   5011   {
   5012     "input": "http://256.com",
   5013     "base": "http://other.com/",
   5014     "href": "http://256.com/",
   5015     "origin": "http://256.com",
   5016     "protocol": "http:",
   5017     "username": "",
   5018     "password": "",
   5019     "host": "256.com",
   5020     "hostname": "256.com",
   5021     "port": "",
   5022     "pathname": "/",
   5023     "search": "",
   5024     "hash": ""
   5025   },
   5026   {
   5027     "input": "http://999999999",
   5028     "base": "http://other.com/",
   5029     "href": "http://59.154.201.255/",
   5030     "origin": "http://59.154.201.255",
   5031     "protocol": "http:",
   5032     "username": "",
   5033     "password": "",
   5034     "host": "59.154.201.255",
   5035     "hostname": "59.154.201.255",
   5036     "port": "",
   5037     "pathname": "/",
   5038     "search": "",
   5039     "hash": ""
   5040   },
   5041   {
   5042     "input": "http://999999999.com",
   5043     "base": "http://other.com/",
   5044     "href": "http://999999999.com/",
   5045     "origin": "http://999999999.com",
   5046     "protocol": "http:",
   5047     "username": "",
   5048     "password": "",
   5049     "host": "999999999.com",
   5050     "hostname": "999999999.com",
   5051     "port": "",
   5052     "pathname": "/",
   5053     "search": "",
   5054     "hash": ""
   5055   },
   5056   {
   5057     "input": "http://10000000000",
   5058     "base": "http://other.com/",
   5059     "failure": true
   5060   },
   5061   {
   5062     "input": "http://10000000000.com",
   5063     "base": "http://other.com/",
   5064     "href": "http://10000000000.com/",
   5065     "origin": "http://10000000000.com",
   5066     "protocol": "http:",
   5067     "username": "",
   5068     "password": "",
   5069     "host": "10000000000.com",
   5070     "hostname": "10000000000.com",
   5071     "port": "",
   5072     "pathname": "/",
   5073     "search": "",
   5074     "hash": ""
   5075   },
   5076   {
   5077     "input": "http://4294967295",
   5078     "base": "http://other.com/",
   5079     "href": "http://255.255.255.255/",
   5080     "origin": "http://255.255.255.255",
   5081     "protocol": "http:",
   5082     "username": "",
   5083     "password": "",
   5084     "host": "255.255.255.255",
   5085     "hostname": "255.255.255.255",
   5086     "port": "",
   5087     "pathname": "/",
   5088     "search": "",
   5089     "hash": ""
   5090   },
   5091   {
   5092     "input": "http://4294967296",
   5093     "base": "http://other.com/",
   5094     "failure": true
   5095   },
   5096   {
   5097     "input": "http://0xffffffff",
   5098     "base": "http://other.com/",
   5099     "href": "http://255.255.255.255/",
   5100     "origin": "http://255.255.255.255",
   5101     "protocol": "http:",
   5102     "username": "",
   5103     "password": "",
   5104     "host": "255.255.255.255",
   5105     "hostname": "255.255.255.255",
   5106     "port": "",
   5107     "pathname": "/",
   5108     "search": "",
   5109     "hash": ""
   5110   },
   5111   {
   5112     "input": "http://0xffffffff1",
   5113     "base": "http://other.com/",
   5114     "failure": true
   5115   },
   5116   {
   5117     "input": "http://256.256.256.256",
   5118     "base": "http://other.com/",
   5119     "failure": true
   5120   },
   5121   {
   5122     "input": "http://256.256.256.256.256",
   5123     "base": "http://other.com/",
   5124     "href": "http://256.256.256.256.256/",
   5125     "origin": "http://256.256.256.256.256",
   5126     "protocol": "http:",
   5127     "username": "",
   5128     "password": "",
   5129     "host": "256.256.256.256.256",
   5130     "hostname": "256.256.256.256.256",
   5131     "port": "",
   5132     "pathname": "/",
   5133     "search": "",
   5134     "hash": ""
   5135   },
   5136   {
   5137     "input": "https://0x.0x.0",
   5138     "base": "about:blank",
   5139     "href": "https://0.0.0.0/",
   5140     "origin": "https://0.0.0.0",
   5141     "protocol": "https:",
   5142     "username": "",
   5143     "password": "",
   5144     "host": "0.0.0.0",
   5145     "hostname": "0.0.0.0",
   5146     "port": "",
   5147     "pathname": "/",
   5148     "search": "",
   5149     "hash": ""
   5150   },
   5151   "More IPv4 parsing (via https://github.com/jsdom/whatwg-url/issues/92)",
   5152   {
   5153     "input": "https://0x100000000/test",
   5154     "base": "about:blank",
   5155     "failure": true
   5156   },
   5157   {
   5158     "input": "https://256.0.0.1/test",
   5159     "base": "about:blank",
   5160     "failure": true
   5161   },
   5162   "# file URLs containing percent-encoded Windows drive letters (shouldn't work)",
   5163   {
   5164     "input": "file:///C%3A/",
   5165     "base": "about:blank",
   5166     "href": "file:///C%3A/",
   5167     "protocol": "file:",
   5168     "username": "",
   5169     "password": "",
   5170     "host": "",
   5171     "hostname": "",
   5172     "port": "",
   5173     "pathname": "/C%3A/",
   5174     "search": "",
   5175     "hash": ""
   5176   },
   5177   {
   5178     "input": "file:///C%7C/",
   5179     "base": "about:blank",
   5180     "href": "file:///C%7C/",
   5181     "protocol": "file:",
   5182     "username": "",
   5183     "password": "",
   5184     "host": "",
   5185     "hostname": "",
   5186     "port": "",
   5187     "pathname": "/C%7C/",
   5188     "search": "",
   5189     "hash": ""
   5190   },
   5191   "# file URLs relative to other file URLs (via https://github.com/jsdom/whatwg-url/pull/60)",
   5192   {
   5193     "input": "pix/submit.gif",
   5194     "base": "file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/anchor.html",
   5195     "href": "file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/pix/submit.gif",
   5196     "protocol": "file:",
   5197     "username": "",
   5198     "password": "",
   5199     "host": "",
   5200     "hostname": "",
   5201     "port": "",
   5202     "pathname": "/C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/pix/submit.gif",
   5203     "search": "",
   5204     "hash": ""
   5205   },
   5206   {
   5207     "input": "..",
   5208     "base": "file:///C:/",
   5209     "href": "file:///C:/",
   5210     "protocol": "file:",
   5211     "username": "",
   5212     "password": "",
   5213     "host": "",
   5214     "hostname": "",
   5215     "port": "",
   5216     "pathname": "/C:/",
   5217     "search": "",
   5218     "hash": ""
   5219   },
   5220   {
   5221     "input": "..",
   5222     "base": "file:///",
   5223     "href": "file:///",
   5224     "protocol": "file:",
   5225     "username": "",
   5226     "password": "",
   5227     "host": "",
   5228     "hostname": "",
   5229     "port": "",
   5230     "pathname": "/",
   5231     "search": "",
   5232     "hash": ""
   5233   },
   5234   "# More file URL tests by zcorpan and annevk",
   5235   {
   5236     "input": "/",
   5237     "base": "file:///C:/a/b",
   5238     "href": "file:///C:/",
   5239     "protocol": "file:",
   5240     "username": "",
   5241     "password": "",
   5242     "host": "",
   5243     "hostname": "",
   5244     "port": "",
   5245     "pathname": "/C:/",
   5246     "search": "",
   5247     "hash": ""
   5248   },
   5249   {
   5250     "input": "//d:",
   5251     "base": "file:///C:/a/b",
   5252     "href": "file:///d:",
   5253     "protocol": "file:",
   5254     "username": "",
   5255     "password": "",
   5256     "host": "",
   5257     "hostname": "",
   5258     "port": "",
   5259     "pathname": "/d:",
   5260     "search": "",
   5261     "hash": ""
   5262   },
   5263   {
   5264     "input": "//d:/..",
   5265     "base": "file:///C:/a/b",
   5266     "href": "file:///d:/",
   5267     "protocol": "file:",
   5268     "username": "",
   5269     "password": "",
   5270     "host": "",
   5271     "hostname": "",
   5272     "port": "",
   5273     "pathname": "/d:/",
   5274     "search": "",
   5275     "hash": ""
   5276   },
   5277   {
   5278     "input": "..",
   5279     "base": "file:///ab:/",
   5280     "href": "file:///",
   5281     "protocol": "file:",
   5282     "username": "",
   5283     "password": "",
   5284     "host": "",
   5285     "hostname": "",
   5286     "port": "",
   5287     "pathname": "/",
   5288     "search": "",
   5289     "hash": ""
   5290   },
   5291   {
   5292     "input": "..",
   5293     "base": "file:///1:/",
   5294     "href": "file:///",
   5295     "protocol": "file:",
   5296     "username": "",
   5297     "password": "",
   5298     "host": "",
   5299     "hostname": "",
   5300     "port": "",
   5301     "pathname": "/",
   5302     "search": "",
   5303     "hash": ""
   5304   },
   5305   {
   5306     "input": "",
   5307     "base": "file:///test?test#test",
   5308     "href": "file:///test?test",
   5309     "protocol": "file:",
   5310     "username": "",
   5311     "password": "",
   5312     "host": "",
   5313     "hostname": "",
   5314     "port": "",
   5315     "pathname": "/test",
   5316     "search": "?test",
   5317     "hash": ""
   5318   },
   5319   {
   5320     "input": "file:",
   5321     "base": "file:///test?test#test",
   5322     "href": "file:///test?test",
   5323     "protocol": "file:",
   5324     "username": "",
   5325     "password": "",
   5326     "host": "",
   5327     "hostname": "",
   5328     "port": "",
   5329     "pathname": "/test",
   5330     "search": "?test",
   5331     "hash": ""
   5332   },
   5333   {
   5334     "input": "?x",
   5335     "base": "file:///test?test#test",
   5336     "href": "file:///test?x",
   5337     "protocol": "file:",
   5338     "username": "",
   5339     "password": "",
   5340     "host": "",
   5341     "hostname": "",
   5342     "port": "",
   5343     "pathname": "/test",
   5344     "search": "?x",
   5345     "hash": ""
   5346   },
   5347   {
   5348     "input": "file:?x",
   5349     "base": "file:///test?test#test",
   5350     "href": "file:///test?x",
   5351     "protocol": "file:",
   5352     "username": "",
   5353     "password": "",
   5354     "host": "",
   5355     "hostname": "",
   5356     "port": "",
   5357     "pathname": "/test",
   5358     "search": "?x",
   5359     "hash": ""
   5360   },
   5361   {
   5362     "input": "#x",
   5363     "base": "file:///test?test#test",
   5364     "href": "file:///test?test#x",
   5365     "protocol": "file:",
   5366     "username": "",
   5367     "password": "",
   5368     "host": "",
   5369     "hostname": "",
   5370     "port": "",
   5371     "pathname": "/test",
   5372     "search": "?test",
   5373     "hash": "#x"
   5374   },
   5375   {
   5376     "input": "file:#x",
   5377     "base": "file:///test?test#test",
   5378     "href": "file:///test?test#x",
   5379     "protocol": "file:",
   5380     "username": "",
   5381     "password": "",
   5382     "host": "",
   5383     "hostname": "",
   5384     "port": "",
   5385     "pathname": "/test",
   5386     "search": "?test",
   5387     "hash": "#x"
   5388   },
   5389   "# File URLs and many (back)slashes",
   5390   {
   5391     "input": "file:\\\\//",
   5392     "base": "about:blank",
   5393     "href": "file:///",
   5394     "protocol": "file:",
   5395     "username": "",
   5396     "password": "",
   5397     "host": "",
   5398     "hostname": "",
   5399     "port": "",
   5400     "pathname": "/",
   5401     "search": "",
   5402     "hash": ""
   5403   },
   5404   {
   5405     "input": "file:\\\\\\\\",
   5406     "base": "about:blank",
   5407     "href": "file:///",
   5408     "protocol": "file:",
   5409     "username": "",
   5410     "password": "",
   5411     "host": "",
   5412     "hostname": "",
   5413     "port": "",
   5414     "pathname": "/",
   5415     "search": "",
   5416     "hash": ""
   5417   },
   5418   {
   5419     "input": "file:\\\\\\\\?fox",
   5420     "base": "about:blank",
   5421     "href": "file:///?fox",
   5422     "protocol": "file:",
   5423     "username": "",
   5424     "password": "",
   5425     "host": "",
   5426     "hostname": "",
   5427     "port": "",
   5428     "pathname": "/",
   5429     "search": "?fox",
   5430     "hash": ""
   5431   },
   5432   {
   5433     "input": "file:\\\\\\\\#guppy",
   5434     "base": "about:blank",
   5435     "href": "file:///#guppy",
   5436     "protocol": "file:",
   5437     "username": "",
   5438     "password": "",
   5439     "host": "",
   5440     "hostname": "",
   5441     "port": "",
   5442     "pathname": "/",
   5443     "search": "",
   5444     "hash": "#guppy"
   5445   },
   5446   {
   5447     "input": "file://spider///",
   5448     "base": "about:blank",
   5449     "href": "file://spider/",
   5450     "protocol": "file:",
   5451     "username": "",
   5452     "password": "",
   5453     "host": "spider",
   5454     "hostname": "spider",
   5455     "port": "",
   5456     "pathname": "/",
   5457     "search": "",
   5458     "hash": ""
   5459   },
   5460   {
   5461     "input": "file:\\\\localhost//",
   5462     "base": "about:blank",
   5463     "href": "file:///",
   5464     "protocol": "file:",
   5465     "username": "",
   5466     "password": "",
   5467     "host": "",
   5468     "hostname": "",
   5469     "port": "",
   5470     "pathname": "/",
   5471     "search": "",
   5472     "hash": ""
   5473   },
   5474   {
   5475     "input": "file:///localhost//cat",
   5476     "base": "about:blank",
   5477     "href": "file:///localhost//cat",
   5478     "protocol": "file:",
   5479     "username": "",
   5480     "password": "",
   5481     "host": "",
   5482     "hostname": "",
   5483     "port": "",
   5484     "pathname": "/localhost//cat",
   5485     "search": "",
   5486     "hash": ""
   5487   },
   5488   {
   5489     "input": "file://\\/localhost//cat",
   5490     "base": "about:blank",
   5491     "href": "file:///localhost//cat",
   5492     "protocol": "file:",
   5493     "username": "",
   5494     "password": "",
   5495     "host": "",
   5496     "hostname": "",
   5497     "port": "",
   5498     "pathname": "/localhost//cat",
   5499     "search": "",
   5500     "hash": ""
   5501   },
   5502   {
   5503     "input": "file://localhost//a//../..//",
   5504     "base": "about:blank",
   5505     "href": "file:///",
   5506     "protocol": "file:",
   5507     "username": "",
   5508     "password": "",
   5509     "host": "",
   5510     "hostname": "",
   5511     "port": "",
   5512     "pathname": "/",
   5513     "search": "",
   5514     "hash": ""
   5515   },
   5516   {
   5517     "input": "/////mouse",
   5518     "base": "file:///elephant",
   5519     "href": "file:///mouse",
   5520     "protocol": "file:",
   5521     "username": "",
   5522     "password": "",
   5523     "host": "",
   5524     "hostname": "",
   5525     "port": "",
   5526     "pathname": "/mouse",
   5527     "search": "",
   5528     "hash": ""
   5529   },
   5530   {
   5531     "input": "\\//pig",
   5532     "base": "file://lion/",
   5533     "href": "file:///pig",
   5534     "protocol": "file:",
   5535     "username": "",
   5536     "password": "",
   5537     "host": "",
   5538     "hostname": "",
   5539     "port": "",
   5540     "pathname": "/pig",
   5541     "search": "",
   5542     "hash": ""
   5543   },
   5544   {
   5545     "input": "\\/localhost//pig",
   5546     "base": "file://lion/",
   5547     "href": "file:///pig",
   5548     "protocol": "file:",
   5549     "username": "",
   5550     "password": "",
   5551     "host": "",
   5552     "hostname": "",
   5553     "port": "",
   5554     "pathname": "/pig",
   5555     "search": "",
   5556     "hash": ""
   5557   },
   5558   {
   5559     "input": "//localhost//pig",
   5560     "base": "file://lion/",
   5561     "href": "file:///pig",
   5562     "protocol": "file:",
   5563     "username": "",
   5564     "password": "",
   5565     "host": "",
   5566     "hostname": "",
   5567     "port": "",
   5568     "pathname": "/pig",
   5569     "search": "",
   5570     "hash": ""
   5571   },
   5572   {
   5573     "input": "/..//localhost//pig",
   5574     "base": "file://lion/",
   5575     "href": "file://lion/localhost//pig",
   5576     "protocol": "file:",
   5577     "username": "",
   5578     "password": "",
   5579     "host": "lion",
   5580     "hostname": "lion",
   5581     "port": "",
   5582     "pathname": "/localhost//pig",
   5583     "search": "",
   5584     "hash": ""
   5585   },
   5586   {
   5587     "input": "file://",
   5588     "base": "file://ape/",
   5589     "href": "file:///",
   5590     "protocol": "file:",
   5591     "username": "",
   5592     "password": "",
   5593     "host": "",
   5594     "hostname": "",
   5595     "port": "",
   5596     "pathname": "/",
   5597     "search": "",
   5598     "hash": ""
   5599   },
   5600   "# File URLs with non-empty hosts",
   5601   {
   5602     "input": "/rooibos",
   5603     "base": "file://tea/",
   5604     "href": "file://tea/rooibos",
   5605     "protocol": "file:",
   5606     "username": "",
   5607     "password": "",
   5608     "host": "tea",
   5609     "hostname": "tea",
   5610     "port": "",
   5611     "pathname": "/rooibos",
   5612     "search": "",
   5613     "hash": ""
   5614   },
   5615   {
   5616     "input": "/?chai",
   5617     "base": "file://tea/",
   5618     "href": "file://tea/?chai",
   5619     "protocol": "file:",
   5620     "username": "",
   5621     "password": "",
   5622     "host": "tea",
   5623     "hostname": "tea",
   5624     "port": "",
   5625     "pathname": "/",
   5626     "search": "?chai",
   5627     "hash": ""
   5628   },
   5629   "# Windows drive letter handling with the 'file:' base URL",
   5630   {
   5631     "input": "C|",
   5632     "base": "file://host/dir/file",
   5633     "href": "file:///C:",
   5634     "protocol": "file:",
   5635     "username": "",
   5636     "password": "",
   5637     "host": "",
   5638     "hostname": "",
   5639     "port": "",
   5640     "pathname": "/C:",
   5641     "search": "",
   5642     "hash": ""
   5643   },
   5644   {
   5645     "input": "C|#",
   5646     "base": "file://host/dir/file",
   5647     "href": "file:///C:#",
   5648     "protocol": "file:",
   5649     "username": "",
   5650     "password": "",
   5651     "host": "",
   5652     "hostname": "",
   5653     "port": "",
   5654     "pathname": "/C:",
   5655     "search": "",
   5656     "hash": ""
   5657   },
   5658   {
   5659     "input": "C|?",
   5660     "base": "file://host/dir/file",
   5661     "href": "file:///C:?",
   5662     "protocol": "file:",
   5663     "username": "",
   5664     "password": "",
   5665     "host": "",
   5666     "hostname": "",
   5667     "port": "",
   5668     "pathname": "/C:",
   5669     "search": "",
   5670     "hash": ""
   5671   },
   5672   {
   5673     "input": "C|/",
   5674     "base": "file://host/dir/file",
   5675     "href": "file:///C:/",
   5676     "protocol": "file:",
   5677     "username": "",
   5678     "password": "",
   5679     "host": "",
   5680     "hostname": "",
   5681     "port": "",
   5682     "pathname": "/C:/",
   5683     "search": "",
   5684     "hash": ""
   5685   },
   5686   {
   5687     "input": "C|\n/",
   5688     "base": "file://host/dir/file",
   5689     "href": "file:///C:/",
   5690     "protocol": "file:",
   5691     "username": "",
   5692     "password": "",
   5693     "host": "",
   5694     "hostname": "",
   5695     "port": "",
   5696     "pathname": "/C:/",
   5697     "search": "",
   5698     "hash": ""
   5699   },
   5700   {
   5701     "input": "C|\\",
   5702     "base": "file://host/dir/file",
   5703     "href": "file:///C:/",
   5704     "protocol": "file:",
   5705     "username": "",
   5706     "password": "",
   5707     "host": "",
   5708     "hostname": "",
   5709     "port": "",
   5710     "pathname": "/C:/",
   5711     "search": "",
   5712     "hash": ""
   5713   },
   5714   {
   5715     "input": "C",
   5716     "base": "file://host/dir/file",
   5717     "href": "file://host/dir/C",
   5718     "protocol": "file:",
   5719     "username": "",
   5720     "password": "",
   5721     "host": "host",
   5722     "hostname": "host",
   5723     "port": "",
   5724     "pathname": "/dir/C",
   5725     "search": "",
   5726     "hash": ""
   5727   },
   5728   {
   5729     "input": "C|a",
   5730     "base": "file://host/dir/file",
   5731     "href": "file://host/dir/C|a",
   5732     "protocol": "file:",
   5733     "username": "",
   5734     "password": "",
   5735     "host": "host",
   5736     "hostname": "host",
   5737     "port": "",
   5738     "pathname": "/dir/C|a",
   5739     "search": "",
   5740     "hash": ""
   5741   },
   5742   "# Windows drive letter quirk in the file slash state",
   5743   {
   5744     "input": "/c:/foo/bar",
   5745     "base": "file:///c:/baz/qux",
   5746     "href": "file:///c:/foo/bar",
   5747     "protocol": "file:",
   5748     "username": "",
   5749     "password": "",
   5750     "host": "",
   5751     "hostname": "",
   5752     "port": "",
   5753     "pathname": "/c:/foo/bar",
   5754     "search": "",
   5755     "hash": ""
   5756   },
   5757   {
   5758     "input": "/c|/foo/bar",
   5759     "base": "file:///c:/baz/qux",
   5760     "href": "file:///c:/foo/bar",
   5761     "protocol": "file:",
   5762     "username": "",
   5763     "password": "",
   5764     "host": "",
   5765     "hostname": "",
   5766     "port": "",
   5767     "pathname": "/c:/foo/bar",
   5768     "search": "",
   5769     "hash": ""
   5770   },
   5771   {
   5772     "input": "file:\\c:\\foo\\bar",
   5773     "base": "file:///c:/baz/qux",
   5774     "href": "file:///c:/foo/bar",
   5775     "protocol": "file:",
   5776     "username": "",
   5777     "password": "",
   5778     "host": "",
   5779     "hostname": "",
   5780     "port": "",
   5781     "pathname": "/c:/foo/bar",
   5782     "search": "",
   5783     "hash": ""
   5784   },
   5785   {
   5786     "input": "/c:/foo/bar",
   5787     "base": "file://host/path",
   5788     "href": "file:///c:/foo/bar",
   5789     "protocol": "file:",
   5790     "username": "",
   5791     "password": "",
   5792     "host": "",
   5793     "hostname": "",
   5794     "port": "",
   5795     "pathname": "/c:/foo/bar",
   5796     "search": "",
   5797     "hash": ""
   5798   },
   5799   "# Windows drive letter quirk with not empty host",
   5800   {
   5801     "input": "file://example.net/C:/",
   5802     "base": "about:blank",
   5803     "href": "file:///C:/",
   5804     "protocol": "file:",
   5805     "username": "",
   5806     "password": "",
   5807     "host": "",
   5808     "hostname": "",
   5809     "port": "",
   5810     "pathname": "/C:/",
   5811     "search": "",
   5812     "hash": ""
   5813   },
   5814   {
   5815     "input": "file://1.2.3.4/C:/",
   5816     "base": "about:blank",
   5817     "href": "file:///C:/",
   5818     "protocol": "file:",
   5819     "username": "",
   5820     "password": "",
   5821     "host": "",
   5822     "hostname": "",
   5823     "port": "",
   5824     "pathname": "/C:/",
   5825     "search": "",
   5826     "hash": ""
   5827   },
   5828   {
   5829     "input": "file://[1::8]/C:/",
   5830     "base": "about:blank",
   5831     "href": "file:///C:/",
   5832     "protocol": "file:",
   5833     "username": "",
   5834     "password": "",
   5835     "host": "",
   5836     "hostname": "",
   5837     "port": "",
   5838     "pathname": "/C:/",
   5839     "search": "",
   5840     "hash": ""
   5841   },
   5842   "# Windows drive letter quirk (no host)",
   5843   {
   5844     "input": "file:/C|/",
   5845     "base": "about:blank",
   5846     "href": "file:///C:/",
   5847     "protocol": "file:",
   5848     "username": "",
   5849     "password": "",
   5850     "host": "",
   5851     "hostname": "",
   5852     "port": "",
   5853     "pathname": "/C:/",
   5854     "search": "",
   5855     "hash": ""
   5856   },
   5857   {
   5858     "input": "file://C|/",
   5859     "base": "about:blank",
   5860     "href": "file:///C:/",
   5861     "protocol": "file:",
   5862     "username": "",
   5863     "password": "",
   5864     "host": "",
   5865     "hostname": "",
   5866     "port": "",
   5867     "pathname": "/C:/",
   5868     "search": "",
   5869     "hash": ""
   5870   },
   5871   "# file URLs without base URL by Rimas Misevičius",
   5872   {
   5873     "input": "file:",
   5874     "base": "about:blank",
   5875     "href": "file:///",
   5876     "protocol": "file:",
   5877     "username": "",
   5878     "password": "",
   5879     "host": "",
   5880     "hostname": "",
   5881     "port": "",
   5882     "pathname": "/",
   5883     "search": "",
   5884     "hash": ""
   5885   },
   5886   {
   5887     "input": "file:?q=v",
   5888     "base": "about:blank",
   5889     "href": "file:///?q=v",
   5890     "protocol": "file:",
   5891     "username": "",
   5892     "password": "",
   5893     "host": "",
   5894     "hostname": "",
   5895     "port": "",
   5896     "pathname": "/",
   5897     "search": "?q=v",
   5898     "hash": ""
   5899   },
   5900   {
   5901     "input": "file:#frag",
   5902     "base": "about:blank",
   5903     "href": "file:///#frag",
   5904     "protocol": "file:",
   5905     "username": "",
   5906     "password": "",
   5907     "host": "",
   5908     "hostname": "",
   5909     "port": "",
   5910     "pathname": "/",
   5911     "search": "",
   5912     "hash": "#frag"
   5913   },
   5914   "# file: drive letter cases from https://crbug.com/1078698",
   5915   {
   5916     "input": "file:///Y:",
   5917     "base": "about:blank",
   5918     "href": "file:///Y:",
   5919     "protocol": "file:",
   5920     "username": "",
   5921     "password": "",
   5922     "host": "",
   5923     "hostname": "",
   5924     "port": "",
   5925     "pathname": "/Y:",
   5926     "search": "",
   5927     "hash": ""
   5928   },
   5929   {
   5930     "input": "file:///Y:/",
   5931     "base": "about:blank",
   5932     "href": "file:///Y:/",
   5933     "protocol": "file:",
   5934     "username": "",
   5935     "password": "",
   5936     "host": "",
   5937     "hostname": "",
   5938     "port": "",
   5939     "pathname": "/Y:/",
   5940     "search": "",
   5941     "hash": ""
   5942   },
   5943   {
   5944     "input": "file:///./Y",
   5945     "base": "about:blank",
   5946     "href": "file:///Y",
   5947     "protocol": "file:",
   5948     "username": "",
   5949     "password": "",
   5950     "host": "",
   5951     "hostname": "",
   5952     "port": "",
   5953     "pathname": "/Y",
   5954     "search": "",
   5955     "hash": ""
   5956   },
   5957   {
   5958     "input": "file:///./Y:",
   5959     "base": "about:blank",
   5960     "href": "file:///Y:",
   5961     "protocol": "file:",
   5962     "username": "",
   5963     "password": "",
   5964     "host": "",
   5965     "hostname": "",
   5966     "port": "",
   5967     "pathname": "/Y:",
   5968     "search": "",
   5969     "hash": ""
   5970   },
   5971   {
   5972     "input": "\\\\\\.\\Y:",
   5973     "base": "about:blank",
   5974     "failure": true
   5975   },
   5976   "# file: drive letter cases from https://crbug.com/1078698 but lowercased",
   5977   {
   5978     "input": "file:///y:",
   5979     "base": "about:blank",
   5980     "href": "file:///y:",
   5981     "protocol": "file:",
   5982     "username": "",
   5983     "password": "",
   5984     "host": "",
   5985     "hostname": "",
   5986     "port": "",
   5987     "pathname": "/y:",
   5988     "search": "",
   5989     "hash": ""
   5990   },
   5991   {
   5992     "input": "file:///y:/",
   5993     "base": "about:blank",
   5994     "href": "file:///y:/",
   5995     "protocol": "file:",
   5996     "username": "",
   5997     "password": "",
   5998     "host": "",
   5999     "hostname": "",
   6000     "port": "",
   6001     "pathname": "/y:/",
   6002     "search": "",
   6003     "hash": ""
   6004   },
   6005   {
   6006     "input": "file:///./y",
   6007     "base": "about:blank",
   6008     "href": "file:///y",
   6009     "protocol": "file:",
   6010     "username": "",
   6011     "password": "",
   6012     "host": "",
   6013     "hostname": "",
   6014     "port": "",
   6015     "pathname": "/y",
   6016     "search": "",
   6017     "hash": ""
   6018   },
   6019   {
   6020     "input": "file:///./y:",
   6021     "base": "about:blank",
   6022     "href": "file:///y:",
   6023     "protocol": "file:",
   6024     "username": "",
   6025     "password": "",
   6026     "host": "",
   6027     "hostname": "",
   6028     "port": "",
   6029     "pathname": "/y:",
   6030     "search": "",
   6031     "hash": ""
   6032   },
   6033   {
   6034     "input": "\\\\\\.\\y:",
   6035     "base": "about:blank",
   6036     "failure": true
   6037   },
   6038   "# IPv6 tests",
   6039   {
   6040     "input": "http://[1:0::]",
   6041     "base": "http://example.net/",
   6042     "href": "http://[1::]/",
   6043     "origin": "http://[1::]",
   6044     "protocol": "http:",
   6045     "username": "",
   6046     "password": "",
   6047     "host": "[1::]",
   6048     "hostname": "[1::]",
   6049     "port": "",
   6050     "pathname": "/",
   6051     "search": "",
   6052     "hash": ""
   6053   },
   6054   {
   6055     "input": "http://[0:1:2:3:4:5:6:7:8]",
   6056     "base": "http://example.net/",
   6057     "failure": true
   6058   },
   6059   {
   6060     "input": "https://[0::0::0]",
   6061     "base": "about:blank",
   6062     "failure": true
   6063   },
   6064   {
   6065     "input": "https://[0:.0]",
   6066     "base": "about:blank",
   6067     "failure": true
   6068   },
   6069   {
   6070     "input": "https://[0:0:]",
   6071     "base": "about:blank",
   6072     "failure": true
   6073   },
   6074   {
   6075     "input": "https://[0:1:2:3:4:5:6:7.0.0.0.1]",
   6076     "base": "about:blank",
   6077     "failure": true
   6078   },
   6079   {
   6080     "input": "https://[0:1.00.0.0.0]",
   6081     "base": "about:blank",
   6082     "failure": true
   6083   },
   6084   {
   6085     "input": "https://[0:1.290.0.0.0]",
   6086     "base": "about:blank",
   6087     "failure": true
   6088   },
   6089   {
   6090     "input": "https://[0:1.23.23]",
   6091     "base": "about:blank",
   6092     "failure": true
   6093   },
   6094   "# Empty host",
   6095   {
   6096     "input": "http://?",
   6097     "base": "about:blank",
   6098     "failure": true
   6099   },
   6100   {
   6101     "input": "http://#",
   6102     "base": "about:blank",
   6103     "failure": true
   6104   },
   6105   "Port overflow (2^32 + 81)",
   6106   {
   6107     "input": "http://f:4294967377/c",
   6108     "base": "http://example.org/",
   6109     "failure": true
   6110   },
   6111   "Port overflow (2^64 + 81)",
   6112   {
   6113     "input": "http://f:18446744073709551697/c",
   6114     "base": "http://example.org/",
   6115     "failure": true
   6116   },
   6117   "Port overflow (2^128 + 81)",
   6118   {
   6119     "input": "http://f:340282366920938463463374607431768211537/c",
   6120     "base": "http://example.org/",
   6121     "failure": true
   6122   },
   6123   "# Non-special-URL path tests",
   6124   {
   6125     "input": "sc://ñ",
   6126     "base": "about:blank",
   6127     "href": "sc://%C3%B1",
   6128     "origin": "null",
   6129     "protocol": "sc:",
   6130     "username": "",
   6131     "password": "",
   6132     "host": "%C3%B1",
   6133     "hostname": "%C3%B1",
   6134     "port": "",
   6135     "pathname": "",
   6136     "search": "",
   6137     "hash": ""
   6138   },
   6139   {
   6140     "input": "sc://ñ?x",
   6141     "base": "about:blank",
   6142     "href": "sc://%C3%B1?x",
   6143     "origin": "null",
   6144     "protocol": "sc:",
   6145     "username": "",
   6146     "password": "",
   6147     "host": "%C3%B1",
   6148     "hostname": "%C3%B1",
   6149     "port": "",
   6150     "pathname": "",
   6151     "search": "?x",
   6152     "hash": ""
   6153   },
   6154   {
   6155     "input": "sc://ñ#x",
   6156     "base": "about:blank",
   6157     "href": "sc://%C3%B1#x",
   6158     "origin": "null",
   6159     "protocol": "sc:",
   6160     "username": "",
   6161     "password": "",
   6162     "host": "%C3%B1",
   6163     "hostname": "%C3%B1",
   6164     "port": "",
   6165     "pathname": "",
   6166     "search": "",
   6167     "hash": "#x"
   6168   },
   6169   {
   6170     "input": "#x",
   6171     "base": "sc://ñ",
   6172     "href": "sc://%C3%B1#x",
   6173     "origin": "null",
   6174     "protocol": "sc:",
   6175     "username": "",
   6176     "password": "",
   6177     "host": "%C3%B1",
   6178     "hostname": "%C3%B1",
   6179     "port": "",
   6180     "pathname": "",
   6181     "search": "",
   6182     "hash": "#x"
   6183   },
   6184   {
   6185     "input": "?x",
   6186     "base": "sc://ñ",
   6187     "href": "sc://%C3%B1?x",
   6188     "origin": "null",
   6189     "protocol": "sc:",
   6190     "username": "",
   6191     "password": "",
   6192     "host": "%C3%B1",
   6193     "hostname": "%C3%B1",
   6194     "port": "",
   6195     "pathname": "",
   6196     "search": "?x",
   6197     "hash": ""
   6198   },
   6199   {
   6200     "input": "sc://?",
   6201     "base": "about:blank",
   6202     "href": "sc://?",
   6203     "protocol": "sc:",
   6204     "username": "",
   6205     "password": "",
   6206     "host": "",
   6207     "hostname": "",
   6208     "port": "",
   6209     "pathname": "",
   6210     "search": "",
   6211     "hash": ""
   6212   },
   6213   {
   6214     "input": "sc://#",
   6215     "base": "about:blank",
   6216     "href": "sc://#",
   6217     "protocol": "sc:",
   6218     "username": "",
   6219     "password": "",
   6220     "host": "",
   6221     "hostname": "",
   6222     "port": "",
   6223     "pathname": "",
   6224     "search": "",
   6225     "hash": ""
   6226   },
   6227   {
   6228     "input": "///",
   6229     "base": "sc://x/",
   6230     "href": "sc:///",
   6231     "protocol": "sc:",
   6232     "username": "",
   6233     "password": "",
   6234     "host": "",
   6235     "hostname": "",
   6236     "port": "",
   6237     "pathname": "/",
   6238     "search": "",
   6239     "hash": ""
   6240   },
   6241   {
   6242     "input": "////",
   6243     "base": "sc://x/",
   6244     "href": "sc:////",
   6245     "protocol": "sc:",
   6246     "username": "",
   6247     "password": "",
   6248     "host": "",
   6249     "hostname": "",
   6250     "port": "",
   6251     "pathname": "//",
   6252     "search": "",
   6253     "hash": ""
   6254   },
   6255   {
   6256     "input": "////x/",
   6257     "base": "sc://x/",
   6258     "href": "sc:////x/",
   6259     "protocol": "sc:",
   6260     "username": "",
   6261     "password": "",
   6262     "host": "",
   6263     "hostname": "",
   6264     "port": "",
   6265     "pathname": "//x/",
   6266     "search": "",
   6267     "hash": ""
   6268   },
   6269   {
   6270     "input": "tftp://foobar.com/someconfig;mode=netascii",
   6271     "base": "about:blank",
   6272     "href": "tftp://foobar.com/someconfig;mode=netascii",
   6273     "origin": "null",
   6274     "protocol": "tftp:",
   6275     "username": "",
   6276     "password": "",
   6277     "host": "foobar.com",
   6278     "hostname": "foobar.com",
   6279     "port": "",
   6280     "pathname": "/someconfig;mode=netascii",
   6281     "search": "",
   6282     "hash": ""
   6283   },
   6284   {
   6285     "input": "telnet://user:pass@foobar.com:23/",
   6286     "base": "about:blank",
   6287     "href": "telnet://user:pass@foobar.com:23/",
   6288     "origin": "null",
   6289     "protocol": "telnet:",
   6290     "username": "user",
   6291     "password": "pass",
   6292     "host": "foobar.com:23",
   6293     "hostname": "foobar.com",
   6294     "port": "23",
   6295     "pathname": "/",
   6296     "search": "",
   6297     "hash": ""
   6298   },
   6299   {
   6300     "input": "ut2004://10.10.10.10:7777/Index.ut2",
   6301     "base": "about:blank",
   6302     "href": "ut2004://10.10.10.10:7777/Index.ut2",
   6303     "origin": "null",
   6304     "protocol": "ut2004:",
   6305     "username": "",
   6306     "password": "",
   6307     "host": "10.10.10.10:7777",
   6308     "hostname": "10.10.10.10",
   6309     "port": "7777",
   6310     "pathname": "/Index.ut2",
   6311     "search": "",
   6312     "hash": ""
   6313   },
   6314   {
   6315     "input": "redis://foo:bar@somehost:6379/0?baz=bam&qux=baz",
   6316     "base": "about:blank",
   6317     "href": "redis://foo:bar@somehost:6379/0?baz=bam&qux=baz",
   6318     "origin": "null",
   6319     "protocol": "redis:",
   6320     "username": "foo",
   6321     "password": "bar",
   6322     "host": "somehost:6379",
   6323     "hostname": "somehost",
   6324     "port": "6379",
   6325     "pathname": "/0",
   6326     "search": "?baz=bam&qux=baz",
   6327     "hash": ""
   6328   },
   6329   {
   6330     "input": "rsync://foo@host:911/sup",
   6331     "base": "about:blank",
   6332     "href": "rsync://foo@host:911/sup",
   6333     "origin": "null",
   6334     "protocol": "rsync:",
   6335     "username": "foo",
   6336     "password": "",
   6337     "host": "host:911",
   6338     "hostname": "host",
   6339     "port": "911",
   6340     "pathname": "/sup",
   6341     "search": "",
   6342     "hash": ""
   6343   },
   6344   {
   6345     "input": "git://github.com/foo/bar.git",
   6346     "base": "about:blank",
   6347     "href": "git://github.com/foo/bar.git",
   6348     "origin": "null",
   6349     "protocol": "git:",
   6350     "username": "",
   6351     "password": "",
   6352     "host": "github.com",
   6353     "hostname": "github.com",
   6354     "port": "",
   6355     "pathname": "/foo/bar.git",
   6356     "search": "",
   6357     "hash": ""
   6358   },
   6359   {
   6360     "input": "irc://myserver.com:6999/channel?passwd",
   6361     "base": "about:blank",
   6362     "href": "irc://myserver.com:6999/channel?passwd",
   6363     "origin": "null",
   6364     "protocol": "irc:",
   6365     "username": "",
   6366     "password": "",
   6367     "host": "myserver.com:6999",
   6368     "hostname": "myserver.com",
   6369     "port": "6999",
   6370     "pathname": "/channel",
   6371     "search": "?passwd",
   6372     "hash": ""
   6373   },
   6374   {
   6375     "input": "dns://fw.example.org:9999/foo.bar.org?type=TXT",
   6376     "base": "about:blank",
   6377     "href": "dns://fw.example.org:9999/foo.bar.org?type=TXT",
   6378     "origin": "null",
   6379     "protocol": "dns:",
   6380     "username": "",
   6381     "password": "",
   6382     "host": "fw.example.org:9999",
   6383     "hostname": "fw.example.org",
   6384     "port": "9999",
   6385     "pathname": "/foo.bar.org",
   6386     "search": "?type=TXT",
   6387     "hash": ""
   6388   },
   6389   {
   6390     "input": "ldap://localhost:389/ou=People,o=JNDITutorial",
   6391     "base": "about:blank",
   6392     "href": "ldap://localhost:389/ou=People,o=JNDITutorial",
   6393     "origin": "null",
   6394     "protocol": "ldap:",
   6395     "username": "",
   6396     "password": "",
   6397     "host": "localhost:389",
   6398     "hostname": "localhost",
   6399     "port": "389",
   6400     "pathname": "/ou=People,o=JNDITutorial",
   6401     "search": "",
   6402     "hash": ""
   6403   },
   6404   {
   6405     "input": "git+https://github.com/foo/bar",
   6406     "base": "about:blank",
   6407     "href": "git+https://github.com/foo/bar",
   6408     "origin": "null",
   6409     "protocol": "git+https:",
   6410     "username": "",
   6411     "password": "",
   6412     "host": "github.com",
   6413     "hostname": "github.com",
   6414     "port": "",
   6415     "pathname": "/foo/bar",
   6416     "search": "",
   6417     "hash": ""
   6418   },
   6419   {
   6420     "input": "urn:ietf:rfc:2648",
   6421     "base": "about:blank",
   6422     "href": "urn:ietf:rfc:2648",
   6423     "origin": "null",
   6424     "protocol": "urn:",
   6425     "username": "",
   6426     "password": "",
   6427     "host": "",
   6428     "hostname": "",
   6429     "port": "",
   6430     "pathname": "ietf:rfc:2648",
   6431     "search": "",
   6432     "hash": ""
   6433   },
   6434   {
   6435     "input": "tag:joe@example.org,2001:foo/bar",
   6436     "base": "about:blank",
   6437     "href": "tag:joe@example.org,2001:foo/bar",
   6438     "origin": "null",
   6439     "protocol": "tag:",
   6440     "username": "",
   6441     "password": "",
   6442     "host": "",
   6443     "hostname": "",
   6444     "port": "",
   6445     "pathname": "joe@example.org,2001:foo/bar",
   6446     "search": "",
   6447     "hash": ""
   6448   },
   6449   "# percent encoded hosts in non-special-URLs",
   6450   {
   6451     "input": "non-special://%E2%80%A0/",
   6452     "base": "about:blank",
   6453     "href": "non-special://%E2%80%A0/",
   6454     "protocol": "non-special:",
   6455     "username": "",
   6456     "password": "",
   6457     "host": "%E2%80%A0",
   6458     "hostname": "%E2%80%A0",
   6459     "port": "",
   6460     "pathname": "/",
   6461     "search": "",
   6462     "hash": ""
   6463   },
   6464   {
   6465     "input": "non-special://H%4fSt/path",
   6466     "base": "about:blank",
   6467     "href": "non-special://H%4fSt/path",
   6468     "protocol": "non-special:",
   6469     "username": "",
   6470     "password": "",
   6471     "host": "H%4fSt",
   6472     "hostname": "H%4fSt",
   6473     "port": "",
   6474     "pathname": "/path",
   6475     "search": "",
   6476     "hash": ""
   6477   },
   6478   "# IPv6 in non-special-URLs",
   6479   {
   6480     "input": "non-special://[1:2:0:0:5:0:0:0]/",
   6481     "base": "about:blank",
   6482     "href": "non-special://[1:2:0:0:5::]/",
   6483     "protocol": "non-special:",
   6484     "username": "",
   6485     "password": "",
   6486     "host": "[1:2:0:0:5::]",
   6487     "hostname": "[1:2:0:0:5::]",
   6488     "port": "",
   6489     "pathname": "/",
   6490     "search": "",
   6491     "hash": ""
   6492   },
   6493   {
   6494     "input": "non-special://[1:2:0:0:0:0:0:3]/",
   6495     "base": "about:blank",
   6496     "href": "non-special://[1:2::3]/",
   6497     "protocol": "non-special:",
   6498     "username": "",
   6499     "password": "",
   6500     "host": "[1:2::3]",
   6501     "hostname": "[1:2::3]",
   6502     "port": "",
   6503     "pathname": "/",
   6504     "search": "",
   6505     "hash": ""
   6506   },
   6507   {
   6508     "input": "non-special://[1:2::3]:80/",
   6509     "base": "about:blank",
   6510     "href": "non-special://[1:2::3]:80/",
   6511     "protocol": "non-special:",
   6512     "username": "",
   6513     "password": "",
   6514     "host": "[1:2::3]:80",
   6515     "hostname": "[1:2::3]",
   6516     "port": "80",
   6517     "pathname": "/",
   6518     "search": "",
   6519     "hash": ""
   6520   },
   6521   {
   6522     "input": "non-special://[:80/",
   6523     "base": "about:blank",
   6524     "failure": true
   6525   },
   6526   {
   6527     "input": "blob:https://example.com:443/",
   6528     "base": "about:blank",
   6529     "href": "blob:https://example.com:443/",
   6530     "protocol": "blob:",
   6531     "username": "",
   6532     "password": "",
   6533     "host": "",
   6534     "hostname": "",
   6535     "port": "",
   6536     "pathname": "https://example.com:443/",
   6537     "search": "",
   6538     "hash": ""
   6539   },
   6540   {
   6541     "input": "blob:d3958f5c-0777-0845-9dcf-2cb28783acaf",
   6542     "base": "about:blank",
   6543     "href": "blob:d3958f5c-0777-0845-9dcf-2cb28783acaf",
   6544     "protocol": "blob:",
   6545     "username": "",
   6546     "password": "",
   6547     "host": "",
   6548     "hostname": "",
   6549     "port": "",
   6550     "pathname": "d3958f5c-0777-0845-9dcf-2cb28783acaf",
   6551     "search": "",
   6552     "hash": ""
   6553   },
   6554   "Invalid IPv4 radix digits",
   6555   {
   6556     "input": "http://0177.0.0.0189",
   6557     "base": "about:blank",
   6558     "href": "http://0177.0.0.0189/",
   6559     "protocol": "http:",
   6560     "username": "",
   6561     "password": "",
   6562     "host": "0177.0.0.0189",
   6563     "hostname": "0177.0.0.0189",
   6564     "port": "",
   6565     "pathname": "/",
   6566     "search": "",
   6567     "hash": ""
   6568   },
   6569   {
   6570     "input": "http://0x7f.0.0.0x7g",
   6571     "base": "about:blank",
   6572     "href": "http://0x7f.0.0.0x7g/",
   6573     "protocol": "http:",
   6574     "username": "",
   6575     "password": "",
   6576     "host": "0x7f.0.0.0x7g",
   6577     "hostname": "0x7f.0.0.0x7g",
   6578     "port": "",
   6579     "pathname": "/",
   6580     "search": "",
   6581     "hash": ""
   6582   },
   6583   {
   6584     "input": "http://0X7F.0.0.0X7G",
   6585     "base": "about:blank",
   6586     "href": "http://0x7f.0.0.0x7g/",
   6587     "protocol": "http:",
   6588     "username": "",
   6589     "password": "",
   6590     "host": "0x7f.0.0.0x7g",
   6591     "hostname": "0x7f.0.0.0x7g",
   6592     "port": "",
   6593     "pathname": "/",
   6594     "search": "",
   6595     "hash": ""
   6596   },
   6597   "Invalid IPv4 portion of IPv6 address",
   6598   {
   6599     "input": "http://[::127.0.0.0.1]",
   6600     "base": "about:blank",
   6601     "failure": true
   6602   },
   6603   "Uncompressed IPv6 addresses with 0",
   6604   {
   6605     "input": "http://[0:1:0:1:0:1:0:1]",
   6606     "base": "about:blank",
   6607     "href": "http://[0:1:0:1:0:1:0:1]/",
   6608     "protocol": "http:",
   6609     "username": "",
   6610     "password": "",
   6611     "host": "[0:1:0:1:0:1:0:1]",
   6612     "hostname": "[0:1:0:1:0:1:0:1]",
   6613     "port": "",
   6614     "pathname": "/",
   6615     "search": "",
   6616     "hash": ""
   6617   },
   6618   {
   6619     "input": "http://[1:0:1:0:1:0:1:0]",
   6620     "base": "about:blank",
   6621     "href": "http://[1:0:1:0:1:0:1:0]/",
   6622     "protocol": "http:",
   6623     "username": "",
   6624     "password": "",
   6625     "host": "[1:0:1:0:1:0:1:0]",
   6626     "hostname": "[1:0:1:0:1:0:1:0]",
   6627     "port": "",
   6628     "pathname": "/",
   6629     "search": "",
   6630     "hash": ""
   6631   },
   6632   "Percent-encoded query and fragment",
   6633   {
   6634     "input": "http://example.org/test?\u0022",
   6635     "base": "about:blank",
   6636     "href": "http://example.org/test?%22",
   6637     "protocol": "http:",
   6638     "username": "",
   6639     "password": "",
   6640     "host": "example.org",
   6641     "hostname": "example.org",
   6642     "port": "",
   6643     "pathname": "/test",
   6644     "search": "?%22",
   6645     "hash": ""
   6646   },
   6647   {
   6648     "input": "http://example.org/test?\u0023",
   6649     "base": "about:blank",
   6650     "href": "http://example.org/test?#",
   6651     "protocol": "http:",
   6652     "username": "",
   6653     "password": "",
   6654     "host": "example.org",
   6655     "hostname": "example.org",
   6656     "port": "",
   6657     "pathname": "/test",
   6658     "search": "",
   6659     "hash": ""
   6660   },
   6661   {
   6662     "input": "http://example.org/test?\u003C",
   6663     "base": "about:blank",
   6664     "href": "http://example.org/test?%3C",
   6665     "protocol": "http:",
   6666     "username": "",
   6667     "password": "",
   6668     "host": "example.org",
   6669     "hostname": "example.org",
   6670     "port": "",
   6671     "pathname": "/test",
   6672     "search": "?%3C",
   6673     "hash": ""
   6674   },
   6675   {
   6676     "input": "http://example.org/test?\u003E",
   6677     "base": "about:blank",
   6678     "href": "http://example.org/test?%3E",
   6679     "protocol": "http:",
   6680     "username": "",
   6681     "password": "",
   6682     "host": "example.org",
   6683     "hostname": "example.org",
   6684     "port": "",
   6685     "pathname": "/test",
   6686     "search": "?%3E",
   6687     "hash": ""
   6688   },
   6689   {
   6690     "input": "http://example.org/test?\u2323",
   6691     "base": "about:blank",
   6692     "href": "http://example.org/test?%E2%8C%A3",
   6693     "protocol": "http:",
   6694     "username": "",
   6695     "password": "",
   6696     "host": "example.org",
   6697     "hostname": "example.org",
   6698     "port": "",
   6699     "pathname": "/test",
   6700     "search": "?%E2%8C%A3",
   6701     "hash": ""
   6702   },
   6703   {
   6704     "input": "http://example.org/test?%23%23",
   6705     "base": "about:blank",
   6706     "href": "http://example.org/test?%23%23",
   6707     "protocol": "http:",
   6708     "username": "",
   6709     "password": "",
   6710     "host": "example.org",
   6711     "hostname": "example.org",
   6712     "port": "",
   6713     "pathname": "/test",
   6714     "search": "?%23%23",
   6715     "hash": ""
   6716   },
   6717   {
   6718     "input": "http://example.org/test?%GH",
   6719     "base": "about:blank",
   6720     "href": "http://example.org/test?%GH",
   6721     "protocol": "http:",
   6722     "username": "",
   6723     "password": "",
   6724     "host": "example.org",
   6725     "hostname": "example.org",
   6726     "port": "",
   6727     "pathname": "/test",
   6728     "search": "?%GH",
   6729     "hash": ""
   6730   },
   6731   {
   6732     "input": "http://example.org/test?a#%EF",
   6733     "base": "about:blank",
   6734     "href": "http://example.org/test?a#%EF",
   6735     "protocol": "http:",
   6736     "username": "",
   6737     "password": "",
   6738     "host": "example.org",
   6739     "hostname": "example.org",
   6740     "port": "",
   6741     "pathname": "/test",
   6742     "search": "?a",
   6743     "hash": "#%EF"
   6744   },
   6745   {
   6746     "input": "http://example.org/test?a#%GH",
   6747     "base": "about:blank",
   6748     "href": "http://example.org/test?a#%GH",
   6749     "protocol": "http:",
   6750     "username": "",
   6751     "password": "",
   6752     "host": "example.org",
   6753     "hostname": "example.org",
   6754     "port": "",
   6755     "pathname": "/test",
   6756     "search": "?a",
   6757     "hash": "#%GH"
   6758   },
   6759   "URLs that require a non-about:blank base. (Also serve as invalid base tests.)",
   6760   {
   6761     "input": "a",
   6762     "base": "about:blank",
   6763     "failure": true
   6764   },
   6765   {
   6766     "input": "a/",
   6767     "base": "about:blank",
   6768     "failure": true
   6769   },
   6770   {
   6771     "input": "a//",
   6772     "base": "about:blank",
   6773     "failure": true
   6774   },
   6775   "Bases that don't fail to parse but fail to be bases",
   6776   {
   6777     "input": "test-a-colon.html",
   6778     "base": "a:",
   6779     "failure": true
   6780   },
   6781   {
   6782     "input": "test-a-colon-b.html",
   6783     "base": "a:b",
   6784     "failure": true
   6785   },
   6786   "Other base URL tests, that must succeed",
   6787   {
   6788     "input": "test-a-colon-slash.html",
   6789     "base": "a:/",
   6790     "href": "a:/test-a-colon-slash.html",
   6791     "protocol": "a:",
   6792     "username": "",
   6793     "password": "",
   6794     "host": "",
   6795     "hostname": "",
   6796     "port": "",
   6797     "pathname": "/test-a-colon-slash.html",
   6798     "search": "",
   6799     "hash": ""
   6800   },
   6801   {
   6802     "input": "test-a-colon-slash-slash.html",
   6803     "base": "a://",
   6804     "href": "a:///test-a-colon-slash-slash.html",
   6805     "protocol": "a:",
   6806     "username": "",
   6807     "password": "",
   6808     "host": "",
   6809     "hostname": "",
   6810     "port": "",
   6811     "pathname": "/test-a-colon-slash-slash.html",
   6812     "search": "",
   6813     "hash": ""
   6814   },
   6815   {
   6816     "input": "test-a-colon-slash-b.html",
   6817     "base": "a:/b",
   6818     "href": "a:/test-a-colon-slash-b.html",
   6819     "protocol": "a:",
   6820     "username": "",
   6821     "password": "",
   6822     "host": "",
   6823     "hostname": "",
   6824     "port": "",
   6825     "pathname": "/test-a-colon-slash-b.html",
   6826     "search": "",
   6827     "hash": ""
   6828   },
   6829   {
   6830     "input": "test-a-colon-slash-slash-b.html",
   6831     "base": "a://b",
   6832     "href": "a://b/test-a-colon-slash-slash-b.html",
   6833     "protocol": "a:",
   6834     "username": "",
   6835     "password": "",
   6836     "host": "b",
   6837     "hostname": "b",
   6838     "port": "",
   6839     "pathname": "/test-a-colon-slash-slash-b.html",
   6840     "search": "",
   6841     "hash": ""
   6842   },
   6843   "Null code point in fragment",
   6844   {
   6845     "input": "http://example.org/test?a#b\u0000c",
   6846     "base": "about:blank",
   6847     "href": "http://example.org/test?a#b%00c",
   6848     "protocol": "http:",
   6849     "username": "",
   6850     "password": "",
   6851     "host": "example.org",
   6852     "hostname": "example.org",
   6853     "port": "",
   6854     "pathname": "/test",
   6855     "search": "?a",
   6856     "hash": "#b%00c"
   6857   },
   6858   {
   6859     "input": "non-spec://example.org/test?a#b\u0000c",
   6860     "base": "about:blank",
   6861     "href": "non-spec://example.org/test?a#b%00c",
   6862     "protocol": "non-spec:",
   6863     "username": "",
   6864     "password": "",
   6865     "host": "example.org",
   6866     "hostname": "example.org",
   6867     "port": "",
   6868     "pathname": "/test",
   6869     "search": "?a",
   6870     "hash": "#b%00c"
   6871   },
   6872   {
   6873     "input": "non-spec:/test?a#b\u0000c",
   6874     "base": "about:blank",
   6875     "href": "non-spec:/test?a#b%00c",
   6876     "protocol": "non-spec:",
   6877     "username": "",
   6878     "password": "",
   6879     "host": "",
   6880     "hostname": "",
   6881     "port": "",
   6882     "pathname": "/test",
   6883     "search": "?a",
   6884     "hash": "#b%00c"
   6885   },
   6886   "First scheme char - not allowed: https://github.com/whatwg/url/issues/464",
   6887   {
   6888     "input": "10.0.0.7:8080/foo.html",
   6889     "base": "file:///some/dir/bar.html",
   6890     "href": "file:///some/dir/10.0.0.7:8080/foo.html",
   6891     "protocol": "file:",
   6892     "username": "",
   6893     "password": "",
   6894     "host": "",
   6895     "hostname": "",
   6896     "port": "",
   6897     "pathname": "/some/dir/10.0.0.7:8080/foo.html",
   6898     "search": "",
   6899     "hash": ""
   6900   },
   6901   "Subsequent scheme chars - not allowed",
   6902   {
   6903     "input": "a!@$*=/foo.html",
   6904     "base": "file:///some/dir/bar.html",
   6905     "href": "file:///some/dir/a!@$*=/foo.html",
   6906     "protocol": "file:",
   6907     "username": "",
   6908     "password": "",
   6909     "host": "",
   6910     "hostname": "",
   6911     "port": "",
   6912     "pathname": "/some/dir/a!@$*=/foo.html",
   6913     "search": "",
   6914     "hash": ""
   6915   },
   6916   "First and subsequent scheme chars - allowed",
   6917   {
   6918     "input": "a1234567890-+.:foo/bar",
   6919     "base": "http://example.com/dir/file",
   6920     "href": "a1234567890-+.:foo/bar",
   6921     "protocol": "a1234567890-+.:",
   6922     "username": "",
   6923     "password": "",
   6924     "host": "",
   6925     "hostname": "",
   6926     "port": "",
   6927     "pathname": "foo/bar",
   6928     "search": "",
   6929     "hash": ""
   6930   },
   6931   "IDNA ignored code points in file URLs hosts",
   6932   {
   6933     "input": "file://a\u00ADb/p",
   6934     "base": "about:blank",
   6935     "href": "file://ab/p",
   6936     "protocol": "file:",
   6937     "username": "",
   6938     "password": "",
   6939     "host": "ab",
   6940     "hostname": "ab",
   6941     "port": "",
   6942     "pathname": "/p",
   6943     "search": "",
   6944     "hash": ""
   6945   },
   6946   {
   6947     "input": "file://a%C2%ADb/p",
   6948     "base": "about:blank",
   6949     "href": "file://ab/p",
   6950     "protocol": "file:",
   6951     "username": "",
   6952     "password": "",
   6953     "host": "ab",
   6954     "hostname": "ab",
   6955     "port": "",
   6956     "pathname": "/p",
   6957     "search": "",
   6958     "hash": ""
   6959   },
   6960   "Empty host after the domain to ASCII",
   6961   {
   6962     "input": "file://\u00ad/p",
   6963     "base": "about:blank",
   6964     "failure": true
   6965   },
   6966   {
   6967     "input": "file://%C2%AD/p",
   6968     "base": "about:blank",
   6969     "failure": true
   6970   },
   6971   {
   6972     "input": "file://xn--/p",
   6973     "base": "about:blank",
   6974     "failure": true
   6975   },
   6976   "https://bugzilla.mozilla.org/show_bug.cgi?id=1647058",
   6977   {
   6978     "input": "#link",
   6979     "base": "https://example.org/##link",
   6980     "href": "https://example.org/#link",
   6981     "protocol": "https:",
   6982     "username": "",
   6983     "password": "",
   6984     "host": "example.org",
   6985     "hostname": "example.org",
   6986     "port": "",
   6987     "pathname": "/",
   6988     "search": "",
   6989     "hash": "#link"
   6990   }
   6991 ]