| <!doctype html> | |
| <meta charset=utf-8> | |
| <title>Test URL parser failure consistency</title> | |
| <meta name=timeout content=long> | |
| <script src=/resources/testharness.js></script> | |
| <script src=/resources/testharnessreport.js></script> | |
| <div id=log></div> | |
| <iframe></iframe> | |
| <script> | |
| promise_test(() => fetch("resources/urltestdata.json").then(res => res.json()).then(runTests), "Loading data…") | |
| function runTests(testData) { | |
| for(const test of testData) { | |
| if (typeof test === "string" || !test.failure || test.base !== "about:blank") { | |
| continue | |
| } | |
| const name = test.input + " should throw" | |
| self.test(() => { // URL's constructor's first argument is tested by url-constructor.html | |
| // If a URL fails to parse with any valid base, it must also fail to parse with no base, i.e. | |
| // when used as a base URL itself. | |
| assert_throws_js(TypeError, () => new URL("about:blank", test.input)); | |
| }, "URL's constructor's base argument: " + name) | |
| self.test(() => { | |
| const url = new URL("about:blank") | |
| assert_throws_js(TypeError, () => url.href = test.input) | |
| }, "URL's href: " + name) | |
| // The following use cases resolve the URL input relative to the current | |
| // document's URL. If this test input could be construed as a valid URL | |
| // when resolved against a base URL, skip these cases. | |
| if (!test.inputCanBeRelative) { | |
| self.test(() => { | |
| const client = new XMLHttpRequest() | |
| assert_throws_dom("SyntaxError", () => client.open("GET", test.input)) | |
| }, "XHR: " + name) | |
| self.test(() => { | |
| assert_throws_js(TypeError, () => self.navigator.sendBeacon(test.input)) | |
| }, "sendBeacon(): " + name) | |
| self.test(() => { | |
| assert_throws_js(self[0].TypeError, () => self[0].location = test.input) | |
| }, "Location's href: " + name) | |
| self.test(() => { | |
| assert_throws_dom("SyntaxError", () => self.open(test.input).close()) | |
| }, "window.open(): " + name) | |
| } | |
| } | |
| } | |
| </script> |