| /* |
| * Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| * for details. All rights reserved. Use of this source code is governed by a |
| * BSD-style license that can be found in the LICENSE file. |
| */ |
| /** |
| * @description Test setting the pathname attribute of the URL in HTMLAnchorElement. |
| */ |
| import "dart:html"; |
| import "../../../../Utils/expect.dart"; |
| import "../../../testcommon.dart"; |
| |
| main() { |
| var a = document.createElement('a'); |
| |
| debug("Set pathname that starts with slash"); |
| a.href = "https://www.mydomain.com/path/testurl.html?key=value"; |
| a.pathname = "/path name"; |
| shouldBe(a.href, 'https://www.mydomain.com/path%20name?key=value'); |
| |
| // IE8 throws an "Invalid URL" exception. |
| debug("Set pathname that does not start with slash and contains '?'"); |
| a.href = "https://www.mydomain.com/path/testurl.html?key=value"; |
| a.pathname = "pa?th"; |
| shouldBe(a.href, 'https://www.mydomain.com/pa%3Fth?key=value'); |
| |
| // IE8 throws an "Invalid URL" exception. |
| debug("Set pathname that starts with double slash and contains '#'"); |
| a.href = "https://www.mydomain.com/path?key=value"; |
| a.pathname = "//path#name"; |
| shouldBe(a.href, 'https://www.mydomain.com//path%23name?key=value'); |
| |
| debug("Set a pathname containing .. in it"); |
| a.href = "https://www.mydomain.com/path/testurl.html?key=value"; |
| a.pathname = "/it/../path"; |
| shouldBe(a.href, 'https://www.mydomain.com/path?key=value'); |
| |
| //debug("Set pathname to null"); |
| //a.href = "https://www.mydomain.com/path/testurl.html?key=value"; |
| //a.pathname = null; |
| //shouldBe(a.href, 'https://www.mydomain.com/null?key=value'); |
| |
| debug("Set pathname to empty string"); |
| a.href = "https://www.mydomain.com/?key=value"; |
| a.pathname = ""; |
| shouldBe(a.href, 'https://www.mydomain.com/?key=value'); |
| |
| // The expected behavior should change when the character table is updated. |
| // IE8 considers this URL as valid. |
| debug("Set pathname that includes illegal characters to URL that contains illegal characters."); |
| a.href = "https://www.my|d[]()omain.com/path/testurl.html?key=value"; |
| a.pathname = "p$a|th"; |
| shouldBe(a.href, 'https://www.my|d[]()omain.com/path/testurl.html?key=value'); |
| |
| // IE8 throws a security exception. |
| debug("Set pathname to URL that contains '@' in host"); |
| a.href = "http://w@#ww"; |
| a.pathname = "path"; |
| shouldBe(a.href, 'http://w@/path#ww'); |
| |
| // IE8 allows setting the pathname, for non-hierarchial URL. |
| // It is not supposed to allow that per |
| // http://dev.w3.org/html5/spec/infrastructure.html#url-decomposition-idl-attributes . |
| debug("Set pathname to a URL with non-hierarchical protocol"); |
| a.href = "tel:+1800-555-1212"; |
| a.pathname = "the-path"; |
| shouldBe(a.href, 'tel:+1800-555-1212'); |
| } |