diff options
author | Florian Dold <florian@dold.me> | 2021-02-16 15:07:38 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2021-02-16 15:07:38 +0100 |
commit | f4bce10cdaf038cdb559de35238edf096084b82e (patch) | |
tree | 3b4992a8dc2fa4f2cea4b1d85af755953f2046a3 /packages/idb-bridge/src/idb-wpt-ported/request-bubble-and-capture.test.ts | |
parent | 579c9da58b4bc0cacf713bb64c92d13045adb29b (diff) | |
download | wallet-core-f4bce10cdaf038cdb559de35238edf096084b82e.tar.xz |
more test WPTs
Diffstat (limited to 'packages/idb-bridge/src/idb-wpt-ported/request-bubble-and-capture.test.ts')
-rw-r--r-- | packages/idb-bridge/src/idb-wpt-ported/request-bubble-and-capture.test.ts | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/packages/idb-bridge/src/idb-wpt-ported/request-bubble-and-capture.test.ts b/packages/idb-bridge/src/idb-wpt-ported/request-bubble-and-capture.test.ts new file mode 100644 index 000000000..c59a63bc6 --- /dev/null +++ b/packages/idb-bridge/src/idb-wpt-ported/request-bubble-and-capture.test.ts @@ -0,0 +1,83 @@ +import test from "ava"; +import { BridgeIDBRequest } from ".."; +import { EventTarget, IDBDatabase } from "../idbtypes"; +import { createdb } from "./wptsupport"; + +// Bubbling and capturing of request events +test("WPT request_bubble-and-capture.htm", async (t) => { + await new Promise<void>((resolve, reject) => { + var events: any[] = []; + + var open_rq = createdb(t); + open_rq.onupgradeneeded = function (e: any) { + var db = e.target.result; + var txn = e.target.transaction; + var store = db.createObjectStore("s"); + var rq1 = store.add("", 1); + var rq2 = store.add("", 1); + db.onerror = function () {}; + + log_request(" db", db); + log_request("txn", txn); + log_request("rq1", rq1); + log_request("rq2", rq2); + + // Don't let it get to abort + db.addEventListener( + "error", + function (e: any) { + e.preventDefault(); + }, + false, + ); + }; + + open_rq.onsuccess = function (e) { + log("open_rq.success")(e); + t.deepEqual( + events, + [ + "capture db.success", + "capture txn.success", + "capture rq1.success", + "bubble rq1.success", + + "capture db.error: ConstraintError", + "capture txn.error: ConstraintError", + "capture rq2.error: ConstraintError", + "bubble rq2.error: ConstraintError", + "bubble txn.error: ConstraintError", + "bubble db.error: ConstraintError", + + "open_rq.success", + ], + "events", + ); + resolve(); + }; + + function log_request(type: any, obj: EventTarget) { + obj.addEventListener( + "success", + log("capture " + type + ".success"), + true, + ); + obj.addEventListener( + "success", + log("bubble " + type + ".success"), + false, + ); + obj.addEventListener("error", log("capture " + type + ".error"), true); + obj.addEventListener("error", log("bubble " + type + ".error"), false); + } + + function log(msg: any) { + return function (e: any) { + if (e && e.target && e.target.error) + events.push(msg + ": " + e.target.error.name); + else events.push(msg); + }; + } + }); + t.pass(); +}); |