tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

urltestdata-orig.json (137437B)


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