<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>
<script>

description('Test getting the username attribute of a URL object.');

debug("One-parameter constructor - valid URL");
var url = new URL("http://user:pass@example.com/path?query#fragment")
shouldBe("url.href", "'http://user:pass@example.com/path?query#fragment'");

debug("One-parameter constructor - invalid URL should throw");
shouldThrow('url = new URL("%^$#")');
shouldThrow('url = new URL("#")');

debug("One-parameter constructor - relative URL not valid against default base");
shouldThrow('url = new URL("foobar")');

debug("URL with string base");
url = new URL("./nowhere?ok", "http://example.com/path/to/");
shouldBe("url.href", "'http://example.com/path/to/nowhere?ok'");

debug("URL with URL base");
var base = new URL("http://example.com/path/to/");
url = new URL("./nowhere?ok", base);
shouldBe("url.href", "'http://example.com/path/to/nowhere?ok'");

debug("URL with URL base that itself has a base");
var metabase = new URL("http://example.org/");
var base = new URL("http://example.com/are/we/", metabase);
url = new URL("./nowhere?ok", base);
shouldBe("url.href", "'http://example.com/are/we/nowhere?ok'");

</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
