| <!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> |