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