diff options
Diffstat (limited to 'LayoutTests/storage/indexeddb/objectstore-basics.html')
-rw-r--r-- | LayoutTests/storage/indexeddb/objectstore-basics.html | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/LayoutTests/storage/indexeddb/objectstore-basics.html b/LayoutTests/storage/indexeddb/objectstore-basics.html new file mode 100644 index 0000000..005247e --- /dev/null +++ b/LayoutTests/storage/indexeddb/objectstore-basics.html @@ -0,0 +1,241 @@ +<html> +<head> +<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"> +<script src="../../fast/js/resources/js-test-pre.js"></script> +<script src="../../fast/js/resources/js-test-post-function.js"></script> +<script src="resources/shared.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script> + +description("Test the basics of IndexedDB's IDBObjectStore."); +if (window.layoutTestController) + layoutTestController.waitUntilDone(); + +function test() +{ + result = evalAndLog("webkitIndexedDB.open('name', 'description')"); + verifyResult(result); + result.onsuccess = openSuccess; + result.onerror = unexpectedErrorCallback; +} + +function openSuccess() +{ + debug("openSuccess():"); + verifySuccessEvent(event); + window.db = evalAndLog("db = event.result"); + + result = evalAndLog("db.setVersion('new version')"); + verifyResult(result); + result.onsuccess = setVersionSuccess; + result.onerror = unexpectedErrorCallback; +} + +function setVersionSuccess() +{ + debug("setVersionSuccess():"); + verifySuccessEvent(event); + window.trans = evalAndLog("trans = event.result"); + shouldBeTrue("trans !== null"); + trans.onabort = unexpectedAbortCallback; + + deleteAllObjectStores(db, createObjectStore); +} + +function createObjectStore() +{ + debug("createObjectStore():"); + window.store = evalAndLog("store = db.createObjectStore('storeName', null)"); + var storeNames = evalAndLog("storeNames = db.objectStores"); + + shouldBeEqualToString("store.name", "storeName"); + shouldBeNull("store.keyPath"); + shouldBe("storeNames.contains('storeName')", "true"); + shouldBe("storeNames.length", "1"); + // FIXME: test all of object store's methods. + + debug("Ask for an index that doesn't exist:"); + try { + debug("index = store.index('asdf')"); + index = store.index('asdf'); + testFailed("Asking for a store that doesn't exist should have thrown."); + } catch (err) { + testPassed("Exception thrown."); + // FIXME: Verify the correct exception thrown. + } + + createIndex(); +} + +function createIndex() +{ + debug("createIndex():"); + var index = evalAndLog("index = store.createIndex('indexName', 'x', true)"); // true == unique requirement. + shouldBeTrue("index !== null"); + shouldBeTrue("store.indexNames.contains('indexName')"); + index = evalAndLog("index = store.index('indexName')"); + shouldBeTrue("index !== null"); + + debug("Ask for an index that doesn't exist:"); + try { + debug("index = store.index('asdf')"); + index = store.index('asdf'); + testFailed("Asking for a store that doesn't exist should have thrown."); + } catch (err) { + testPassed("Exception thrown."); + // FIXME: Verify the correct exception thrown. + } + + commitAndContinue(); +} + +function commitAndContinue() +{ + window.setTimeout(testSetVersionAbort, 0); +} + +function testSetVersionAbort() +{ + result = evalAndLog('db.setVersion("version fail")'); + verifyResult(result); + result.onsuccess = createAnotherIndex; + result.onerror = unexpectedErrorCallback; +} + +function createAnotherIndex() +{ + verifySuccessEvent(event); + shouldBeEqualToString("db.version", "version fail"); + + var setVersionTrans = evalAndLog("setVersionTrans = event.result"); + shouldBeTrue("setVersionTrans !== null"); + setVersionTrans.oncomplete = unexpectedCompleteCallback; + setVersionTrans.onabort = checkMetadata; + window.store = evalAndLog("store = setVersionTrans.objectStore('storeName')"); + var index = evalAndLog("index = store.createIndex('indexFail', 'x')"); + + setVersionTrans.abort(); +} + +function checkMetadata() +{ + shouldBeEqualToString("db.version", "new version"); + shouldBe("store.indexNames", "['indexName']"); + shouldBe("store.indexNames.length", "1"); + shouldBe("store.indexNames.contains('')", "false"); + shouldBe("store.indexNames.contains('indexFail')", "false"); + shouldBe("store.indexNames.contains('indexName')", "true"); + shouldBeEqualToString("store.indexNames[0]", "indexName"); + shouldBeNull("store.indexNames[1]"); + shouldBeNull("store.indexNames[100]"); + shouldBeNull("store.indexNames.item(1)"); + shouldBeNull("store.indexNames.item(100)"); + addData(); +} + + +function addData() +{ + var transaction = evalAndLog("transaction = db.transaction()"); + transaction.onabort = unexpectedAbortCallback; + window.store = evalAndLog("store = transaction.objectStore('storeName')"); + result = evalAndLog("store.add({x: 'value'}, 'key')"); + verifyResult(result); + result.onsuccess = addSuccess; + result.onerror = unexpectedErrorCallback; +} + +function addSuccess() +{ + debug("addSuccess():"); + verifySuccessEvent(event); + shouldBeEqualToString("event.result", "key"); + + result = evalAndLog("event.source.add({x: 'value'}, 'zzz')"); + verifyResult(result); + result.onsuccess = unexpectedSuccessCallback; + result.onerror = addAgainFailure; +} + +function addAgainFailure() +{ + debug("addAgainFailure():"); + verifyErrorEvent(event); + // FIXME: This error code needs to be specced. + shouldBe("event.code", "webkitIDBDatabaseException.UNKNOWN_ERR"); + + transaction = evalAndLog("db.transaction()"); + transaction.onabort = unexpectedErrorCallback; + var store = evalAndLog("store = transaction.objectStore('storeName')"); + + result = evalAndLog("store.get('key')"); + verifyResult(result); + result.onsuccess = getSuccess; + result.onerror = unexpectedErrorCallback; +} + +function getSuccess() +{ + debug("getSuccess():"); + verifySuccessEvent(event); + shouldBeEqualToString("event.result.x", "value"); + var store = evalAndLog("store = event.source"); + + result = evalAndLog("store.remove('key')"); + verifyResult(result); + result.onsuccess = removeSuccess; + result.onerror = unexpectedErrorCallback; +} + +function removeSuccess() +{ + debug("removeSuccess():"); + verifySuccessEvent(event); + shouldBeNull("event.result"); + var store = evalAndLog("store = event.source"); + + try { + debug("Passing an invalid key into store.get()."); + store.get([]); + testFailed("No exception thrown"); + } catch (e) { + testPassed("Caught exception: " + e.toString()); + } + + try { + debug("Passing an invalid key into store.remove()."); + store.remove([]); + testFailed("No exception thrown"); + } catch (e) { + testPassed("Caught exception: " + e.toString()); + } + + try { + debug("Passing an invalid key into store.add()."); + store.add(null, []); + testFailed("No exception thrown"); + } catch (e) { + testPassed("Caught exception: " + e.toString()); + } + + try { + debug("Passing an invalid key into store.put()."); + store.put(null, []); + testFailed("No exception thrown"); + } catch (e) { + testPassed("Caught exception: " + e.toString()); + } + + done(); +} + +test(); + +var successfullyParsed = true; + +</script> +</body> +</html> |