1<html> 2<head> 3<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"> 4<script src="../../fast/js/resources/js-test-pre.js"></script> 5<script src="../../fast/js/resources/js-test-post-function.js"></script> 6<script src="resources/shared.js"></script> 7</head> 8<body> 9<p id="description"></p> 10<div id="console"></div> 11<script> 12 13description("Test IndexedDB transaction basics."); 14if (window.layoutTestController) 15 layoutTestController.waitUntilDone(); 16 17function test() 18{ 19 shouldBeTrue("'webkitIndexedDB' in window"); 20 shouldBeFalse("webkitIndexedDB == null"); 21 22 request = evalAndLog("webkitIndexedDB.open('transaction-basics')"); 23 request.onsuccess = openSuccess; 24 request.onerror = unexpectedErrorCallback; 25} 26 27function openSuccess() 28{ 29 debug("openSuccess():"); 30 window.db = evalAndLog("db = event.target.result"); 31 request = evalAndLog("request = db.setVersion('version 1')"); 32 request.onsuccess = cleanDatabase; 33 request.onerror = unexpectedErrorCallback; 34} 35 36function cleanDatabase() 37{ 38 deleteAllObjectStores(db, checkMetadataEmpty); 39 commitAndContinue(testSetVersionAbort1); 40} 41 42function testSetVersionAbort1() 43{ 44 checkMetadataEmpty(); 45 request = evalAndLog("request = startSetVersion('version fail')"); 46 request.onsuccess = addRemoveIDBObjects; 47} 48 49function addRemoveIDBObjects() 50{ 51 debug("addRemoveIDBObjects():"); 52 var trans = evalAndLog("trans = event.target.result"); 53 shouldBeTrue("trans !== null"); 54 trans.addEventListener('abort', testSetVersionAbort2, true); 55 trans.oncomplete = unexpectedCompleteCallback; 56 57 var store = evalAndLog("store = db.createObjectStore('storeFail', null)"); 58 var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)"); 59 60 evalAndLog("db.deleteObjectStore('storeFail')"); 61 evalAndLog("store.deleteIndex('indexFail')"); 62 63 trans.abort(); 64} 65 66function testSetVersionAbort2() 67{ 68 checkMetadataEmpty(); 69 request = evalAndLog("request = startSetVersion('version fail')"); 70 request.onsuccess = addRemoveAddIDBObjects; 71} 72 73function addRemoveAddIDBObjects() 74{ 75 debug("addRemoveAddIDBObjects():"); 76 var trans = evalAndLog("trans = event.target.result"); 77 shouldBeTrue("trans !== null"); 78 trans.addEventListener('abort', testSetVersionAbort3, false); 79 trans.oncomplete = unexpectedCompleteCallback; 80 81 var store = evalAndLog("store = db.createObjectStore('storeFail', null)"); 82 var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)"); 83 84 evalAndLog("db.deleteObjectStore('storeFail')"); 85 evalAndLog("store.deleteIndex('indexFail')"); 86 87 var store = evalAndLog("store = db.createObjectStore('storeFail', null)"); 88 var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)"); 89 90 trans.abort(); 91} 92 93function testSetVersionAbort3() 94{ 95 shouldBeFalse("event.cancelable"); 96 checkMetadataEmpty(); 97 request = evalAndLog("request = startSetVersion('version fail')"); 98 request.onsuccess = addIDBObjects; 99} 100 101function addIDBObjects() 102{ 103 shouldBeFalse("event.cancelable"); 104 debug("addIDBObjects():"); 105 var trans = evalAndLog("trans = event.target.result"); 106 shouldBeTrue("trans !== null"); 107 trans.onabort = testSetVersionAbort4; 108 trans.oncomplete = unexpectedCompleteCallback; 109 110 var store = evalAndLog("store = db.createObjectStore('storeFail', null)"); 111 var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)"); 112 113 trans.abort(); 114} 115 116function testSetVersionAbort4() 117{ 118 checkMetadataEmpty(); 119 request = evalAndLog("request = startSetVersion('version fail')"); 120 request.onsuccess = addIDBObjectsAndCommit; 121} 122 123function addIDBObjects() 124{ 125 debug("addIDBObjects():"); 126 var trans = evalAndLog("trans = event.target.result"); 127 shouldBeTrue("trans !== null"); 128 trans.onabort = unexpectedAbortCallback; 129 130 var store = evalAndLog("store = db.createObjectStore('storeFail', null)"); 131 var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)"); 132 133 commitAndContinue(testSetVersionAbort5); 134} 135 136function commitAndContinue(continueFunction) 137{ 138 window.setTimeout(continueFunction, 0); 139} 140 141function testSetVersionAbort5() 142{ 143 checkMetadataExistingObjectStore(); 144 request = evalAndLog("request = startSetVersion('version fail')"); 145 request.onsuccess = removeIDBObjects; 146} 147 148function removeIDBObjects() 149{ 150 debug("removeIDBObjects():"); 151 var trans = evalAndLog("trans = event.target.result"); 152 shouldBeTrue("trans !== null"); 153 trans.onabort = testSetVersionAbort6; 154 trans.oncomplete = unexpectedCompleteCallback; 155 156 var store = evalAndLog("store = trans.objectStore('storeFail')"); 157 evalAndLog("store.deleteIndex('indexFail')"); 158 evalAndLog("db.deleteObjectStore('storeFail')"); 159 160 trans.abort(); 161} 162 163function testSetVersionAbort6() 164{ 165 checkMetadataExistingObjectStore(); 166 setNewVersion(); 167} 168 169function startSetVersion(versionName) 170{ 171 request = db.setVersion(versionName); 172 request.onerror = unexpectedErrorCallback; 173 return request; 174} 175 176function checkMetadataEmpty() 177{ 178 shouldBe("window.db.objectStoreNames", "[]"); 179 shouldBe("window.db.objectStoreNames.length", "0"); 180 shouldBe("window.db.objectStoreNames.contains('storeFail')", "false"); 181} 182 183function checkMetadataExistingObjectStore() 184{ 185 shouldBe("db.objectStoreNames", "['storeFail']"); 186 shouldBe("db.objectStoreNames.length", "1"); 187 shouldBe("db.objectStoreNames.contains('storeFail')", "true"); 188} 189 190function setNewVersion() 191{ 192 request = evalAndLog("db.setVersion('new version')"); 193 request.onsuccess = setVersionSuccess; 194 request.onerror = unexpectedErrorCallback; 195} 196 197function setVersionSuccess() 198{ 199 debug("setVersionSuccess():"); 200 window.trans = evalAndLog("trans = event.target.result"); 201 shouldBeTrue("trans !== null"); 202 trans.onabort = unexpectedAbortCallback; 203 trans.addEventListener('complete', completeCallback, false); 204 window.completeEventFired = false; 205 206 deleteAllObjectStores(db); 207 208 evalAndLog("db.createObjectStore('storeName', null)"); 209 transaction = evalAndLog("db.transaction({mode: webkitIDBTransaction.READ_WRITE})"); 210 transaction.onabort = abortCallback; 211 var store = evalAndLog("store = transaction.objectStore('storeName')"); 212 shouldBeEqualToString("store.name", "storeName"); 213} 214 215function completeCallback() 216{ 217 shouldBeFalse("event.cancelable"); 218 testPassed("complete event fired"); 219 window.completeEventFired = true; 220} 221 222function abortCallback() 223{ 224 testPassed("complete event fired"); 225 checkForCompleteEvent(); 226} 227 228function checkForCompleteEvent() 229{ 230 if (completeEventFired) { 231 testPassed("oncomplete event had fired"); 232 done(); 233 } else 234 setTimeout(checkForCompleteEvent, 1); 235} 236 237var successfullyParsed = true; 238 239test(); 240 241</script> 242</body> 243</html> 244