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