summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/IndexedDB/idb-explicit-commit-throw.any.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/idb-explicit-commit-throw.any.js')
-rw-r--r--testing/web-platform/tests/IndexedDB/idb-explicit-commit-throw.any.js37
1 files changed, 37 insertions, 0 deletions
diff --git a/testing/web-platform/tests/IndexedDB/idb-explicit-commit-throw.any.js b/testing/web-platform/tests/IndexedDB/idb-explicit-commit-throw.any.js
new file mode 100644
index 0000000000..8a9dd94056
--- /dev/null
+++ b/testing/web-platform/tests/IndexedDB/idb-explicit-commit-throw.any.js
@@ -0,0 +1,37 @@
+// META: script=resources/support-promises.js
+
+setup({allow_uncaught_exception:true});
+
+promise_test(async testCase => {
+ // Register an event listener that will prevent the intentionally thrown
+ // error from bubbling up to the window and failing the testharness. This
+ // is necessary because currently allow_uncaught_exception does not behave
+ // as expected for promise_test.
+ //
+ // Git issue: https://github.com/web-platform-tests/wpt/issues/14041
+ self.addEventListener('error', (event) => { event.preventDefault(); });
+
+ const db = await createDatabase(testCase, async db => {
+ await createBooksStore(testCase, db);
+ });
+
+ const txn = db.transaction(['books'], 'readwrite');
+ const objectStore = txn.objectStore('books');
+ const putRequest = objectStore.put({isbn:'one', title:'title'});
+ txn.commit();
+ putRequest.onsuccess = () => {
+ throw new Error('This error thrown after an explicit commit should not ' +
+ 'prevent the transaction from committing.');
+ }
+ await promiseForTransaction(testCase, txn);
+
+ // Ensure that despite the uncaught error after the put request, the explicit
+ // commit still causes the request to be committed.
+ const txn2 = db.transaction(['books'], 'readwrite');
+ const objectStore2 = txn2.objectStore('books');
+ const getRequest = objectStore2.get('one');
+ await promiseForTransaction(testCase, txn2);
+
+ assert_equals(getRequest.result.title, 'title');
+}, 'Any errors in callbacks that run after an explicit commit will not stop '
+ + 'the commit from being processed.');