aboutsummaryrefslogtreecommitdiff
path: root/packages/idb-bridge/src/idb-wpt-ported/cursor-overloads.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/idb-bridge/src/idb-wpt-ported/cursor-overloads.test.ts')
-rw-r--r--packages/idb-bridge/src/idb-wpt-ported/cursor-overloads.test.ts114
1 files changed, 114 insertions, 0 deletions
diff --git a/packages/idb-bridge/src/idb-wpt-ported/cursor-overloads.test.ts b/packages/idb-bridge/src/idb-wpt-ported/cursor-overloads.test.ts
new file mode 100644
index 000000000..2f1797a6f
--- /dev/null
+++ b/packages/idb-bridge/src/idb-wpt-ported/cursor-overloads.test.ts
@@ -0,0 +1,114 @@
+import test from "ava";
+import { BridgeIDBCursor } from "..";
+import { BridgeIDBCursorWithValue } from "../bridge-idb";
+import { createdb } from "./wptsupport";
+
+// Validate the overloads of IDBObjectStore.openCursor(), IDBIndex.openCursor() and IDBIndex.openKeyCursor()
+test.cb("WPT test cursor-overloads.htm", (t) => {
+ var db: any, trans: any, store: any, index: any;
+
+ var request = createdb(t);
+ request.onupgradeneeded = function (e) {
+ db = request.result;
+ store = db.createObjectStore("store");
+ index = store.createIndex("index", "value");
+ store.put({ value: 0 }, 0);
+ trans = request.transaction;
+ trans.oncomplete = verifyOverloads;
+ };
+
+ function verifyOverloads() {
+ trans = db.transaction("store");
+ store = trans.objectStore("store");
+ index = store.index("index");
+
+ checkCursorDirection("store.openCursor()", "next");
+ checkCursorDirection("store.openCursor(0)", "next");
+ checkCursorDirection("store.openCursor(0, 'next')", "next");
+ checkCursorDirection("store.openCursor(0, 'nextunique')", "nextunique");
+ checkCursorDirection("store.openCursor(0, 'prev')", "prev");
+ checkCursorDirection("store.openCursor(0, 'prevunique')", "prevunique");
+
+ checkCursorDirection("store.openCursor(IDBKeyRange.only(0))", "next");
+ checkCursorDirection(
+ "store.openCursor(IDBKeyRange.only(0), 'next')",
+ "next",
+ );
+ checkCursorDirection(
+ "store.openCursor(IDBKeyRange.only(0), 'nextunique')",
+ "nextunique",
+ );
+ checkCursorDirection(
+ "store.openCursor(IDBKeyRange.only(0), 'prev')",
+ "prev",
+ );
+ checkCursorDirection(
+ "store.openCursor(IDBKeyRange.only(0), 'prevunique')",
+ "prevunique",
+ );
+
+ checkCursorDirection("index.openCursor()", "next");
+ checkCursorDirection("index.openCursor(0)", "next");
+ checkCursorDirection("index.openCursor(0, 'next')", "next");
+ checkCursorDirection("index.openCursor(0, 'nextunique')", "nextunique");
+ checkCursorDirection("index.openCursor(0, 'prev')", "prev");
+ checkCursorDirection("index.openCursor(0, 'prevunique')", "prevunique");
+
+ checkCursorDirection("index.openCursor(IDBKeyRange.only(0))", "next");
+ checkCursorDirection(
+ "index.openCursor(IDBKeyRange.only(0), 'next')",
+ "next",
+ );
+ checkCursorDirection(
+ "index.openCursor(IDBKeyRange.only(0), 'nextunique')",
+ "nextunique",
+ );
+ checkCursorDirection(
+ "index.openCursor(IDBKeyRange.only(0), 'prev')",
+ "prev",
+ );
+ checkCursorDirection(
+ "index.openCursor(IDBKeyRange.only(0), 'prevunique')",
+ "prevunique",
+ );
+
+ checkCursorDirection("index.openKeyCursor()", "next");
+ checkCursorDirection("index.openKeyCursor(0)", "next");
+ checkCursorDirection("index.openKeyCursor(0, 'next')", "next");
+ checkCursorDirection("index.openKeyCursor(0, 'nextunique')", "nextunique");
+ checkCursorDirection("index.openKeyCursor(0, 'prev')", "prev");
+ checkCursorDirection("index.openKeyCursor(0, 'prevunique')", "prevunique");
+
+ checkCursorDirection("index.openKeyCursor(IDBKeyRange.only(0))", "next");
+ checkCursorDirection(
+ "index.openKeyCursor(IDBKeyRange.only(0), 'next')",
+ "next",
+ );
+ checkCursorDirection(
+ "index.openKeyCursor(IDBKeyRange.only(0), 'nextunique')",
+ "nextunique",
+ );
+ checkCursorDirection(
+ "index.openKeyCursor(IDBKeyRange.only(0), 'prev')",
+ "prev",
+ );
+ checkCursorDirection(
+ "index.openKeyCursor(IDBKeyRange.only(0), 'prevunique')",
+ "prevunique",
+ );
+
+ t.end();
+ }
+
+ function checkCursorDirection(statement: string, direction: string) {
+ request = eval(statement);
+ request.onsuccess = function (event: any) {
+ t.notDeepEqual(event.target.result, null, "Check the result is not null");
+ t.deepEqual(
+ event.target.result.direction,
+ direction,
+ "Check the result direction",
+ );
+ };
+ }
+});