Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

// META: global=window,worker
// META: title=IDBDatabase.deleteObjectStore()
// META: script=resources/support.js
// @author Microsoft <https://www.microsoft.com>
// @author Odin Hørthe Omdal <mailto:odinho@opera.com>
'use_strict';
async_test(t => {
let db;
let add_success = false;
const open_rq = createdb(t);
open_rq.onupgradeneeded = function(e) {
db = e.target.result;
const objStore = db.createObjectStore("store", { autoIncrement: true });
assert_equals(db.objectStoreNames[0], "store", "objectStoreNames");
const rq_add = objStore.add(1);
rq_add.onsuccess = function() { add_success = true; };
rq_add.onerror = fail(t, 'rq_add.error');
objStore.createIndex("idx", "a");
db.deleteObjectStore("store");
assert_equals(db.objectStoreNames.length, 0, "objectStoreNames.length after delete");
assert_false(db.objectStoreNames.contains("store"));
const exc = "InvalidStateError";
assert_throws_dom(exc, function() { objStore.add(2); });
assert_throws_dom(exc, function() { objStore.put(3); });
assert_throws_dom(exc, function() { objStore.get(1); });
assert_throws_dom(exc, function() { objStore.clear(); });
assert_throws_dom(exc, function() { objStore.count(); });
assert_throws_dom(exc, function() { objStore.delete(1); });
assert_throws_dom(exc, function() { objStore.openCursor(); });
assert_throws_dom(exc, function() { objStore.index("idx"); });
assert_throws_dom(exc, function() { objStore.deleteIndex("idx"); });
assert_throws_dom(exc, function() { objStore.createIndex("idx2", "a");
});
};
open_rq.onsuccess = function() {
assert_true(add_success, "First add was successful");
t.done();
}
}, 'Deleted object store\'s name should be removed from database\'s list. Attempting to use a \
deleted IDBObjectStore should throw an InvalidStateError');
async_test(t => {
const open_rq = createdb(t);
open_rq.onupgradeneeded = function(e) {
const db = e.target.result;
assert_throws_dom('NotFoundError', function() { db.deleteObjectStore('whatever'); });
t.done();
};
}, 'Attempting to remove an object store that does not exist should throw a NotFoundError');
async_test(t => {
const keys = [];
const open_rq = createdb(t);
open_rq.onupgradeneeded = function(e) {
const db = e.target.result;
const objStore = db.createObjectStore("resurrected", { autoIncrement: true, keyPath: "k" });
objStore.add({ k: 5 }).onsuccess = function(e) { keys.push(e.target.result); };
objStore.add({}).onsuccess = function(e) { keys.push(e.target.result); };
objStore.createIndex("idx", "i");
assert_true(objStore.indexNames.contains("idx"));
assert_equals(objStore.keyPath, "k", "keyPath");
db.deleteObjectStore("resurrected");
const objStore2 = db.createObjectStore("resurrected", { autoIncrement: true });
objStore2.add("Unicorns'R'us").onsuccess = function(e) { keys.push(e.target.result); };
assert_false(objStore2.indexNames.contains("idx"), "index exist on new objstore");
assert_equals(objStore2.keyPath, null, "keyPath");
assert_throws_dom("NotFoundError", function() { objStore2.index("idx"); });
};
open_rq.onsuccess = function(e) {
assert_array_equals(keys, [5, 6, 1], "keys");
t.done();
};
}, 'Attempting to access an index that was deleted as part of object store deletion and then \
recreated using the same object store name should throw a NotFoundError');