diff options
Diffstat (limited to 'dom/html/test/test_hash_encoded.html')
-rw-r--r-- | dom/html/test/test_hash_encoded.html | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/dom/html/test/test_hash_encoded.html b/dom/html/test/test_hash_encoded.html new file mode 100644 index 000000000..f814c8ae9 --- /dev/null +++ b/dom/html/test/test_hash_encoded.html @@ -0,0 +1,118 @@ +<!doctype html> +<html> +<head> +<title>Test link.hash attribute</title> +<script src="/tests/SimpleTest/SimpleTest.js"></script> +<link rel="stylesheet" href="/tests/SimpleTest/test.css"/> +</head> +<body> + +<pre id="test"> + +<script> + +SimpleTest.waitForExplicitFinish(); +SpecialPowers.pushPrefEnv({"set": [['dom.url.encode_decode_hash', false]]}, runTest); + +function runTest() { + setupTest(); + doTestEncoded(); + SimpleTest.finish(); +} + +function setupTest() { + var target1 = document.createElement("a"); + target1.id = "target1"; + target1.href = "http://www.example.com/#q=♥â¥#hello"; + document.body.appendChild(target1); + + var target2 = document.createElement("a"); + target2.id = "target2"; + target2.href = "http://www.example.com/#q=%E2%99%A5%C3%A2%C2%A5"; + document.body.appendChild(target2); + + var target3 = document.createElement("a"); + target3.id = "target3"; + target3.href = "http://www.example.com/#/search/%23important"; + document.body.appendChild(target3); + + var target4 = document.createElement("a"); + target4.id = "target4"; + target4.href = 'http://www.example.com/#{"a":[13, 42], "b":{"key":"value"}}'; + document.body.appendChild(target4); +} + +function doTestEncoded() { + // Tests Link::GetHash + + // Check that characters aren't being encoded + var target = document.getElementById("target1"); + is(target.hash, '#q=♥â¥#hello', 'Unexpected link hash'); + + // Check that encoded characters aren't being decoded + target = document.getElementById("target2"); + is(target.hash, '#q=%E2%99%A5%C3%A2%C2%A5', 'Unexpected link hash'); + + // A more regular use case + target = document.getElementById("target3"); + is(target.hash, '#/search/%23important', 'Unexpected link hash'); + + // Some JSON + target = document.getElementById("target4"); + is(target.hash, '#{"a":[13, 42], "b":{"key":"value"}}', 'Unexpected link hash'); + + // Tests URL::GetHash + + var url = new URL("http://www.example.com/#q=♥â¥#hello") + is(url.hash, '#q=♥â¥#hello', 'Unexpected url hash'); + + url = new URL("http://www.example.com/#q=%E2%99%A5%C3%A2%C2%A5") + is(url.hash, '#q=%E2%99%A5%C3%A2%C2%A5', 'Unexpected url hash'); + + url = new URL("http://www.example.com/#/search/%23important") + is(url.hash, '#/search/%23important', 'Unexpected url hash'); + + // Test getters and setters + + url = new URL("http://www.example.com/"); + url.hash = "#q=♥â¥#hello%E2%99%A5%C3%A2%C2%A5#/search/%23important" + is(url.hash, '#q=♥â¥#hello%E2%99%A5%C3%A2%C2%A5#/search/%23important', 'Unexpected url hash'); + + // codepath in nsStandardUrl::SetRef is different if the path is non-empty + url = new URL("http://www.example.com/test/"); + url.hash = "#q=♥â¥#hello%E2%99%A5%C3%A2%C2%A5#/search/%23important" + is(url.hash, '#q=♥â¥#hello%E2%99%A5%C3%A2%C2%A5#/search/%23important', 'Unexpected url hash'); + + url = new URL("http://www.example.com/"); + url.hash = '#{"a":[13, 42], "b":{"key":"value"}}'; + is(target.hash, '#{"a":[13, 42], "b":{"key":"value"}}', 'Unexpected url hash'); + var parsed = JSON.parse(target.hash.substring(1)); + is(parsed.b.key, 'value', 'JSON not parsed correctly'); + + url = new URL("http://www.example.com/test/"); + url.hash = '#{"a":[13, 42], "b":{"key":"value"}}'; + is(target.hash, '#{"a":[13, 42], "b":{"key":"value"}}', 'Unexpected url hash'); + parsed = JSON.parse(target.hash.substring(1)); + is(parsed.b.key, 'value', 'JSON not parsed correctly'); + + // Tests Location::GetHash + + window.history.pushState(1, document.title, '#q=♥â¥#hello'); + is(location.hash,'#q=♥â¥#hello', 'Unexpected location hash'); + + window.history.pushState(1, document.title, '#q=%E2%99%A5%C3%A2%C2%A5'); + is(location.hash,'#q=%E2%99%A5%C3%A2%C2%A5', 'Unexpected location hash'); + + window.history.pushState(1, document.title, '#/search/%23important'); + is(location.hash,'#/search/%23important', 'Unexpected location hash'); + + window.history.pushState(1, document.title, '#{"a":[13, 42], "b":{"key":"value"}}'); + is(location.hash,'#{"a":[13, 42], "b":{"key":"value"}}', 'Unexpected location hash'); + +} + +</script> + +</pre> +</body> +</html> |