diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /testing/web-platform/tests/IndexedDB/idbcursor_iterating.htm | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/idbcursor_iterating.htm')
-rw-r--r-- | testing/web-platform/tests/IndexedDB/idbcursor_iterating.htm | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/testing/web-platform/tests/IndexedDB/idbcursor_iterating.htm b/testing/web-platform/tests/IndexedDB/idbcursor_iterating.htm new file mode 100644 index 0000000000..4930d1eb1e --- /dev/null +++ b/testing/web-platform/tests/IndexedDB/idbcursor_iterating.htm @@ -0,0 +1,109 @@ +<!DOCTYPE html> +<title>IDBCursor.continue() - objectstore - delete next element, and iterate to it</title> +<link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/support.js"></script> + +<script> + var db, + count = 0, + t = async_test(); + + var open_rq = createdb(t); + open_rq.onupgradeneeded = function(e) { + db = e.target.result; + t.add_cleanup(function() { db.close(); indexedDB.deleteDatabase(db.name); }); + var objStore = db.createObjectStore("test", { keyPath: "key" }); + + for (var i = 0; i < 500; i++) + objStore.add({ key: i, val: "val_"+i }); + + var rq = objStore.add({ key: 500, val: "val_500" }); + + rq.onsuccess = t.step_func(function() { + for (var i = 999; i > 500; i--) + objStore.add({ key: i, val: "val_"+i }); + }); + + objStore.createIndex('index', ['key', 'val']); + }; + + open_rq.onsuccess = function(e) { + var cursor_rq = db.transaction("test", "readwrite", {durability: 'relaxed'}) + .objectStore("test") + .openCursor(); + + cursor_rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result, + store = e.target.source; + if (!cursor) { + assert_equals(count, 997, "cursor run count"); + + var rq = e.target.source.count(); + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, 995, "object count"); + t.done(); + }); + return; + } + + switch (cursor.key) { + case 10: + assert_equals(count, cursor.key, "count"); + store.delete(11); + break; + + case 12: + case 499: + case 500: + case 501: + assert_equals(count, cursor.key - 1, "count"); + break; + + // Delete the next key + case 510: + store.delete(511); + break; + + // Delete randomly + case 512: + store.delete(611); + store.delete(499); + store.delete(500); + break; + + // Delete and add a new key + case 520: + store.delete(521); + store.add({ key: 521, val: "new"}); + break; + + case 521: + assert_equals(cursor.value.val, "new"); + break; + + // We should only be here once although we're basically making the index + // "heavier" with its new key. + case 530: + assert_equals(cursor.value.val, "val_530"); + cursor.update({ key: 530, val: "val_531" }) + + store.get(530).onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.val, "val_531"); + }); + break; + + // Shouldn't happen. + case 11: + case 511: + case 611: + assert_unreached(cursor.key + " should be deleted and never run"); + break; + } + + cursor.continue(); + count++; + }); + }; +</script> |