/* * This file is meant to provide common infrastructure for several consumers. * The consumer is expected to define the following things: * * 1) A verifyPromiseGlobal function which does whatever test the consumer * wants. This function is passed a promise and the global whose * TestFunctions was used to get the promise. * 2) A expectedExceptionGlobal function which is handed the global whose * TestFunctions was used to trigger the exception and should return the * global the exception is expected to live in. * 3) A subframe (frames[0]) which can be used as a second global for creating * promises. */ var label = "parent"; function testThrownException(global) { var p = global.TestFunctions.throwToRejectPromise(); verifyPromiseGlobal(p, global, "throwToRejectPromise return value"); return p.then(() => {}).catch((err) => { var expected = expectedExceptionGlobal(global) is(SpecialPowers.unwrap(SpecialPowers.Cu.getGlobalForObject(err)), expected, "Should have an exception object from the right global too"); ok(err instanceof expected.DOMException, "Should have a DOMException here"); is(Object.getPrototypeOf(err), expected.DOMException.prototype, "Should have a DOMException from the right global"); is(err.name, "InvalidStateError", "Should have the right DOMException"); }); } function runPromiseRetvalTests(finishFunc) { Promise.resolve() .then(testThrownException.bind(undefined, window)) .then(testThrownException.bind(undefined, frames[0])) .then(finishFunc) .catch(function(e) { ok(false, `Exception thrown: ${e}@${location.pathname}:${e.lineNumber}:${e.columnNumber}`); finishFunc(); }); }