From 3eced74a88de43ab9afe542fcce20a8db8e3fe60 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 22 Feb 2021 14:27:54 +0100 Subject: more tests, fix event ordering issue --- .../event-dispatch-active-flag.test.ts | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 packages/idb-bridge/src/idb-wpt-ported/event-dispatch-active-flag.test.ts (limited to 'packages/idb-bridge/src/idb-wpt-ported/event-dispatch-active-flag.test.ts') diff --git a/packages/idb-bridge/src/idb-wpt-ported/event-dispatch-active-flag.test.ts b/packages/idb-bridge/src/idb-wpt-ported/event-dispatch-active-flag.test.ts new file mode 100644 index 000000000..f5668c90b --- /dev/null +++ b/packages/idb-bridge/src/idb-wpt-ported/event-dispatch-active-flag.test.ts @@ -0,0 +1,57 @@ +import test from "ava"; +import { BridgeIDBRequest } from ".."; +import { + createdb, + indexeddb_test, + is_transaction_active, + keep_alive, +} from "./wptsupport"; + +test("WPT test abort-in-initial-upgradeneeded.htm", async (t) => { + // Transactions are active during success handlers + await indexeddb_test( + t, + (done, db, tx) => { + db.createObjectStore("store"); + }, + (done, db) => { + const tx = db.transaction("store"); + const release_tx = keep_alive(t, tx, "store"); + + t.assert( + is_transaction_active(t, tx, "store"), + "Transaction should be active after creation", + ); + + const request = tx.objectStore("store").get(4242); + (request as BridgeIDBRequest)._debugName = "req-main"; + request.onerror = () => t.fail("request should succeed"); + request.onsuccess = () => { + + t.true( + is_transaction_active(t, tx, "store"), + "Transaction should be active during success handler", + ); + + let saw_handler_promise = false; + Promise.resolve().then(() => { + saw_handler_promise = true; + t.true( + is_transaction_active(t, tx, "store"), + "Transaction should be active in handler's microtasks", + ); + }); + + setTimeout(() => { + t.true(saw_handler_promise); + t.false( + is_transaction_active(t, tx, "store"), + "Transaction should be inactive in next task", + ); + release_tx(); + done(); + }, 0); + }; + }, + ); +}); -- cgit v1.2.3