blob: c560b3cf85e452f0dbe7966759a5cb062ebe3b84 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../../resources/js-test.js"></script>
<script>
function breakDownURL(string)
{
var a = new URL(string);
var result = "";
var propertyNames = [
"protocol",
"username",
"password",
"hostname",
"host",
"port",
"pathname",
"search",
"hash",
"origin"
];
for (var i = 0; i < propertyNames.length; ++i) {
var name = propertyNames[i];
var value = a[name];
if (value == "")
continue;
if (name == "hostname" && value == a.host)
continue;
if (typeof value != "string")
value = "non-string";
if (result != "")
result += ", ";
result += name + "=" + value;
}
if (string != a.toString())
result += ", toString=" + a.toString();
return result;
}
shouldBe("breakDownURL('about:blank')", "'protocol=about:, pathname=blank, origin=null'");
shouldBe("breakDownURL('http://example.com/')", "'protocol=http:, host=example.com, pathname=/, origin=http://example.com'");
shouldBe("breakDownURL('http://@example.com/')", "'protocol=http:, host=example.com, pathname=/, origin=http://example.com, toString=http://example.com/'");
shouldBe("breakDownURL('http://a@example.com/')", "'protocol=http:, username=a, host=example.com, pathname=/, origin=http://example.com'");
shouldBe("breakDownURL('http://a:@example.com/')", "'protocol=http:, username=a, host=example.com, pathname=/, origin=http://example.com, toString=http://a@example.com/'");
shouldBe("breakDownURL('http://joebob1:abc123@example.com/')", "'protocol=http:, username=joebob1, password=abc123, host=example.com, pathname=/, origin=http://example.com'");
shouldBe("breakDownURL('http://:def456@example.com/')", "'protocol=http:, password=def456, host=example.com, pathname=/, origin=http://example.com'");
shouldBe("breakDownURL('http://example.com/foo/bar')", "'protocol=http:, host=example.com, pathname=/foo/bar, origin=http://example.com'");
shouldBe("breakDownURL('HTTP://example.com/foo/bar')", "'protocol=http:, host=example.com, pathname=/foo/bar, origin=http://example.com, toString=http://example.com/foo/bar'");
shouldBe("breakDownURL('https://example.com/ttt?ggg')", "'protocol=https:, host=example.com, pathname=/ttt, search=?ggg, origin=https://example.com'");
shouldBe("breakDownURL('ftp://example.com/ttt?ggg')", "'protocol=ftp:, host=example.com, pathname=/ttt, search=?ggg, origin=ftp://example.com'");
shouldBe("breakDownURL('file:///Users/darin')", "'protocol=file:, pathname=/Users/darin, origin=file://'");
shouldBe("breakDownURL('data:text/html,<b>foo</b>')", "'protocol=data:, pathname=text/html,<b>foo</b>, origin=null'");
shouldBe("breakDownURL('http://a:b@c:1/e/f?g%h')", "'protocol=http:, username=a, password=b, hostname=c, host=c:1, port=1, pathname=/e/f, search=?g%h, origin=http://c:1'");
shouldBe("breakDownURL('http://ex%61mple.com/')", "'protocol=http:, host=example.com, pathname=/, origin=http://example.com, toString=http://example.com/'");
shouldThrow("breakDownURL('http://ex%2fmple.com/')");
var longUnicodeDomain = "\u1234";
var i = 0;
try {
for (i = 0; i < 100; ++i) {
longUnicodeDomain += "a"
new URL("http://" + longUnicodeDomain + "/");
}
} catch (e) { }
shouldBe("i", "100");
</script>