<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 transaction basics."); | |
if (window.layoutTestController) | |
layoutTestController.waitUntilDone(); | |
function test() | |
{ | |
shouldBeTrue("'webkitIndexedDB' in window"); | |
shouldBeFalse("webkitIndexedDB == null"); | |
request = evalAndLog("webkitIndexedDB.open('transaction-basics')"); | |
request.onsuccess = openSuccess; | |
request.onerror = unexpectedErrorCallback; | |
} | |
function openSuccess() | |
{ | |
debug("openSuccess():"); | |
window.db = evalAndLog("db = event.target.result"); | |
request = evalAndLog("request = db.setVersion('version 1')"); | |
request.onsuccess = cleanDatabase; | |
request.onerror = unexpectedErrorCallback; | |
} | |
function cleanDatabase() | |
{ | |
deleteAllObjectStores(db, checkMetadataEmpty); | |
commitAndContinue(testSetVersionAbort1); | |
} | |
function testSetVersionAbort1() | |
{ | |
checkMetadataEmpty(); | |
request = evalAndLog("request = startSetVersion('version fail')"); | |
request.onsuccess = addRemoveIDBObjects; | |
} | |
function addRemoveIDBObjects() | |
{ | |
debug("addRemoveIDBObjects():"); | |
var trans = evalAndLog("trans = event.target.result"); | |
shouldBeTrue("trans !== null"); | |
trans.addEventListener('abort', testSetVersionAbort2, true); | |
trans.oncomplete = unexpectedCompleteCallback; | |
var store = evalAndLog("store = db.createObjectStore('storeFail', null)"); | |
var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)"); | |
evalAndLog("db.deleteObjectStore('storeFail')"); | |
evalAndLog("store.deleteIndex('indexFail')"); | |
trans.abort(); | |
} | |
function testSetVersionAbort2() | |
{ | |
checkMetadataEmpty(); | |
request = evalAndLog("request = startSetVersion('version fail')"); | |
request.onsuccess = addRemoveAddIDBObjects; | |
} | |
function addRemoveAddIDBObjects() | |
{ | |
debug("addRemoveAddIDBObjects():"); | |
var trans = evalAndLog("trans = event.target.result"); | |
shouldBeTrue("trans !== null"); | |
trans.addEventListener('abort', testSetVersionAbort3, false); | |
trans.oncomplete = unexpectedCompleteCallback; | |
var store = evalAndLog("store = db.createObjectStore('storeFail', null)"); | |
var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)"); | |
evalAndLog("db.deleteObjectStore('storeFail')"); | |
evalAndLog("store.deleteIndex('indexFail')"); | |
var store = evalAndLog("store = db.createObjectStore('storeFail', null)"); | |
var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)"); | |
trans.abort(); | |
} | |
function testSetVersionAbort3() | |
{ | |
shouldBeFalse("event.cancelable"); | |
checkMetadataEmpty(); | |
request = evalAndLog("request = startSetVersion('version fail')"); | |
request.onsuccess = addIDBObjects; | |
} | |
function addIDBObjects() | |
{ | |
shouldBeFalse("event.cancelable"); | |
debug("addIDBObjects():"); | |
var trans = evalAndLog("trans = event.target.result"); | |
shouldBeTrue("trans !== null"); | |
trans.onabort = testSetVersionAbort4; | |
trans.oncomplete = unexpectedCompleteCallback; | |
var store = evalAndLog("store = db.createObjectStore('storeFail', null)"); | |
var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)"); | |
trans.abort(); | |
} | |
function testSetVersionAbort4() | |
{ | |
checkMetadataEmpty(); | |
request = evalAndLog("request = startSetVersion('version fail')"); | |
request.onsuccess = addIDBObjectsAndCommit; | |
} | |
function addIDBObjects() | |
{ | |
debug("addIDBObjects():"); | |
var trans = evalAndLog("trans = event.target.result"); | |
shouldBeTrue("trans !== null"); | |
trans.onabort = unexpectedAbortCallback; | |
var store = evalAndLog("store = db.createObjectStore('storeFail', null)"); | |
var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)"); | |
commitAndContinue(testSetVersionAbort5); | |
} | |
function commitAndContinue(continueFunction) | |
{ | |
window.setTimeout(continueFunction, 0); | |
} | |
function testSetVersionAbort5() | |
{ | |
checkMetadataExistingObjectStore(); | |
request = evalAndLog("request = startSetVersion('version fail')"); | |
request.onsuccess = removeIDBObjects; | |
} | |
function removeIDBObjects() | |
{ | |
debug("removeIDBObjects():"); | |
var trans = evalAndLog("trans = event.target.result"); | |
shouldBeTrue("trans !== null"); | |
trans.onabort = testSetVersionAbort6; | |
trans.oncomplete = unexpectedCompleteCallback; | |
var store = evalAndLog("store = trans.objectStore('storeFail')"); | |
evalAndLog("store.deleteIndex('indexFail')"); | |
evalAndLog("db.deleteObjectStore('storeFail')"); | |
trans.abort(); | |
} | |
function testSetVersionAbort6() | |
{ | |
checkMetadataExistingObjectStore(); | |
setNewVersion(); | |
} | |
function startSetVersion(versionName) | |
{ | |
request = db.setVersion(versionName); | |
request.onerror = unexpectedErrorCallback; | |
return request; | |
} | |
function checkMetadataEmpty() | |
{ | |
shouldBe("window.db.objectStoreNames", "[]"); | |
shouldBe("window.db.objectStoreNames.length", "0"); | |
shouldBe("window.db.objectStoreNames.contains('storeFail')", "false"); | |
} | |
function checkMetadataExistingObjectStore() | |
{ | |
shouldBe("db.objectStoreNames", "['storeFail']"); | |
shouldBe("db.objectStoreNames.length", "1"); | |
shouldBe("db.objectStoreNames.contains('storeFail')", "true"); | |
} | |
function setNewVersion() | |
{ | |
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.addEventListener('complete', completeCallback, false); | |
window.completeEventFired = false; | |
deleteAllObjectStores(db); | |
evalAndLog("db.createObjectStore('storeName', null)"); | |
transaction = evalAndLog("db.transaction({mode: webkitIDBTransaction.READ_WRITE})"); | |
transaction.onabort = abortCallback; | |
var store = evalAndLog("store = transaction.objectStore('storeName')"); | |
shouldBeEqualToString("store.name", "storeName"); | |
} | |
function completeCallback() | |
{ | |
shouldBeFalse("event.cancelable"); | |
testPassed("complete event fired"); | |
window.completeEventFired = true; | |
} | |
function abortCallback() | |
{ | |
testPassed("complete event fired"); | |
checkForCompleteEvent(); | |
} | |
function checkForCompleteEvent() | |
{ | |
if (completeEventFired) { | |
testPassed("oncomplete event had fired"); | |
done(); | |
} else | |
setTimeout(checkForCompleteEvent, 1); | |
} | |
var successfullyParsed = true; | |
test(); | |
</script> | |
</body> | |
</html> |