source: project/release/5/uri-generic/trunk/tests/urltestdata.scm

Last change on this file was 36584, checked in by iraikov, 2 months ago

added urltestdata from the WTF URL specification project

File size: 145.7 KB
Line 
1;;
2;; Extracted from https://github.com/web-platform-tests/wpt/blob/master/url/resources/urltestdata.json
3;; 
4
5(define url-test-data
6  `(
7    "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/segments.js"
8    ((input . "http://example\t.\norg")
9     (base . "http://example.org/foo/bar")
10     (href . "http://example.org/")
11     (origin . "http://example.org")
12     (protocol . "http:")
13     (username . "")
14     (password . "")
15     (host . "example.org")
16     (hostname . "example.org")
17     (port . "")
18     (pathname . "/")
19     (search . "")
20     (hash . ""))
21    ((input . "http://user:pass@foo:21/bar;par?bc")
22     (base . "http://example.org/foo/bar")
23     (href . "http://user:pass@foo:21/bar;par?bc")
24     (origin . "http://foo:21")
25     (protocol . "http:")
26     (username . "user")
27     (password . "pass")
28     (host . "foo:21")
29     (hostname . "foo")
30     (port . "21")
31     (pathname . "/bar;par")
32     (search . "?b")
33     (hash . "c"))
34    ((input . "https://test:@test")
35     (base . "about:blank")
36     (href . "https://test@test/")
37     (origin . "https://test")
38     (protocol . "https:")
39     (username . "test")
40     (password . "")
41     (host . "test")
42     (hostname . "test")
43     (port . "")
44     (pathname . "/")
45     (search . "")
46     (hash . ""))
47    ((input . "https://:@test")
48     (base . "about:blank")
49     (href . "https://test/")
50     (origin . "https://test")
51     (protocol . "https:")
52     (username . "")
53     (password . "")
54     (host . "test")
55     (hostname . "test")
56     (port . "")
57     (pathname . "/")
58     (search . "")
59     (hash . ""))
60    ((input . "non-special://test:@test/x")
61     (base . "about:blank")
62     (href . "non-special://test@test/x")
63     (origin . "null")
64     (protocol . "non-special:")
65     (username . "test")
66     (password . "")
67     (host . "test")
68     (hostname . "test")
69     (port . "")
70     (pathname . "/x")
71     (search . "")
72     (hash . ""))
73    ((input . "non-special://:@test/x")
74     (base . "about:blank")
75     (href . "non-special://test/x")
76     (origin . "null")
77     (protocol . "non-special:")
78     (username . "")
79     (password . "")
80     (host . "test")
81     (hostname . "test")
82     (port . "")
83     (pathname . "/x")
84     (search . "")
85     (hash . ""))
86    ((input . "http:foo.com")
87     (base . "http://example.org/foo/bar")
88     (href . "http://example.org/foo/foo.com")
89     (origin . "http://example.org")
90     (protocol . "http:")
91     (username . "")
92     (password . "")
93     (host . "example.org")
94     (hostname . "example.org")
95     (port . "")
96     (pathname . "/foo/foo.com")
97     (search . "")
98     (hash . ""))
99    ((input . "\t   :foo.com   \n")
100     (base . "http://example.org/foo/bar")
101     (href . "http://example.org/foo/:foo.com")
102     (origin . "http://example.org")
103     (protocol . "http:")
104     (username . "")
105     (password . "")
106     (host . "example.org")
107     (hostname . "example.org")
108     (port . "")
109     (pathname . "/foo/:foo.com")
110     (search . "")
111     (hash . ""))
112    ((input . " foo.com  ")
113     (base . "http://example.org/foo/bar")
114     (href . "http://example.org/foo/foo.com")
115     (origin . "http://example.org")
116     (protocol . "http:")
117     (username . "")
118     (password . "")
119     (host . "example.org")
120     (hostname . "example.org")
121     (port . "")
122     (pathname . "/foo/foo.com")
123     (search . "")
124     (hash . ""))
125    ((input . "a:\t foo.com")
126     (base . "http://example.org/foo/bar")
127     (href . "a: foo.com")
128     (origin . "null")
129     (protocol . "a:")
130     (username . "")
131     (password . "")
132     (host . "")
133     (hostname . "")
134     (port . "")
135     (pathname . " foo.com")
136     (search . "")
137     (hash . ""))
138    ((input . "http://f:21/ b ? d  e ")
139     (base . "http://example.org/foo/bar")
140     (href . "http://f:21/%20b%20?%20d%20%20e")
141     (origin . "http://f:21")
142     (protocol . "http:")
143     (username . "")
144     (password . "")
145     (host . "f:21")
146     (hostname . "f")
147     (port . "21")
148     (pathname . "/%20b%20")
149     (search . "?%20d%20")
150     (hash . "%20e"))
151    ((input . "lolscheme:x xx x")
152     (base . "about:blank")
153     (href . "lolscheme:x xx%20x")
154     (protocol . "lolscheme:")
155     (username . "")
156     (password . "")
157     (host . "")
158     (hostname . "")
159     (port . "")
160     (pathname . "x x")
161     (search . "")
162     (hash . "x%20x"))
163    ((input . "http://f:/c")
164     (base . "http://example.org/foo/bar")
165     (href . "http://f/c")
166     (origin . "http://f")
167     (protocol . "http:")
168     (username . "")
169     (password . "")
170     (host . "f")
171     (hostname . "f")
172     (port . "")
173     (pathname . "/c")
174     (search . "")
175     (hash . ""))
176    ((input . "http://f:0/c")
177     (base . "http://example.org/foo/bar")
178     (href . "http://f:0/c")
179     (origin . "http://f:0")
180     (protocol . "http:")
181     (username . "")
182     (password . "")
183     (host . "f:0")
184     (hostname . "f")
185     (port . "0")
186     (pathname . "/c")
187     (search . "")
188     (hash . ""))
189    ((input . "http://f:00000000000000/c")
190     (base . "http://example.org/foo/bar")
191     (href . "http://f:0/c")
192     (origin . "http://f:0")
193     (protocol . "http:")
194     (username . "")
195     (password . "")
196     (host . "f:0")
197     (hostname . "f")
198     (port . "0")
199     (pathname . "/c")
200     (search . "")
201     (hash . ""))
202    ((input . "http://f:00000000000000000000080/c")
203     (base . "http://example.org/foo/bar")
204     (href . "http://f/c")
205     (origin . "http://f")
206     (protocol . "http:")
207     (username . "")
208     (password . "")
209     (host . "f")
210     (hostname . "f")
211     (port . "")
212     (pathname . "/c")
213     (search . "")
214     (hash . ""))
215    ((input . "http://f:b/c")
216     (base . "http://example.org/foo/bar")
217     ("failure" . t))
218    ((input . "http://f: /c")
219     (base . "http://example.org/foo/bar")
220     ("failure" . t))
221    ((input . "http://f:\n/c")
222     (base . "http://example.org/foo/bar")
223     (href . "http://f/c")
224     (origin . "http://f")
225     (protocol . "http:")
226     (username . "")
227     (password . "")
228     (host . "f")
229     (hostname . "f")
230     (port . "")
231     (pathname . "/c")
232     (search . "")
233     (hash . ""))
234    ((input . "http://f:fifty-two/c")
235     (base . "http://example.org/foo/bar")
236     ("failure" . t))
237    ((input . "http://f:999999/c")
238     (base . "http://example.org/foo/bar")
239     ("failure" . t))
240    ((input . "non-special://f:999999/c")
241     (base . "http://example.org/foo/bar")
242     ("failure" . t))
243    ((input . "http://f: 21 / b ? d  e ")
244     (base . "http://example.org/foo/bar")
245     ("failure" . t))
246    ((input . "")
247     (base . "http://example.org/foo/bar")
248     (href . "http://example.org/foo/bar")
249     (origin . "http://example.org")
250     (protocol . "http:")
251     (username . "")
252     (password . "")
253     (host . "example.org")
254     (hostname . "example.org")
255     (port . "")
256     (pathname . "/foo/bar")
257     (search . "")
258     (hash . ""))
259    ((input . "  \t")
260     (base . "http://example.org/foo/bar")
261     (href . "http://example.org/foo/bar")
262     (origin . "http://example.org")
263     (protocol . "http:")
264     (username . "")
265     (password . "")
266     (host . "example.org")
267     (hostname . "example.org")
268     (port . "")
269     (pathname . "/foo/bar")
270     (search . "")
271     (hash . ""))
272    ((input . ":foo.com/")
273     (base . "http://example.org/foo/bar")
274     (href . "http://example.org/foo/:foo.com/")
275     (origin . "http://example.org")
276     (protocol . "http:")
277     (username . "")
278     (password . "")
279     (host . "example.org")
280     (hostname . "example.org")
281     (port . "")
282     (pathname . "/foo/:foo.com/")
283     (search . "")
284     (hash . ""))
285    ((input . ":foo.com\\")
286     (base . "http://example.org/foo/bar")
287     (href . "http://example.org/foo/:foo.com/")
288     (origin . "http://example.org")
289     (protocol . "http:")
290     (username . "")
291     (password . "")
292     (host . "example.org")
293     (hostname . "example.org")
294     (port . "")
295     (pathname . "/foo/:foo.com/")
296     (search . "")
297     (hash . ""))
298    ((input . ":")
299     (base . "http://example.org/foo/bar")
300     (href . "http://example.org/foo/:")
301     (origin . "http://example.org")
302     (protocol . "http:")
303     (username . "")
304     (password . "")
305     (host . "example.org")
306     (hostname . "example.org")
307     (port . "")
308     (pathname . "/foo/:")
309     (search . "")
310     (hash . ""))
311    ((input . ":a")
312     (base . "http://example.org/foo/bar")
313     (href . "http://example.org/foo/:a")
314     (origin . "http://example.org")
315     (protocol . "http:")
316     (username . "")
317     (password . "")
318     (host . "example.org")
319     (hostname . "example.org")
320     (port . "")
321     (pathname . "/foo/:a")
322     (search . "")
323     (hash . ""))
324    ((input . ":/")
325     (base . "http://example.org/foo/bar")
326     (href . "http://example.org/foo/:/")
327     (origin . "http://example.org")
328     (protocol . "http:")
329     (username . "")
330     (password . "")
331     (host . "example.org")
332     (hostname . "example.org")
333     (port . "")
334     (pathname . "/foo/:/")
335     (search . "")
336     (hash . ""))
337    ((input . ":\\")
338     (base . "http://example.org/foo/bar")
339     (href . "http://example.org/foo/:/")
340     (origin . "http://example.org")
341     (protocol . "http:")
342     (username . "")
343     (password . "")
344     (host . "example.org")
345     (hostname . "example.org")
346     (port . "")
347     (pathname . "/foo/:/")
348     (search . "")
349     (hash . ""))
350    ((input . ":")
351     (base . "http://example.org/foo/bar")
352     (href . "http://example.org/foo/:")
353     (origin . "http://example.org")
354     (protocol . "http:")
355     (username . "")
356     (password . "")
357     (host . "example.org")
358     (hostname . "example.org")
359     (port . "")
360     (pathname . "/foo/:")
361     (search . "")
362     (hash . ""))
363    ((input . "")
364     (base . "http://example.org/foo/bar")
365     (href . "http://example.org/foo/bar")
366     (origin . "http://example.org")
367     (protocol . "http:")
368     (username . "")
369     (password . "")
370     (host . "example.org")
371     (hostname . "example.org")
372     (port . "")
373     (pathname . "/foo/bar")
374     (search . "")
375     (hash . ""))
376    ((input . "/")
377     (base . "http://example.org/foo/bar")
378     (href . "http://example.org/foo/bar/")
379     (origin . "http://example.org")
380     (protocol . "http:")
381     (username . "")
382     (password . "")
383     (host . "example.org")
384     (hostname . "example.org")
385     (port . "")
386     (pathname . "/foo/bar")
387     (search . "")
388     (hash . "/"))
389    ((input . "\\")
390     (base . "http://example.org/foo/bar")
391     (href . "http://example.org/foo/bar\\")
392     (origin . "http://example.org")
393     (protocol . "http:")
394     (username . "")
395     (password . "")
396     (host . "example.org")
397     (hostname . "example.org")
398     (port . "")
399     (pathname . "/foo/bar")
400     (search . "")
401     (hash . "\\"))
402    ((input . ";?")
403     (base . "http://example.org/foo/bar")
404     (href . "http://example.org/foo/bar;?")
405     (origin . "http://example.org")
406     (protocol . "http:")
407     (username . "")
408     (password . "")
409     (host . "example.org")
410     (hostname . "example.org")
411     (port . "")
412     (pathname . "/foo/bar")
413     (search . "")
414     (hash . ";?"))
415    ((input . "?")
416     (base . "http://example.org/foo/bar")
417     (href . "http://example.org/foo/bar?")
418     (origin . "http://example.org")
419     (protocol . "http:")
420     (username . "")
421     (password . "")
422     (host . "example.org")
423     (hostname . "example.org")
424     (port . "")
425     (pathname . "/foo/bar")
426     (search . "")
427     (hash . ""))
428    ((input . "/")
429     (base . "http://example.org/foo/bar")
430     (href . "http://example.org/")
431     (origin . "http://example.org")
432     (protocol . "http:")
433     (username . "")
434     (password . "")
435     (host . "example.org")
436     (hostname . "example.org")
437     (port . "")
438     (pathname . "/")
439     (search . "")
440     (hash . ""))
441    ((input . ":23")
442     (base . "http://example.org/foo/bar")
443     (href . "http://example.org/foo/:23")
444     (origin . "http://example.org")
445     (protocol . "http:")
446     (username . "")
447     (password . "")
448     (host . "example.org")
449     (hostname . "example.org")
450     (port . "")
451     (pathname . "/foo/:23")
452     (search . "")
453     (hash . ""))
454    ((input . "/:23")
455     (base . "http://example.org/foo/bar")
456     (href . "http://example.org/:23")
457     (origin . "http://example.org")
458     (protocol . "http:")
459     (username . "")
460     (password . "")
461     (host . "example.org")
462     (hostname . "example.org")
463     (port . "")
464     (pathname . "/:23")
465     (search . "")
466     (hash . ""))
467    ((input . "::")
468     (base . "http://example.org/foo/bar")
469     (href . "http://example.org/foo/::")
470     (origin . "http://example.org")
471     (protocol . "http:")
472     (username . "")
473     (password . "")
474     (host . "example.org")
475     (hostname . "example.org")
476     (port . "")
477     (pathname . "/foo/::")
478     (search . "")
479     (hash . ""))
480    ((input . "::23")
481     (base . "http://example.org/foo/bar")
482     (href . "http://example.org/foo/::23")
483     (origin . "http://example.org")
484     (protocol . "http:")
485     (username . "")
486     (password . "")
487     (host . "example.org")
488     (hostname . "example.org")
489     (port . "")
490     (pathname . "/foo/::23")
491     (search . "")
492     (hash . ""))
493    ((input . "foo://")
494     (base . "http://example.org/foo/bar")
495     (href . "foo://")
496     (origin . "null")
497     (protocol . "foo:")
498     (username . "")
499     (password . "")
500     (host . "")
501     (hostname . "")
502     (port . "")
503     (pathname . "")
504     (search . "")
505     (hash . ""))
506    ((input . "http://a:b@c:29/d")
507     (base . "http://example.org/foo/bar")
508     (href . "http://a:b@c:29/d")
509     (origin . "http://c:29")
510     (protocol . "http:")
511     (username . "a")
512     (password . "b")
513     (host . "c:29")
514     (hostname . "c")
515     (port . "29")
516     (pathname . "/d")
517     (search . "")
518     (hash . ""))
519    ((input . "http::@c:29")
520     (base . "http://example.org/foo/bar")
521     (href . "http://example.org/foo/:@c:29")
522     (origin . "http://example.org")
523     (protocol . "http:")
524     (username . "")
525     (password . "")
526     (host . "example.org")
527     (hostname . "example.org")
528     (port . "")
529     (pathname . "/foo/:@c:29")
530     (search . "")
531     (hash . ""))
532    ((input . "http://&a:foo(b]c@d:2/")
533     (base . "http://example.org/foo/bar")
534     (href . "http://&a:foo(b%5Dc@d:2/")
535     (origin . "http://d:2")
536     (protocol . "http:")
537     (username . "&a")
538     (password . "foo(b%5Dc")
539     (host . "d:2")
540     (hostname . "d")
541     (port . "2")
542     (pathname . "/")
543     (search . "")
544     (hash . ""))
545    ((input . "http://::@c@d:2")
546     (base . "http://example.org/foo/bar")
547     (href . "http://:%3A%40c@d:2/")
548     (origin . "http://d:2")
549     (protocol . "http:")
550     (username . "")
551     (password . "%3A%40c")
552     (host . "d:2")
553     (hostname . "d")
554     (port . "2")
555     (pathname . "/")
556     (search . "")
557     (hash . ""))
558    ((input . "http://foo.com:b@d/")
559     (base . "http://example.org/foo/bar")
560     (href . "http://foo.com:b@d/")
561     (origin . "http://d")
562     (protocol . "http:")
563     (username . "foo.com")
564     (password . "b")
565     (host . "d")
566     (hostname . "d")
567     (port . "")
568     (pathname . "/")
569     (search . "")
570     (hash . ""))
571    ((input . "http://foo.com/\\@")
572     (base . "http://example.org/foo/bar")
573     (href . "http://foo.com//@")
574     (origin . "http://foo.com")
575     (protocol . "http:")
576     (username . "")
577     (password . "")
578     (host . "foo.com")
579     (hostname . "foo.com")
580     (port . "")
581     (pathname . "//@")
582     (search . "")
583     (hash . ""))
584    ((input . "http:\\\\foo.com\\")
585     (base . "http://example.org/foo/bar")
586     (href . "http://foo.com/")
587     (origin . "http://foo.com")
588     (protocol . "http:")
589     (username . "")
590     (password . "")
591     (host . "foo.com")
592     (hostname . "foo.com")
593     (port . "")
594     (pathname . "/")
595     (search . "")
596     (hash . ""))
597    ((input . "http:\\\\a\\b:c\\d@foo.com\\")
598     (base . "http://example.org/foo/bar")
599     (href . "http://a/b:c/d@foo.com/")
600     (origin . "http://a")
601     (protocol . "http:")
602     (username . "")
603     (password . "")
604     (host . "a")
605     (hostname . "a")
606     (port . "")
607     (pathname . "/b:c/d@foo.com/")
608     (search . "")
609     (hash . ""))
610    ((input . "foo:/")
611     (base . "http://example.org/foo/bar")
612     (href . "foo:/")
613     (origin . "null")
614     (protocol . "foo:")
615     (username . "")
616     (password . "")
617     (host . "")
618     (hostname . "")
619     (port . "")
620     (pathname . "/")
621     (search . "")
622     (hash . ""))
623    ((input . "foo:/bar.com/")
624     (base . "http://example.org/foo/bar")
625     (href . "foo:/bar.com/")
626     (origin . "null")
627     (protocol . "foo:")
628     (username . "")
629     (password . "")
630     (host . "")
631     (hostname . "")
632     (port . "")
633     (pathname . "/bar.com/")
634     (search . "")
635     (hash . ""))
636    ((input . "foo://///////")
637     (base . "http://example.org/foo/bar")
638     (href . "foo://///////")
639     (origin . "null")
640     (protocol . "foo:")
641     (username . "")
642     (password . "")
643     (host . "")
644     (hostname . "")
645     (port . "")
646     (pathname . "///////")
647     (search . "")
648     (hash . ""))
649    ((input . "foo://///////bar.com/")
650     (base . "http://example.org/foo/bar")
651     (href . "foo://///////bar.com/")
652     (origin . "null")
653     (protocol . "foo:")
654     (username . "")
655     (password . "")
656     (host . "")
657     (hostname . "")
658     (port . "")
659     (pathname . "///////bar.com/")
660     (search . "")
661     (hash . ""))
662    ((input . "foo:////://///")
663     (base . "http://example.org/foo/bar")
664     (href . "foo:////://///")
665     (origin . "null")
666     (protocol . "foo:")
667     (username . "")
668     (password . "")
669     (host . "")
670     (hostname . "")
671     (port . "")
672     (pathname . "//://///")
673     (search . "")
674     (hash . ""))
675    ((input . "c:/foo")
676     (base . "http://example.org/foo/bar")
677     (href . "c:/foo")
678     (origin . "null")
679     (protocol . "c:")
680     (username . "")
681     (password . "")
682     (host . "")
683     (hostname . "")
684     (port . "")
685     (pathname . "/foo")
686     (search . "")
687     (hash . ""))
688    ((input . "//foo/bar")
689     (base . "http://example.org/foo/bar")
690     (href . "http://foo/bar")
691     (origin . "http://foo")
692     (protocol . "http:")
693     (username . "")
694     (password . "")
695     (host . "foo")
696     (hostname . "foo")
697     (port . "")
698     (pathname . "/bar")
699     (search . "")
700     (hash . ""))
701    ((input . "http://foo/path;a??efg")
702     (base . "http://example.org/foo/bar")
703     (href . "http://foo/path;a??efg")
704     (origin . "http://foo")
705     (protocol . "http:")
706     (username . "")
707     (password . "")
708     (host . "foo")
709     (hostname . "foo")
710     (port . "")
711     (pathname . "/path;a")
712     (search . "??e")
713     (hash . "fg"))
714    ((input . "http://foo/abcd?efgh?ijkl")
715     (base . "http://example.org/foo/bar")
716     (href . "http://foo/abcd?efgh?ijkl")
717     (origin . "http://foo")
718     (protocol . "http:")
719     (username . "")
720     (password . "")
721     (host . "foo")
722     (hostname . "foo")
723     (port . "")
724     (pathname . "/abcd")
725     (search . "?efgh?ijkl")
726     (hash . ""))
727    ((input . "http://foo/abcdfoo?bar")
728     (base . "http://example.org/foo/bar")
729     (href . "http://foo/abcdfoo?bar")
730     (origin . "http://foo")
731     (protocol . "http:")
732     (username . "")
733     (password . "")
734     (host . "foo")
735     (hostname . "foo")
736     (port . "")
737     (pathname . "/abcd")
738     (search . "")
739     (hash . "foo?bar"))
740    ((input . "[61:24:74]:98")
741     (base . "http://example.org/foo/bar")
742     (href . "http://example.org/foo/[61:24:74]:98")
743     (origin . "http://example.org")
744     (protocol . "http:")
745     (username . "")
746     (password . "")
747     (host . "example.org")
748     (hostname . "example.org")
749     (port . "")
750     (pathname . "/foo/[61:24:74]:98")
751     (search . "")
752     (hash . ""))
753    ((input . "http:[61:27]/:foo")
754     (base . "http://example.org/foo/bar")
755     (href . "http://example.org/foo/[61:27]/:foo")
756     (origin . "http://example.org")
757     (protocol . "http:")
758     (username . "")
759     (password . "")
760     (host . "example.org")
761     (hostname . "example.org")
762     (port . "")
763     (pathname . "/foo/[61:27]/:foo")
764     (search . "")
765     (hash . ""))
766    ((input . "http://[1::2]:3:4")
767     (base . "http://example.org/foo/bar")
768     ("failure" . t))
769    ((input . "http://2001::1")
770     (base . "http://example.org/foo/bar")
771     ("failure" . t))
772    ((input . "http://2001::1]")
773     (base . "http://example.org/foo/bar")
774     ("failure" . t))
775    ((input . "http://2001::1]:80")
776     (base . "http://example.org/foo/bar")
777     ("failure" . t))
778    ((input . "http://[2001::1]")
779     (base . "http://example.org/foo/bar")
780     (href . "http://[2001::1]/")
781     (origin . "http://[2001::1]")
782     (protocol . "http:")
783     (username . "")
784     (password . "")
785     (host . "[2001::1]")
786     (hostname . "[2001::1]")
787     (port . "")
788     (pathname . "/")
789     (search . "")
790     (hash . ""))
791    ((input . "http://[::127.0.0.1]")
792     (base . "http://example.org/foo/bar")
793     (href . "http://[::7f00:1]/")
794     (origin . "http://[::7f00:1]")
795     (protocol . "http:")
796     (username . "")
797     (password . "")
798     (host . "[::7f00:1]")
799     (hostname . "[::7f00:1]")
800     (port . "")
801     (pathname . "/")
802     (search . "")
803     (hash . ""))
804    ((input . "http://[0:0:0:0:0:0:13.1.68.3]")
805     (base . "http://example.org/foo/bar")
806     (href . "http://[::d01:4403]/")
807     (origin . "http://[::d01:4403]")
808     (protocol . "http:")
809     (username . "")
810     (password . "")
811     (host . "[::d01:4403]")
812     (hostname . "[::d01:4403]")
813     (port . "")
814     (pathname . "/")
815     (search . "")
816     (hash . ""))
817    ((input . "http://[2001::1]:80")
818     (base . "http://example.org/foo/bar")
819     (href . "http://[2001::1]/")
820     (origin . "http://[2001::1]")
821     (protocol . "http:")
822     (username . "")
823     (password . "")
824     (host . "[2001::1]")
825     (hostname . "[2001::1]")
826     (port . "")
827     (pathname . "/")
828     (search . "")
829     (hash . ""))
830    ((input . "http:/example.com/")
831     (base . "http://example.org/foo/bar")
832     (href . "http://example.org/example.com/")
833     (origin . "http://example.org")
834     (protocol . "http:")
835     (username . "")
836     (password . "")
837     (host . "example.org")
838     (hostname . "example.org")
839     (port . "")
840     (pathname . "/example.com/")
841     (search . "")
842     (hash . ""))
843    ((input . "ftp:/example.com/")
844     (base . "http://example.org/foo/bar")
845     (href . "ftp://example.com/")
846     (origin . "ftp://example.com")
847     (protocol . "ftp:")
848     (username . "")
849     (password . "")
850     (host . "example.com")
851     (hostname . "example.com")
852     (port . "")
853     (pathname . "/")
854     (search . "")
855     (hash . ""))
856    ((input . "https:/example.com/")
857     (base . "http://example.org/foo/bar")
858     (href . "https://example.com/")
859     (origin . "https://example.com")
860     (protocol . "https:")
861     (username . "")
862     (password . "")
863     (host . "example.com")
864     (hostname . "example.com")
865     (port . "")
866     (pathname . "/")
867     (search . "")
868     (hash . ""))
869    ((input . "madeupscheme:/example.com/")
870     (base . "http://example.org/foo/bar")
871     (href . "madeupscheme:/example.com/")
872     (origin . "null")
873     (protocol . "madeupscheme:")
874     (username . "")
875     (password . "")
876     (host . "")
877     (hostname . "")
878     (port . "")
879     (pathname . "/example.com/")
880     (search . "")
881     (hash . ""))
882    ((input . "file:/example.com/")
883     (base . "http://example.org/foo/bar")
884     (href . "file:///example.com/")
885     (protocol . "file:")
886     (username . "")
887     (password . "")
888     (host . "")
889     (hostname . "")
890     (port . "")
891     (pathname . "/example.com/")
892     (search . "")
893     (hash . ""))
894    ((input . "file://example:1/") (base . "about:blank") ("failure" . t))
895    ((input . "file://example:test/")
896     (base . "about:blank")
897     ("failure" . t))
898    ((input . "file://example%/") (base . "about:blank") ("failure" . t))
899    ((input . "file://[example]/") (base . "about:blank") ("failure" . t))
900    ((input . "ftps:/example.com/")
901     (base . "http://example.org/foo/bar")
902     (href . "ftps:/example.com/")
903     (origin . "null")
904     (protocol . "ftps:")
905     (username . "")
906     (password . "")
907     (host . "")
908     (hostname . "")
909     (port . "")
910     (pathname . "/example.com/")
911     (search . "")
912     (hash . ""))
913    ((input . "gopher:/example.com/")
914     (base . "http://example.org/foo/bar")
915     (href . "gopher://example.com/")
916     (origin . "gopher://example.com")
917     (protocol . "gopher:")
918     (username . "")
919     (password . "")
920     (host . "example.com")
921     (hostname . "example.com")
922     (port . "")
923     (pathname . "/")
924     (search . "")
925     (hash . ""))
926    ((input . "ws:/example.com/")
927     (base . "http://example.org/foo/bar")
928     (href . "ws://example.com/")
929     (origin . "ws://example.com")
930     (protocol . "ws:")
931     (username . "")
932     (password . "")
933     (host . "example.com")
934     (hostname . "example.com")
935     (port . "")
936     (pathname . "/")
937     (search . "")
938     (hash . ""))
939    ((input . "wss:/example.com/")
940     (base . "http://example.org/foo/bar")
941     (href . "wss://example.com/")
942     (origin . "wss://example.com")
943     (protocol . "wss:")
944     (username . "")
945     (password . "")
946     (host . "example.com")
947     (hostname . "example.com")
948     (port . "")
949     (pathname . "/")
950     (search . "")
951     (hash . ""))
952    ((input . "data:/example.com/")
953     (base . "http://example.org/foo/bar")
954     (href . "data:/example.com/")
955     (origin . "null")
956     (protocol . "data:")
957     (username . "")
958     (password . "")
959     (host . "")
960     (hostname . "")
961     (port . "")
962     (pathname . "/example.com/")
963     (search . "")
964     (hash . ""))
965    ((input . "javascript:/example.com/")
966     (base . "http://example.org/foo/bar")
967     (href . "javascript:/example.com/")
968     (origin . "null")
969     (protocol . "javascript:")
970     (username . "")
971     (password . "")
972     (host . "")
973     (hostname . "")
974     (port . "")
975     (pathname . "/example.com/")
976     (search . "")
977     (hash . ""))
978    ((input . "mailto:/example.com/")
979     (base . "http://example.org/foo/bar")
980     (href . "mailto:/example.com/")
981     (origin . "null")
982     (protocol . "mailto:")
983     (username . "")
984     (password . "")
985     (host . "")
986     (hostname . "")
987     (port . "")
988     (pathname . "/example.com/")
989     (search . "")
990     (hash . ""))
991    ((input . "http:example.com/")
992     (base . "http://example.org/foo/bar")
993     (href . "http://example.org/foo/example.com/")
994     (origin . "http://example.org")
995     (protocol . "http:")
996     (username . "")
997     (password . "")
998     (host . "example.org")
999     (hostname . "example.org")
1000     (port . "")
1001     (pathname . "/foo/example.com/")
1002     (search . "")
1003     (hash . ""))
1004    ((input . "ftp:example.com/")
1005     (base . "http://example.org/foo/bar")
1006     (href . "ftp://example.com/")
1007     (origin . "ftp://example.com")
1008     (protocol . "ftp:")
1009     (username . "")
1010     (password . "")
1011     (host . "example.com")
1012     (hostname . "example.com")
1013     (port . "")
1014     (pathname . "/")
1015     (search . "")
1016     (hash . ""))
1017    ((input . "https:example.com/")
1018     (base . "http://example.org/foo/bar")
1019     (href . "https://example.com/")
1020     (origin . "https://example.com")
1021     (protocol . "https:")
1022     (username . "")
1023     (password . "")
1024     (host . "example.com")
1025     (hostname . "example.com")
1026     (port . "")
1027     (pathname . "/")
1028     (search . "")
1029     (hash . ""))
1030    ((input . "madeupscheme:example.com/")
1031     (base . "http://example.org/foo/bar")
1032     (href . "madeupscheme:example.com/")
1033     (origin . "null")
1034     (protocol . "madeupscheme:")
1035     (username . "")
1036     (password . "")
1037     (host . "")
1038     (hostname . "")
1039     (port . "")
1040     (pathname . "example.com/")
1041     (search . "")
1042     (hash . ""))
1043    ((input . "ftps:example.com/")
1044     (base . "http://example.org/foo/bar")
1045     (href . "ftps:example.com/")
1046     (origin . "null")
1047     (protocol . "ftps:")
1048     (username . "")
1049     (password . "")
1050     (host . "")
1051     (hostname . "")
1052     (port . "")
1053     (pathname . "example.com/")
1054     (search . "")
1055     (hash . ""))
1056    ((input . "gopher:example.com/")
1057     (base . "http://example.org/foo/bar")
1058     (href . "gopher://example.com/")
1059     (origin . "gopher://example.com")
1060     (protocol . "gopher:")
1061     (username . "")
1062     (password . "")
1063     (host . "example.com")
1064     (hostname . "example.com")
1065     (port . "")
1066     (pathname . "/")
1067     (search . "")
1068     (hash . ""))
1069    ((input . "ws:example.com/")
1070     (base . "http://example.org/foo/bar")
1071     (href . "ws://example.com/")
1072     (origin . "ws://example.com")
1073     (protocol . "ws:")
1074     (username . "")
1075     (password . "")
1076     (host . "example.com")
1077     (hostname . "example.com")
1078     (port . "")
1079     (pathname . "/")
1080     (search . "")
1081     (hash . ""))
1082    ((input . "wss:example.com/")
1083     (base . "http://example.org/foo/bar")
1084     (href . "wss://example.com/")
1085     (origin . "wss://example.com")
1086     (protocol . "wss:")
1087     (username . "")
1088     (password . "")
1089     (host . "example.com")
1090     (hostname . "example.com")
1091     (port . "")
1092     (pathname . "/")
1093     (search . "")
1094     (hash . ""))
1095    ((input . "data:example.com/")
1096     (base . "http://example.org/foo/bar")
1097     (href . "data:example.com/")
1098     (origin . "null")
1099     (protocol . "data:")
1100     (username . "")
1101     (password . "")
1102     (host . "")
1103     (hostname . "")
1104     (port . "")
1105     (pathname . "example.com/")
1106     (search . "")
1107     (hash . ""))
1108    ((input . "javascript:example.com/")
1109     (base . "http://example.org/foo/bar")
1110     (href . "javascript:example.com/")
1111     (origin . "null")
1112     (protocol . "javascript:")
1113     (username . "")
1114     (password . "")
1115     (host . "")
1116     (hostname . "")
1117     (port . "")
1118     (pathname . "example.com/")
1119     (search . "")
1120     (hash . ""))
1121    ((input . "mailto:example.com/")
1122     (base . "http://example.org/foo/bar")
1123     (href . "mailto:example.com/")
1124     (origin . "null")
1125     (protocol . "mailto:")
1126     (username . "")
1127     (password . "")
1128     (host . "")
1129     (hostname . "")
1130     (port . "")
1131     (pathname . "example.com/")
1132     (search . "")
1133     (hash . ""))
1134    ((input . "/a/b/c")
1135     (base . "http://example.org/foo/bar")
1136     (href . "http://example.org/a/b/c")
1137     (origin . "http://example.org")
1138     (protocol . "http:")
1139     (username . "")
1140     (password . "")
1141     (host . "example.org")
1142     (hostname . "example.org")
1143     (port . "")
1144     (pathname . "/a/b/c")
1145     (search . "")
1146     (hash . ""))
1147    ((input . "/a/ /c")
1148     (base . "http://example.org/foo/bar")
1149     (href . "http://example.org/a/%20/c")
1150     (origin . "http://example.org")
1151     (protocol . "http:")
1152     (username . "")
1153     (password . "")
1154     (host . "example.org")
1155     (hostname . "example.org")
1156     (port . "")
1157     (pathname . "/a/%20/c")
1158     (search . "")
1159     (hash . ""))
1160    ((input . "/a%2fc")
1161     (base . "http://example.org/foo/bar")
1162     (href . "http://example.org/a%2fc")
1163     (origin . "http://example.org")
1164     (protocol . "http:")
1165     (username . "")
1166     (password . "")
1167     (host . "example.org")
1168     (hostname . "example.org")
1169     (port . "")
1170     (pathname . "/a%2fc")
1171     (search . "")
1172     (hash . ""))
1173    ((input . "/a/%2f/c")
1174     (base . "http://example.org/foo/bar")
1175     (href . "http://example.org/a/%2f/c")
1176     (origin . "http://example.org")
1177     (protocol . "http:")
1178     (username . "")
1179     (password . "")
1180     (host . "example.org")
1181     (hostname . "example.org")
1182     (port . "")
1183     (pathname . "/a/%2f/c")
1184     (search . "")
1185     (hash . ""))
1186    ((input . "β")
1187     (base . "http://example.org/foo/bar")
1188     (href . "http://example.org/foo/bar%CE%B2")
1189     (origin . "http://example.org")
1190     (protocol . "http:")
1191     (username . "")
1192     (password . "")
1193     (host . "example.org")
1194     (hostname . "example.org")
1195     (port . "")
1196     (pathname . "/foo/bar")
1197     (search . "")
1198     (hash . "%CE%B2"))
1199    ((input . "data:text/html,testtest")
1200     (base . "http://example.org/foo/bar")
1201     (href . "data:text/html,testtest")
1202     (origin . "null")
1203     (protocol . "data:")
1204     (username . "")
1205     (password . "")
1206     (host . "")
1207     (hostname . "")
1208     (port . "")
1209     (pathname . "text/html,test")
1210     (search . "")
1211     (hash . "test"))
1212    ((input . "tel:1234567890")
1213     (base . "http://example.org/foo/bar")
1214     (href . "tel:1234567890")
1215     (origin . "null")
1216     (protocol . "tel:")
1217     (username . "")
1218     (password . "")
1219     (host . "")
1220     (hostname . "")
1221     (port . "")
1222     (pathname . "1234567890")
1223     (search . "")
1224     (hash . ""))
1225    " Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/file.html"
1226    ((input . "file:c:\\foo\\bar.html")
1227     (base . "file:///tmp/mock/path")
1228     (href . "file:///c:/foo/bar.html")
1229     (protocol . "file:")
1230     (username . "")
1231     (password . "")
1232     (host . "")
1233     (hostname . "")
1234     (port . "")
1235     (pathname . "/c:/foo/bar.html")
1236     (search . "")
1237     (hash . ""))
1238    ((input . "  File:c|////foo\\bar.html")
1239     (base . "file:///tmp/mock/path")
1240     (href . "file:///c:////foo/bar.html")
1241     (protocol . "file:")
1242     (username . "")
1243     (password . "")
1244     (host . "")
1245     (hostname . "")
1246     (port . "")
1247     (pathname . "/c:////foo/bar.html")
1248     (search . "")
1249     (hash . ""))
1250    ((input . "C|/foo/bar")
1251     (base . "file:///tmp/mock/path")
1252     (href . "file:///C:/foo/bar")
1253     (protocol . "file:")
1254     (username . "")
1255     (password . "")
1256     (host . "")
1257     (hostname . "")
1258     (port . "")
1259     (pathname . "/C:/foo/bar")
1260     (search . "")
1261     (hash . ""))
1262    ((input . "/C|\\foo\\bar")
1263     (base . "file:///tmp/mock/path")
1264     (href . "file:///C:/foo/bar")
1265     (protocol . "file:")
1266     (username . "")
1267     (password . "")
1268     (host . "")
1269     (hostname . "")
1270     (port . "")
1271     (pathname . "/C:/foo/bar")
1272     (search . "")
1273     (hash . ""))
1274    ((input . "//C|/foo/bar")
1275     (base . "file:///tmp/mock/path")
1276     (href . "file:///C:/foo/bar")
1277     (protocol . "file:")
1278     (username . "")
1279     (password . "")
1280     (host . "")
1281     (hostname . "")
1282     (port . "")
1283     (pathname . "/C:/foo/bar")
1284     (search . "")
1285     (hash . ""))
1286    ((input . "//server/file")
1287     (base . "file:///tmp/mock/path")
1288     (href . "file://server/file")
1289     (protocol . "file:")
1290     (username . "")
1291     (password . "")
1292     (host . "server")
1293     (hostname . "server")
1294     (port . "")
1295     (pathname . "/file")
1296     (search . "")
1297     (hash . ""))
1298    ((input . "\\\\server\\file")
1299     (base . "file:///tmp/mock/path")
1300     (href . "file://server/file")
1301     (protocol . "file:")
1302     (username . "")
1303     (password . "")
1304     (host . "server")
1305     (hostname . "server")
1306     (port . "")
1307     (pathname . "/file")
1308     (search . "")
1309     (hash . ""))
1310    ((input . "/\\server/file")
1311     (base . "file:///tmp/mock/path")
1312     (href . "file://server/file")
1313     (protocol . "file:")
1314     (username . "")
1315     (password . "")
1316     (host . "server")
1317     (hostname . "server")
1318     (port . "")
1319     (pathname . "/file")
1320     (search . "")
1321     (hash . ""))
1322    ((input . "file:///foo/bar.txt")
1323     (base . "file:///tmp/mock/path")
1324     (href . "file:///foo/bar.txt")
1325     (protocol . "file:")
1326     (username . "")
1327     (password . "")
1328     (host . "")
1329     (hostname . "")
1330     (port . "")
1331     (pathname . "/foo/bar.txt")
1332     (search . "")
1333     (hash . ""))
1334    ((input . "file:///home/me")
1335     (base . "file:///tmp/mock/path")
1336     (href . "file:///home/me")
1337     (protocol . "file:")
1338     (username . "")
1339     (password . "")
1340     (host . "")
1341     (hostname . "")
1342     (port . "")
1343     (pathname . "/home/me")
1344     (search . "")
1345     (hash . ""))
1346    ((input . "//")
1347     (base . "file:///tmp/mock/path")
1348     (href . "file:///")
1349     (protocol . "file:")
1350     (username . "")
1351     (password . "")
1352     (host . "")
1353     (hostname . "")
1354     (port . "")
1355     (pathname . "/")
1356     (search . "")
1357     (hash . ""))
1358    ((input . "///")
1359     (base . "file:///tmp/mock/path")
1360     (href . "file:///")
1361     (protocol . "file:")
1362     (username . "")
1363     (password . "")
1364     (host . "")
1365     (hostname . "")
1366     (port . "")
1367     (pathname . "/")
1368     (search . "")
1369     (hash . ""))
1370    ((input . "///test")
1371     (base . "file:///tmp/mock/path")
1372     (href . "file:///test")
1373     (protocol . "file:")
1374     (username . "")
1375     (password . "")
1376     (host . "")
1377     (hostname . "")
1378     (port . "")
1379     (pathname . "/test")
1380     (search . "")
1381     (hash . ""))
1382    ((input . "file://test")
1383     (base . "file:///tmp/mock/path")
1384     (href . "file://test/")
1385     (protocol . "file:")
1386     (username . "")
1387     (password . "")
1388     (host . "test")
1389     (hostname . "test")
1390     (port . "")
1391     (pathname . "/")
1392     (search . "")
1393     (hash . ""))
1394    ((input . "file://localhost")
1395     (base . "file:///tmp/mock/path")
1396     (href . "file:///")
1397     (protocol . "file:")
1398     (username . "")
1399     (password . "")
1400     (host . "")
1401     (hostname . "")
1402     (port . "")
1403     (pathname . "/")
1404     (search . "")
1405     (hash . ""))
1406    ((input . "file://localhost/")
1407     (base . "file:///tmp/mock/path")
1408     (href . "file:///")
1409     (protocol . "file:")
1410     (username . "")
1411     (password . "")
1412     (host . "")
1413     (hostname . "")
1414     (port . "")
1415     (pathname . "/")
1416     (search . "")
1417     (hash . ""))
1418    ((input . "file://localhost/test")
1419     (base . "file:///tmp/mock/path")
1420     (href . "file:///test")
1421     (protocol . "file:")
1422     (username . "")
1423     (password . "")
1424     (host . "")
1425     (hostname . "")
1426     (port . "")
1427     (pathname . "/test")
1428     (search . "")
1429     (hash . ""))
1430    ((input . "test")
1431     (base . "file:///tmp/mock/path")
1432     (href . "file:///tmp/mock/test")
1433     (protocol . "file:")
1434     (username . "")
1435     (password . "")
1436     (host . "")
1437     (hostname . "")
1438     (port . "")
1439     (pathname . "/tmp/mock/test")
1440     (search . "")
1441     (hash . ""))
1442    ((input . "file:test")
1443     (base . "file:///tmp/mock/path")
1444     (href . "file:///tmp/mock/test")
1445     (protocol . "file:")
1446     (username . "")
1447     (password . "")
1448     (host . "")
1449     (hostname . "")
1450     (port . "")
1451     (pathname . "/tmp/mock/test")
1452     (search . "")
1453     (hash . ""))
1454    " Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/path.js"
1455    ((input . "http://example.com/././foo")
1456     (base . "about:blank")
1457     (href . "http://example.com/foo")
1458     (origin . "http://example.com")
1459     (protocol . "http:")
1460     (username . "")
1461     (password . "")
1462     (host . "example.com")
1463     (hostname . "example.com")
1464     (port . "")
1465     (pathname . "/foo")
1466     (search . "")
1467     (hash . ""))
1468    ((input . "http://example.com/./.foo")
1469     (base . "about:blank")
1470     (href . "http://example.com/.foo")
1471     (origin . "http://example.com")
1472     (protocol . "http:")
1473     (username . "")
1474     (password . "")
1475     (host . "example.com")
1476     (hostname . "example.com")
1477     (port . "")
1478     (pathname . "/.foo")
1479     (search . "")
1480     (hash . ""))
1481    ((input . "http://example.com/foo/.")
1482     (base . "about:blank")
1483     (href . "http://example.com/foo/")
1484     (origin . "http://example.com")
1485     (protocol . "http:")
1486     (username . "")
1487     (password . "")
1488     (host . "example.com")
1489     (hostname . "example.com")
1490     (port . "")
1491     (pathname . "/foo/")
1492     (search . "")
1493     (hash . ""))
1494    ((input . "http://example.com/foo/./")
1495     (base . "about:blank")
1496     (href . "http://example.com/foo/")
1497     (origin . "http://example.com")
1498     (protocol . "http:")
1499     (username . "")
1500     (password . "")
1501     (host . "example.com")
1502     (hostname . "example.com")
1503     (port . "")
1504     (pathname . "/foo/")
1505     (search . "")
1506     (hash . ""))
1507    ((input . "http://example.com/foo/bar/..")
1508     (base . "about:blank")
1509     (href . "http://example.com/foo/")
1510     (origin . "http://example.com")
1511     (protocol . "http:")
1512     (username . "")
1513     (password . "")
1514     (host . "example.com")
1515     (hostname . "example.com")
1516     (port . "")
1517     (pathname . "/foo/")
1518     (search . "")
1519     (hash . ""))
1520    ((input . "http://example.com/foo/bar/../")
1521     (base . "about:blank")
1522     (href . "http://example.com/foo/")
1523     (origin . "http://example.com")
1524     (protocol . "http:")
1525     (username . "")
1526     (password . "")
1527     (host . "example.com")
1528     (hostname . "example.com")
1529     (port . "")
1530     (pathname . "/foo/")
1531     (search . "")
1532     (hash . ""))
1533    ((input . "http://example.com/foo/..bar")
1534     (base . "about:blank")
1535     (href . "http://example.com/foo/..bar")
1536     (origin . "http://example.com")
1537     (protocol . "http:")
1538     (username . "")
1539     (password . "")
1540     (host . "example.com")
1541     (hostname . "example.com")
1542     (port . "")
1543     (pathname . "/foo/..bar")
1544     (search . "")
1545     (hash . ""))
1546    ((input . "http://example.com/foo/bar/../ton")
1547     (base . "about:blank")
1548     (href . "http://example.com/foo/ton")
1549     (origin . "http://example.com")
1550     (protocol . "http:")
1551     (username . "")
1552     (password . "")
1553     (host . "example.com")
1554     (hostname . "example.com")
1555     (port . "")
1556     (pathname . "/foo/ton")
1557     (search . "")
1558     (hash . ""))
1559    ((input . "http://example.com/foo/bar/../ton/../../a")
1560     (base . "about:blank")
1561     (href . "http://example.com/a")
1562     (origin . "http://example.com")
1563     (protocol . "http:")
1564     (username . "")
1565     (password . "")
1566     (host . "example.com")
1567     (hostname . "example.com")
1568     (port . "")
1569     (pathname . "/a")
1570     (search . "")
1571     (hash . ""))
1572    ((input . "http://example.com/foo/../../..")
1573     (base . "about:blank")
1574     (href . "http://example.com/")
1575     (origin . "http://example.com")
1576     (protocol . "http:")
1577     (username . "")
1578     (password . "")
1579     (host . "example.com")
1580     (hostname . "example.com")
1581     (port . "")
1582     (pathname . "/")
1583     (search . "")
1584     (hash . ""))
1585    ((input . "http://example.com/foo/../../../ton")
1586     (base . "about:blank")
1587     (href . "http://example.com/ton")
1588     (origin . "http://example.com")
1589     (protocol . "http:")
1590     (username . "")
1591     (password . "")
1592     (host . "example.com")
1593     (hostname . "example.com")
1594     (port . "")
1595     (pathname . "/ton")
1596     (search . "")
1597     (hash . ""))
1598    ((input . "http://example.com/foo/%2e")
1599     (base . "about:blank")
1600     (href . "http://example.com/foo/")
1601     (origin . "http://example.com")
1602     (protocol . "http:")
1603     (username . "")
1604     (password . "")
1605     (host . "example.com")
1606     (hostname . "example.com")
1607     (port . "")
1608     (pathname . "/foo/")
1609     (search . "")
1610     (hash . ""))
1611    ((input . "http://example.com/foo/%2e%2")
1612     (base . "about:blank")
1613     (href . "http://example.com/foo/%2e%2")
1614     (origin . "http://example.com")
1615     (protocol . "http:")
1616     (username . "")
1617     (password . "")
1618     (host . "example.com")
1619     (hostname . "example.com")
1620     (port . "")
1621     (pathname . "/foo/%2e%2")
1622     (search . "")
1623     (hash . ""))
1624    ((input . "http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar")
1625     (base . "about:blank")
1626     (href . "http://example.com/%2e.bar")
1627     (origin . "http://example.com")
1628     (protocol . "http:")
1629     (username . "")
1630     (password . "")
1631     (host . "example.com")
1632     (hostname . "example.com")
1633     (port . "")
1634     (pathname . "/%2e.bar")
1635     (search . "")
1636     (hash . ""))
1637    ((input . "http://example.com////../..")
1638     (base . "about:blank")
1639     (href . "http://example.com//")
1640     (origin . "http://example.com")
1641     (protocol . "http:")
1642     (username . "")
1643     (password . "")
1644     (host . "example.com")
1645     (hostname . "example.com")
1646     (port . "")
1647     (pathname . "//")
1648     (search . "")
1649     (hash . ""))
1650    ((input . "http://example.com/foo/bar//../..")
1651     (base . "about:blank")
1652     (href . "http://example.com/foo/")
1653     (origin . "http://example.com")
1654     (protocol . "http:")
1655     (username . "")
1656     (password . "")
1657     (host . "example.com")
1658     (hostname . "example.com")
1659     (port . "")
1660     (pathname . "/foo/")
1661     (search . "")
1662     (hash . ""))
1663    ((input . "http://example.com/foo/bar//..")
1664     (base . "about:blank")
1665     (href . "http://example.com/foo/bar/")
1666     (origin . "http://example.com")
1667     (protocol . "http:")
1668     (username . "")
1669     (password . "")
1670     (host . "example.com")
1671     (hostname . "example.com")
1672     (port . "")
1673     (pathname . "/foo/bar/")
1674     (search . "")
1675     (hash . ""))
1676    ((input . "http://example.com/foo")
1677     (base . "about:blank")
1678     (href . "http://example.com/foo")
1679     (origin . "http://example.com")
1680     (protocol . "http:")
1681     (username . "")
1682     (password . "")
1683     (host . "example.com")
1684     (hostname . "example.com")
1685     (port . "")
1686     (pathname . "/foo")
1687     (search . "")
1688     (hash . ""))
1689    ((input . "http://example.com/%20foo")
1690     (base . "about:blank")
1691     (href . "http://example.com/%20foo")
1692     (origin . "http://example.com")
1693     (protocol . "http:")
1694     (username . "")
1695     (password . "")
1696     (host . "example.com")
1697     (hostname . "example.com")
1698     (port . "")
1699     (pathname . "/%20foo")
1700     (search . "")
1701     (hash . ""))
1702    ((input . "http://example.com/foo%")
1703     (base . "about:blank")
1704     (href . "http://example.com/foo%")
1705     (origin . "http://example.com")
1706     (protocol . "http:")
1707     (username . "")
1708     (password . "")
1709     (host . "example.com")
1710     (hostname . "example.com")
1711     (port . "")
1712     (pathname . "/foo%")
1713     (search . "")
1714     (hash . ""))
1715    ((input . "http://example.com/foo%2")
1716     (base . "about:blank")
1717     (href . "http://example.com/foo%2")
1718     (origin . "http://example.com")
1719     (protocol . "http:")
1720     (username . "")
1721     (password . "")
1722     (host . "example.com")
1723     (hostname . "example.com")
1724     (port . "")
1725     (pathname . "/foo%2")
1726     (search . "")
1727     (hash . ""))
1728    ((input . "http://example.com/foo%2zbar")
1729     (base . "about:blank")
1730     (href . "http://example.com/foo%2zbar")
1731     (origin . "http://example.com")
1732     (protocol . "http:")
1733     (username . "")
1734     (password . "")
1735     (host . "example.com")
1736     (hostname . "example.com")
1737     (port . "")
1738     (pathname . "/foo%2zbar")
1739     (search . "")
1740     (hash . ""))
1741    ((input . "http://example.com/foo%2©zbar")
1742     (base . "about:blank")
1743     (href . "http://example.com/foo%2%C3%82%C2%A9zbar")
1744     (origin . "http://example.com")
1745     (protocol . "http:")
1746     (username . "")
1747     (password . "")
1748     (host . "example.com")
1749     (hostname . "example.com")
1750     (port . "")
1751     (pathname . "/foo%2%C3%82%C2%A9zbar")
1752     (search . "")
1753     (hash . ""))
1754    ((input . "http://example.com/foo%41%7a")
1755     (base . "about:blank")
1756     (href . "http://example.com/foo%41%7a")
1757     (origin . "http://example.com")
1758     (protocol . "http:")
1759     (username . "")
1760     (password . "")
1761     (host . "example.com")
1762     (hostname . "example.com")
1763     (port . "")
1764     (pathname . "/foo%41%7a")
1765     (search . "")
1766     (hash . ""))
1767    ((input . "http://example.com/foo\t‘%91")
1768     (base . "about:blank")
1769     (href . "http://example.com/foo%C2%91%91")
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%C2%91%91")
1778     (search . "")
1779     (hash . ""))
1780    ((input . "http://example.com/foo%00%51")
1781     (base . "about:blank")
1782     (href . "http://example.com/foo%00%51")
1783     (origin . "http://example.com")
1784     (protocol . "http:")
1785     (username . "")
1786     (password . "")
1787     (host . "example.com")
1788     (hostname . "example.com")
1789     (port . "")
1790     (pathname . "/foo%00%51")
1791     (search . "")
1792     (hash . ""))
1793    ((input . "http://example.com/(%28:%3A%29)")
1794     (base . "about:blank")
1795     (href . "http://example.com/(%28:%3A%29)")
1796     (origin . "http://example.com")
1797     (protocol . "http:")
1798     (username . "")
1799     (password . "")
1800     (host . "example.com")
1801     (hostname . "example.com")
1802     (port . "")
1803     (pathname . "/(%28:%3A%29)")
1804     (search . "")
1805     (hash . ""))
1806    ((input . "http://example.com/%3A%3a%3C%3c")
1807     (base . "about:blank")
1808     (href . "http://example.com/%3A%3a%3C%3c")
1809     (origin . "http://example.com")
1810     (protocol . "http:")
1811     (username . "")
1812     (password . "")
1813     (host . "example.com")
1814     (hostname . "example.com")
1815     (port . "")
1816     (pathname . "/%3A%3a%3C%3c")
1817     (search . "")
1818     (hash . ""))
1819    ((input . "http://example.com/foo\tbar")
1820     (base . "about:blank")
1821     (href . "http://example.com/foobar")
1822     (origin . "http://example.com")
1823     (protocol . "http:")
1824     (username . "")
1825     (password . "")
1826     (host . "example.com")
1827     (hostname . "example.com")
1828     (port . "")
1829     (pathname . "/foobar")
1830     (search . "")
1831     (hash . ""))
1832    ((input . "http://example.com\\\\foo\\\\bar")
1833     (base . "about:blank")
1834     (href . "http://example.com//foo//bar")
1835     (origin . "http://example.com")
1836     (protocol . "http:")
1837     (username . "")
1838     (password . "")
1839     (host . "example.com")
1840     (hostname . "example.com")
1841     (port . "")
1842     (pathname . "//foo//bar")
1843     (search . "")
1844     (hash . ""))
1845    ((input . "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd")
1846     (base . "about:blank")
1847     (href . "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd")
1848     (origin . "http://example.com")
1849     (protocol . "http:")
1850     (username . "")
1851     (password . "")
1852     (host . "example.com")
1853     (hostname . "example.com")
1854     (port . "")
1855     (pathname . "/%7Ffp3%3Eju%3Dduvgw%3Dd")
1856     (search . "")
1857     (hash . ""))
1858    ((input . "http://example.com/@asdf%40")
1859     (base . "about:blank")
1860     (href . "http://example.com/@asdf%40")
1861     (origin . "http://example.com")
1862     (protocol . "http:")
1863     (username . "")
1864     (password . "")
1865     (host . "example.com")
1866     (hostname . "example.com")
1867     (port . "")
1868     (pathname . "/@asdf%40")
1869     (search . "")
1870     (hash . ""))
1871    ((input . "http://example.com/䜠奜䜠奜")
1872     (base . "about:blank")
1873     (href . "http://example.com/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD")
1874     (origin . "http://example.com")
1875     (protocol . "http:")
1876     (username . "")
1877     (password . "")
1878     (host . "example.com")
1879     (hostname . "example.com")
1880     (port . "")
1881     (pathname . "/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD")
1882     (search . "")
1883     (hash . ""))
1884    ((input . "http://example.com/‥/foo")
1885     (base . "about:blank")
1886     (href . "http://example.com/%E2%80%A5/foo")
1887     (origin . "http://example.com")
1888     (protocol . "http:")
1889     (username . "")
1890     (password . "")
1891     (host . "example.com")
1892     (hostname . "example.com")
1893     (port . "")
1894     (pathname . "/%E2%80%A5/foo")
1895     (search . "")
1896     (hash . ""))
1897    ((input . "http://example.com//foo")
1898     (base . "about:blank")
1899     (href . "http://example.com/%EF%BB%BF/foo")
1900     (origin . "http://example.com")
1901     (protocol . "http:")
1902     (username . "")
1903     (password . "")
1904     (host . "example.com")
1905     (hostname . "example.com")
1906     (port . "")
1907     (pathname . "/%EF%BB%BF/foo")
1908     (search . "")
1909     (hash . ""))
1910    ((input . "http://example.com/‮/foo/‭/bar")
1911     (base . "about:blank")
1912     (href . "http://example.com/%E2%80%AE/foo/%E2%80%AD/bar")
1913     (origin . "http://example.com")
1914     (protocol . "http:")
1915     (username . "")
1916     (password . "")
1917     (host . "example.com")
1918     (hostname . "example.com")
1919     (port . "")
1920     (pathname . "/%E2%80%AE/foo/%E2%80%AD/bar")
1921     (search . "")
1922     (hash . ""))
1923    " Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/relative.js"
1924    ((input . "http://www.google.com/foo?bar=baz")
1925     (base . "about:blank")
1926     (href . "http://www.google.com/foo?bar=baz")
1927     (origin . "http://www.google.com")
1928     (protocol . "http:")
1929     (username . "")
1930     (password . "")
1931     (host . "www.google.com")
1932     (hostname . "www.google.com")
1933     (port . "")
1934     (pathname . "/foo")
1935     (search . "?bar=baz")
1936     (hash . ""))
1937    ((input . "http://www.google.com/foo?bar=baz »")
1938     (base . "about:blank")
1939     (href . "http://www.google.com/foo?bar=baz%20%C2%BB")
1940     (origin . "http://www.google.com")
1941     (protocol . "http:")
1942     (username . "")
1943     (password . "")
1944     (host . "www.google.com")
1945     (hostname . "www.google.com")
1946     (port . "")
1947     (pathname . "/foo")
1948     (search . "?bar=baz")
1949     (hash . "%20%C2%BB"))
1950    ((input . "data:test »")
1951     (base . "about:blank")
1952     (href . "data:test%20%C2%BB")
1953     (origin . "null")
1954     (protocol . "data:")
1955     (username . "")
1956     (password . "")
1957     (host . "")
1958     (hostname . "")
1959     (port . "")
1960     (pathname . "test")
1961     (search . "")
1962     (hash . "%20%C2%BB"))
1963    ((input . "http://www.google.com")
1964     (base . "about:blank")
1965     (href . "http://www.google.com/")
1966     (origin . "http://www.google.com")
1967     (protocol . "http:")
1968     (username . "")
1969     (password . "")
1970     (host . "www.google.com")
1971     (hostname . "www.google.com")
1972     (port . "")
1973     (pathname . "/")
1974     (search . "")
1975     (hash . ""))
1976    ((input . "http://192.0x00A80001")
1977     (base . "about:blank")
1978     (href . "http://192.168.0.1/")
1979     (origin . "http://192.168.0.1")
1980     (protocol . "http:")
1981     (username . "")
1982     (password . "")
1983     (host . "192.168.0.1")
1984     (hostname . "192.168.0.1")
1985     (port . "")
1986     (pathname . "/")
1987     (search . "")
1988     (hash . ""))
1989    ((input . "http://www/foo%2Ehtml")
1990     (base . "about:blank")
1991     (href . "http://www/foo%2Ehtml")
1992     (origin . "http://www")
1993     (protocol . "http:")
1994     (username . "")
1995     (password . "")
1996     (host . "www")
1997     (hostname . "www")
1998     (port . "")
1999     (pathname . "/foo%2Ehtml")
2000     (search . "")
2001     (hash . ""))
2002    ((input . "http://www/foo/%2E/html")
2003     (base . "about:blank")
2004     (href . "http://www/foo/html")
2005     (origin . "http://www")
2006     (protocol . "http:")
2007     (username . "")
2008     (password . "")
2009     (host . "www")
2010     (hostname . "www")
2011     (port . "")
2012     (pathname . "/foo/html")
2013     (search . "")
2014     (hash . ""))
2015    ((input . "http://user:pass@/") (base . "about:blank") ("failure" . t))
2016    ((input . "http://%25DOMAIN:foobar@foodomain.com/")
2017     (base . "about:blank")
2018     (href . "http://%25DOMAIN:foobar@foodomain.com/")
2019     (origin . "http://foodomain.com")
2020     (protocol . "http:")
2021     (username . "%25DOMAIN")
2022     (password . "foobar")
2023     (host . "foodomain.com")
2024     (hostname . "foodomain.com")
2025     (port . "")
2026     (pathname . "/")
2027     (search . "")
2028     (hash . ""))
2029    ((input . "http:\\\\www.google.com\\foo")
2030     (base . "about:blank")
2031     (href . "http://www.google.com/foo")
2032     (origin . "http://www.google.com")
2033     (protocol . "http:")
2034     (username . "")
2035     (password . "")
2036     (host . "www.google.com")
2037     (hostname . "www.google.com")
2038     (port . "")
2039     (pathname . "/foo")
2040     (search . "")
2041     (hash . ""))
2042    ((input . "http://foo:80/")
2043     (base . "about:blank")
2044     (href . "http://foo/")
2045     (origin . "http://foo")
2046     (protocol . "http:")
2047     (username . "")
2048     (password . "")
2049     (host . "foo")
2050     (hostname . "foo")
2051     (port . "")
2052     (pathname . "/")
2053     (search . "")
2054     (hash . ""))
2055    ((input . "http://foo:81/")
2056     (base . "about:blank")
2057     (href . "http://foo:81/")
2058     (origin . "http://foo:81")
2059     (protocol . "http:")
2060     (username . "")
2061     (password . "")
2062     (host . "foo:81")
2063     (hostname . "foo")
2064     (port . "81")
2065     (pathname . "/")
2066     (search . "")
2067     (hash . ""))
2068    ((input . "httpa://foo:80/")
2069     (base . "about:blank")
2070     (href . "httpa://foo:80/")
2071     (origin . "null")
2072     (protocol . "httpa:")
2073     (username . "")
2074     (password . "")
2075     (host . "foo:80")
2076     (hostname . "foo")
2077     (port . "80")
2078     (pathname . "/")
2079     (search . "")
2080     (hash . ""))
2081    ((input . "http://foo:-80/") (base . "about:blank") ("failure" . t))
2082    ((input . "https://foo:443/")
2083     (base . "about:blank")
2084     (href . "https://foo/")
2085     (origin . "https://foo")
2086     (protocol . "https:")
2087     (username . "")
2088     (password . "")
2089     (host . "foo")
2090     (hostname . "foo")
2091     (port . "")
2092     (pathname . "/")
2093     (search . "")
2094     (hash . ""))
2095    ((input . "https://foo:80/")
2096     (base . "about:blank")
2097     (href . "https://foo:80/")
2098     (origin . "https://foo:80")
2099     (protocol . "https:")
2100     (username . "")
2101     (password . "")
2102     (host . "foo:80")
2103     (hostname . "foo")
2104     (port . "80")
2105     (pathname . "/")
2106     (search . "")
2107     (hash . ""))
2108    ((input . "ftp://foo:21/")
2109     (base . "about:blank")
2110     (href . "ftp://foo/")
2111     (origin . "ftp://foo")
2112     (protocol . "ftp:")
2113     (username . "")
2114     (password . "")
2115     (host . "foo")
2116     (hostname . "foo")
2117     (port . "")
2118     (pathname . "/")
2119     (search . "")
2120     (hash . ""))
2121    ((input . "ftp://foo:80/")
2122     (base . "about:blank")
2123     (href . "ftp://foo:80/")
2124     (origin . "ftp://foo:80")
2125     (protocol . "ftp:")
2126     (username . "")
2127     (password . "")
2128     (host . "foo:80")
2129     (hostname . "foo")
2130     (port . "80")
2131     (pathname . "/")
2132     (search . "")
2133     (hash . ""))
2134    ((input . "gopher://foo:70/")
2135     (base . "about:blank")
2136     (href . "gopher://foo/")
2137     (origin . "gopher://foo")
2138     (protocol . "gopher:")
2139     (username . "")
2140     (password . "")
2141     (host . "foo")
2142     (hostname . "foo")
2143     (port . "")
2144     (pathname . "/")
2145     (search . "")
2146     (hash . ""))
2147    ((input . "gopher://foo:443/")
2148     (base . "about:blank")
2149     (href . "gopher://foo:443/")
2150     (origin . "gopher://foo:443")
2151     (protocol . "gopher:")
2152     (username . "")
2153     (password . "")
2154     (host . "foo:443")
2155     (hostname . "foo")
2156     (port . "443")
2157     (pathname . "/")
2158     (search . "")
2159     (hash . ""))
2160    ((input . "ws://foo:80/")
2161     (base . "about:blank")
2162     (href . "ws://foo/")
2163     (origin . "ws://foo")
2164     (protocol . "ws:")
2165     (username . "")
2166     (password . "")
2167     (host . "foo")
2168     (hostname . "foo")
2169     (port . "")
2170     (pathname . "/")
2171     (search . "")
2172     (hash . ""))
2173    ((input . "ws://foo:81/")
2174     (base . "about:blank")
2175     (href . "ws://foo:81/")
2176     (origin . "ws://foo:81")
2177     (protocol . "ws:")
2178     (username . "")
2179     (password . "")
2180     (host . "foo:81")
2181     (hostname . "foo")
2182     (port . "81")
2183     (pathname . "/")
2184     (search . "")
2185     (hash . ""))
2186    ((input . "ws://foo:443/")
2187     (base . "about:blank")
2188     (href . "ws://foo:443/")
2189     (origin . "ws://foo:443")
2190     (protocol . "ws:")
2191     (username . "")
2192     (password . "")
2193     (host . "foo:443")
2194     (hostname . "foo")
2195     (port . "443")
2196     (pathname . "/")
2197     (search . "")
2198     (hash . ""))
2199    ((input . "ws://foo:815/")
2200     (base . "about:blank")
2201     (href . "ws://foo:815/")
2202     (origin . "ws://foo:815")
2203     (protocol . "ws:")
2204     (username . "")
2205     (password . "")
2206     (host . "foo:815")
2207     (hostname . "foo")
2208     (port . "815")
2209     (pathname . "/")
2210     (search . "")
2211     (hash . ""))
2212    ((input . "wss://foo:80/")
2213     (base . "about:blank")
2214     (href . "wss://foo:80/")
2215     (origin . "wss://foo:80")
2216     (protocol . "wss:")
2217     (username . "")
2218     (password . "")
2219     (host . "foo:80")
2220     (hostname . "foo")
2221     (port . "80")
2222     (pathname . "/")
2223     (search . "")
2224     (hash . ""))
2225    ((input . "wss://foo:81/")
2226     (base . "about:blank")
2227     (href . "wss://foo:81/")
2228     (origin . "wss://foo:81")
2229     (protocol . "wss:")
2230     (username . "")
2231     (password . "")
2232     (host . "foo:81")
2233     (hostname . "foo")
2234     (port . "81")
2235     (pathname . "/")
2236     (search . "")
2237     (hash . ""))
2238    ((input . "wss://foo:443/")
2239     (base . "about:blank")
2240     (href . "wss://foo/")
2241     (origin . "wss://foo")
2242     (protocol . "wss:")
2243     (username . "")
2244     (password . "")
2245     (host . "foo")
2246     (hostname . "foo")
2247     (port . "")
2248     (pathname . "/")
2249     (search . "")
2250     (hash . ""))
2251    ((input . "wss://foo:815/")
2252     (base . "about:blank")
2253     (href . "wss://foo:815/")
2254     (origin . "wss://foo:815")
2255     (protocol . "wss:")
2256     (username . "")
2257     (password . "")
2258     (host . "foo:815")
2259     (hostname . "foo")
2260     (port . "815")
2261     (pathname . "/")
2262     (search . "")
2263     (hash . ""))
2264    ((input . "http:/example.com/")
2265     (base . "about:blank")
2266     (href . "http://example.com/")
2267     (origin . "http://example.com")
2268     (protocol . "http:")
2269     (username . "")
2270     (password . "")
2271     (host . "example.com")
2272     (hostname . "example.com")
2273     (port . "")
2274     (pathname . "/")
2275     (search . "")
2276     (hash . ""))
2277    ((input . "ftp:/example.com/")
2278     (base . "about:blank")
2279     (href . "ftp://example.com/")
2280     (origin . "ftp://example.com")
2281     (protocol . "ftp:")
2282     (username . "")
2283     (password . "")
2284     (host . "example.com")
2285     (hostname . "example.com")
2286     (port . "")
2287     (pathname . "/")
2288     (search . "")
2289     (hash . ""))
2290    ((input . "https:/example.com/")
2291     (base . "about:blank")
2292     (href . "https://example.com/")
2293     (origin . "https://example.com")
2294     (protocol . "https:")
2295     (username . "")
2296     (password . "")
2297     (host . "example.com")
2298     (hostname . "example.com")
2299     (port . "")
2300     (pathname . "/")
2301     (search . "")
2302     (hash . ""))
2303    ((input . "madeupscheme:/example.com/")
2304     (base . "about:blank")
2305     (href . "madeupscheme:/example.com/")
2306     (origin . "null")
2307     (protocol . "madeupscheme:")
2308     (username . "")
2309     (password . "")
2310     (host . "")
2311     (hostname . "")
2312     (port . "")
2313     (pathname . "/example.com/")
2314     (search . "")
2315     (hash . ""))
2316    ((input . "file:/example.com/")
2317     (base . "about:blank")
2318     (href . "file:///example.com/")
2319     (protocol . "file:")
2320     (username . "")
2321     (password . "")
2322     (host . "")
2323     (hostname . "")
2324     (port . "")
2325     (pathname . "/example.com/")
2326     (search . "")
2327     (hash . ""))
2328    ((input . "ftps:/example.com/")
2329     (base . "about:blank")
2330     (href . "ftps:/example.com/")
2331     (origin . "null")
2332     (protocol . "ftps:")
2333     (username . "")
2334     (password . "")
2335     (host . "")
2336     (hostname . "")
2337     (port . "")
2338     (pathname . "/example.com/")
2339     (search . "")
2340     (hash . ""))
2341    ((input . "gopher:/example.com/")
2342     (base . "about:blank")
2343     (href . "gopher://example.com/")
2344     (origin . "gopher://example.com")
2345     (protocol . "gopher:")
2346     (username . "")
2347     (password . "")
2348     (host . "example.com")
2349     (hostname . "example.com")
2350     (port . "")
2351     (pathname . "/")
2352     (search . "")
2353     (hash . ""))
2354    ((input . "ws:/example.com/")
2355     (base . "about:blank")
2356     (href . "ws://example.com/")
2357     (origin . "ws://example.com")
2358     (protocol . "ws:")
2359     (username . "")
2360     (password . "")
2361     (host . "example.com")
2362     (hostname . "example.com")
2363     (port . "")
2364     (pathname . "/")
2365     (search . "")
2366     (hash . ""))
2367    ((input . "wss:/example.com/")
2368     (base . "about:blank")
2369     (href . "wss://example.com/")
2370     (origin . "wss://example.com")
2371     (protocol . "wss:")
2372     (username . "")
2373     (password . "")
2374     (host . "example.com")
2375     (hostname . "example.com")
2376     (port . "")
2377     (pathname . "/")
2378     (search . "")
2379     (hash . ""))
2380    ((input . "data:/example.com/")
2381     (base . "about:blank")
2382     (href . "data:/example.com/")
2383     (origin . "null")
2384     (protocol . "data:")
2385     (username . "")
2386     (password . "")
2387     (host . "")
2388     (hostname . "")
2389     (port . "")
2390     (pathname . "/example.com/")
2391     (search . "")
2392     (hash . ""))
2393    ((input . "javascript:/example.com/")
2394     (base . "about:blank")
2395     (href . "javascript:/example.com/")
2396     (origin . "null")
2397     (protocol . "javascript:")
2398     (username . "")
2399     (password . "")
2400     (host . "")
2401     (hostname . "")
2402     (port . "")
2403     (pathname . "/example.com/")
2404     (search . "")
2405     (hash . ""))
2406    ((input . "mailto:/example.com/")
2407     (base . "about:blank")
2408     (href . "mailto:/example.com/")
2409     (origin . "null")
2410     (protocol . "mailto:")
2411     (username . "")
2412     (password . "")
2413     (host . "")
2414     (hostname . "")
2415     (port . "")
2416     (pathname . "/example.com/")
2417     (search . "")
2418     (hash . ""))
2419    ((input . "http:example.com/")
2420     (base . "about:blank")
2421     (href . "http://example.com/")
2422     (origin . "http://example.com")
2423     (protocol . "http:")
2424     (username . "")
2425     (password . "")
2426     (host . "example.com")
2427     (hostname . "example.com")
2428     (port . "")
2429     (pathname . "/")
2430     (search . "")
2431     (hash . ""))
2432    ((input . "ftp:example.com/")
2433     (base . "about:blank")
2434     (href . "ftp://example.com/")
2435     (origin . "ftp://example.com")
2436     (protocol . "ftp:")
2437     (username . "")
2438     (password . "")
2439     (host . "example.com")
2440     (hostname . "example.com")
2441     (port . "")
2442     (pathname . "/")
2443     (search . "")
2444     (hash . ""))
2445    ((input . "https:example.com/")
2446     (base . "about:blank")
2447     (href . "https://example.com/")
2448     (origin . "https://example.com")
2449     (protocol . "https:")
2450     (username . "")
2451     (password . "")
2452     (host . "example.com")
2453     (hostname . "example.com")
2454     (port . "")
2455     (pathname . "/")
2456     (search . "")
2457     (hash . ""))
2458    ((input . "madeupscheme:example.com/")
2459     (base . "about:blank")
2460     (href . "madeupscheme:example.com/")
2461     (origin . "null")
2462     (protocol . "madeupscheme:")
2463     (username . "")
2464     (password . "")
2465     (host . "")
2466     (hostname . "")
2467     (port . "")
2468     (pathname . "example.com/")
2469     (search . "")
2470     (hash . ""))
2471    ((input . "ftps:example.com/")
2472     (base . "about:blank")
2473     (href . "ftps:example.com/")
2474     (origin . "null")
2475     (protocol . "ftps:")
2476     (username . "")
2477     (password . "")
2478     (host . "")
2479     (hostname . "")
2480     (port . "")
2481     (pathname . "example.com/")
2482     (search . "")
2483     (hash . ""))
2484    ((input . "gopher:example.com/")
2485     (base . "about:blank")
2486     (href . "gopher://example.com/")
2487     (origin . "gopher://example.com")
2488     (protocol . "gopher:")
2489     (username . "")
2490     (password . "")
2491     (host . "example.com")
2492     (hostname . "example.com")
2493     (port . "")
2494     (pathname . "/")
2495     (search . "")
2496     (hash . ""))
2497    ((input . "ws:example.com/")
2498     (base . "about:blank")
2499     (href . "ws://example.com/")
2500     (origin . "ws://example.com")
2501     (protocol . "ws:")
2502     (username . "")
2503     (password . "")
2504     (host . "example.com")
2505     (hostname . "example.com")
2506     (port . "")
2507     (pathname . "/")
2508     (search . "")
2509     (hash . ""))
2510    ((input . "wss:example.com/")
2511     (base . "about:blank")
2512     (href . "wss://example.com/")
2513     (origin . "wss://example.com")
2514     (protocol . "wss:")
2515     (username . "")
2516     (password . "")
2517     (host . "example.com")
2518     (hostname . "example.com")
2519     (port . "")
2520     (pathname . "/")
2521     (search . "")
2522     (hash . ""))
2523    ((input . "data:example.com/")
2524     (base . "about:blank")
2525     (href . "data:example.com/")
2526     (origin . "null")
2527     (protocol . "data:")
2528     (username . "")
2529     (password . "")
2530     (host . "")
2531     (hostname . "")
2532     (port . "")
2533     (pathname . "example.com/")
2534     (search . "")
2535     (hash . ""))
2536    ((input . "javascript:example.com/")
2537     (base . "about:blank")
2538     (href . "javascript:example.com/")
2539     (origin . "null")
2540     (protocol . "javascript:")
2541     (username . "")
2542     (password . "")
2543     (host . "")
2544     (hostname . "")
2545     (port . "")
2546     (pathname . "example.com/")
2547     (search . "")
2548     (hash . ""))
2549    ((input . "mailto:example.com/")
2550     (base . "about:blank")
2551     (href . "mailto:example.com/")
2552     (origin . "null")
2553     (protocol . "mailto:")
2554     (username . "")
2555     (password . "")
2556     (host . "")
2557     (hostname . "")
2558     (port . "")
2559     (pathname . "example.com/")
2560     (search . "")
2561     (hash . ""))
2562    " Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/segments-userinfo-vs-host.html"
2563    ((input . "http:@www.example.com")
2564     (base . "about:blank")
2565     (href . "http://www.example.com/")
2566     (origin . "http://www.example.com")
2567     (protocol . "http:")
2568     (username . "")
2569     (password . "")
2570     (host . "www.example.com")
2571     (hostname . "www.example.com")
2572     (port . "")
2573     (pathname . "/")
2574     (search . "")
2575     (hash . ""))
2576    ((input . "http:/@www.example.com")
2577     (base . "about:blank")
2578     (href . "http://www.example.com/")
2579     (origin . "http://www.example.com")
2580     (protocol . "http:")
2581     (username . "")
2582     (password . "")
2583     (host . "www.example.com")
2584     (hostname . "www.example.com")
2585     (port . "")
2586     (pathname . "/")
2587     (search . "")
2588     (hash . ""))
2589    ((input . "http://@www.example.com")
2590     (base . "about:blank")
2591     (href . "http://www.example.com/")
2592     (origin . "http://www.example.com")
2593     (protocol . "http:")
2594     (username . "")
2595     (password . "")
2596     (host . "www.example.com")
2597     (hostname . "www.example.com")
2598     (port . "")
2599     (pathname . "/")
2600     (search . "")
2601     (hash . ""))
2602    ((input . "http:a:b@www.example.com")
2603     (base . "about:blank")
2604     (href . "http://a:b@www.example.com/")
2605     (origin . "http://www.example.com")
2606     (protocol . "http:")
2607     (username . "a")
2608     (password . "b")
2609     (host . "www.example.com")
2610     (hostname . "www.example.com")
2611     (port . "")
2612     (pathname . "/")
2613     (search . "")
2614     (hash . ""))
2615    ((input . "http:/a:b@www.example.com")
2616     (base . "about:blank")
2617     (href . "http://a:b@www.example.com/")
2618     (origin . "http://www.example.com")
2619     (protocol . "http:")
2620     (username . "a")
2621     (password . "b")
2622     (host . "www.example.com")
2623     (hostname . "www.example.com")
2624     (port . "")
2625     (pathname . "/")
2626     (search . "")
2627     (hash . ""))
2628    ((input . "http://a:b@www.example.com")
2629     (base . "about:blank")
2630     (href . "http://a:b@www.example.com/")
2631     (origin . "http://www.example.com")
2632     (protocol . "http:")
2633     (username . "a")
2634     (password . "b")
2635     (host . "www.example.com")
2636     (hostname . "www.example.com")
2637     (port . "")
2638     (pathname . "/")
2639     (search . "")
2640     (hash . ""))
2641    ((input . "http://@pple.com")
2642     (base . "about:blank")
2643     (href . "http://pple.com/")
2644     (origin . "http://pple.com")
2645     (protocol . "http:")
2646     (username . "")
2647     (password . "")
2648     (host . "pple.com")
2649     (hostname . "pple.com")
2650     (port . "")
2651     (pathname . "/")
2652     (search . "")
2653     (hash . ""))
2654    ((input . "http::b@www.example.com")
2655     (base . "about:blank")
2656     (href . "http://:b@www.example.com/")
2657     (origin . "http://www.example.com")
2658     (protocol . "http:")
2659     (username . "")
2660     (password . "b")
2661     (host . "www.example.com")
2662     (hostname . "www.example.com")
2663     (port . "")
2664     (pathname . "/")
2665     (search . "")
2666     (hash . ""))
2667    ((input . "http:/:b@www.example.com")
2668     (base . "about:blank")
2669     (href . "http://:b@www.example.com/")
2670     (origin . "http://www.example.com")
2671     (protocol . "http:")
2672     (username . "")
2673     (password . "b")
2674     (host . "www.example.com")
2675     (hostname . "www.example.com")
2676     (port . "")
2677     (pathname . "/")
2678     (search . "")
2679     (hash . ""))
2680    ((input . "http://:b@www.example.com")
2681     (base . "about:blank")
2682     (href . "http://:b@www.example.com/")
2683     (origin . "http://www.example.com")
2684     (protocol . "http:")
2685     (username . "")
2686     (password . "b")
2687     (host . "www.example.com")
2688     (hostname . "www.example.com")
2689     (port . "")
2690     (pathname . "/")
2691     (search . "")
2692     (hash . ""))
2693    ((input . "http:/:@/www.example.com")
2694     (base . "about:blank")
2695     ("failure" . t))
2696    ((input . "http://user@/www.example.com")
2697     (base . "about:blank")
2698     ("failure" . t))
2699    ((input . "http:@/www.example.com")
2700     (base . "about:blank")
2701     ("failure" . t))
2702    ((input . "http:/@/www.example.com")
2703     (base . "about:blank")
2704     ("failure" . t))
2705    ((input . "http://@/www.example.com")
2706     (base . "about:blank")
2707     ("failure" . t))
2708    ((input . "https:@/www.example.com")
2709     (base . "about:blank")
2710     ("failure" . t))
2711    ((input . "http:a:b@/www.example.com")
2712     (base . "about:blank")
2713     ("failure" . t))
2714    ((input . "http:/a:b@/www.example.com")
2715     (base . "about:blank")
2716     ("failure" . t))
2717    ((input . "http://a:b@/www.example.com")
2718     (base . "about:blank")
2719     ("failure" . t))
2720    ((input . "http::@/www.example.com")
2721     (base . "about:blank")
2722     ("failure" . t))
2723    ((input . "http:a:@www.example.com")
2724     (base . "about:blank")
2725     (href . "http://a@www.example.com/")
2726     (origin . "http://www.example.com")
2727     (protocol . "http:")
2728     (username . "a")
2729     (password . "")
2730     (host . "www.example.com")
2731     (hostname . "www.example.com")
2732     (port . "")
2733     (pathname . "/")
2734     (search . "")
2735     (hash . ""))
2736    ((input . "http:/a:@www.example.com")
2737     (base . "about:blank")
2738     (href . "http://a@www.example.com/")
2739     (origin . "http://www.example.com")
2740     (protocol . "http:")
2741     (username . "a")
2742     (password . "")
2743     (host . "www.example.com")
2744     (hostname . "www.example.com")
2745     (port . "")
2746     (pathname . "/")
2747     (search . "")
2748     (hash . ""))
2749    ((input . "http://a:@www.example.com")
2750     (base . "about:blank")
2751     (href . "http://a@www.example.com/")
2752     (origin . "http://www.example.com")
2753     (protocol . "http:")
2754     (username . "a")
2755     (password . "")
2756     (host . "www.example.com")
2757     (hostname . "www.example.com")
2758     (port . "")
2759     (pathname . "/")
2760     (search . "")
2761     (hash . ""))
2762    ((input . "http://www.@pple.com")
2763     (base . "about:blank")
2764     (href . "http://www.@pple.com/")
2765     (origin . "http://pple.com")
2766     (protocol . "http:")
2767     (username . "www.")
2768     (password . "")
2769     (host . "pple.com")
2770     (hostname . "pple.com")
2771     (port . "")
2772     (pathname . "/")
2773     (search . "")
2774     (hash . ""))
2775    ((input . "http:@:www.example.com")
2776     (base . "about:blank")
2777     ("failure" . t))
2778    ((input . "http:/@:www.example.com")
2779     (base . "about:blank")
2780     ("failure" . t))
2781    ((input . "http://@:www.example.com")
2782     (base . "about:blank")
2783     ("failure" . t))
2784    ((input . "http://:@www.example.com")
2785     (base . "about:blank")
2786     (href . "http://www.example.com/")
2787     (origin . "http://www.example.com")
2788     (protocol . "http:")
2789     (username . "")
2790     (password . "")
2791     (host . "www.example.com")
2792     (hostname . "www.example.com")
2793     (port . "")
2794     (pathname . "/")
2795     (search . "")
2796     (hash . ""))
2797    " Others"
2798    ((input . "/")
2799     (base . "http://www.example.com/test")
2800     (href . "http://www.example.com/")
2801     (origin . "http://www.example.com")
2802     (protocol . "http:")
2803     (username . "")
2804     (password . "")
2805     (host . "www.example.com")
2806     (hostname . "www.example.com")
2807     (port . "")
2808     (pathname . "/")
2809     (search . "")
2810     (hash . ""))
2811    ((input . "/test.txt")
2812     (base . "http://www.example.com/test")
2813     (href . "http://www.example.com/test.txt")
2814     (origin . "http://www.example.com")
2815     (protocol . "http:")
2816     (username . "")
2817     (password . "")
2818     (host . "www.example.com")
2819     (hostname . "www.example.com")
2820     (port . "")
2821     (pathname . "/test.txt")
2822     (search . "")
2823     (hash . ""))
2824    ((input . ".")
2825     (base . "http://www.example.com/test")
2826     (href . "http://www.example.com/")
2827     (origin . "http://www.example.com")
2828     (protocol . "http:")
2829     (username . "")
2830     (password . "")
2831     (host . "www.example.com")
2832     (hostname . "www.example.com")
2833     (port . "")
2834     (pathname . "/")
2835     (search . "")
2836     (hash . ""))
2837    ((input . "..")
2838     (base . "http://www.example.com/test")
2839     (href . "http://www.example.com/")
2840     (origin . "http://www.example.com")
2841     (protocol . "http:")
2842     (username . "")
2843     (password . "")
2844     (host . "www.example.com")
2845     (hostname . "www.example.com")
2846     (port . "")
2847     (pathname . "/")
2848     (search . "")
2849     (hash . ""))
2850    ((input . "test.txt")
2851     (base . "http://www.example.com/test")
2852     (href . "http://www.example.com/test.txt")
2853     (origin . "http://www.example.com")
2854     (protocol . "http:")
2855     (username . "")
2856     (password . "")
2857     (host . "www.example.com")
2858     (hostname . "www.example.com")
2859     (port . "")
2860     (pathname . "/test.txt")
2861     (search . "")
2862     (hash . ""))
2863    ((input . "./test.txt")
2864     (base . "http://www.example.com/test")
2865     (href . "http://www.example.com/test.txt")
2866     (origin . "http://www.example.com")
2867     (protocol . "http:")
2868     (username . "")
2869     (password . "")
2870     (host . "www.example.com")
2871     (hostname . "www.example.com")
2872     (port . "")
2873     (pathname . "/test.txt")
2874     (search . "")
2875     (hash . ""))
2876    ((input . "../test.txt")
2877     (base . "http://www.example.com/test")
2878     (href . "http://www.example.com/test.txt")
2879     (origin . "http://www.example.com")
2880     (protocol . "http:")
2881     (username . "")
2882     (password . "")
2883     (host . "www.example.com")
2884     (hostname . "www.example.com")
2885     (port . "")
2886     (pathname . "/test.txt")
2887     (search . "")
2888     (hash . ""))
2889    ((input . "../aaa/test.txt")
2890     (base . "http://www.example.com/test")
2891     (href . "http://www.example.com/aaa/test.txt")
2892     (origin . "http://www.example.com")
2893     (protocol . "http:")
2894     (username . "")
2895     (password . "")
2896     (host . "www.example.com")
2897     (hostname . "www.example.com")
2898     (port . "")
2899     (pathname . "/aaa/test.txt")
2900     (search . "")
2901     (hash . ""))
2902    ((input . "../../test.txt")
2903     (base . "http://www.example.com/test")
2904     (href . "http://www.example.com/test.txt")
2905     (origin . "http://www.example.com")
2906     (protocol . "http:")
2907     (username . "")
2908     (password . "")
2909     (host . "www.example.com")
2910     (hostname . "www.example.com")
2911     (port . "")
2912     (pathname . "/test.txt")
2913     (search . "")
2914     (hash . ""))
2915    ((input . "äž­/test.txt")
2916     (base . "http://www.example.com/test")
2917     (href . "http://www.example.com/%E4%B8%AD/test.txt")
2918     (origin . "http://www.example.com")
2919     (protocol . "http:")
2920     (username . "")
2921     (password . "")
2922     (host . "www.example.com")
2923     (hostname . "www.example.com")
2924     (port . "")
2925     (pathname . "/%E4%B8%AD/test.txt")
2926     (search . "")
2927     (hash . ""))
2928    ((input . "http://www.example2.com")
2929     (base . "http://www.example.com/test")
2930     (href . "http://www.example2.com/")
2931     (origin . "http://www.example2.com")
2932     (protocol . "http:")
2933     (username . "")
2934     (password . "")
2935     (host . "www.example2.com")
2936     (hostname . "www.example2.com")
2937     (port . "")
2938     (pathname . "/")
2939     (search . "")
2940     (hash . ""))
2941    ((input . "//www.example2.com")
2942     (base . "http://www.example.com/test")
2943     (href . "http://www.example2.com/")
2944     (origin . "http://www.example2.com")
2945     (protocol . "http:")
2946     (username . "")
2947     (password . "")
2948     (host . "www.example2.com")
2949     (hostname . "www.example2.com")
2950     (port . "")
2951     (pathname . "/")
2952     (search . "")
2953     (hash . ""))
2954    ((input . "file:...")
2955     (base . "http://www.example.com/test")
2956     (href . "file:///...")
2957     (protocol . "file:")
2958     (username . "")
2959     (password . "")
2960     (host . "")
2961     (hostname . "")
2962     (port . "")
2963     (pathname . "/...")
2964     (search . "")
2965     (hash . ""))
2966    ((input . "file:..")
2967     (base . "http://www.example.com/test")
2968     (href . "file:///")
2969     (protocol . "file:")
2970     (username . "")
2971     (password . "")
2972     (host . "")
2973     (hostname . "")
2974     (port . "")
2975     (pathname . "/")
2976     (search . "")
2977     (hash . ""))
2978    ((input . "file:a")
2979     (base . "http://www.example.com/test")
2980     (href . "file:///a")
2981     (protocol . "file:")
2982     (username . "")
2983     (password . "")
2984     (host . "")
2985     (hostname . "")
2986     (port . "")
2987     (pathname . "/a")
2988     (search . "")
2989     (hash . ""))
2990    " Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/host.html"
2991    "Basic canonicalization, uppercase should be converted to lowercase"
2992    ((input . "http://ExAmPlE.CoM")
2993     (base . "http://other.com/")
2994     (href . "http://example.com/")
2995     (origin . "http://example.com")
2996     (protocol . "http:")
2997     (username . "")
2998     (password . "")
2999     (host . "example.com")
3000     (hostname . "example.com")
3001     (port . "")
3002     (pathname . "/")
3003     (search . "")
3004     (hash . ""))
3005    ((input . "http://example example.com")
3006     (base . "http://other.com/")
3007     ("failure" . t))
3008    ((input . "http://Goo%20 goo%7C|.com")
3009     (base . "http://other.com/")
3010     ("failure" . t))
3011    ((input . "http://[]") (base . "http://other.com/") ("failure" . t))
3012    ((input . "http://[:]") (base . "http://other.com/") ("failure" . t))
3013    "U+3000 is mapped to U+0020 (space) which is disallowed"
3014    ((input . "http://GOO  goo.com")
3015     (base . "http://other.com/")
3016     ("failure" . t))
3017    "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"
3018    ((input . "http://GOO​⁠goo.com")
3019     (base . "http://other.com/")
3020     (href . "http://googoo.com/")
3021     (origin . "http://googoo.com")
3022     (protocol . "http:")
3023     (username . "")
3024     (password . "")
3025     (host . "googoo.com")
3026     (hostname . "googoo.com")
3027     (port . "")
3028     (pathname . "/")
3029     (search . "")
3030     (hash . ""))
3031    "Leading and trailing C0 control or space"
3032    ((input . "\x00\x1b\x04\x12 http://example.com/\x1f \r ")
3033     (base . "about:blank")
3034     (href . "http://example.com/")
3035     (origin . "http://example.com")
3036     (protocol . "http:")
3037     (username . "")
3038     (password . "")
3039     (host . "example.com")
3040     (hostname . "example.com")
3041     (port . "")
3042     (pathname . "/")
3043     (search . "")
3044     (hash . ""))
3045    "Ideographic full stop (full-width period for Chinese, etc.) should be treated as a dot. U+3002 is mapped to U+002E (dot)"
3046    ((input . "http://www.foo。bar.com")
3047     (base . "http://other.com/")
3048     (href . "http://www.foo.bar.com/")
3049     (origin . "http://www.foo.bar.com")
3050     (protocol . "http:")
3051     (username . "")
3052     (password . "")
3053     (host . "www.foo.bar.com")
3054     (hostname . "www.foo.bar.com")
3055     (port . "")
3056     (pathname . "/")
3057     (search . "")
3058     (hash . ""))
3059    "Invalid unicode characters should fail... U+FDD0 is disallowed; %ef%b7%90 is U+FDD0"
3060    ((input . "http://﷐zyx.com")
3061     (base . "http://other.com/")
3062     ("failure" . t))
3063    "This is the same as previous but escaped"
3064    ((input . "http://%ef%b7%90zyx.com")
3065     (base . "http://other.com/")
3066     ("failure" . t))
3067    "U+FFFD"
3068    ((input . "https://ï¿œ") (base . "about:blank") ("failure" . t))
3069    ((input . "https://%EF%BF%BD") (base . "about:blank") ("failure" . t))
3070    ((input . "https://x/ï¿œ?ᅵᅵ")
3071     (base . "about:blank")
3072     (href . "https://x/%EF%BF%BD?%EF%BF%BD%EF%BF%BD")
3073     (origin . "https://x")
3074     (protocol . "https:")
3075     (username . "")
3076     (password . "")
3077     (host . "x")
3078     (hostname . "x")
3079     (port . "")
3080     (pathname . "/%EF%BF%BD")
3081     (search . "?%EF%BF%BD")
3082     (hash . "%EF%BF%BD"))
3083    "Test name prepping, fullwidth input should be converted to ASCII and NOT IDN-ized. This is 'Go' in fullwidth UTF-8/UTF-16."
3084    ((input . "http://.com")
3085     (base . "http://other.com/")
3086     (href . "http://go.com/")
3087     (origin . "http://go.com")
3088     (protocol . "http:")
3089     (username . "")
3090     (password . "")
3091     (host . "go.com")
3092     (hostname . "go.com")
3093     (port . "")
3094     (pathname . "/")
3095     (search . "")
3096     (hash . ""))
3097    "URL spec forbids the following. https://www.w3.org/Bugs/Public/show_bug.cgi?id=24257"
3098    ((input . "http://.com")
3099     (base . "http://other.com/")
3100     ("failure" . t))
3101    ((input . "http://%ef%bc%85%ef%bc%94%ef%bc%91.com")
3102     (base . "http://other.com/")
3103     ("failure" . t))
3104    "...%00 in fullwidth should fail (also as escaped UTF-8 input)"
3105    ((input . "http://.com")
3106     (base . "http://other.com/")
3107     ("failure" . t))
3108    ((input . "http://%ef%bc%85%ef%bc%90%ef%bc%90.com")
3109     (base . "http://other.com/")
3110     ("failure" . t))
3111    "Basic IDN support, UTF-8 and UTF-16 input should be converted to IDN"
3112    ((input . "http://䜠奜䜠奜")
3113     (base . "http://other.com/")
3114     (href . "http://xn--6qqa088eba/")
3115     (origin . "http://xn--6qqa088eba")
3116     (protocol . "http:")
3117     (username . "")
3118     (password . "")
3119     (host . "xn--6qqa088eba")
3120     (hostname . "xn--6qqa088eba")
3121     (port . "")
3122     (pathname . "/")
3123     (search . "")
3124     (hash . ""))
3125    ((input . "https://faß.ExAmPlE/")
3126     (base . "about:blank")
3127     (href . "https://xn--fa-hia.example/")
3128     (origin . "https://xn--fa-hia.example")
3129     (protocol . "https:")
3130     (username . "")
3131     (password . "")
3132     (host . "xn--fa-hia.example")
3133     (hostname . "xn--fa-hia.example")
3134     (port . "")
3135     (pathname . "/")
3136     (search . "")
3137     (hash . ""))
3138    ((input . "sc://faß.ExAmPlE/")
3139     (base . "about:blank")
3140     (href . "sc://fa%C3%9F.ExAmPlE/")
3141     (origin . "null")
3142     (protocol . "sc:")
3143     (username . "")
3144     (password . "")
3145     (host . "fa%C3%9F.ExAmPlE")
3146     (hostname . "fa%C3%9F.ExAmPlE")
3147     (port . "")
3148     (pathname . "/")
3149     (search . "")
3150     (hash . ""))
3151    "Invalid escaped characters should fail and the percents should be escaped. https://www.w3.org/Bugs/Public/show_bug.cgi?id=24191"
3152    ((input . "http://%zz%66%a.com")
3153     (base . "http://other.com/")
3154     ("failure" . t))
3155    "If we get an invalid character that has been escaped."
3156    ((input . "http://%25") (base . "http://other.com/") ("failure" . t))
3157    ((input . "http://hello%00")
3158     (base . "http://other.com/")
3159     ("failure" . t))
3160    "Escaped numbers should be treated like IP addresses if they are."
3161    ((input . "http://%30%78%63%30%2e%30%32%35%30.01")
3162     (base . "http://other.com/")
3163     (href . "http://192.168.0.1/")
3164     (origin . "http://192.168.0.1")
3165     (protocol . "http:")
3166     (username . "")
3167     (password . "")
3168     (host . "192.168.0.1")
3169     (hostname . "192.168.0.1")
3170     (port . "")
3171     (pathname . "/")
3172     (search . "")
3173     (hash . ""))
3174    ((input . "http://%30%78%63%30%2e%30%32%35%30.01%2e")
3175     (base . "http://other.com/")
3176     (href . "http://192.168.0.1/")
3177     (origin . "http://192.168.0.1")
3178     (protocol . "http:")
3179     (username . "")
3180     (password . "")
3181     (host . "192.168.0.1")
3182     (hostname . "192.168.0.1")
3183     (port . "")
3184     (pathname . "/")
3185     (search . "")
3186     (hash . ""))
3187    ((input . "http://192.168.0.257")
3188     (base . "http://other.com/")
3189     ("failure" . t))
3190    "Invalid escaping in hosts causes failure"
3191    ((input . "http://%3g%78%63%30%2e%30%32%35%30%2E.01")
3192     (base . "http://other.com/")
3193     ("failure" . t))
3194    "A space in a host causes failure"
3195    ((input . "http://192.168.0.1 hello")
3196     (base . "http://other.com/")
3197     ("failure" . t))
3198    ((input . "https://x x:12") (base . "about:blank") ("failure" . t))
3199    "Fullwidth and escaped UTF-8 fullwidth should still be treated as IP"
3200    ((input . "http://")
3201     (base . "http://other.com/")
3202     (href . "http://192.168.0.1/")
3203     (origin . "http://192.168.0.1")
3204     (protocol . "http:")
3205     (username . "")
3206     (password . "")
3207     (host . "192.168.0.1")
3208     (hostname . "192.168.0.1")
3209     (port . "")
3210     (pathname . "/")
3211     (search . "")
3212     (hash . ""))
3213    "Domains with empty labels"
3214    ((input . "http://./")
3215     (base . "about:blank")
3216     (href . "http://./")
3217     (origin . "http://.")
3218     (protocol . "http:")
3219     (username . "")
3220     (password . "")
3221     (host . ".")
3222     (hostname . ".")
3223     (port . "")
3224     (pathname . "/")
3225     (search . "")
3226     (hash . ""))
3227    ((input . "http://../")
3228     (base . "about:blank")
3229     (href . "http://../")
3230     (origin . "http://..")
3231     (protocol . "http:")
3232     (username . "")
3233     (password . "")
3234     (host . "..")
3235     (hostname . "..")
3236     (port . "")
3237     (pathname . "/")
3238     (search . "")
3239     (hash . ""))
3240    ((input . "http://0..0x300/")
3241     (base . "about:blank")
3242     (href . "http://0..0x300/")
3243     (origin . "http://0..0x300")
3244     (protocol . "http:")
3245     (username . "")
3246     (password . "")
3247     (host . "0..0x300")
3248     (hostname . "0..0x300")
3249     (port . "")
3250     (pathname . "/")
3251     (search . "")
3252     (hash . ""))
3253    "Broken IPv6"
3254    ((input . "http://[www.google.com]/")
3255     (base . "about:blank")
3256     ("failure" . t))
3257    ((input . "http://[google.com]")
3258     (base . "http://other.com/")
3259     ("failure" . t))
3260    ((input . "http://[::1.2.3.4x]")
3261     (base . "http://other.com/")
3262     ("failure" . t))
3263    ((input . "http://[::1.2.3.]")
3264     (base . "http://other.com/")
3265     ("failure" . t))
3266    ((input . "http://[::1.2.]")
3267     (base . "http://other.com/")
3268     ("failure" . t))
3269    ((input . "http://[::1.]") (base . "http://other.com/") ("failure" . t))
3270    "Misc Unicode"
3271    ((input . "http://foo:💩@example.com/bar")
3272     (base . "http://other.com/")
3273     (href . "http://foo:%F0%9F%92%A9@example.com/bar")
3274     (origin . "http://example.com")
3275     (protocol . "http:")
3276     (username . "foo")
3277     (password . "%F0%9F%92%A9")
3278     (host . "example.com")
3279     (hostname . "example.com")
3280     (port . "")
3281     (pathname . "/bar")
3282     (search . "")
3283     (hash . ""))
3284    " resolving a fragment against any scheme succeeds"
3285    ((input . "")
3286     (base . "test:test")
3287     (href . "test:test")
3288     (origin . "null")
3289     (protocol . "test:")
3290     (username . "")
3291     (password . "")
3292     (host . "")
3293     (hostname . "")
3294     (port . "")
3295     (pathname . "test")
3296     (search . "")
3297     (hash . ""))
3298    ((input . "x")
3299     (base . "mailto:x@x.com")
3300     (href . "mailto:x@x.comx")
3301     (origin . "null")
3302     (protocol . "mailto:")
3303     (username . "")
3304     (password . "")
3305     (host . "")
3306     (hostname . "")
3307     (port . "")
3308     (pathname . "x@x.com")
3309     (search . "")
3310     (hash . "x"))
3311    ((input . "x")
3312     (base . "data:,")
3313     (href . "data:,x")
3314     (origin . "null")
3315     (protocol . "data:")
3316     (username . "")
3317     (password . "")
3318     (host . "")
3319     (hostname . "")
3320     (port . "")
3321     (pathname . ",")
3322     (search . "")
3323     (hash . "x"))
3324    ((input . "x")
3325     (base . "about:blank")
3326     (href . "about:blankx")
3327     (origin . "null")
3328     (protocol . "about:")
3329     (username . "")
3330     (password . "")
3331     (host . "")
3332     (hostname . "")
3333     (port . "")
3334     (pathname . "blank")
3335     (search . "")
3336     (hash . "x"))
3337    ((input . "")
3338     (base . "test:test?test")
3339     (href . "test:test?test")
3340     (origin . "null")
3341     (protocol . "test:")
3342     (username . "")
3343     (password . "")
3344     (host . "")
3345     (hostname . "")
3346     (port . "")
3347     (pathname . "test")
3348     (search . "?test")
3349     (hash . ""))
3350    " multiple @ in authority state"
3351    ((input . "https://@test@test@example:800/")
3352     (base . "http://doesnotmatter/")
3353     (href . "https://%40test%40test@example:800/")
3354     (origin . "https://example:800")
3355     (protocol . "https:")
3356     (username . "%40test%40test")
3357     (password . "")
3358     (host . "example:800")
3359     (hostname . "example")
3360     (port . "800")
3361     (pathname . "/")
3362     (search . "")
3363     (hash . ""))
3364    ((input . "https://@@@example")
3365     (base . "http://doesnotmatter/")
3366     (href . "https://%40%40@example/")
3367     (origin . "https://example")
3368     (protocol . "https:")
3369     (username . "%40%40")
3370     (password . "")
3371     (host . "example")
3372     (hostname . "example")
3373     (port . "")
3374     (pathname . "/")
3375     (search . "")
3376     (hash . ""))
3377    "non-az-09 characters"
3378    ((input . "http://`{}:`{}@h/`{}?`{}")
3379     (base . "http://doesnotmatter/")
3380     (href . "http://%60%7B%7D:%60%7B%7D@h/%60%7B%7D?`{}")
3381     (origin . "http://h")
3382     (protocol . "http:")
3383     (username . "%60%7B%7D")
3384     (password . "%60%7B%7D")
3385     (host . "h")
3386     (hostname . "h")
3387     (port . "")
3388     (pathname . "/%60%7B%7D")
3389     (search . "?`{}")
3390     (hash . ""))
3391    "byte is ' and url is special"
3392    ((input . "http://host/?'")
3393     (base . "about:blank")
3394     (href . "http://host/?%27")
3395     (origin . "http://host")
3396     (protocol . "http:")
3397     (username . "")
3398     (password . "")
3399     (host . host)
3400     (hostname . host)
3401     (port . "")
3402     (pathname . "/")
3403     (search . "?%27")
3404     (hash . ""))
3405    ((input . "notspecial://host/?'")
3406     (base . "about:blank")
3407     (href . "notspecial://host/?'")
3408     (origin . "null")
3409     (protocol . "notspecial:")
3410     (username . "")
3411     (password . "")
3412     (host . host)
3413     (hostname . host)
3414     (port . "")
3415     (pathname . "/")
3416     (search . "?'")
3417     (hash . ""))
3418    " Credentials in base"
3419    ((input . "/some/path")
3420     (base . "http://user@example.org/smth")
3421     (href . "http://user@example.org/some/path")
3422     (origin . "http://example.org")
3423     (protocol . "http:")
3424     (username . "user")
3425     (password . "")
3426     (host . "example.org")
3427     (hostname . "example.org")
3428     (port . "")
3429     (pathname . "/some/path")
3430     (search . "")
3431     (hash . ""))
3432    ((input . "")
3433     (base . "http://user:pass@example.org:21/smth")
3434     (href . "http://user:pass@example.org:21/smth")
3435     (origin . "http://example.org:21")
3436     (protocol . "http:")
3437     (username . "user")
3438     (password . "pass")
3439     (host . "example.org:21")
3440     (hostname . "example.org")
3441     (port . "21")
3442     (pathname . "/smth")
3443     (search . "")
3444     (hash . ""))
3445    ((input . "/some/path")
3446     (base . "http://user:pass@example.org:21/smth")
3447     (href . "http://user:pass@example.org:21/some/path")
3448     (origin . "http://example.org:21")
3449     (protocol . "http:")
3450     (username . "user")
3451     (password . "pass")
3452     (host . "example.org:21")
3453     (hostname . "example.org")
3454     (port . "21")
3455     (pathname . "/some/path")
3456     (search . "")
3457     (hash . ""))
3458    " a set of tests designed by zcorpan for relative URLs with unknown schemes"
3459    ((input . "i") (base . "sc:sd") ("failure" . t))
3460    ((input . "i") (base . "sc:sd/sd") ("failure" . t))
3461    ((input . "i")
3462     (base . "sc:/pa/pa")
3463     (href . "sc:/pa/i")
3464     (origin . "null")
3465     (protocol . "sc:")
3466     (username . "")
3467     (password . "")
3468     (host . "")
3469     (hostname . "")
3470     (port . "")
3471     (pathname . "/pa/i")
3472     (search . "")
3473     (hash . ""))
3474    ((input . "i")
3475     (base . "sc://ho/pa")
3476     (href . "sc://ho/i")
3477     (origin . "null")
3478     (protocol . "sc:")
3479     (username . "")
3480     (password . "")
3481     (host . "ho")
3482     (hostname . "ho")
3483     (port . "")
3484     (pathname . "/i")
3485     (search . "")
3486     (hash . ""))
3487    ((input . "i")
3488     (base . "sc:///pa/pa")
3489     (href . "sc:///pa/i")
3490     (origin . "null")
3491     (protocol . "sc:")
3492     (username . "")
3493     (password . "")
3494     (host . "")
3495     (hostname . "")
3496     (port . "")
3497     (pathname . "/pa/i")
3498     (search . "")
3499     (hash . ""))
3500    ((input . "../i") (base . "sc:sd") ("failure" . t))
3501    ((input . "../i") (base . "sc:sd/sd") ("failure" . t))
3502    ((input . "../i")
3503     (base . "sc:/pa/pa")
3504     (href . "sc:/i")
3505     (origin . "null")
3506     (protocol . "sc:")
3507     (username . "")
3508     (password . "")
3509     (host . "")
3510     (hostname . "")
3511     (port . "")
3512     (pathname . "/i")
3513     (search . "")
3514     (hash . ""))
3515    ((input . "../i")
3516     (base . "sc://ho/pa")
3517     (href . "sc://ho/i")
3518     (origin . "null")
3519     (protocol . "sc:")
3520     (username . "")
3521     (password . "")
3522     (host . "ho")
3523     (hostname . "ho")
3524     (port . "")
3525     (pathname . "/i")
3526     (search . "")
3527     (hash . ""))
3528    ((input . "../i")
3529     (base . "sc:///pa/pa")
3530     (href . "sc:///i")
3531     (origin . "null")
3532     (protocol . "sc:")
3533     (username . "")
3534     (password . "")
3535     (host . "")
3536     (hostname . "")
3537     (port . "")
3538     (pathname . "/i")
3539     (search . "")
3540     (hash . ""))
3541    ((input . "/i") (base . "sc:sd") ("failure" . t))
3542    ((input . "/i") (base . "sc:sd/sd") ("failure" . t))
3543    ((input . "/i")
3544     (base . "sc:/pa/pa")
3545     (href . "sc:/i")
3546     (origin . "null")
3547     (protocol . "sc:")
3548     (username . "")
3549     (password . "")
3550     (host . "")
3551     (hostname . "")
3552     (port . "")
3553     (pathname . "/i")
3554     (search . "")
3555     (hash . ""))
3556    ((input . "/i")
3557     (base . "sc://ho/pa")
3558     (href . "sc://ho/i")
3559     (origin . "null")
3560     (protocol . "sc:")
3561     (username . "")
3562     (password . "")
3563     (host . "ho")
3564     (hostname . "ho")
3565     (port . "")
3566     (pathname . "/i")
3567     (search . "")
3568     (hash . ""))
3569    ((input . "/i")
3570     (base . "sc:///pa/pa")
3571     (href . "sc:///i")
3572     (origin . "null")
3573     (protocol . "sc:")
3574     (username . "")
3575     (password . "")
3576     (host . "")
3577     (hostname . "")
3578     (port . "")
3579     (pathname . "/i")
3580     (search . "")
3581     (hash . ""))
3582    ((input . "?i") (base . "sc:sd") ("failure" . t))
3583    ((input . "?i") (base . "sc:sd/sd") ("failure" . t))
3584    ((input . "?i")
3585     (base . "sc:/pa/pa")
3586     (href . "sc:/pa/pa?i")
3587     (origin . "null")
3588     (protocol . "sc:")
3589     (username . "")
3590     (password . "")
3591     (host . "")
3592     (hostname . "")
3593     (port . "")
3594     (pathname . "/pa/pa")
3595     (search . "?i")
3596     (hash . ""))
3597    ((input . "?i")
3598     (base . "sc://ho/pa")
3599     (href . "sc://ho/pa?i")
3600     (origin . "null")
3601     (protocol . "sc:")
3602     (username . "")
3603     (password . "")
3604     (host . "ho")
3605     (hostname . "ho")
3606     (port . "")
3607     (pathname . "/pa")
3608     (search . "?i")
3609     (hash . ""))
3610    ((input . "?i")
3611     (base . "sc:///pa/pa")
3612     (href . "sc:///pa/pa?i")
3613     (origin . "null")
3614     (protocol . "sc:")
3615     (username . "")
3616     (password . "")
3617     (host . "")
3618     (hostname . "")
3619     (port . "")
3620     (pathname . "/pa/pa")
3621     (search . "?i")
3622     (hash . ""))
3623    ((input . "i")
3624     (base . "sc:sd")
3625     (href . "sc:sdi")
3626     (origin . "null")
3627     (protocol . "sc:")
3628     (username . "")
3629     (password . "")
3630     (host . "")
3631     (hostname . "")
3632     (port . "")
3633     (pathname . "sd")
3634     (search . "")
3635     (hash . "i"))
3636    ((input . "i")
3637     (base . "sc:sd/sd")
3638     (href . "sc:sd/sdi")
3639     (origin . "null")
3640     (protocol . "sc:")
3641     (username . "")
3642     (password . "")
3643     (host . "")
3644     (hostname . "")
3645     (port . "")
3646     (pathname . "sd/sd")
3647     (search . "")
3648     (hash . "i"))
3649    ((input . "i")
3650     (base . "sc:/pa/pa")
3651     (href . "sc:/pa/pai")
3652     (origin . "null")
3653     (protocol . "sc:")
3654     (username . "")
3655     (password . "")
3656     (host . "")
3657     (hostname . "")
3658     (port . "")
3659     (pathname . "/pa/pa")
3660     (search . "")
3661     (hash . "i"))
3662    ((input . "i")
3663     (base . "sc://ho/pa")
3664     (href . "sc://ho/pai")
3665     (origin . "null")
3666     (protocol . "sc:")
3667     (username . "")
3668     (password . "")
3669     (host . "ho")
3670     (hostname . "ho")
3671     (port . "")
3672     (pathname . "/pa")
3673     (search . "")
3674     (hash . "i"))
3675    ((input . "i")
3676     (base . "sc:///pa/pa")
3677     (href . "sc:///pa/pai")
3678     (origin . "null")
3679     (protocol . "sc:")
3680     (username . "")
3681     (password . "")
3682     (host . "")
3683     (hostname . "")
3684     (port . "")
3685     (pathname . "/pa/pa")
3686     (search . "")
3687     (hash . "i"))
3688    " make sure that relative URL logic works on known typically non-relative schemes too"
3689    ((input . "about:/../")
3690     (base . "about:blank")
3691     (href . "about:/")
3692     (origin . "null")
3693     (protocol . "about:")
3694     (username . "")
3695     (password . "")
3696     (host . "")
3697     (hostname . "")
3698     (port . "")
3699     (pathname . "/")
3700     (search . "")
3701     (hash . ""))
3702    ((input . "data:/../")
3703     (base . "about:blank")
3704     (href . "data:/")
3705     (origin . "null")
3706     (protocol . "data:")
3707     (username . "")
3708     (password . "")
3709     (host . "")
3710     (hostname . "")
3711     (port . "")
3712     (pathname . "/")
3713     (search . "")
3714     (hash . ""))
3715    ((input . "javascript:/../")
3716     (base . "about:blank")
3717     (href . "javascript:/")
3718     (origin . "null")
3719     (protocol . "javascript:")
3720     (username . "")
3721     (password . "")
3722     (host . "")
3723     (hostname . "")
3724     (port . "")
3725     (pathname . "/")
3726     (search . "")
3727     (hash . ""))
3728    ((input . "mailto:/../")
3729     (base . "about:blank")
3730     (href . "mailto:/")
3731     (origin . "null")
3732     (protocol . "mailto:")
3733     (username . "")
3734     (password . "")
3735     (host . "")
3736     (hostname . "")
3737     (port . "")
3738     (pathname . "/")
3739     (search . "")
3740     (hash . ""))
3741    " unknown schemes and their hosts"
3742    ((input . "sc://ñ.test/")
3743     (base . "about:blank")
3744     (href . "sc://%C3%B1.test/")
3745     (origin . "null")
3746     (protocol . "sc:")
3747     (username . "")
3748     (password . "")
3749     (host . "%C3%B1.test")
3750     (hostname . "%C3%B1.test")
3751     (port . "")
3752     (pathname . "/")
3753     (search . "")
3754     (hash . ""))
3755    ((input . "sc://\x1f!\"$&'()*+,-.;<=>^_`{|}~/")
3756     (base . "about:blank")
3757     (href . "sc://%1F!\"$&'()*+,-.;<=>^_`{|}~/")
3758     (origin . "null")
3759     (protocol . "sc:")
3760     (username . "")
3761     (password . "")
3762     (host . "%1F!\"$&'()*+,-.;<=>^_`{|}~")
3763     (hostname . "%1F!\"$&'()*+,-.;<=>^_`{|}~")
3764     (port . "")
3765     (pathname . "/")
3766     (search . "")
3767     (hash . ""))
3768    ((input . "sc://\x00/") (base . "about:blank") ("failure" . t))
3769    ((input . "sc:// /") (base . "about:blank") ("failure" . t))
3770    ((input . "sc://%/")
3771     (base . "about:blank")
3772     (href . "sc://%/")
3773     (protocol . "sc:")
3774     (username . "")
3775     (password . "")
3776     (host . "%")
3777     (hostname . "%")
3778     (port . "")
3779     (pathname . "/")
3780     (search . "")
3781     (hash . ""))
3782    ((input . "sc://@/") (base . "about:blank") ("failure" . t))
3783    ((input . "sc://te@s:t@/") (base . "about:blank") ("failure" . t))
3784    ((input . "sc://:/") (base . "about:blank") ("failure" . t))
3785    ((input . "sc://:12/") (base . "about:blank") ("failure" . t))
3786    ((input . "sc://[/") (base . "about:blank") ("failure" . t))
3787    ((input . "sc://\\/") (base . "about:blank") ("failure" . t))
3788    ((input . "sc://]/") (base . "about:blank") ("failure" . t))
3789    ((input . "x")
3790     (base . "sc://ñ")
3791     (href . "sc://%C3%B1/x")
3792     (origin . "null")
3793     (protocol . "sc:")
3794     (username . "")
3795     (password . "")
3796     (host . "%C3%B1")
3797     (hostname . "%C3%B1")
3798     (port . "")
3799     (pathname . "/x")
3800     (search . "")
3801     (hash . ""))
3802    " unknown schemes and backslashes"
3803    ((input . "sc:\\../")
3804     (base . "about:blank")
3805     (href . "sc:\\../")
3806     (origin . "null")
3807     (protocol . "sc:")
3808     (username . "")
3809     (password . "")
3810     (host . "")
3811     (hostname . "")
3812     (port . "")
3813     (pathname . "\\../")
3814     (search . "")
3815     (hash . ""))
3816    " unknown scheme with path looking like a password"
3817    ((input . "sc::a@example.net")
3818     (base . "about:blank")
3819     (href . "sc::a@example.net")
3820     (origin . "null")
3821     (protocol . "sc:")
3822     (username . "")
3823     (password . "")
3824     (host . "")
3825     (hostname . "")
3826     (port . "")
3827     (pathname . ":a@example.net")
3828     (search . "")
3829     (hash . ""))
3830    " unknown scheme with bogus percent-encoding"
3831    ((input . "wow:%NBD")
3832     (base . "about:blank")
3833     (href . "wow:%NBD")
3834     (origin . "null")
3835     (protocol . "wow:")
3836     (username . "")
3837     (password . "")
3838     (host . "")
3839     (hostname . "")
3840     (port . "")
3841     (pathname . "%NBD")
3842     (search . "")
3843     (hash . ""))
3844    ((input . "wow:%1G")
3845     (base . "about:blank")
3846     (href . "wow:%1G")
3847     (origin . "null")
3848     (protocol . "wow:")
3849     (username . "")
3850     (password . "")
3851     (host . "")
3852     (hostname . "")
3853     (port . "")
3854     (pathname . "%1G")
3855     (search . "")
3856     (hash . ""))
3857    " Hosts and percent-encoding"
3858    ((input . "ftp://example.com%80/")
3859     (base . "about:blank")
3860     ("failure" . t))
3861    ((input . "ftp://example.com%A0/")
3862     (base . "about:blank")
3863     ("failure" . t))
3864    ((input . "https://example.com%80/")
3865     (base . "about:blank")
3866     ("failure" . t))
3867    ((input . "https://example.com%A0/")
3868     (base . "about:blank")
3869     ("failure" . t))
3870    ((input . "ftp://%e2%98%83")
3871     (base . "about:blank")
3872     (href . "ftp://xn--n3h/")
3873     (origin . "ftp://xn--n3h")
3874     (protocol . "ftp:")
3875     (username . "")
3876     (password . "")
3877     (host . "xn--n3h")
3878     (hostname . "xn--n3h")
3879     (port . "")
3880     (pathname . "/")
3881     (search . "")
3882     (hash . ""))
3883    ((input . "https://%e2%98%83")
3884     (base . "about:blank")
3885     (href . "https://xn--n3h/")
3886     (origin . "https://xn--n3h")
3887     (protocol . "https:")
3888     (username . "")
3889     (password . "")
3890     (host . "xn--n3h")
3891     (hostname . "xn--n3h")
3892     (port . "")
3893     (pathname . "/")
3894     (search . "")
3895     (hash . ""))
3896    " tests from jsdom/whatwg-url designed for code coverage"
3897    ((input . "http://127.0.0.1:10100/relative_import.html")
3898     (base . "about:blank")
3899     (href . "http://127.0.0.1:10100/relative_import.html")
3900     (origin . "http://127.0.0.1:10100")
3901     (protocol . "http:")
3902     (username . "")
3903     (password . "")
3904     (host . "127.0.0.1:10100")
3905     (hostname . "127.0.0.1")
3906     (port . "10100")
3907     (pathname . "/relative_import.html")
3908     (search . "")
3909     (hash . ""))
3910    ((input . "http://facebook.com/?foo=%7B%22abc%22")
3911     (base . "about:blank")
3912     (href . "http://facebook.com/?foo=%7B%22abc%22")
3913     (origin . "http://facebook.com")
3914     (protocol . "http:")
3915     (username . "")
3916     (password . "")
3917     (host . "facebook.com")
3918     (hostname . "facebook.com")
3919     (port . "")
3920     (pathname . "/")
3921     (search . "?foo=%7B%22abc%22")
3922     (hash . ""))
3923    ((input . "https://localhost:3000/jqueryui@1.2.3")
3924     (base . "about:blank")
3925     (href . "https://localhost:3000/jqueryui@1.2.3")
3926     (origin . "https://localhost:3000")
3927     (protocol . "https:")
3928     (username . "")
3929     (password . "")
3930     (host . "localhost:3000")
3931     (hostname . "localhost")
3932     (port . "3000")
3933     (pathname . "/jqueryui@1.2.3")
3934     (search . "")
3935     (hash . ""))
3936    " tab/LF/CR"
3937    ((input
3938      .
3939      "h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rryf\tr\na\rg")
3940     (base . "about:blank")
3941     (href . "http://host:9000/path?queryfrag")
3942     (origin . "http://host:9000")
3943     (protocol . "http:")
3944     (username . "")
3945     (password . "")
3946     (host . "host:9000")
3947     (hostname . host)
3948     (port . "9000")
3949     (pathname . "/path")
3950     (search . "?query")
3951     (hash . "frag"))
3952    " Stringification of URL.searchParams"
3953    ((input . "?a=b&c=d")
3954     (base . "http://example.org/foo/bar")
3955     (href . "http://example.org/foo/bar?a=b&c=d")
3956     (origin . "http://example.org")
3957     (protocol . "http:")
3958     (username . "")
3959     (password . "")
3960     (host . "example.org")
3961     (hostname . "example.org")
3962     (port . "")
3963     (pathname . "/foo/bar")
3964     (search . "?a=b&c=d")
3965     ("searchParams" . "a=b&c=d")
3966     (hash . ""))
3967    ((input . "??a=b&c=d")
3968     (base . "http://example.org/foo/bar")
3969     (href . "http://example.org/foo/bar??a=b&c=d")
3970     (origin . "http://example.org")
3971     (protocol . "http:")
3972     (username . "")
3973     (password . "")
3974     (host . "example.org")
3975     (hostname . "example.org")
3976     (port . "")
3977     (pathname . "/foo/bar")
3978     (search . "??a=b&c=d")
3979     ("searchParams" . "%3Fa=b&c=d")
3980     (hash . ""))
3981    " Scheme only"
3982    ((input . "http:")
3983     (base . "http://example.org/foo/bar")
3984     (href . "http://example.org/foo/bar")
3985     (origin . "http://example.org")
3986     (protocol . "http:")
3987     (username . "")
3988     (password . "")
3989     (host . "example.org")
3990     (hostname . "example.org")
3991     (port . "")
3992     (pathname . "/foo/bar")
3993     (search . "")
3994     ("searchParams" . "")
3995     (hash . ""))
3996    ((input . "http:")
3997     (base . "https://example.org/foo/bar")
3998     ("failure" . t))
3999    ((input . "sc:")
4000     (base . "https://example.org/foo/bar")
4001     (href . "sc:")
4002     (origin . "null")
4003     (protocol . "sc:")
4004     (username . "")
4005     (password . "")
4006     (host . "")
4007     (hostname . "")
4008     (port . "")
4009     (pathname . "")
4010     (search . "")
4011     ("searchParams" . "")
4012     (hash . ""))
4013    " Percent encoding of fragments"
4014    ((input . "http://foo.bar/baz?quxfoo\bbar")
4015     (base . "about:blank")
4016     (href . "http://foo.bar/baz?quxfoo%08bar")
4017     (origin . "http://foo.bar")
4018     (protocol . "http:")
4019     (username . "")
4020     (password . "")
4021     (host . "foo.bar")
4022     (hostname . "foo.bar")
4023     (port . "")
4024     (pathname . "/baz")
4025     (search . "?qux")
4026     ("searchParams" . "qux=")
4027     (hash . "foo%08bar"))
4028    ((input . "http://foo.bar/baz?quxfoo\"bar")
4029     (base . "about:blank")
4030     (href . "http://foo.bar/baz?quxfoo%22bar")
4031     (origin . "http://foo.bar")
4032     (protocol . "http:")
4033     (username . "")
4034     (password . "")
4035     (host . "foo.bar")
4036     (hostname . "foo.bar")
4037     (port . "")
4038     (pathname . "/baz")
4039     (search . "?qux")
4040     ("searchParams" . "qux=")
4041     (hash . "foo%22bar"))
4042    ((input . "http://foo.bar/baz?quxfoo<bar")
4043     (base . "about:blank")
4044     (href . "http://foo.bar/baz?quxfoo%3Cbar")
4045     (origin . "http://foo.bar")
4046     (protocol . "http:")
4047     (username . "")
4048     (password . "")
4049     (host . "foo.bar")
4050     (hostname . "foo.bar")
4051     (port . "")
4052     (pathname . "/baz")
4053     (search . "?qux")
4054     ("searchParams" . "qux=")
4055     (hash . "foo%3Cbar"))
4056    ((input . "http://foo.bar/baz?quxfoo>bar")
4057     (base . "about:blank")
4058     (href . "http://foo.bar/baz?quxfoo%3Ebar")
4059     (origin . "http://foo.bar")
4060     (protocol . "http:")
4061     (username . "")
4062     (password . "")
4063     (host . "foo.bar")
4064     (hostname . "foo.bar")
4065     (port . "")
4066     (pathname . "/baz")
4067     (search . "?qux")
4068     ("searchParams" . "qux=")
4069     (hash . "foo%3Ebar"))
4070    ((input . "http://foo.bar/baz?quxfoo`bar")
4071     (base . "about:blank")
4072     (href . "http://foo.bar/baz?quxfoo%60bar")
4073     (origin . "http://foo.bar")
4074     (protocol . "http:")
4075     (username . "")
4076     (password . "")
4077     (host . "foo.bar")
4078     (hostname . "foo.bar")
4079     (port . "")
4080     (pathname . "/baz")
4081     (search . "?qux")
4082     ("searchParams" . "qux=")
4083     (hash . "foo%60bar"))
4084    " IPv4 parsing (via https://github.com/nodejs/node/pull/10317)"
4085    ((input . "http://192.168.257")
4086     (base . "http://other.com/")
4087     (href . "http://192.168.1.1/")
4088     (origin . "http://192.168.1.1")
4089     (protocol . "http:")
4090     (username . "")
4091     (password . "")
4092     (host . "192.168.1.1")
4093     (hostname . "192.168.1.1")
4094     (port . "")
4095     (pathname . "/")
4096     (search . "")
4097     (hash . ""))
4098    ((input . "http://192.168.257.com")
4099     (base . "http://other.com/")
4100     (href . "http://192.168.257.com/")
4101     (origin . "http://192.168.257.com")
4102     (protocol . "http:")
4103     (username . "")
4104     (password . "")
4105     (host . "192.168.257.com")
4106     (hostname . "192.168.257.com")
4107     (port . "")
4108     (pathname . "/")
4109     (search . "")
4110     (hash . ""))
4111    ((input . "http://256")
4112     (base . "http://other.com/")
4113     (href . "http://0.0.1.0/")
4114     (origin . "http://0.0.1.0")
4115     (protocol . "http:")
4116     (username . "")
4117     (password . "")
4118     (host . "0.0.1.0")
4119     (hostname . "0.0.1.0")
4120     (port . "")
4121     (pathname . "/")
4122     (search . "")
4123     (hash . ""))
4124    ((input . "http://256.com")
4125     (base . "http://other.com/")
4126     (href . "http://256.com/")
4127     (origin . "http://256.com")
4128     (protocol . "http:")
4129     (username . "")
4130     (password . "")
4131     (host . "256.com")
4132     (hostname . "256.com")
4133     (port . "")
4134     (pathname . "/")
4135     (search . "")
4136     (hash . ""))
4137    ((input . "http://999999999")
4138     (base . "http://other.com/")
4139     (href . "http://59.154.201.255/")
4140     (origin . "http://59.154.201.255")
4141     (protocol . "http:")
4142     (username . "")
4143     (password . "")
4144     (host . "59.154.201.255")
4145     (hostname . "59.154.201.255")
4146     (port . "")
4147     (pathname . "/")
4148     (search . "")
4149     (hash . ""))
4150    ((input . "http://999999999.com")
4151     (base . "http://other.com/")
4152     (href . "http://999999999.com/")
4153     (origin . "http://999999999.com")
4154     (protocol . "http:")
4155     (username . "")
4156     (password . "")
4157     (host . "999999999.com")
4158     (hostname . "999999999.com")
4159     (port . "")
4160     (pathname . "/")
4161     (search . "")
4162     (hash . ""))
4163    ((input . "http://10000000000")
4164     (base . "http://other.com/")
4165     ("failure" . t))
4166    ((input . "http://10000000000.com")
4167     (base . "http://other.com/")
4168     (href . "http://10000000000.com/")
4169     (origin . "http://10000000000.com")
4170     (protocol . "http:")
4171     (username . "")
4172     (password . "")
4173     (host . "10000000000.com")
4174     (hostname . "10000000000.com")
4175     (port . "")
4176     (pathname . "/")
4177     (search . "")
4178     (hash . ""))
4179    ((input . "http://4294967295")
4180     (base . "http://other.com/")
4181     (href . "http://255.255.255.255/")
4182     (origin . "http://255.255.255.255")
4183     (protocol . "http:")
4184     (username . "")
4185     (password . "")
4186     (host . "255.255.255.255")
4187     (hostname . "255.255.255.255")
4188     (port . "")
4189     (pathname . "/")
4190     (search . "")
4191     (hash . ""))
4192    ((input . "http://4294967296")
4193     (base . "http://other.com/")
4194     ("failure" . t))
4195    ((input . "http://0xffffffff")
4196     (base . "http://other.com/")
4197     (href . "http://255.255.255.255/")
4198     (origin . "http://255.255.255.255")
4199     (protocol . "http:")
4200     (username . "")
4201     (password . "")
4202     (host . "255.255.255.255")
4203     (hostname . "255.255.255.255")
4204     (port . "")
4205     (pathname . "/")
4206     (search . "")
4207     (hash . ""))
4208    ((input . "http://0xffffffff1")
4209     (base . "http://other.com/")
4210     ("failure" . t))
4211    ((input . "http://256.256.256.256")
4212     (base . "http://other.com/")
4213     ("failure" . t))
4214    ((input . "http://256.256.256.256.256")
4215     (base . "http://other.com/")
4216     (href . "http://256.256.256.256.256/")
4217     (origin . "http://256.256.256.256.256")
4218     (protocol . "http:")
4219     (username . "")
4220     (password . "")
4221     (host . "256.256.256.256.256")
4222     (hostname . "256.256.256.256.256")
4223     (port . "")
4224     (pathname . "/")
4225     (search . "")
4226     (hash . ""))
4227    ((input . "https://0x.0x.0")
4228     (base . "about:blank")
4229     (href . "https://0.0.0.0/")
4230     (origin . "https://0.0.0.0")
4231     (protocol . "https:")
4232     (username . "")
4233     (password . "")
4234     (host . "0.0.0.0")
4235     (hostname . "0.0.0.0")
4236     (port . "")
4237     (pathname . "/")
4238     (search . "")
4239     (hash . ""))
4240    "More IPv4 parsing (via https://github.com/jsdom/whatwg-url/issues/92)"
4241    ((input . "https://0x100000000/test")
4242     (base . "about:blank")
4243     ("failure" . t))
4244    ((input . "https://256.0.0.1/test")
4245     (base . "about:blank")
4246     ("failure" . t))
4247    " file URLs containing percent-encoded Windows drive letters (shouldn't work)"
4248    ((input . "file:///C%3A/")
4249     (base . "about:blank")
4250     (href . "file:///C%3A/")
4251     (protocol . "file:")
4252     (username . "")
4253     (password . "")
4254     (host . "")
4255     (hostname . "")
4256     (port . "")
4257     (pathname . "/C%3A/")
4258     (search . "")
4259     (hash . ""))
4260    ((input . "file:///C%7C/")
4261     (base . "about:blank")
4262     (href . "file:///C%7C/")
4263     (protocol . "file:")
4264     (username . "")
4265     (password . "")
4266     (host . "")
4267     (hostname . "")
4268     (port . "")
4269     (pathname . "/C%7C/")
4270     (search . "")
4271     (hash . ""))
4272    " file URLs relative to other file URLs (via https://github.com/jsdom/whatwg-url/pull/60)"
4273    ((input . "pix/submit.gif")
4274     (base
4275      .
4276      "file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/anchor.html")
4277     (href
4278      .
4279      "file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/pix/submit.gif")
4280     (protocol . "file:")
4281     (username . "")
4282     (password . "")
4283     (host . "")
4284     (hostname . "")
4285     (port . "")
4286     (pathname
4287      .
4288      "/C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/pix/submit.gif")
4289     (search . "")
4290     (hash . ""))
4291    ((input . "..")
4292     (base . "file:///C:/")
4293     (href . "file:///C:/")
4294     (protocol . "file:")
4295     (username . "")
4296     (password . "")
4297     (host . "")
4298     (hostname . "")
4299     (port . "")
4300     (pathname . "/C:/")
4301     (search . "")
4302     (hash . ""))
4303    ((input . "..")
4304     (base . "file:///")
4305     (href . "file:///")
4306     (protocol . "file:")
4307     (username . "")
4308     (password . "")
4309     (host . "")
4310     (hostname . "")
4311     (port . "")
4312     (pathname . "/")
4313     (search . "")
4314     (hash . ""))
4315    " More file URL tests by zcorpan and annevk"
4316    ((input . "/")
4317     (base . "file:///C:/a/b")
4318     (href . "file:///C:/")
4319     (protocol . "file:")
4320     (username . "")
4321     (password . "")
4322     (host . "")
4323     (hostname . "")
4324     (port . "")
4325     (pathname . "/C:/")
4326     (search . "")
4327     (hash . ""))
4328    ((input . "//d:")
4329     (base . "file:///C:/a/b")
4330     (href . "file:///d:")
4331     (protocol . "file:")
4332     (username . "")
4333     (password . "")
4334     (host . "")
4335     (hostname . "")
4336     (port . "")
4337     (pathname . "/d:")
4338     (search . "")
4339     (hash . ""))
4340    ((input . "//d:/..")
4341     (base . "file:///C:/a/b")
4342     (href . "file:///d:/")
4343     (protocol . "file:")
4344     (username . "")
4345     (password . "")
4346     (host . "")
4347     (hostname . "")
4348     (port . "")
4349     (pathname . "/d:/")
4350     (search . "")
4351     (hash . ""))
4352    ((input . "..")
4353     (base . "file:///ab:/")
4354     (href . "file:///")
4355     (protocol . "file:")
4356     (username . "")
4357     (password . "")
4358     (host . "")
4359     (hostname . "")
4360     (port . "")
4361     (pathname . "/")
4362     (search . "")
4363     (hash . ""))
4364    ((input . "..")
4365     (base . "file:///1:/")
4366     (href . "file:///")
4367     (protocol . "file:")
4368     (username . "")
4369     (password . "")
4370     (host . "")
4371     (hostname . "")
4372     (port . "")
4373     (pathname . "/")
4374     (search . "")
4375     (hash . ""))
4376    ((input . "")
4377     (base . "file:///test?testtest")
4378     (href . "file:///test?test")
4379     (protocol . "file:")
4380     (username . "")
4381     (password . "")
4382     (host . "")
4383     (hostname . "")
4384     (port . "")
4385     (pathname . "/test")
4386     (search . "?test")
4387     (hash . ""))
4388    ((input . "file:")
4389     (base . "file:///test?testtest")
4390     (href . "file:///test?test")
4391     (protocol . "file:")
4392     (username . "")
4393     (password . "")
4394     (host . "")
4395     (hostname . "")
4396     (port . "")
4397     (pathname . "/test")
4398     (search . "?test")
4399     (hash . ""))
4400    ((input . "?x")
4401     (base . "file:///test?testtest")
4402     (href . "file:///test?x")
4403     (protocol . "file:")
4404     (username . "")
4405     (password . "")
4406     (host . "")
4407     (hostname . "")
4408     (port . "")
4409     (pathname . "/test")
4410     (search . "?x")
4411     (hash . ""))
4412    ((input . "file:?x")
4413     (base . "file:///test?testtest")
4414     (href . "file:///test?x")
4415     (protocol . "file:")
4416     (username . "")
4417     (password . "")
4418     (host . "")
4419     (hostname . "")
4420     (port . "")
4421     (pathname . "/test")
4422     (search . "?x")
4423     (hash . ""))
4424    ((input . "x")
4425     (base . "file:///test?testtest")
4426     (href . "file:///test?testx")
4427     (protocol . "file:")
4428     (username . "")
4429     (password . "")
4430     (host . "")
4431     (hostname . "")
4432     (port . "")
4433     (pathname . "/test")
4434     (search . "?test")
4435     (hash . "x"))
4436    ((input . "file:x")
4437     (base . "file:///test?testtest")
4438     (href . "file:///test?testx")
4439     (protocol . "file:")
4440     (username . "")
4441     (password . "")
4442     (host . "")
4443     (hostname . "")
4444     (port . "")
4445     (pathname . "/test")
4446     (search . "?test")
4447     (hash . "x"))
4448    " File URLs and many (back)slashes"
4449    ((input . "file:\\\\//")
4450     (base . "about:blank")
4451     (href . "file:///")
4452     (protocol . "file:")
4453     (username . "")
4454     (password . "")
4455     (host . "")
4456     (hostname . "")
4457     (port . "")
4458     (pathname . "/")
4459     (search . "")
4460     (hash . ""))
4461    ((input . "file:\\\\\\\\")
4462     (base . "about:blank")
4463     (href . "file:///")
4464     (protocol . "file:")
4465     (username . "")
4466     (password . "")
4467     (host . "")
4468     (hostname . "")
4469     (port . "")
4470     (pathname . "/")
4471     (search . "")
4472     (hash . ""))
4473    ((input . "file:\\\\\\\\?fox")
4474     (base . "about:blank")
4475     (href . "file:///?fox")
4476     (protocol . "file:")
4477     (username . "")
4478     (password . "")
4479     (host . "")
4480     (hostname . "")
4481     (port . "")
4482     (pathname . "/")
4483     (search . "?fox")
4484     (hash . ""))
4485    ((input . "file:\\\\\\\\guppy")
4486     (base . "about:blank")
4487     (href . "file:///guppy")
4488     (protocol . "file:")
4489     (username . "")
4490     (password . "")
4491     (host . "")
4492     (hostname . "")
4493     (port . "")
4494     (pathname . "/")
4495     (search . "")
4496     (hash . "guppy"))
4497    ((input . "file://spider///")
4498     (base . "about:blank")
4499     (href . "file://spider/")
4500     (protocol . "file:")
4501     (username . "")
4502     (password . "")
4503     (host . "spider")
4504     (hostname . "spider")
4505     (port . "")
4506     (pathname . "/")
4507     (search . "")
4508     (hash . ""))
4509    ((input . "file:\\\\localhost//")
4510     (base . "about:blank")
4511     (href . "file:///")
4512     (protocol . "file:")
4513     (username . "")
4514     (password . "")
4515     (host . "")
4516     (hostname . "")
4517     (port . "")
4518     (pathname . "/")
4519     (search . "")
4520     (hash . ""))
4521    ((input . "file:///localhost//cat")
4522     (base . "about:blank")
4523     (href . "file:///localhost//cat")
4524     (protocol . "file:")
4525     (username . "")
4526     (password . "")
4527     (host . "")
4528     (hostname . "")
4529     (port . "")
4530     (pathname . "/localhost//cat")
4531     (search . "")
4532     (hash . ""))
4533    ((input . "file://\\/localhost//cat")
4534     (base . "about:blank")
4535     (href . "file:///localhost//cat")
4536     (protocol . "file:")
4537     (username . "")
4538     (password . "")
4539     (host . "")
4540     (hostname . "")
4541     (port . "")
4542     (pathname . "/localhost//cat")
4543     (search . "")
4544     (hash . ""))
4545    ((input . "file://localhost//a//../..//")
4546     (base . "about:blank")
4547     (href . "file:///")
4548     (protocol . "file:")
4549     (username . "")
4550     (password . "")
4551     (host . "")
4552     (hostname . "")
4553     (port . "")
4554     (pathname . "/")
4555     (search . "")
4556     (hash . ""))
4557    ((input . "/////mouse")
4558     (base . "file:///elephant")
4559     (href . "file:///mouse")
4560     (protocol . "file:")
4561     (username . "")
4562     (password . "")
4563     (host . "")
4564     (hostname . "")
4565     (port . "")
4566     (pathname . "/mouse")
4567     (search . "")
4568     (hash . ""))
4569    ((input . "\\//pig")
4570     (base . "file://lion/")
4571     (href . "file:///pig")
4572     (protocol . "file:")
4573     (username . "")
4574     (password . "")
4575     (host . "")
4576     (hostname . "")
4577     (port . "")
4578     (pathname . "/pig")
4579     (search . "")
4580     (hash . ""))
4581    ((input . "\\/localhost//pig")
4582     (base . "file://lion/")
4583     (href . "file:///pig")
4584     (protocol . "file:")
4585     (username . "")
4586     (password . "")
4587     (host . "")
4588     (hostname . "")
4589     (port . "")
4590     (pathname . "/pig")
4591     (search . "")
4592     (hash . ""))
4593    ((input . "//localhost//pig")
4594     (base . "file://lion/")
4595     (href . "file:///pig")
4596     (protocol . "file:")
4597     (username . "")
4598     (password . "")
4599     (host . "")
4600     (hostname . "")
4601     (port . "")
4602     (pathname . "/pig")
4603     (search . "")
4604     (hash . ""))
4605    ((input . "/..//localhost//pig")
4606     (base . "file://lion/")
4607     (href . "file://lion/localhost//pig")
4608     (protocol . "file:")
4609     (username . "")
4610     (password . "")
4611     (host . "lion")
4612     (hostname . "lion")
4613     (port . "")
4614     (pathname . "/localhost//pig")
4615     (search . "")
4616     (hash . ""))
4617    ((input . "file://")
4618     (base . "file://ape/")
4619     (href . "file:///")
4620     (protocol . "file:")
4621     (username . "")
4622     (password . "")
4623     (host . "")
4624     (hostname . "")
4625     (port . "")
4626     (pathname . "/")
4627     (search . "")
4628     (hash . ""))
4629    " File URLs with non-empty hosts"
4630    ((input . "/rooibos")
4631     (base . "file://tea/")
4632     (href . "file://tea/rooibos")
4633     (protocol . "file:")
4634     (username . "")
4635     (password . "")
4636     (host . "tea")
4637     (hostname . "tea")
4638     (port . "")
4639     (pathname . "/rooibos")
4640     (search . "")
4641     (hash . ""))
4642    ((input . "/?chai")
4643     (base . "file://tea/")
4644     (href . "file://tea/?chai")
4645     (protocol . "file:")
4646     (username . "")
4647     (password . "")
4648     (host . "tea")
4649     (hostname . "tea")
4650     (port . "")
4651     (pathname . "/")
4652     (search . "?chai")
4653     (hash . ""))
4654    " Windows drive letter handling with the 'file:' base URL"
4655    ((input . "C|")
4656     (base . "file://host/dir/file")
4657     (href . "file:///C:")
4658     (protocol . "file:")
4659     (username . "")
4660     (password . "")
4661     (host . "")
4662     (hostname . "")
4663     (port . "")
4664     (pathname . "/C:")
4665     (search . "")
4666     (hash . ""))
4667    ((input . "C|")
4668     (base . "file://host/dir/file")
4669     (href . "file:///C:")
4670     (protocol . "file:")
4671     (username . "")
4672     (password . "")
4673     (host . "")
4674     (hostname . "")
4675     (port . "")
4676     (pathname . "/C:")
4677     (search . "")
4678     (hash . ""))
4679    ((input . "C|?")
4680     (base . "file://host/dir/file")
4681     (href . "file:///C:?")
4682     (protocol . "file:")
4683     (username . "")
4684     (password . "")
4685     (host . "")
4686     (hostname . "")
4687     (port . "")
4688     (pathname . "/C:")
4689     (search . "")
4690     (hash . ""))
4691    ((input . "C|/")
4692     (base . "file://host/dir/file")
4693     (href . "file:///C:/")
4694     (protocol . "file:")
4695     (username . "")
4696     (password . "")
4697     (host . "")
4698     (hostname . "")
4699     (port . "")
4700     (pathname . "/C:/")
4701     (search . "")
4702     (hash . ""))
4703    ((input . "C|\n/")
4704     (base . "file://host/dir/file")
4705     (href . "file:///C:/")
4706     (protocol . "file:")
4707     (username . "")
4708     (password . "")
4709     (host . "")
4710     (hostname . "")
4711     (port . "")
4712     (pathname . "/C:/")
4713     (search . "")
4714     (hash . ""))
4715    ((input . "C|\\")
4716     (base . "file://host/dir/file")
4717     (href . "file:///C:/")
4718     (protocol . "file:")
4719     (username . "")
4720     (password . "")
4721     (host . "")
4722     (hostname . "")
4723     (port . "")
4724     (pathname . "/C:/")
4725     (search . "")
4726     (hash . ""))
4727    ((input . "C")
4728     (base . "file://host/dir/file")
4729     (href . "file://host/dir/C")
4730     (protocol . "file:")
4731     (username . "")
4732     (password . "")
4733     (host . host)
4734     (hostname . host)
4735     (port . "")
4736     (pathname . "/dir/C")
4737     (search . "")
4738     (hash . ""))
4739    ((input . "C|a")
4740     (base . "file://host/dir/file")
4741     (href . "file://host/dir/C|a")
4742     (protocol . "file:")
4743     (username . "")
4744     (password . "")
4745     (host . host)
4746     (hostname . host)
4747     (port . "")
4748     (pathname . "/dir/C|a")
4749     (search . "")
4750     (hash . ""))
4751    " Windows drive letter quirk in the file slash state"
4752    ((input . "/c:/foo/bar")
4753     (base . "file:///c:/baz/qux")
4754     (href . "file:///c:/foo/bar")
4755     (protocol . "file:")
4756     (username . "")
4757     (password . "")
4758     (host . "")
4759     (hostname . "")
4760     (port . "")
4761     (pathname . "/c:/foo/bar")
4762     (search . "")
4763     (hash . ""))
4764    ((input . "/c|/foo/bar")
4765     (base . "file:///c:/baz/qux")
4766     (href . "file:///c:/foo/bar")
4767     (protocol . "file:")
4768     (username . "")
4769     (password . "")
4770     (host . "")
4771     (hostname . "")
4772     (port . "")
4773     (pathname . "/c:/foo/bar")
4774     (search . "")
4775     (hash . ""))
4776    ((input . "file:\\c:\\foo\\bar")
4777     (base . "file:///c:/baz/qux")
4778     (href . "file:///c:/foo/bar")
4779     (protocol . "file:")
4780     (username . "")
4781     (password . "")
4782     (host . "")
4783     (hostname . "")
4784     (port . "")
4785     (pathname . "/c:/foo/bar")
4786     (search . "")
4787     (hash . ""))
4788    ((input . "/c:/foo/bar")
4789     (base . "file://host/path")
4790     (href . "file:///c:/foo/bar")
4791     (protocol . "file:")
4792     (username . "")
4793     (password . "")
4794     (host . "")
4795     (hostname . "")
4796     (port . "")
4797     (pathname . "/c:/foo/bar")
4798     (search . "")
4799     (hash . ""))
4800    " Windows drive letter quirk with not empty host"
4801    ((input . "file://example.net/C:/")
4802     (base . "about:blank")
4803     (href . "file:///C:/")
4804     (protocol . "file:")
4805     (username . "")
4806     (password . "")
4807     (host . "")
4808     (hostname . "")
4809     (port . "")
4810     (pathname . "/C:/")
4811     (search . "")
4812     (hash . ""))
4813    ((input . "file://1.2.3.4/C:/")
4814     (base . "about:blank")
4815     (href . "file:///C:/")
4816     (protocol . "file:")
4817     (username . "")
4818     (password . "")
4819     (host . "")
4820     (hostname . "")
4821     (port . "")
4822     (pathname . "/C:/")
4823     (search . "")
4824     (hash . ""))
4825    ((input . "file://[1::8]/C:/")
4826     (base . "about:blank")
4827     (href . "file:///C:/")
4828     (protocol . "file:")
4829     (username . "")
4830     (password . "")
4831     (host . "")
4832     (hostname . "")
4833     (port . "")
4834     (pathname . "/C:/")
4835     (search . "")
4836     (hash . ""))
4837    " Windows drive letter quirk (no host)"
4838    ((input . "file:/C|/")
4839     (base . "about:blank")
4840     (href . "file:///C:/")
4841     (protocol . "file:")
4842     (username . "")
4843     (password . "")
4844     (host . "")
4845     (hostname . "")
4846     (port . "")
4847     (pathname . "/C:/")
4848     (search . "")
4849     (hash . ""))
4850    ((input . "file://C|/")
4851     (base . "about:blank")
4852     (href . "file:///C:/")
4853     (protocol . "file:")
4854     (username . "")
4855     (password . "")
4856     (host . "")
4857     (hostname . "")
4858     (port . "")
4859     (pathname . "/C:/")
4860     (search . "")
4861     (hash . ""))
4862    " file URLs without base URL by Rimas Misevičius"
4863    ((input . "file:")
4864     (base . "about:blank")
4865     (href . "file:///")
4866     (protocol . "file:")
4867     (username . "")
4868     (password . "")
4869     (host . "")
4870     (hostname . "")
4871     (port . "")
4872     (pathname . "/")
4873     (search . "")
4874     (hash . ""))
4875    ((input . "file:?q=v")
4876     (base . "about:blank")
4877     (href . "file:///?q=v")
4878     (protocol . "file:")
4879     (username . "")
4880     (password . "")
4881     (host . "")
4882     (hostname . "")
4883     (port . "")
4884     (pathname . "/")
4885     (search . "?q=v")
4886     (hash . ""))
4887    ((input . "file:frag")
4888     (base . "about:blank")
4889     (href . "file:///frag")
4890     (protocol . "file:")
4891     (username . "")
4892     (password . "")
4893     (host . "")
4894     (hostname . "")
4895     (port . "")
4896     (pathname . "/")
4897     (search . "")
4898     (hash . "frag"))
4899    " IPv6 tests"
4900    ((input . "http://[1:0::]")
4901     (base . "http://example.net/")
4902     (href . "http://[1::]/")
4903     (origin . "http://[1::]")
4904     (protocol . "http:")
4905     (username . "")
4906     (password . "")
4907     (host . "[1::]")
4908     (hostname . "[1::]")
4909     (port . "")
4910     (pathname . "/")
4911     (search . "")
4912     (hash . ""))
4913    ((input . "http://[0:1:2:3:4:5:6:7:8]")
4914     (base . "http://example.net/")
4915     ("failure" . t))
4916    ((input . "https://[0::0::0]") (base . "about:blank") ("failure" . t))
4917    ((input . "https://[0:.0]") (base . "about:blank") ("failure" . t))
4918    ((input . "https://[0:0:]") (base . "about:blank") ("failure" . t))
4919    ((input . "https://[0:1:2:3:4:5:6:7.0.0.0.1]")
4920     (base . "about:blank")
4921     ("failure" . t))
4922    ((input . "https://[0:1.00.0.0.0]")
4923     (base . "about:blank")
4924     ("failure" . t))
4925    ((input . "https://[0:1.290.0.0.0]")
4926     (base . "about:blank")
4927     ("failure" . t))
4928    ((input . "https://[0:1.23.23]") (base . "about:blank") ("failure" . t))
4929    " Empty host"
4930    ((input . "http://?") (base . "about:blank") ("failure" . t))
4931    ((input . "http://") (base . "about:blank") ("failure" . t))
4932    "Port overflow (2^32 + 81)"
4933    ((input . "http://f:4294967377/c")
4934     (base . "http://example.org/")
4935     ("failure" . t))
4936    "Port overflow (2^64 + 81)"
4937    ((input . "http://f:18446744073709551697/c")
4938     (base . "http://example.org/")
4939     ("failure" . t))
4940    "Port overflow (2^128 + 81)"
4941    ((input . "http://f:340282366920938463463374607431768211537/c")
4942     (base . "http://example.org/")
4943     ("failure" . t))
4944    " Non-special-URL path tests"
4945    ((input . "sc://ñ")
4946     (base . "about:blank")
4947     (href . "sc://%C3%B1")
4948     (origin . "null")
4949     (protocol . "sc:")
4950     (username . "")
4951     (password . "")
4952     (host . "%C3%B1")
4953     (hostname . "%C3%B1")
4954     (port . "")
4955     (pathname . "")
4956     (search . "")
4957     (hash . ""))
4958    ((input . "sc://ñ?x")
4959     (base . "about:blank")
4960     (href . "sc://%C3%B1?x")
4961     (origin . "null")
4962     (protocol . "sc:")
4963     (username . "")
4964     (password . "")
4965     (host . "%C3%B1")
4966     (hostname . "%C3%B1")
4967     (port . "")
4968     (pathname . "")
4969     (search . "?x")
4970     (hash . ""))
4971    ((input . "sc://ñx")
4972     (base . "about:blank")
4973     (href . "sc://%C3%B1x")
4974