зеркало из https://github.com/mozilla/gecko-dev.git
366 строки
10 KiB
HTML
366 строки
10 KiB
HTML
<!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,
|
|
},
|
|
];
|
|
|
|
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>
|
|
</body>
|
|
</html>
|