From 648b0be7dd0e65f9001c1f869e710337ecd7c4e2 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 23 Feb 2021 19:28:37 +0100 Subject: idb: more tests and fixes --- .../idbcursor-delete-exception-order.test.ts | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 packages/idb-bridge/src/idb-wpt-ported/idbcursor-delete-exception-order.test.ts (limited to 'packages/idb-bridge/src/idb-wpt-ported/idbcursor-delete-exception-order.test.ts') diff --git a/packages/idb-bridge/src/idb-wpt-ported/idbcursor-delete-exception-order.test.ts b/packages/idb-bridge/src/idb-wpt-ported/idbcursor-delete-exception-order.test.ts new file mode 100644 index 000000000..c80e276e6 --- /dev/null +++ b/packages/idb-bridge/src/idb-wpt-ported/idbcursor-delete-exception-order.test.ts @@ -0,0 +1,85 @@ +import test from "ava"; +import { createdb, indexeddb_test } from "./wptsupport"; + +test("WPT idbcursor-delete-exception-order.htm", async (t) => { + // 'IDBCursor.delete exception order: TransactionInactiveError vs. ReadOnlyError' + await indexeddb_test( + t, + (done, db) => { + const s = db.createObjectStore("s"); + s.put("value", "key"); + }, + (done, db) => { + const s = db.transaction("s", "readonly").objectStore("s"); + const r = s.openCursor(); + r.onsuccess = () => { + r.onsuccess = null; + setTimeout(() => { + const cursor = r.result; + t.assert(!!cursor); + t.throws( + () => {}, + { name: "TransactionInactiveError" }, + + '"Transaction inactive" check (TransactionInactivError) ' + + 'should precede "read only" check (ReadOnlyError)', + ); + done(); + }, 0); + }; + }, + ); + + indexeddb_test( + t, + (done, db) => { + const s = db.createObjectStore("s"); + s.put("value", "key"); + }, + (done, db) => { + const s = db.transaction("s", "readonly").objectStore("s"); + const r = s.openCursor(); + r.onsuccess = () => { + r.onsuccess = null; + const cursor = r.result!; + t.assert(cursor); + cursor.continue(); + t.throws( + () => { + cursor.delete(); + }, + { name: "ReadOnlyError" }, + '"Read only" check (ReadOnlyError) should precede ' + + '"got value flag" (InvalidStateError) check', + ); + + done(); + }; + }, + "IDBCursor.delete exception order: ReadOnlyError vs. InvalidStateError #1", + ); + + indexeddb_test( + t, + (done, db) => { + const s = db.createObjectStore("s"); + s.put("value", "key"); + }, + (done, db) => { + const s = db.transaction("s", "readonly").objectStore("s"); + const r = s.openKeyCursor(); + r.onsuccess = () => { + r.onsuccess = null; + const cursor = r.result; + t.throws( + () => {}, + { name: "ReadOnlyError" }, + '"Read only" check (ReadOnlyError) should precede ' + + '"key only flag" (InvalidStateError) check', + ); + done(); + }; + }, + "IDBCursor.delete exception order: ReadOnlyError vs. InvalidStateError #2", + ); +}); -- cgit v1.2.3