1eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdescription('Test setting the search attribute of the URL in HTMLAnchorElement .');
2eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
3eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockvar a = document.createElement('a');
4eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
5eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set search without '?'");
6eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "https://www.mydomain.com/path/?key=value";
7eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.search = "value=key";
8eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'https://www.mydomain.com/path/?value=key'");
9eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
10eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// IE8 does not encode spaces in search string
11eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set search that starts with '?' and contains spaces");
12eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "https://www.mydomain.com/path/?key=value";
13eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.search = "?val ue= key?";
14eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'https://www.mydomain.com/path/?val%20ue=%20key?'");
15eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
16eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set search to a malformed URL");
17eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "s:www.mydomain.com/path/";
18eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.search = "%";
19eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'s:www.mydomain.com/path/?%'");
20eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
21eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// IE8 throws "The URL is invalid" exception.
22eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set search containing '#'");
23eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocktry {
24eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "https://www.mydomain.com/path/?key=value#hash";
25eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.search = "?value#key";
26eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'https://www.mydomain.com/path/?value%23key#hash'");
27eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block} catch(e) {
28eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Exception: " + e.description);
29eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block}
30eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
31eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set search to a malformed URL");
32eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "bad:/|/url";
33eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.search = "?value=key";
34eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'bad:/|/url?value=key'");
35eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
36eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// IE8 converts null to "null", which is not the right thing to do.
37eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set search to null");
38eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "https://www.mydomain.com/path/?key=value";
39eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.search = null;
40eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'https://www.mydomain.com/path/'");
41eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
42eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// Firefox 3.5.2 Removes the '?', and it shouldn't, per
43eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// http://dev.w3.org/html5/spec/infrastructure.html#url-decomposition-idl-attributes .
44eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set search to empty string");
45eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "https://www.mydomain.com/path/?key=value";
46eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.search = "";
47eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'https://www.mydomain.com/path/?'");
48eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
49eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockvar successfullyParsed = true;
50