summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/IndexedDB/idbobjectstore_delete.any.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/idbobjectstore_delete.any.js')
-rw-r--r--testing/web-platform/tests/IndexedDB/idbobjectstore_delete.any.js207
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');