184 lines
10 KiB
JavaScript
184 lines
10 KiB
JavaScript
if (this.importScripts) {
|
|
importScripts('../../../resources/js-test.js');
|
|
importScripts('shared.js');
|
|
}
|
|
|
|
description("Test that IndexedDB objects that have been deleted throw exceptions");
|
|
|
|
indexedDBTest(prepareDatabase);
|
|
function prepareDatabase()
|
|
{
|
|
trans = event.target.transaction;
|
|
connection = event.target.result;
|
|
|
|
testStore();
|
|
}
|
|
|
|
function testStore()
|
|
{
|
|
preamble();
|
|
|
|
evalAndLog("deletedStore = connection.createObjectStore('deletedStore')");
|
|
evalAndLog("connection.deleteObjectStore('deletedStore')");
|
|
|
|
debug("");
|
|
|
|
evalAndExpectException("deletedStore.put(0, 0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.add(0, 0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.delete(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.delete(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.get(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.get(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.clear()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.openCursor()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.openCursor(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.openCursor(0, 'next')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.openCursor(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.openCursor(IDBKeyRange.only(0), 'next')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.createIndex('name', 'path')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.index('name')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.deleteIndex('name')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.count()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.count(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedStore.count(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
|
|
testIndex();
|
|
}
|
|
|
|
function testIndex()
|
|
{
|
|
preamble();
|
|
|
|
evalAndLog("store = connection.createObjectStore('store')");
|
|
evalAndLog("deletedIndex = store.createIndex('deletedIndex', 'path')");
|
|
evalAndLog("store.deleteIndex('deletedIndex')");
|
|
|
|
debug("");
|
|
|
|
evalAndExpectException("deletedIndex.openCursor()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.openCursor(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.openCursor(0, 'next')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.openCursor(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.openCursor(IDBKeyRange.only(0), 'next')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.openKeyCursor()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.openKeyCursor(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.openKeyCursor(0, 'next')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.openKeyCursor(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.openKeyCursor(IDBKeyRange.only(0), 'next')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.get(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.get(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.getKey(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.getKey(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.count()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.count(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("deletedIndex.count(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
|
|
testTransitiveDeletion();
|
|
}
|
|
|
|
function testTransitiveDeletion()
|
|
{
|
|
preamble();
|
|
|
|
evalAndLog("deletedStore = connection.createObjectStore('deletedStore')");
|
|
evalAndLog("indexOfDeletedStore = deletedStore.createIndex('index', 'path')");
|
|
evalAndLog("connection.deleteObjectStore('deletedStore')");
|
|
|
|
debug("");
|
|
|
|
evalAndExpectException("indexOfDeletedStore.openCursor()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.openCursor(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.openCursor(0, 'next')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.openCursor(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.openCursor(IDBKeyRange.only(0), 'next')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.openKeyCursor()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.openKeyCursor(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.openKeyCursor(0, 'next')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.openKeyCursor(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.openKeyCursor(IDBKeyRange.only(0), 'next')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.get(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.get(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.getKey(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.getKey(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.count()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.count(0)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("indexOfDeletedStore.count(IDBKeyRange.only(0))", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
|
|
testObjectStoreCursor();
|
|
}
|
|
|
|
function testObjectStoreCursor()
|
|
{
|
|
preamble();
|
|
|
|
evalAndLog("deletedStore = connection.createObjectStore('deletedStore')");
|
|
evalAndLog("deletedStore.put(0, 0)");
|
|
|
|
request = evalAndLog("deletedStore.openCursor()");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function() {
|
|
evalAndLog("cursor = request.result");
|
|
shouldBe("cursor.key", "0");
|
|
shouldBe("cursor.value", "0");
|
|
|
|
evalAndLog("connection.deleteObjectStore('deletedStore')");
|
|
evalAndExpectException("cursor.delete()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("cursor.update(1)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("cursor.continue()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("cursor.advance(1)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
|
|
testIndexCursor();
|
|
};
|
|
}
|
|
|
|
|
|
function testIndexCursor()
|
|
{
|
|
preamble();
|
|
|
|
evalAndLog("store.put({id: 123}, 0)");
|
|
evalAndLog("deletedIndex = store.createIndex('deletedIndex', 'id')");
|
|
|
|
request = evalAndLog("deletedIndex.openCursor()");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function() {
|
|
evalAndLog("cursor = request.result");
|
|
shouldBe("cursor.key", "123");
|
|
shouldBe("cursor.primaryKey", "0");
|
|
|
|
evalAndLog("store.deleteIndex('deletedIndex')");
|
|
evalAndExpectException("cursor.delete()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("cursor.update(1)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("cursor.continue()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("cursor.advance(1)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
|
|
testIndexOfDeletedStoreCursor();
|
|
};
|
|
}
|
|
|
|
function testIndexOfDeletedStoreCursor()
|
|
{
|
|
preamble();
|
|
|
|
evalAndLog("deletedStore = connection.createObjectStore('deletedStore')");
|
|
evalAndLog("deletedStore.put({id: 123}, 0)");
|
|
evalAndLog("index = deletedStore.createIndex('index', 'id')");
|
|
|
|
request = evalAndLog("index.openCursor()");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function() {
|
|
evalAndLog("cursor = request.result");
|
|
shouldBe("cursor.key", "123");
|
|
shouldBe("cursor.primaryKey", "0");
|
|
|
|
evalAndLog("connection.deleteObjectStore('deletedStore')");
|
|
evalAndExpectException("cursor.delete()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("cursor.update(1)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("cursor.continue()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
evalAndExpectException("cursor.advance(1)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
|
|
|
|
trans.onabort = unexpectedAbortCallback;
|
|
trans.oncomplete = finishJSTest;
|
|
};
|
|
}
|