|
1 |
|
2 <!DOCTYPE HTML> |
|
3 <html> |
|
4 <head> |
|
5 <meta charset="utf-8"> |
|
6 <title>Test URL API</title> |
|
7 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
8 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> |
|
9 </head> |
|
10 <body> |
|
11 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=887364">Mozilla Bug 887364</a> |
|
12 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=991471">Mozilla Bug 991471</a> |
|
13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=996055">Mozilla Bug 996055</a> |
|
14 <p id="display"></p> |
|
15 <div id="content" style="display: none"> |
|
16 <iframe name="x" id="x"></iframe> |
|
17 <iframe name="y" id="y"></iframe> |
|
18 </div> |
|
19 <pre id="test"> |
|
20 </pre> |
|
21 <script type="application/javascript"> |
|
22 |
|
23 /** Test for Bug 887364 **/ |
|
24 ok("URL" in window, "window.URL exists"); |
|
25 |
|
26 var tests = [ |
|
27 { url: 'http://www.abc.com', |
|
28 base: undefined, |
|
29 error: false, |
|
30 href: 'http://www.abc.com/', |
|
31 origin: 'http://www.abc.com', |
|
32 protocol: 'http:', |
|
33 username: '', |
|
34 password: '', |
|
35 host: 'www.abc.com', |
|
36 hostname: 'www.abc.com', |
|
37 port: '', |
|
38 pathname: '/', |
|
39 search: '', |
|
40 hash: '' |
|
41 }, |
|
42 { url: 'ftp://auser:apw@www.abc.com', |
|
43 base: undefined, |
|
44 error: false, |
|
45 href: 'ftp://auser:apw@www.abc.com/', |
|
46 origin: 'ftp://www.abc.com', |
|
47 protocol: 'ftp:', |
|
48 username: 'auser', |
|
49 password: 'apw', |
|
50 host: 'www.abc.com', |
|
51 hostname: 'www.abc.com', |
|
52 port: '', |
|
53 pathname: '/', |
|
54 search: '', |
|
55 hash: '' |
|
56 }, |
|
57 { url: 'http://www.abc.com:90/apath/', |
|
58 base: undefined, |
|
59 error: false, |
|
60 href: 'http://www.abc.com:90/apath/', |
|
61 origin: 'http://www.abc.com:90', |
|
62 protocol: 'http:', |
|
63 username: '', |
|
64 password: '', |
|
65 host: 'www.abc.com:90', |
|
66 hostname: 'www.abc.com', |
|
67 port: '90', |
|
68 pathname: '/apath/', |
|
69 search: '', |
|
70 hash: '' |
|
71 }, |
|
72 { url: 'http://www.abc.com/apath/afile.txt#ahash', |
|
73 base: undefined, |
|
74 error: false, |
|
75 href: 'http://www.abc.com/apath/afile.txt#ahash', |
|
76 origin: 'http://www.abc.com', |
|
77 protocol: 'http:', |
|
78 username: '', |
|
79 password: '', |
|
80 host: 'www.abc.com', |
|
81 hostname: 'www.abc.com', |
|
82 port: '', |
|
83 pathname: '/apath/afile.txt', |
|
84 search: '', |
|
85 hash: '#ahash' |
|
86 }, |
|
87 { url: 'http://example.com/?test#hash', |
|
88 base: undefined, |
|
89 error: false, |
|
90 href: 'http://example.com/?test#hash', |
|
91 origin: 'http://example.com', |
|
92 protocol: 'http:', |
|
93 username: '', |
|
94 password: '', |
|
95 host: 'example.com', |
|
96 hostname: 'example.com', |
|
97 port: '', |
|
98 pathname: '/', |
|
99 search: '?test', |
|
100 hash: '#hash' |
|
101 }, |
|
102 { url: 'http://example.com/?test', |
|
103 base: undefined, |
|
104 error: false, |
|
105 href: 'http://example.com/?test', |
|
106 origin: 'http://example.com', |
|
107 protocol: 'http:', |
|
108 username: '', |
|
109 password: '', |
|
110 host: 'example.com', |
|
111 hostname: 'example.com', |
|
112 port: '', |
|
113 pathname: '/', |
|
114 search: '?test', |
|
115 hash: '' |
|
116 }, |
|
117 { url: 'http://example.com/carrot#question%3f', |
|
118 base: undefined, |
|
119 error: false, |
|
120 hash: '#question?' |
|
121 }, |
|
122 { url: 'https://example.com:4443?', |
|
123 base: undefined, |
|
124 error: false, |
|
125 protocol: 'https:', |
|
126 port: '4443', |
|
127 pathname: '/', |
|
128 hash: '', |
|
129 search: '' |
|
130 }, |
|
131 { url: 'http://www.abc.com/apath/afile.txt#ahash?asearch', |
|
132 base: undefined, |
|
133 error: false, |
|
134 href: 'http://www.abc.com/apath/afile.txt#ahash?asearch', |
|
135 protocol: 'http:', |
|
136 pathname: '/apath/afile.txt', |
|
137 hash: '#ahash?asearch', |
|
138 search: '' |
|
139 }, |
|
140 { url: 'http://www.abc.com/apath/afile.txt?asearch#ahash', |
|
141 base: undefined, |
|
142 error: false, |
|
143 href: 'http://www.abc.com/apath/afile.txt?asearch#ahash', |
|
144 protocol: 'http:', |
|
145 pathname: '/apath/afile.txt', |
|
146 hash: '#ahash', |
|
147 search: '?asearch' |
|
148 }, |
|
149 { url: 'http://abc.com/apath/afile.txt?#ahash', |
|
150 base: undefined, |
|
151 error: false, |
|
152 pathname: '/apath/afile.txt', |
|
153 hash: '#ahash', |
|
154 search: '' |
|
155 }, |
|
156 { url: 'http://auser:apassword@www.abc.com:90/apath/afile.txt?asearch#ahash', |
|
157 base: undefined, |
|
158 error: false, |
|
159 protocol: 'http:', |
|
160 username: 'auser', |
|
161 password: 'apassword', |
|
162 host: 'www.abc.com:90', |
|
163 hostname: 'www.abc.com', |
|
164 port: '90', |
|
165 pathname: '/apath/afile.txt', |
|
166 hash: '#ahash', |
|
167 search: '?asearch', |
|
168 origin: 'http://www.abc.com:90' |
|
169 }, |
|
170 |
|
171 { url: '/foo#bar', |
|
172 base: 'www.test.org', |
|
173 error: true, |
|
174 }, |
|
175 { url: '/foo#bar', |
|
176 base: null, |
|
177 error: true, |
|
178 }, |
|
179 { url: '/foo#bar', |
|
180 base: 42, |
|
181 error: true, |
|
182 }, |
|
183 { url: 'ftp://ftp.something.net', |
|
184 base: undefined, |
|
185 error: false, |
|
186 protocol: 'ftp:', |
|
187 }, |
|
188 { url: 'file:///tmp/file', |
|
189 base: undefined, |
|
190 error: false, |
|
191 protocol: 'file:', |
|
192 }, |
|
193 { url: 'gopher://gopher.something.net', |
|
194 base: undefined, |
|
195 error: false, |
|
196 protocol: 'gopher:', |
|
197 }, |
|
198 { url: 'ws://ws.something.net', |
|
199 base: undefined, |
|
200 error: false, |
|
201 protocol: 'ws:', |
|
202 }, |
|
203 { url: 'wss://ws.something.net', |
|
204 base: undefined, |
|
205 error: false, |
|
206 protocol: 'wss:', |
|
207 }, |
|
208 { url: 'foo://foo.something.net', |
|
209 base: undefined, |
|
210 error: false, |
|
211 protocol: 'foo:', |
|
212 }, |
|
213 ]; |
|
214 |
|
215 while(tests.length) { |
|
216 var test = tests.shift(); |
|
217 |
|
218 var error = false; |
|
219 var url; |
|
220 try { |
|
221 if (test.base) { |
|
222 url = new URL(test.url, test.base); |
|
223 } else { |
|
224 url = new URL(test.url); |
|
225 } |
|
226 } catch(e) { |
|
227 error = true; |
|
228 } |
|
229 |
|
230 is(test.error, error, "Error creating URL"); |
|
231 if (test.error) { |
|
232 continue; |
|
233 } |
|
234 |
|
235 if ('href' in test) is(url.href, test.href, "href"); |
|
236 if ('origin' in test) is(url.origin, test.origin, "origin"); |
|
237 if ('protocol' in test) is(url.protocol, test.protocol, "protocol"); |
|
238 if ('username' in test) is(url.username, test.username, "username"); |
|
239 if ('password' in test) is(url.password, test.password, "password"); |
|
240 if ('host' in test) is(url.host, test.host, "host"); |
|
241 if ('hostname' in test) is(url.hostname, test.hostname, "hostname"); |
|
242 if ('port' in test) is(url.port, test.port, "port"); |
|
243 if ('pathname' in test) is(url.pathname, test.pathname, "pathname"); |
|
244 if ('search' in test) is(url.search, test.search, "search"); |
|
245 if ('hash' in test) is(url.hash, test.hash, "hash"); |
|
246 |
|
247 url = new URL('https://www.example.net/what#foo?bar'); |
|
248 ok(url, "Url exists!"); |
|
249 |
|
250 if ('href' in test) url.href = test.href; |
|
251 if ('protocol' in test) url.protocol = test.protocol; |
|
252 if ('username' in test && test.username) url.username = test.username; |
|
253 if ('password' in test && test.password) url.password = test.password; |
|
254 if ('host' in test) url.host = test.host; |
|
255 if ('hostname' in test) url.hostname = test.hostname; |
|
256 if ('port' in test) url.port = test.port; |
|
257 if ('pathname' in test) url.pathname = test.pathname; |
|
258 if ('search' in test) url.search = test.search; |
|
259 if ('hash' in test) url.hash = test.hash; |
|
260 |
|
261 if ('href' in test) is(url.href, test.href, "href"); |
|
262 if ('origin' in test) is(url.origin, test.origin, "origin"); |
|
263 if ('protocol' in test) is(url.protocol, test.protocol, "protocol"); |
|
264 if ('username' in test) is(url.username, test.username, "username"); |
|
265 if ('password' in test) is(url.password, test.password, "password"); |
|
266 if ('host' in test) is(url.host, test.host, "host"); |
|
267 if ('hostname' in test) is(test.hostname, url.hostname, "hostname"); |
|
268 if ('port' in test) is(test.port, url.port, "port"); |
|
269 if ('pathname' in test) is(test.pathname, url.pathname, "pathname"); |
|
270 if ('search' in test) is(test.search, url.search, "search"); |
|
271 if ('hash' in test) is(test.hash, url.hash, "hash"); |
|
272 |
|
273 if ('href' in test) is (test.href, url + '', 'stringify works'); |
|
274 } |
|
275 |
|
276 </script> |
|
277 |
|
278 <script> |
|
279 /** Test for Bug 991471 **/ |
|
280 var url = new URL("http://localhost/"); |
|
281 url.hostname = ""; |
|
282 url.username = "tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt"; |
|
283 url.hostname = "www.mozilla.org"; |
|
284 url.username = ""; |
|
285 url.hostname = "www.mozilla.org"; |
|
286 is(url.href, "http://www.mozilla.org/", "No parsing error with empty host"); |
|
287 </script> |
|
288 |
|
289 <script> |
|
290 /** Test for Bug 996055 **/ |
|
291 var url = new URL("http://localhost/"); |
|
292 url.hostname = ""; |
|
293 is(url.href, "http://localhost/", "Empty hostname is ignored"); |
|
294 </script> |
|
295 </body> |
|
296 </html> |