199 lines
5.9 KiB
JavaScript
199 lines
5.9 KiB
JavaScript
// 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")
|
|
.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")
|
|
.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")
|
|
.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")
|
|
.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")
|
|
.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")
|
|
.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")
|
|
.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");
|
|
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');
|