segments.js revision db951b2c4c8fce1304a13d97dec4ae14be629380
1description("Test URL segmentation");
2
3cases = [
4  // [URL, [SCHEME, HOST, PORT, PATH, QUERY, REF]]
5  ["http://user:pass@foo:21/bar;par?b#c",    ["http:","foo","21","/bar;par","?b","#c"]],
6  ["http:foo.com",                           ["http:","example.org","0","/foo/foo.com","",""]],
7  ["\\t   :foo.com   \\n",                   ["http:","example.org","0","/foo/:foo.com","",""]],
8  [" foo.com  ",                             ["http:","example.org","0","/foo/foo.com","",""]],
9  ["a:\\t foo.com",                          ["a:","","0"," foo.com","",""]],
10  ["http://f:21/ b ? d # e ",                ["http:","f","21","/%20b%20","?%20d%20","# e"]],
11  ["http://f:/c",                            ["http:","f","0","/c","",""]],
12  ["http://f:0/c",                           ["http:","f","0","/c","",""]],
13  ["http://f:00000000000000/c",              ["http:","f","0","/c","",""]],
14  ["http://f:00000000000000000000080/c",     ["http:","f","0","/c","",""]],
15  ["http://f:b/c",                           [":","","0","","",""]],
16  ["http://f: /c",                           [":","","0","","",""]],
17  ["http://f:\\n/c",                         [":","","0","","",""]],
18  ["http://f:fifty-two/c",                   [":","","0","","",""]],
19  ["http://f:999999/c",                      [":","","0","","",""]],
20  ["http://f: 21 / b ? d # e ",              [":","","0","","",""]],
21  ["",                                       ["http:","example.org","0","/foo/bar","",""]],
22  ["  \\t",                                  ["http:","example.org","0","/foo/bar","",""]],
23  [":foo.com/",                              ["http:","example.org","0","/foo/:foo.com/","",""]],
24  [":foo.com\\\\",                           ["http:","example.org","0","/foo/:foo.com/","",""]],
25  [":",                                      ["http:","example.org","0","/foo/:","",""]],
26  [":a",                                     ["http:","example.org","0","/foo/:a","",""]],
27  [":/",                                     ["http:","example.org","0","/foo/:/","",""]],
28  [":\\\\",                                  ["http:","example.org","0","/foo/:/","",""]],
29  [":#",                                     ["http:","example.org","0","/foo/:","",""]],
30  ["#",                                      ["http:","example.org","0","/foo/bar","",""]],
31  ["#/",                                     ["http:","example.org","0","/foo/bar","","#/"]],
32  ["#\\\\",                                  ["http:","example.org","0","/foo/bar","","#\\\\"]],
33  ["#;?",                                    ["http:","example.org","0","/foo/bar","","#;?"]],
34  ["?",                                      ["http:","example.org","0","/foo/bar","",""]],
35  ["/",                                      ["http:","example.org","0","/","",""]],
36  [":23",                                    ["http:","example.org","0","/foo/:23","",""]],
37  ["/:23",                                   ["http:","example.org","0","/:23","",""]],
38  ["//",                                     [":","","0","","",""]],
39  ["::",                                     ["http:","example.org","0","/foo/::","",""]],
40  ["::23",                                   ["http:","example.org","0","/foo/::23","",""]],
41  ["foo://",                                 ["foo:","","0","//","",""]],
42  ["http://a:b@c:29/d",                      ["http:","c","29","/d","",""]],
43  ["http::@c:29",                            ["http:","example.org","0","/foo/:@c:29","",""]],
44  ["http://&a:foo(b]c@d:2/",                 ["http:","d","2","/","",""]],
45  ["http://::@c@d:2",                        ["http:","d","2","/","",""]],
46  ["http://foo.com:b@d/",                    ["http:","d","0","/","",""]],
47  ["http://foo.com/\\\\@",                   ["http:","foo.com","0","//@","",""]],
48  ["http:\\\\\\\\foo.com\\\\",               ["http:","foo.com","0","/","",""]],
49  ["http:\\\\\\\\a\\\\b:c\\\\d@foo.com\\\\", ["http:","a","0","/b:c/d@foo.com/","",""]],
50  ["foo:/",                                  ["foo:","","0","/","",""]],
51  ["foo:/bar.com/",                          ["foo:","","0","/bar.com/","",""]],
52  ["foo://///////",                          ["foo:","","0","/////////","",""]],
53  ["foo://///////bar.com/",                  ["foo:","","0","/////////bar.com/","",""]],
54  ["foo:////://///",                         ["foo:","","0","////://///","",""]],
55  ["c:/foo",                                 ["c:","","0","/foo","",""]],
56  ["//foo/bar",                              ["http:","foo","0","/bar","",""]],
57  ["http://foo/path;a??e#f#g",               ["http:","foo","0","/path;a","??e","#f#g"]],
58  ["http://foo/abcd?efgh?ijkl",              ["http:","foo","0","/abcd","?efgh?ijkl",""]],
59  ["http://foo/abcd#foo?bar",                ["http:","foo","0","/abcd","","#foo?bar"]],
60  ["[61:24:74]:98",                          ["http:","example.org","0","/foo/[61:24:74]:98","",""]],
61  ["http://[61:27]:98",                      [":","","0","","",""]],
62  ["http:[61:27]/:foo",                      ["http:","example.org","0","/foo/[61:27]/:foo","",""]],
63  ["http://[1::2]:3:4",                      [":","","0","","",""]],
64  ["http://2001::1",                         [":","","0","","",""]],
65  ["http://[2001::1",                        [":","","0","","",""]],
66  ["http://2001::1]",                        [":","","0","","",""]],
67  ["http://2001::1]:80",                     [":","","0","","",""]],
68  ["http://[2001::1]",                       ["http:","[2001::1]","0","/","",""]],
69  ["http://[2001::1]:80",                    ["http:","[2001::1]","0","/","",""]],
70  ["http://[[::]]",                          [":","","0","","",""]],
71  ["http:/example.com/",                     ["http:","example.org","0","/example.com/","",""]],
72  ["ftp:/example.com/",                      ["ftp:","example.com","0","/","",""]],
73  ["https:/example.com/",                    ["https:","example.com","0","/","",""]],
74  ["madeupscheme:/example.com/",             ["madeupscheme:","","0","/example.com/","",""]],
75  ["file:/example.com/",                     ["file:","","0","/example.com/","",""]],
76  ["ftps:/example.com/",                     ["ftps:","","0","/example.com/","",""]],
77  ["gopher:/example.com/",                   ["gopher:","example.com","0","/","",""]],
78  ["ws:/example.com/",                       ["ws:","example.com","0","/","",""]],
79  ["wss:/example.com/",                      ["wss:","example.com","0","/","",""]],
80  ["data:/example.com/",                     ["data:","","0","/example.com/","",""]],
81  ["javascript:/example.com/",               ["javascript:","","0","/example.com/","",""]],
82  ["mailto:/example.com/",                   ["mailto:","","0","/example.com/","",""]],
83  ["http:example.com/",                      ["http:","example.org","0","/foo/example.com/","",""]],
84  ["ftp:example.com/",                       ["ftp:","example.com","0","/","",""]],
85  ["https:example.com/",                     ["https:","example.com","0","/","",""]],
86  ["madeupscheme:example.com/",              ["madeupscheme:","","0","example.com/","",""]],
87  ["file:example.com/",                      ["file:","","0","/example.com/","",""]],
88  ["ftps:example.com/",                      ["ftps:","","0","example.com/","",""]],
89  ["gopher:example.com/",                    ["gopher:","example.com","0","/","",""]],
90  ["ws:example.com/",                        ["ws:","example.com","0","/","",""]],
91  ["wss:example.com/",                       ["wss:","example.com","0","/","",""]],
92  ["data:example.com/",                      ["data:","","0","example.com/","",""]],
93  ["javascript:example.com/",                ["javascript:","","0","example.com/","",""]],
94  ["mailto:example.com/",                    ["mailto:","","0","example.com/","",""]],
95];
96
97var originalBaseURL = canonicalize(".");
98setBaseURL("http://example.org/foo/bar");
99
100for (var i = 0; i < cases.length; ++i) {
101  shouldBe("segments('" + cases[i][0] + "')",
102           "'" + JSON.stringify(cases[i][1]) + "'");
103}
104
105setBaseURL(originalBaseURL);
106
107var successfullyParsed = true;
108