summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/IndexedDB/idbcursor-iterating-update.htm
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /testing/web-platform/tests/IndexedDB/idbcursor-iterating-update.htm
parentInitial commit. (diff)
downloadfirefox-upstream.tar.xz
firefox-upstream.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/idbcursor-iterating-update.htm')
-rw-r--r--testing/web-platform/tests/IndexedDB/idbcursor-iterating-update.htm58
1 files changed, 58 insertions, 0 deletions
diff --git a/testing/web-platform/tests/IndexedDB/idbcursor-iterating-update.htm b/testing/web-platform/tests/IndexedDB/idbcursor-iterating-update.htm
new file mode 100644
index 0000000000..0a7282b68f
--- /dev/null
+++ b/testing/web-platform/tests/IndexedDB/idbcursor-iterating-update.htm
@@ -0,0 +1,58 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>IndexedDB: Index iteration with cursor updates/deletes</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/support.js"></script>
+<script>
+const objStoreValues = [
+ {name: 'foo', id: 1},
+ {name: 'bar', id: 2},
+ {name: 'foo', id: 3},
+ {name: 'bar', id: 4},
+];
+
+const objStoreValuesByIndex = [
+ objStoreValues[1],
+ objStoreValues[3],
+ objStoreValues[0],
+ objStoreValues[2],
+];
+
+const functionsThatShouldNotAffectIteration = [
+ cursor => cursor.update({}),
+ cursor => cursor.delete(),
+];
+
+functionsThatShouldNotAffectIteration.forEach((func) => indexeddb_test(
+ (t, db) => {
+ const objStore = db.createObjectStore('items', {autoIncrement: true});
+ objStore.createIndex('name', 'name', {unique: false});
+ objStoreValues.forEach((value) => objStore.add(value));
+ },
+ (t, db) => {
+ const txn = db.transaction('items', 'readwrite', {durability: 'relaxed'});
+ const objStore = txn.objectStore('items');
+ const nameIndex = objStore.index('name');
+
+ const cursorValues = [];
+ nameIndex.openCursor().onsuccess = (evt) => {
+ const cursor = evt.target.result;
+ if (cursor) {
+ func(cursor);
+ cursorValues.push(cursor.value);
+ cursor.continue();
+ } else {
+ assert_equals(cursorValues.length, 4,
+ `Cursor should iterate over 4 records`);
+
+ cursorValues.forEach((value, i) => {
+ assert_object_equals(value, objStoreValuesByIndex[i]);
+ });
+ t.done();
+ }
+ }
+ },
+ `Calling ${func} doesn't affect index iteration`
+));
+</script>