diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-15 03:35:49 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-15 03:35:49 +0000 |
commit | d8bbc7858622b6d9c278469aab701ca0b609cddf (patch) | |
tree | eff41dc61d9f714852212739e6b3738b82a2af87 /testing/web-platform/tests/IndexedDB/idbobjectstore_delete.any.js | |
parent | Releasing progress-linux version 125.0.3-1~progress7.99u1. (diff) | |
download | firefox-d8bbc7858622b6d9c278469aab701ca0b609cddf.tar.xz firefox-d8bbc7858622b6d9c278469aab701ca0b609cddf.zip |
Merging upstream version 126.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/idbobjectstore_delete.any.js')
-rw-r--r-- | testing/web-platform/tests/IndexedDB/idbobjectstore_delete.any.js | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/testing/web-platform/tests/IndexedDB/idbobjectstore_delete.any.js b/testing/web-platform/tests/IndexedDB/idbobjectstore_delete.any.js new file mode 100644 index 0000000000..0b731f391d --- /dev/null +++ b/testing/web-platform/tests/IndexedDB/idbobjectstore_delete.any.js @@ -0,0 +1,207 @@ +// META: global=window,worker +// META: title=IDBObjectStore.delete() +// META: script=resources/support.js +// @author Microsoft <https://www.microsoft.com> + +'use_strict'; + +async_test(t => { + let db; + const record = { key: 1, property: "data" }; + + const open_rq = createdb(t); + open_rq.onupgradeneeded = function(e) { + db = e.target.result; + + const objStore = db.createObjectStore("test", { keyPath: "key" }); + objStore.add(record); + }; + + open_rq.onsuccess = function(e) { + const delete_rq = db.transaction("test", "readwrite", + { durability: 'relaxed' }) + .objectStore("test") + .delete(record.key); + + delete_rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + + e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved); + }); + }; + + function VerifyRecordRemoved() { + const rq = db.transaction("test", "readonly", + { durability: 'relaxed' }) + .objectStore("test") + .get(record.key); + + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + t.done(); + }); + } +}, 'delete() removes record (inline keys)'); + +async_test(t => { + const open_rq = createdb(t); + open_rq.onupgradeneeded = function(e) { + const db = e.target.result; + + const delete_rq = db.createObjectStore("test") + .delete(1); + + delete_rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + t.done(); + }); + }; +}, 'delete() key doesn\'t match any records'); + +async_test(t => { + let db; + const record = { test: { obj: { key: 1 } }, property: "data" }; + + const open_rq = createdb(t); + open_rq.onupgradeneeded = function(e) { + db = e.target.result; + + const objStore = db.createObjectStore("test", + { keyPath: "test.obj.key" }); + objStore.add(record); + }; + + open_rq.onsuccess = function(e) { + const delete_rq = db.transaction("test", "readwrite", + { durability: 'relaxed' }) + .objectStore("test") + .delete(record.test.obj.key); + + delete_rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + + e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved); + }); + }; + + function VerifyRecordRemoved() { + const rq = db.transaction("test", "readonly", + { durability: 'relaxed' }) + .objectStore("test") + .get(record.test.obj.key); + + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + t.done(); + }); + } +}, 'Object store\'s key path is an object attribute'); + +async_test(t => { + let db; + const key = 1; + const record = { property: "data" }; + + const open_rq = createdb(t); + open_rq.onupgradeneeded = function(e) { + db = e.target.result; + + const objStore = db.createObjectStore("test"); + objStore.add(record, key); + }; + + open_rq.onsuccess = function(e) { + const delete_rq = db.transaction("test", "readwrite", + { durability: 'relaxed' }) + .objectStore("test") + .delete(key); + + delete_rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + + e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved); + }); + }; + + function VerifyRecordRemoved() { + const rq = db.transaction("test", "readonly", + { durability: 'relaxed' }) + .objectStore("test") + .get(key); + + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + t.done(); + }); + } +}, 'delete() removes record (out-of-line keys)'); + +async_test(t => { + let db; + const open_rq = createdb(t); + + open_rq.onupgradeneeded = function(e) { + db = e.target.result; + const os = db.createObjectStore("store"); + + for(let i = 0; i < 10; i++) + os.add("data" + i, i); + }; + + open_rq.onsuccess = function (e) { + const os = db.transaction("store", "readwrite", + { durability: 'relaxed' }) + .objectStore("store"); + + os.delete(IDBKeyRange.bound(3, 6)); + os.count().onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, 6, "Count after deleting \ + 3-6 from 10"); + t.done(); + }); + }; +}, 'delete() removes all of the records in the range'); + +async_test(function(t) { + let db; + const records = [{ pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }]; + + const open_rq = createdb(t); + open_rq.onupgradeneeded = function(event) { + db = event.target.result; + const objStore = db.createObjectStore("store", { keyPath: "pKey" }); + for (let i = 0; i < records.length; i++) { + objStore.add(records[i]); + } + }; + + open_rq.onsuccess = function(event) { + const txn = db.transaction("store", "readonly", + { durability: 'relaxed' }); + const ostore = txn.objectStore("store"); + t.step(function() { + assert_throws_dom("ReadOnlyError", function() { + ostore.delete("primaryKey_0"); + }); + }); + t.done(); + }; +}, 'If the transaction this IDBObjectStore belongs to has its mode set to \ +readonly, throw ReadOnlyError'); + +async_test(t => { + let ostore; + const records = [{ pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }]; + + const open_rq = createdb(t); + open_rq.onupgradeneeded = function(event) { + const db = event.target.result; + ostore = db.createObjectStore("store", { keyPath: "pKey" }); + db.deleteObjectStore("store"); + assert_throws_dom("InvalidStateError", function() { + ostore.delete("primaryKey_0"); + }); + t.done(); + }; +}, 'If the object store has been deleted, the implementation must throw a \ +DOMException of type InvalidStateError'); |