89 lines
3.6 KiB
JavaScript
89 lines
3.6 KiB
JavaScript
// 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');
|