diff options
Diffstat (limited to 'dom/url/tests/test_url.html')
-rw-r--r-- | dom/url/tests/test_url.html | 442 |
1 files changed, 442 insertions, 0 deletions
diff --git a/dom/url/tests/test_url.html b/dom/url/tests/test_url.html new file mode 100644 index 0000000000..3f3f727d63 --- /dev/null +++ b/dom/url/tests/test_url.html @@ -0,0 +1,442 @@ +<!DOCTYPE HTML> +<html> +<head> + <meta charset="utf-8"> + <title>Test URL API</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=887364">Mozilla Bug 887364</a> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=991471">Mozilla Bug 991471</a> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=996055">Mozilla Bug 996055</a> +<p id="display"></p> +<div id="content" style="display: none"> + <iframe name="x" id="x"></iframe> + <iframe name="y" id="y"></iframe> +</div> +<pre id="test"> +</pre> + <script type="application/javascript"> + + /** Test for Bug 887364 **/ + ok("URL" in window, "window.URL exists"); + + var tests = [ + { url: 'http://www.abc.com', + base: undefined, + error: false, + href: 'http://www.abc.com/', + origin: 'http://www.abc.com', + protocol: 'http:', + username: '', + password: '', + host: 'www.abc.com', + hostname: 'www.abc.com', + port: '', + pathname: '/', + search: '', + hash: '' + }, + { url: 'ftp://auser:apw@www.abc.com', + base: undefined, + error: false, + href: 'ftp://auser:apw@www.abc.com/', + origin: 'ftp://www.abc.com', + protocol: 'ftp:', + username: 'auser', + password: 'apw', + host: 'www.abc.com', + hostname: 'www.abc.com', + port: '', + pathname: '/', + search: '', + hash: '' + }, + { url: 'http://www.abc.com:90/apath/', + base: undefined, + error: false, + href: 'http://www.abc.com:90/apath/', + origin: 'http://www.abc.com:90', + protocol: 'http:', + username: '', + password: '', + host: 'www.abc.com:90', + hostname: 'www.abc.com', + port: '90', + pathname: '/apath/', + search: '', + hash: '' + }, + { url: 'http://www.abc.com/apath/afile.txt#ahash', + base: undefined, + error: false, + href: 'http://www.abc.com/apath/afile.txt#ahash', + origin: 'http://www.abc.com', + protocol: 'http:', + username: '', + password: '', + host: 'www.abc.com', + hostname: 'www.abc.com', + port: '', + pathname: '/apath/afile.txt', + search: '', + hash: '#ahash' + }, + { url: 'http://example.com/?test#hash', + base: undefined, + error: false, + href: 'http://example.com/?test#hash', + origin: 'http://example.com', + protocol: 'http:', + username: '', + password: '', + host: 'example.com', + hostname: 'example.com', + port: '', + pathname: '/', + search: '?test', + hash: '#hash' + }, + { url: 'http://example.com/?test', + base: undefined, + error: false, + href: 'http://example.com/?test', + origin: 'http://example.com', + protocol: 'http:', + username: '', + password: '', + host: 'example.com', + hostname: 'example.com', + port: '', + pathname: '/', + search: '?test', + hash: '' + }, + { url: 'http://example.com/carrot#question%3f', + base: undefined, + error: false, + hash: '#question%3f' + }, + { url: 'https://example.com:4443?', + base: undefined, + error: false, + protocol: 'https:', + port: '4443', + pathname: '/', + hash: '', + search: '' + }, + { url: 'http://www.abc.com/apath/afile.txt#ahash?asearch', + base: undefined, + error: false, + href: 'http://www.abc.com/apath/afile.txt#ahash?asearch', + protocol: 'http:', + pathname: '/apath/afile.txt', + hash: '#ahash?asearch', + search: '' + }, + { url: 'http://www.abc.com/apath/afile.txt?asearch#ahash', + base: undefined, + error: false, + href: 'http://www.abc.com/apath/afile.txt?asearch#ahash', + protocol: 'http:', + pathname: '/apath/afile.txt', + hash: '#ahash', + search: '?asearch' + }, + { url: 'http://abc.com/apath/afile.txt?#ahash', + base: undefined, + error: false, + pathname: '/apath/afile.txt', + hash: '#ahash', + search: '' + }, + { url: 'http://auser:apassword@www.abc.com:90/apath/afile.txt?asearch#ahash', + base: undefined, + error: false, + protocol: 'http:', + username: 'auser', + password: 'apassword', + host: 'www.abc.com:90', + hostname: 'www.abc.com', + port: '90', + pathname: '/apath/afile.txt', + hash: '#ahash', + search: '?asearch', + origin: 'http://www.abc.com:90' + }, + + { url: '/foo#bar', + base: 'www.test.org', + error: true, + }, + { url: '/foo#bar', + base: null, + error: true, + }, + { url: '/foo#bar', + base: 42, + error: true, + }, + { url: 'ftp://ftp.something.net', + base: undefined, + error: false, + protocol: 'ftp:', + }, + { url: 'file:///tmp/file', + base: undefined, + error: false, + protocol: 'file:', + }, + { url: 'gopher://gopher.something.net', + base: undefined, + error: false, + protocol: 'gopher:', + }, + { url: 'ws://ws.something.net', + base: undefined, + error: false, + protocol: 'ws:', + }, + { url: 'wss://ws.something.net', + base: undefined, + error: false, + protocol: 'wss:', + }, + { url: 'foo://foo.something.net', + base: undefined, + error: false, + protocol: 'foo:', + }, + + { url: 'about:blank', + base: undefined, + error: false, + protocol: 'about:', + pathname: 'blank', + skip_setters: false, + }, + + { url: 'foo:bar?what#yeah', + base: undefined, + error: false, + protocol: 'foo:', + pathname: 'bar', + search: '?what', + hash: '#yeah', + skip_setters: false, + }, + ]; + + while(tests.length) { + var test = tests.shift(); + + var error = false; + var url; + try { + if (test.base) { + url = new URL(test.url, test.base); + } else { + url = new URL(test.url); + } + } catch(e) { + error = true; + } + + is(test.error, error, "Error creating URL"); + if (test.error) { + continue; + } + + if ('href' in test) is(url.href, test.href, "href"); + if ('origin' in test) is(url.origin, test.origin, "origin"); + if ('protocol' in test) is(url.protocol, test.protocol, "protocol"); + if ('username' in test) is(url.username, test.username, "username"); + if ('password' in test) is(url.password, test.password, "password"); + if ('host' in test) is(url.host, test.host, "host"); + if ('hostname' in test) is(url.hostname, test.hostname, "hostname"); + if ('port' in test) is(url.port, test.port, "port"); + if ('pathname' in test) is(url.pathname, test.pathname, "pathname"); + if ('search' in test) is(url.search, test.search, "search"); + if ('hash' in test) is(url.hash, test.hash, "hash"); + + if ('skip_setters' in test && test.skip_setters == false) { + info("Skip setter methods for URL: " + test); + continue; + } + + url = new URL('https://www.example.net/what#foo?bar'); + ok(url, "Url exists!"); + + if ('href' in test) url.href = test.href; + if ('protocol' in test) url.protocol = test.protocol; + if ('username' in test && test.username) url.username = test.username; + if ('password' in test && test.password) url.password = test.password; + if ('host' in test) url.host = test.host; + if ('hostname' in test) url.hostname = test.hostname; + if ('port' in test) url.port = test.port; + if ('pathname' in test) url.pathname = test.pathname; + if ('search' in test) url.search = test.search; + if ('hash' in test) url.hash = test.hash; + + if ('href' in test) is(url.href, test.href, "href"); + if ('origin' in test) is(url.origin, test.origin, "origin"); + if ('protocol' in test) is(url.protocol, test.protocol, "protocol"); + if ('username' in test) is(url.username, test.username, "username"); + if ('password' in test) is(url.password, test.password, "password"); + if ('host' in test) is(url.host, test.host, "host"); + if ('hostname' in test) is(test.hostname, url.hostname, "hostname"); + if ('port' in test) is(test.port, url.port, "port"); + if ('pathname' in test) is(test.pathname, url.pathname, "pathname"); + if ('search' in test) is(test.search, url.search, "search"); + if ('hash' in test) is(test.hash, url.hash, "hash"); + + if ('href' in test) is (test.href, url + '', 'stringify works'); + } + + </script> + + <script> + /** Test for Bug 991471 **/ + var url = new URL("http://localhost/"); + url.hostname = ""; + url.username = "tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt"; + url.hostname = "www.mozilla.org"; + url.username = ""; + url.hostname = "www.mozilla.org"; + is(url.href, "http://www.mozilla.org/", "No parsing error with empty host"); + </script> + + <script> + /** Test for Bug 996055 **/ + var url = new URL("http://localhost/"); + url.hostname = ""; + is(url.href, "http://localhost/", "Empty hostname is ignored"); + </script> + + <script> + /** Test for Bug 960014 **/ + var url = new URL("http://localhost/"); + url.hostname = "[2001::1]"; + is(url.hostname, "[2001::1]", "IPv6 hostname"); + is(url.href, "http://[2001::1]/"); + + url.hostname = "[::192.9.5.5]"; + is(url.hostname, "[::192.9.5.5]", "IPv6 hostname"); + is(url.href, "http://[::192.9.5.5]/"); + + url = new URL("http://localhost/"); + url.hostname = "[::]"; + is(url.hostname, "[::]", "IPv6 hostname"); + + url = new URL("http://localhost/"); + url.host = "[2001::1]:30"; + is(url.hostname, "[2001::1]", "IPv6 hostname"); + is(url.port, "30", "Port"); + is(url.host, "[2001::1]:30", "IPv6 host"); + + url = new URL("http://localhost/"); + // This should silently fail since it's missing the brackets + url.hostname = "2001::1"; + is(url.hostname, "localhost", "Setting bad hostname fails"); + </script> + + <script> + var blob = new Blob(['a']); + var url = URL.createObjectURL(blob); + + var u = new URL(url); + ok(u.origin, 'http://mochi.test:8888', "The URL generated from a blob URI has an origin"); + </script> + + <script> + var blob = new Blob(['a']); + var url = URL.createObjectURL(blob); + + var a = document.createElement('A'); + a.href = url; + ok(a.origin, 'http://mochi.test:8888', "The 'a' element has the correct origin"); + </script> + + <script> + var blob = new Blob(['a']); + var url = URL.createObjectURL(blob); + URL.revokeObjectURL(url); + URL.revokeObjectURL(url); + ok(true, "Calling revokeObjectURL twice should be ok"); + </script> + + <script> + URL.revokeObjectURL('blob:something'); + ok(true, "This should not throw."); + </script> + + <script> + var base = new URL("http:\\\\test.com\\path/to\\file?query\\backslash#hash\\"); + is(base.href, "http://test.com/path/to/file?query\\backslash#hash\\"); + + var url = new URL("..\\", base); + is(url.href, "http://test.com/path/"); + + url = new URL("\\test", base); + is(url.href, "http://test.com/test"); + + url = new URL("\\test\\", base); + is(url.href, "http://test.com/test/"); + + url = new URL("http://example.org/test", base); + is(url.href, "http://example.org/test"); + + url = new URL("ftp://tmp/test", base); + is(url.href, "ftp://tmp/test"); + + url = new URL("ftp:\\\\tmp\\test", base); + is(url.href, "ftp://tmp/test"); + + url = new URL("scheme://tmp\\test", base); + is(url.href, "scheme://tmp\\test"); + </script> + + <script> + var url = new URL("scheme:path/to/file?query#hash"); + is(url.href, "scheme:path/to/file?query#hash"); + is(url.pathname, "path/to/file"); + is(url.search, "?query"); + is(url.hash, "#hash"); + + // pathname cannot be overwritten. + url.pathname = "new/path?newquery#newhash"; + is(url.href, "scheme:path/to/file?query#hash"); + + // don't escape '#' until we implement a spec-compliant parser. + url.search = "?newquery#newhash"; + is(url.href, "scheme:path/to/file?newquery#newhash#hash"); + + // nulls get encoded, whitespace gets stripped + url = new URL("scheme:pa\0\nth/to/fi\0\nle?qu\0\nery#ha\0\nsh"); + is(url.href, "scheme:pa%00th/to/fi%00le?qu%00ery#ha%00sh"); + + url.search = "new\0\nquery"; + is(url.href, "scheme:pa%00th/to/fi%00le?new%00%0Aquery#ha%00sh"); + url.hash = "new\0\nhash"; + is(url.href, "scheme:pa%00th/to/fi%00le?new%00%0Aquery#new%00%0Ahash"); + + url = new URL("scheme:path#hash"); + is(url.href, "scheme:path#hash"); + url.search = "query"; + is(url.href, "scheme:path?query#hash"); + url.hash = ""; + is(url.href, "scheme:path?query"); + url.hash = "newhash"; + is(url.href, "scheme:path?query#newhash"); + url.search = ""; + is(url.href, "scheme:path#newhash"); + + // we don't implement a spec-compliant parser yet. + // make sure we are bug compatible with existing implementations. + url = new URL("data:text/html,<a href=\"http://example.org/?q\">Link</a>"); + is(url.href, "data:text/html,<a%20href=\"http://example.org/?q\">Link</a>"); + </script> +</body> +</html> |