summaryrefslogtreecommitdiffstats
path: root/dom/promise/tests/file_promise_retval_tests.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/promise/tests/file_promise_retval_tests.js')
-rw-r--r--dom/promise/tests/file_promise_retval_tests.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/dom/promise/tests/file_promise_retval_tests.js b/dom/promise/tests/file_promise_retval_tests.js
new file mode 100644
index 0000000000..37ede9e514
--- /dev/null
+++ b/dom/promise/tests/file_promise_retval_tests.js
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+
+/* global verifyPromiseGlobal, expectedExceptionGlobal */
+
+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();
+ });
+}