blob: 3bfaacd239a7abd6de8ecc6746c606aa28988749 [file] [log] [blame]
<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 IndexedDB's IDBObjectStore auto-increment feature.");
if (window.layoutTestController)
layoutTestController.waitUntilDone();
function test()
{
request = evalAndLog("webkitIndexedDB.open('objectstore-autoincrement')");
request.onsuccess = openSuccess;
request.onerror = unexpectedErrorCallback;
}
function openSuccess()
{
debug("openSuccess():");
window.db = evalAndLog("db = event.target.result");
request = evalAndLog("db.setVersion('new version')");
request.onsuccess = setVersionSuccess;
request.onerror = unexpectedErrorCallback;
}
function setVersionSuccess()
{
debug("setVersionSuccess():");
window.trans = evalAndLog("trans = event.target.result");
shouldBeTrue("trans !== null");
trans.onabort = unexpectedAbortCallback;
trans.oncomplete = setVersionCompleted;
deleteAllObjectStores(db);
debug("createObjectStore():");
window.store = evalAndLog("store = db.createObjectStore('StoreWithKeyPath', {keyPath: 'id', autoIncrement: true})");
evalAndLog("db.createObjectStore('StoreWithAutoIncrement', {autoIncrement: true})");
evalAndLog("db.createObjectStore('PlainOldStore', {autoIncrement: false})");
var storeNames = evalAndLog("storeNames = db.objectStoreNames");
shouldBeEqualToString("store.name", "StoreWithKeyPath");
shouldBe("store.keyPath", "'id'");
shouldBe("storeNames.contains('StoreWithKeyPath')", "true");
shouldBe("storeNames.contains('StoreWithAutoIncrement')", "true");
shouldBe("storeNames.contains('PlainOldStore')", "true");
shouldBe("storeNames.length", "3");
// Let the setVersion transaction complete.
}
function setVersionCompleted()
{
debug("setVersionCompleted():");
window.trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
trans.onabort = unexpectedAbortCallback;
trans.oncomplete = done;
window.store = evalAndLog("store = trans.objectStore('StoreWithKeyPath')");
debug("Insert into object store with auto increment and key path, with key in the object.");
request = evalAndLog("store.add({name: 'Jeffersson', number: '7010', id: 3})");
request.onsuccess = addJefferssonSuccess;
request.onerror = unexpectedErrorCallback;
}
function addJefferssonSuccess()
{
debug("addJefferssonSuccess():");
shouldBe("event.target.result", "3");
debug("Insert into object store with auto increment and key path, without key in the object.");
request = evalAndLog("store.add({name: 'Lincoln', number: '7012'})");
request.onsuccess = addLincolnWithInjectKeySuccess;
request.onerror = unexpectedErrorCallback;
}
function addLincolnWithInjectKeySuccess()
{
debug("addLincolnWithInjectKeySuccess():");
shouldBe("event.target.result", "4");
result = evalAndLog("store.get(4)");
result.onsuccess = getLincolnAfterInjectedKeySuccess;
result.onerror = unexpectedErrorCallback;
}
function getLincolnAfterInjectedKeySuccess()
{
debug("getLincolnAfterInjectedKeySuccess():");
shouldBeEqualToString("event.target.result.name", "Lincoln");
shouldBeEqualToString("event.target.result.number", "7012");
shouldBe("event.target.result.id", "4");
window.store = evalAndLog("store = trans.objectStore('StoreWithAutoIncrement')");
debug("Insert into object store with key gen using explicit key");
request = evalAndLog("store.add({name: 'Lincoln', number: '7012'}, 5)");
request.onsuccess = addLincolnWithExplicitKeySuccess;
request.onerror = unexpectedErrorCallback;
}
function addLincolnWithExplicitKeySuccess()
{
debug("addLincolnWithExplicitKeySuccess():");
shouldBe("event.target.result", "5");
request = evalAndLog("store.get(5)");
request.onsuccess = getLincolnSuccess;
request.onerror = unexpectedErrorCallback;
}
function getLincolnSuccess()
{
debug("getLincolnSuccess():");
shouldBeEqualToString("event.target.result.name", "Lincoln");
shouldBeEqualToString("event.target.result.number", "7012");
request = evalAndLog("store.put({name: 'Abraham', number: '2107'})");
request.onsuccess = putAbrahamSuccess;
request.onerror = unexpectedErrorCallback;
}
function putAbrahamSuccess()
{
debug("putAbrahamSuccess():");
shouldBe("event.target.result", "6");
request = evalAndLog("store.get(6)");
request.onsuccess = getAbrahamSuccess;
request.onerror = unexpectedErrorCallback;
}
function getAbrahamSuccess()
{
debug("getAbrahamSuccess():");
shouldBeEqualToString("event.target.result.name", "Abraham");
shouldBeEqualToString("event.target.result.number", "2107");
window.store = evalAndLog("store = trans.objectStore('PlainOldStore')");
debug("Try adding with no key to object store without auto increment.");
request = evalAndLog("store.add({name: 'Adam'})");
request.onsuccess = unexpectedSuccessCallback;
request.onerror = addAdamError;
}
function addAdamError()
{
debug("addAdamError():");
shouldBe("event.target.errorCode", "webkitIDBDatabaseException.DATA_ERR");
evalAndLog("event.preventDefault()");
request = evalAndLog("store.add({name: 'Adam'}, 1)");
request.onsuccess = addAdamSuccess;
request.onerror = unexpectedErrorCallback;
}
function addAdamSuccess()
{
debug("addAdamSuccess():");
shouldBe("event.target.result", "1");
}
test();
var successfullyParsed = true;
</script>
</body>
</html>