diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/IndexedDB/idbcursor_update_index9.any.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/idbcursor_update_index9.any.js')
-rw-r--r-- | testing/web-platform/tests/IndexedDB/idbcursor_update_index9.any.js | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/testing/web-platform/tests/IndexedDB/idbcursor_update_index9.any.js b/testing/web-platform/tests/IndexedDB/idbcursor_update_index9.any.js new file mode 100644 index 0000000000..aec277e56b --- /dev/null +++ b/testing/web-platform/tests/IndexedDB/idbcursor_update_index9.any.js @@ -0,0 +1,43 @@ +// META: script=resources/support-promises.js + +promise_test(async t => { + const db = await createDatabase(t, db => { + const store = db.createObjectStore('store'); + store.createIndex('index', 'value'); + store.put({value: 1}, 1); + store.put({value: 2}, 2); + store.put({value: 3}, 3); + }); + + { + // Iterate over all index entries until an upper bound is reached. + // On each record found, increment the value used as the index + // key, which will make it show again up later in the iteration. + const tx = db.transaction('store', 'readwrite', {durability: 'relaxed'}); + const range = IDBKeyRange.upperBound(9); + const index = tx.objectStore('store').index('index'); + const request = index.openCursor(range); + request.onsuccess = t.step_func(e => { + const cursor = e.target.result; + if (!cursor) + return; + + const record = cursor.value; + record.value += 1; + cursor.update(record); + + cursor.continue(); + }); + + await promiseForTransaction(t, tx); + } + + { + const tx = db.transaction('store', 'readonly', {durability: 'relaxed'}); + const results = await promiseForRequest(t, tx.objectStore('store').getAll()); + assert_array_equals( + results.map(record => record.value), + [10, 10, 10], + 'Values should all be incremented until bound reached'); + } +}, 'Index cursor - indexed values updated during iteration'); |