| <!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> |