73 lines
2.8 KiB
HTML
73 lines
2.8 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<script src="../../resources/js-test.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
|
|
description("Test that URL username and password accessors encode/decode correctly");
|
|
|
|
function build(username, password)
|
|
{
|
|
var url = new URL("http://www.apple.com");
|
|
if (username)
|
|
url.username = username;
|
|
if (password)
|
|
url.password = password;
|
|
return url;
|
|
}
|
|
|
|
debug("\nBasic syntax");
|
|
|
|
shouldBe("build('user').toString()", '"http://user@www.apple.com/"');
|
|
shouldBe("build('user').username", '"user"');
|
|
|
|
shouldBe("build('%').toString()", '"http://%@www.apple.com/"');
|
|
shouldBe("build('%').username", '"%"');
|
|
|
|
shouldBe("build('%%').toString()", '"http://%%@www.apple.com/"');
|
|
shouldBe("build('%%').username", '"%%"');
|
|
|
|
shouldBe("build('%z').toString()", '"http://%z@www.apple.com/"');
|
|
shouldBe("build('%z').username", '"%z"');
|
|
|
|
// Yes, this is weird, percent signs don't get encoded.
|
|
shouldBe("build('%61').toString()", '"http://%61@www.apple.com/"');
|
|
shouldBe("build('%61').username", '"%61"');
|
|
shouldBe("build('%40').toString()", '"http://%40@www.apple.com/"');
|
|
shouldBe("build('%40').username", '"%40"');
|
|
|
|
debug("\nSimple encode set");
|
|
shouldBe("build('\x07\x7f').toString()", '"http://%07%7F@www.apple.com/"');
|
|
shouldBe("build('user', '\x07\x7f').toString()", '"http://user:%07%7F@www.apple.com/"');
|
|
|
|
debug("\nDefault encode set additions");
|
|
shouldBe("build(' \"#><?`').toString()", '"http://%20%22%23%3E%3C%3F%60@www.apple.com/"');
|
|
shouldBe("build('user', ' \"#><?`').toString()", '"http://user:%20%22%23%3E%3C%3F%60@www.apple.com/"');
|
|
|
|
debug("\nPassword encode set additions");
|
|
shouldBe("build('/@\\\\').toString()", '"http://%2F%40%5C@www.apple.com/"');
|
|
shouldBe("build('user', '/@\\\\').toString()", '"http://user:%2F%40%5C@www.apple.com/"');
|
|
debug("':' shouldn't be encoded in the password per the URL Standard, although both Firefox and Chrome encode it")
|
|
shouldBe("build('user', ':').toString()", '"http://user::@www.apple.com/"');
|
|
|
|
debug("\nUsername encode set addition");
|
|
shouldBe("build(':').toString()", '"http://%3A@www.apple.com/"');
|
|
|
|
debug("\n8-bit");
|
|
shouldBe("build('юзер', 'пароль').toString()", '"http://%D1%8E%D0%B7%D0%B5%D1%80:%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C@www.apple.com/"');
|
|
shouldBe("build('юзер').username", '"%D1%8E%D0%B7%D0%B5%D1%80"');
|
|
shouldBe("build('user', 'пароль').password", '"%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C"');
|
|
|
|
debug("\nSome special characters that don't get encoded when used in credentials");
|
|
shouldBe("build('!$&*()-+~').toString()", '"http://!$&*()-+~@www.apple.com/"');
|
|
|
|
debug("\nSome characters that shouldn't be encoded per the URL Standard, although both Firefox and Chrome encode them")
|
|
shouldBe("build('^{|}[]=').toString()", '"http://^{|}[]=@www.apple.com/"');
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|