diff options
Diffstat (limited to 'packages/idb-bridge/src/idb-wpt-ported/idbcursor-reused.ts')
-rw-r--r-- | packages/idb-bridge/src/idb-wpt-ported/idbcursor-reused.ts | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/packages/idb-bridge/src/idb-wpt-ported/idbcursor-reused.ts b/packages/idb-bridge/src/idb-wpt-ported/idbcursor-reused.ts new file mode 100644 index 000000000..44a647dc8 --- /dev/null +++ b/packages/idb-bridge/src/idb-wpt-ported/idbcursor-reused.ts @@ -0,0 +1,76 @@ +import test from "ava"; +import { createdb } from "./wptsupport"; + +test("WPT idbcursor-reused.htm", async (t) => { + await new Promise<void>((resolve, reject) => { + var db: any; + var open_rq = createdb(t); + + open_rq.onupgradeneeded = function (e: any) { + db = e.target.result; + var os = db.createObjectStore("test"); + + os.add("data", "k"); + os.add("data2", "k2"); + }; + + open_rq.onsuccess = function (e) { + var cursor: any; + var count = 0; + var rq = db.transaction("test").objectStore("test").openCursor(); + + rq.onsuccess = function (e: any) { + switch (count) { + case 0: + cursor = e.target.result; + + t.deepEqual(cursor.value, "data", "prequisite cursor.value"); + cursor.custom_cursor_value = 1; + e.target.custom_request_value = 2; + + cursor.continue(); + break; + + case 1: + t.deepEqual(cursor.value, "data2", "prequisite cursor.value"); + t.deepEqual(cursor.custom_cursor_value, 1, "custom cursor value"); + t.deepEqual( + e.target.custom_request_value, + 2, + "custom request value", + ); + + cursor.advance(1); + break; + + case 2: + t.false(!!e.target.result, "got cursor"); + t.deepEqual(cursor.custom_cursor_value, 1, "custom cursor value"); + t.deepEqual( + e.target.custom_request_value, + 2, + "custom request value", + ); + break; + } + count++; + }; + + rq.transaction.oncomplete = function () { + t.deepEqual(count, 3, "cursor callback runs"); + t.deepEqual( + rq.custom_request_value, + 2, + "variable placed on old IDBRequest", + ); + t.deepEqual( + cursor.custom_cursor_value, + 1, + "custom cursor value (transaction.complete)", + ); + resolve(); + }; + }; + }); + t.pass(); +}); |