<!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 checkExn(lineNumber, name, message, code, filename, testNumber, stack, exn) { is(exn.lineNumber, lineNumber, "Should have the right line number in test " + testNumber); is(exn.name, name, "Should have the right exception name in test " + testNumber); is("filename" in exn ? exn.filename : exn.fileName, filename, "Should have the right file name in test " + testNumber); is(exn.message, message, "Should have the right message in test " + testNumber); is(exn.code, code, "Should have the right .code in test " + testNumber); if (message === "") { is(exn.name, "InternalError", "Should have one of our synthetic exceptions in test " + testNumber); } is(exn.stack, stack, "Should have the right stack in test " + testNumber); } function ensurePromiseFail(testNumber, value) { ok(false, "Test " + testNumber + " should not have a fulfilled promise"); } function doTest() { var t = new TestInterfaceJS(); /* Async parent frames from pushPrefEnv don't show up in e10s. */ var isE10S = !SpecialPowers.isMainProcess(); var asyncStack = SpecialPowers.getBoolPref("javascript.options.asyncstack"); var ourFile = location.href; var unwrapError = "Promise rejection value is a non-unwrappable cross-compartment wrapper."; var parentFrame = (asyncStack && !isE10S) ? `Async*@${ourFile}:130:3 ` : ""; Promise.all([ t.testPromiseWithThrowingChromePromiseInit().then( ensurePromiseFail.bind(null, 1), checkExn.bind(null, 49, "InternalError", unwrapError, undefined, ourFile, 1, `doTest@${ourFile}:49:7 ` + parentFrame)), t.testPromiseWithThrowingContentPromiseInit(function() { thereIsNoSuchContentFunction1(); }).then( ensurePromiseFail.bind(null, 2), checkExn.bind(null, 57, "ReferenceError", "thereIsNoSuchContentFunction1 is not defined", undefined, ourFile, 2, `doTest/<@${ourFile}:57:11 doTest@${ourFile}:56:7 ` + parentFrame)), t.testPromiseWithThrowingChromeThenFunction().then( ensurePromiseFail.bind(null, 3), checkExn.bind(null, 0, "InternalError", unwrapError, undefined, "", 3, asyncStack ? (`Async*doTest@${ourFile}:67:7 ` + parentFrame) : "")), t.testPromiseWithThrowingContentThenFunction(function() { thereIsNoSuchContentFunction2(); }).then( ensurePromiseFail.bind(null, 4), checkExn.bind(null, 73, "ReferenceError", "thereIsNoSuchContentFunction2 is not defined", undefined, ourFile, 4, `doTest/<@${ourFile}:73:11 ` + (asyncStack ? `Async*doTest@${ourFile}:72:7 ` : "") + parentFrame)), t.testPromiseWithThrowingChromeThenable().then( ensurePromiseFail.bind(null, 5), checkExn.bind(null, 0, "InternalError", unwrapError, undefined, "", 5, asyncStack ? (`Async*doTest@${ourFile}:84:7 ` + parentFrame) : "")), t.testPromiseWithThrowingContentThenable({ then: function() { thereIsNoSuchContentFunction3(); } }).then( ensurePromiseFail.bind(null, 6), checkExn.bind(null, 90, "ReferenceError", "thereIsNoSuchContentFunction3 is not defined", undefined, ourFile, 6, `then@${ourFile}:90:32 ` + (asyncStack ? `Async*doTest@${ourFile}:89:7\n` + parentFrame : ""))), t.testPromiseWithDOMExceptionThrowingPromiseInit().then( ensurePromiseFail.bind(null, 7), checkExn.bind(null, 98, "NotFoundError", "We are a second DOMException", DOMException.NOT_FOUND_ERR, ourFile, 7, `doTest@${ourFile}:98:7 ` + parentFrame)), t.testPromiseWithDOMExceptionThrowingThenFunction().then( ensurePromiseFail.bind(null, 8), checkExn.bind(null, asyncStack ? 106 : 0, "NetworkError", "We are a third DOMException", DOMException.NETWORK_ERR, asyncStack ? ourFile : "", 8, (asyncStack ? `Async*doTest@${ourFile}:106:7 ` + parentFrame : ""))), t.testPromiseWithDOMExceptionThrowingThenable().then( ensurePromiseFail.bind(null, 9), checkExn.bind(null, asyncStack ? 114 : 0, "TypeMismatchError", "We are a fourth DOMException", DOMException.TYPE_MISMATCH_ERR, asyncStack ? ourFile : "", 9, (asyncStack ? `Async*doTest@${ourFile}:114:7 ` + parentFrame : ""))), ]).then(SimpleTest.finish, function(err) { ok(false, "One of our catch statements totally failed with err" + err + ', stack: ' + (err ? err.stack : '')); 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>