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