| <!doctype html> | |
| <meta charset=utf-8> | |
| <title>DOMException-throwing tests</title> | |
| <link rel=author title="Aryeh Gregor" href=ayg@aryeh.name> | |
| <div id=log></div> | |
| <script src=/resources/testharness.js></script> | |
| <script src=/resources/testharnessreport.js></script> | |
| <script> | |
| /** | |
| * This file just picks one case where browsers are supposed to throw an | |
| * exception, and tests the heck out of whether it meets the spec. In the | |
| * future, all these checks should be in assert_throws(), but we don't want | |
| * every browser failing every assert_throws() check until they fix every | |
| * single bug in their exception-throwing. | |
| * | |
| * We don't go out of our way to test everything that's already tested by | |
| * interfaces.html, like whether all constants are present on the object, but | |
| * some things are duplicated. | |
| */ | |
| setup({explicit_done: true}); | |
| function testException(exception, global, desc) { | |
| test(function() { | |
| assert_equals(global.Object.getPrototypeOf(exception), | |
| global.DOMException.prototype); | |
| }, desc + "Object.getPrototypeOf(exception) === DOMException.prototype"); | |
| test(function() { | |
| assert_false(exception.hasOwnProperty("name")); | |
| }, desc + "exception.hasOwnProperty(\"name\")"); | |
| test(function() { | |
| assert_false(exception.hasOwnProperty("message")); | |
| }, desc + "exception.hasOwnProperty(\"message\")"); | |
| test(function() { | |
| assert_equals(exception.name, "HierarchyRequestError"); | |
| }, desc + "exception.name === \"HierarchyRequestError\""); | |
| test(function() { | |
| assert_equals(exception.code, global.DOMException.HIERARCHY_REQUEST_ERR); | |
| }, desc + "exception.code === DOMException.HIERARCHY_REQUEST_ERR"); | |
| test(function() { | |
| assert_equals(global.Object.prototype.toString.call(exception), | |
| "[object DOMException]"); | |
| }, desc + "Object.prototype.toString.call(exception) === \"[object DOMException]\""); | |
| } | |
| // Test in current window | |
| var exception = null; | |
| try { | |
| // This should throw a HierarchyRequestError in every browser since the | |
| // Stone Age, so we're really only testing exception-throwing details. | |
| document.documentElement.appendChild(document); | |
| } catch(e) { | |
| exception = e; | |
| } | |
| testException(exception, window, ""); | |
| // Test in iframe | |
| var iframe = document.createElement("iframe"); | |
| iframe.src = "about:blank"; | |
| iframe.onload = function() { | |
| var exception = null; | |
| try { | |
| iframe.contentDocument.documentElement.appendChild(iframe.contentDocument); | |
| } catch(e) { | |
| exception = e; | |
| } | |
| testException(exception, iframe.contentWindow, "In iframe: "); | |
| document.body.removeChild(iframe); | |
| done(); | |
| }; | |
| document.body.appendChild(iframe); | |
| </script> |