summaryrefslogtreecommitdiffstats
path: root/dom/bindings/test/test_exception_options_from_jsimplemented.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/bindings/test/test_exception_options_from_jsimplemented.html')
-rw-r--r--dom/bindings/test/test_exception_options_from_jsimplemented.html166
1 files changed, 166 insertions, 0 deletions
diff --git a/dom/bindings/test/test_exception_options_from_jsimplemented.html b/dom/bindings/test/test_exception_options_from_jsimplemented.html
new file mode 100644
index 000000000..8a98a8fb6
--- /dev/null
+++ b/dom/bindings/test/test_exception_options_from_jsimplemented.html
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1107592
+-->
+<head>
+ <meta charset="utf-8">
+ <title>Test for Bug 1107592</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <script type="application/javascript">
+
+ /** Test for Bug 1107592 **/
+
+ SimpleTest.waitForExplicitFinish();
+
+ function doTest() {
+ var file = location.href;
+ var asyncFrame;
+ /* Async parent frames from pushPrefEnv don't show up in e10s. */
+ var isE10S = !SpecialPowers.isMainProcess();
+ if (!isE10S && SpecialPowers.getBoolPref("javascript.options.asyncstack")) {
+ asyncFrame = `Async*@${file}:153:3
+`;
+ } else {
+ asyncFrame = "";
+ }
+
+ var t = new TestInterfaceJS();
+ try {
+ t.testThrowError();
+ } catch (e) {
+ ok(e instanceof Error, "Should have an Error here");
+ ok(!(e instanceof DOMException), "Should not have DOMException here");
+ ok(!("code" in e), "Should not have a 'code' property");
+ is(e.name, "Error", "Should not have an interesting name here");
+ is(e.message, "We are an Error", "Should have the right message");
+ is(e.stack,
+ `doTest@${file}:31:7
+${asyncFrame}`,
+ "Exception stack should still only show our code");
+ is(e.fileName,
+ file,
+ "Should have the right file name");
+ is(e.lineNumber, 31, "Should have the right line number");
+ is(e.columnNumber, 7, "Should have the right column number");
+ }
+
+ try {
+ t.testThrowDOMException();
+ } catch (e) {
+ ok(e instanceof Error, "Should also have an Error here");
+ ok(e instanceof DOMException, "Should have DOMException here");
+ is(e.name, "NotSupportedError", "Should have the right name here");
+ is(e.message, "We are a DOMException",
+ "Should also have the right message");
+ is(e.code, DOMException.NOT_SUPPORTED_ERR,
+ "Should have the right 'code'");
+ is(e.stack,
+ `doTest@${file}:50:7
+${asyncFrame}`,
+ "Exception stack should still only show our code");
+ is(e.filename,
+ file,
+ "Should still have the right file name");
+ is(e.lineNumber, 50, "Should still have the right line number");
+ todo_isnot(e.columnNumber, 0,
+ "No column number support for DOMException yet");
+ }
+
+ try {
+ t.testThrowTypeError();
+ } catch (e) {
+ ok(e instanceof TypeError, "Should have a TypeError here");
+ ok(!(e instanceof DOMException), "Should not have DOMException here (2)");
+ ok(!("code" in e), "Should not have a 'code' property (2)");
+ is(e.name, "TypeError", "Should be named TypeError");
+ is(e.message, "We are a TypeError",
+ "Should also have the right message (2)");
+ is(e.stack,
+ `doTest@${file}:72:7
+${asyncFrame}`,
+ "Exception stack for TypeError should only show our code");
+ is(e.fileName,
+ file,
+ "Should still have the right file name for TypeError");
+ is(e.lineNumber, 72, "Should still have the right line number for TypeError");
+ is(e.columnNumber, 7, "Should have the right column number for TypeError");
+ }
+
+ try {
+ t.testThrowCallbackError(function() { Array.indexOf() });
+ } catch (e) {
+ ok(e instanceof TypeError, "Should have a TypeError here (3)");
+ ok(!(e instanceof DOMException), "Should not have DOMException here (3)");
+ ok(!("code" in e), "Should not have a 'code' property (3)");
+ is(e.name, "TypeError", "Should be named TypeError (3)");
+ is(e.message, "missing argument 0 when calling function Array.indexOf",
+ "Should also have the right message (3)");
+ is(e.stack,
+ `doTest/<@${file}:92:45
+doTest@${file}:92:7
+${asyncFrame}`,
+ "Exception stack for TypeError should only show our code (3)");
+ is(e.fileName,
+ file,
+ "Should still have the right file name for TypeError (3)");
+ is(e.lineNumber, 92, "Should still have the right line number for TypeError (3)");
+ is(e.columnNumber, 45, "Should have the right column number for TypeError (3)");
+ }
+
+ try {
+ t.testThrowXraySelfHosted();
+ } catch (e) {
+ ok(!(e instanceof Error), "Should have an Exception here (4)");
+ ok(!(e instanceof DOMException), "Should not have DOMException here (4)");
+ ok(!("code" in e), "Should not have a 'code' property (4)");
+ is(e.name, "NS_ERROR_UNEXPECTED", "Name should be sanitized (4)");
+ is(e.message, "", "Message should be sanitized (5)");
+ is(e.stack,
+ `doTest@${file}:113:7
+${asyncFrame}`,
+ "Exception stack for sanitized exception should only show our code (4)");
+ is(e.filename,
+ file,
+ "Should still have the right file name for sanitized exception (4)");
+ is(e.lineNumber, 113, "Should still have the right line number for sanitized exception (4)");
+ todo_isnot(e.columnNumber, 0, "Should have the right column number for sanitized exception (4)");
+ }
+
+ try {
+ t.testThrowSelfHosted();
+ } catch (e) {
+ ok(!(e instanceof Error), "Should have an Exception here (5)");
+ ok(!(e instanceof DOMException), "Should not have DOMException here (5)");
+ ok(!("code" in e), "Should not have a 'code' property (5)");
+ is(e.name, "NS_ERROR_UNEXPECTED", "Name should be sanitized (5)");
+ is(e.message, "", "Message should be sanitized (5)");
+ is(e.stack,
+ `doTest@${file}:132:7
+${asyncFrame}`,
+ "Exception stack for sanitized exception should only show our code (5)");
+ is(e.filename,
+ file,
+ "Should still have the right file name for sanitized exception (5)");
+ is(e.lineNumber, 132, "Should still have the right line number for sanitized exception (5)");
+ todo_isnot(e.columnNumber, 0, "Should have the right column number for sanitized exception (5)");
+ }
+
+ SimpleTest.finish();
+ }
+
+ SpecialPowers.pushPrefEnv({set: [['dom.expose_test_interfaces', true]]},
+ doTest);
+ </script>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1107592">Mozilla Bug 1107592</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+</pre>
+</body>
+</html>