diff options
author | Florian Dold <florian@dold.me> | 2021-02-22 14:27:54 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2021-02-22 14:27:54 +0100 |
commit | 3eced74a88de43ab9afe542fcce20a8db8e3fe60 (patch) | |
tree | 8ef74cfd5cf3bea8fe90cd20746e4fadb0afc349 /packages/idb-bridge/src/idb-wpt-ported/event-dispatch-active-flag.test.ts | |
parent | e6946694f2e7ae6ff25f490fa76f3da583c44c74 (diff) | |
download | wallet-core-3eced74a88de43ab9afe542fcce20a8db8e3fe60.tar.xz |
more tests, fix event ordering issue
Diffstat (limited to 'packages/idb-bridge/src/idb-wpt-ported/event-dispatch-active-flag.test.ts')
-rw-r--r-- | packages/idb-bridge/src/idb-wpt-ported/event-dispatch-active-flag.test.ts | 57 |
1 files changed, 57 insertions, 0 deletions
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); + }; + }, + ); +}); |