blob: e1f0b72ad5c3b8a450260e5ba3b0399898f21f87 [file] [log] [blame]
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +00001<html>
2<head>
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +00003<script src="../../fast/js/resources/js-test-pre.js"></script>
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +00004<script src="resources/shared.js"></script>
5</head>
6<body>
7<p id="description"></p>
8<div id="console"></div>
9<script>
10
11description("Test IndexedDB transaction basics.");
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +000012
13function test()
14{
15 shouldBeTrue("'webkitIndexedDB' in window");
16 shouldBeFalse("webkitIndexedDB == null");
17
hans@chromium.org14574ca2011-02-23 18:34:53 +000018 request = evalAndLog("webkitIndexedDB.open('transaction-basics')");
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +000019 request.onsuccess = openSuccess;
20 request.onerror = unexpectedErrorCallback;
andreip@google.com1b2e4712010-10-06 22:52:22 +000021}
22
23function openSuccess()
24{
25 debug("openSuccess():");
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +000026 window.db = evalAndLog("db = event.target.result");
27 request = evalAndLog("request = db.setVersion('version 1')");
28 request.onsuccess = cleanDatabase;
29 request.onerror = unexpectedErrorCallback;
andreip@google.com1b2e4712010-10-06 22:52:22 +000030}
31
32function cleanDatabase()
33{
andreip@google.com1b2e4712010-10-06 22:52:22 +000034 deleteAllObjectStores(db, checkMetadataEmpty);
dgrogan@chromium.orga0508432011-11-30 09:07:29 +000035 event.target.result.oncomplete = testSetVersionAbort1;
andreip@google.com1b2e4712010-10-06 22:52:22 +000036}
37
38function testSetVersionAbort1()
39{
40 checkMetadataEmpty();
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +000041 request = evalAndLog("request = startSetVersion('version fail')");
42 request.onsuccess = addRemoveIDBObjects;
andreip@google.com1b2e4712010-10-06 22:52:22 +000043}
44
45function addRemoveIDBObjects()
46{
47 debug("addRemoveIDBObjects():");
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +000048 var trans = evalAndLog("trans = event.target.result");
andreip@google.com1b2e4712010-10-06 22:52:22 +000049 shouldBeTrue("trans !== null");
jorlow@chromium.org0bffcbf2011-02-09 02:14:11 +000050 trans.addEventListener('abort', testSetVersionAbort2, true);
andreip@google.com1b2e4712010-10-06 22:52:22 +000051 trans.oncomplete = unexpectedCompleteCallback;
52
53 var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
54 var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
55
andreip@google.com7e718832010-11-26 16:58:57 +000056 evalAndLog("db.deleteObjectStore('storeFail')");
57 evalAndLog("store.deleteIndex('indexFail')");
andreip@google.com1b2e4712010-10-06 22:52:22 +000058
59 trans.abort();
60}
61
62function testSetVersionAbort2()
63{
dgrogan@chromium.orga0508432011-11-30 09:07:29 +000064 debug("");
65 debug("testSetVersionAbort2():");
andreip@google.com1b2e4712010-10-06 22:52:22 +000066 checkMetadataEmpty();
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +000067 request = evalAndLog("request = startSetVersion('version fail')");
68 request.onsuccess = addRemoveAddIDBObjects;
andreip@google.com1b2e4712010-10-06 22:52:22 +000069}
70
71function addRemoveAddIDBObjects()
72{
73 debug("addRemoveAddIDBObjects():");
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +000074 var trans = evalAndLog("trans = event.target.result");
andreip@google.com1b2e4712010-10-06 22:52:22 +000075 shouldBeTrue("trans !== null");
jorlow@chromium.org0bffcbf2011-02-09 02:14:11 +000076 trans.addEventListener('abort', testSetVersionAbort3, false);
andreip@google.com1b2e4712010-10-06 22:52:22 +000077 trans.oncomplete = unexpectedCompleteCallback;
78
79 var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
80 var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
81
andreip@google.com7e718832010-11-26 16:58:57 +000082 evalAndLog("db.deleteObjectStore('storeFail')");
83 evalAndLog("store.deleteIndex('indexFail')");
andreip@google.com1b2e4712010-10-06 22:52:22 +000084
85 var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
86 var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
87
88 trans.abort();
89}
90
91function testSetVersionAbort3()
92{
dgrogan@chromium.orga0508432011-11-30 09:07:29 +000093 debug("");
94 debug("testSetVersionAbort3():");
jorlow@chromium.org6357cfc2011-03-01 20:37:25 +000095 shouldBeFalse("event.cancelable");
andreip@google.com1b2e4712010-10-06 22:52:22 +000096 checkMetadataEmpty();
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +000097 request = evalAndLog("request = startSetVersion('version fail')");
98 request.onsuccess = addIDBObjects;
andreip@google.com1b2e4712010-10-06 22:52:22 +000099}
100
101function addIDBObjects()
102{
103 debug("addIDBObjects():");
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000104 shouldBeFalse("event.cancelable");
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +0000105 var trans = evalAndLog("trans = event.target.result");
andreip@google.com1b2e4712010-10-06 22:52:22 +0000106 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{
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000118 debug("");
119 debug("testSetVersionAbort4():");
andreip@google.com1b2e4712010-10-06 22:52:22 +0000120 checkMetadataEmpty();
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +0000121 request = evalAndLog("request = startSetVersion('version fail')");
122 request.onsuccess = addIDBObjectsAndCommit;
andreip@google.com1b2e4712010-10-06 22:52:22 +0000123}
124
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000125function addIDBObjectsAndCommit()
andreip@google.com1b2e4712010-10-06 22:52:22 +0000126{
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000127 debug("addIDBObjectsAndCommit():");
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +0000128 var trans = evalAndLog("trans = event.target.result");
andreip@google.com1b2e4712010-10-06 22:52:22 +0000129 shouldBeTrue("trans !== null");
130 trans.onabort = unexpectedAbortCallback;
131
132 var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
133 var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
134
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000135 trans.oncomplete = testSetVersionAbort5;
andreip@google.com1b2e4712010-10-06 22:52:22 +0000136}
137
138function testSetVersionAbort5()
139{
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000140 debug("");
141 debug("testSetVersionAbort5():");
andreip@google.com1b2e4712010-10-06 22:52:22 +0000142 checkMetadataExistingObjectStore();
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +0000143 request = evalAndLog("request = startSetVersion('version fail')");
144 request.onsuccess = removeIDBObjects;
andreip@google.com1b2e4712010-10-06 22:52:22 +0000145}
146
147function removeIDBObjects()
148{
149 debug("removeIDBObjects():");
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +0000150 var trans = evalAndLog("trans = event.target.result");
andreip@google.com1b2e4712010-10-06 22:52:22 +0000151 shouldBeTrue("trans !== null");
152 trans.onabort = testSetVersionAbort6;
153 trans.oncomplete = unexpectedCompleteCallback;
154
155 var store = evalAndLog("store = trans.objectStore('storeFail')");
andreip@google.com7e718832010-11-26 16:58:57 +0000156 evalAndLog("store.deleteIndex('indexFail')");
157 evalAndLog("db.deleteObjectStore('storeFail')");
andreip@google.com1b2e4712010-10-06 22:52:22 +0000158
159 trans.abort();
160}
161
162function testSetVersionAbort6()
163{
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000164 debug("");
165 debug("testSetVersionAbort6():");
andreip@google.com1b2e4712010-10-06 22:52:22 +0000166 checkMetadataExistingObjectStore();
167 setNewVersion();
168}
169
170function startSetVersion(versionName)
171{
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +0000172 request = db.setVersion(versionName);
173 request.onerror = unexpectedErrorCallback;
174 return request;
andreip@google.com1b2e4712010-10-06 22:52:22 +0000175}
176
177function checkMetadataEmpty()
178{
hans@chromium.orgdccbdc62010-11-26 11:03:59 +0000179 shouldBe("window.db.objectStoreNames", "[]");
180 shouldBe("window.db.objectStoreNames.length", "0");
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +0000181 shouldBe("window.db.objectStoreNames.contains('storeFail')", "false");
andreip@google.com1b2e4712010-10-06 22:52:22 +0000182}
183
184function checkMetadataExistingObjectStore()
185{
hans@chromium.orgdccbdc62010-11-26 11:03:59 +0000186 shouldBe("db.objectStoreNames", "['storeFail']");
187 shouldBe("db.objectStoreNames.length", "1");
188 shouldBe("db.objectStoreNames.contains('storeFail')", "true");
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +0000189}
190
191function setNewVersion()
192{
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +0000193 request = evalAndLog("db.setVersion('new version')");
194 request.onsuccess = setVersionSuccess;
195 request.onerror = unexpectedErrorCallback;
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +0000196}
197
198function setVersionSuccess()
199{
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000200 debug("");
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +0000201 debug("setVersionSuccess():");
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +0000202 window.trans = evalAndLog("trans = event.target.result");
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +0000203 shouldBeTrue("trans !== null");
204 trans.onabort = unexpectedAbortCallback;
jorlow@chromium.org0bffcbf2011-02-09 02:14:11 +0000205 trans.addEventListener('complete', completeCallback, false);
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +0000206 window.completeEventFired = false;
207
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +0000208 deleteAllObjectStores(db);
andreip@google.com85ba10d2010-10-05 17:10:39 +0000209
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +0000210 evalAndLog("db.createObjectStore('storeName', null)");
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +0000211}
212
213function completeCallback()
214{
jorlow@chromium.org6357cfc2011-03-01 20:37:25 +0000215 shouldBeFalse("event.cancelable");
jorlow@chromium.orgaddb46f2011-02-15 01:18:57 +0000216 testPassed("complete event fired");
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000217 transaction = evalAndLog("db.transaction(['storeName'])");
218 transaction.onabort = abortCallback;
219 var store = evalAndLog("store = transaction.objectStore('storeName')");
220 shouldBeEqualToString("store.name", "storeName");
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +0000221}
222
223function abortCallback()
224{
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000225 testPassed("abort event fired");
commit-queue@webkit.org99c35222011-12-16 04:23:15 +0000226 testDOMStringList();
227}
228
229function testDOMStringList()
230{
231 debug("");
232 debug("Verifying DOMStringList works as argument for IDBDatabase.transaction()");
233 debug("db.objectStoreNames is " + db.objectStoreNames);
234 debug("... which contains: " + JSON.stringify(Array.prototype.slice.call(db.objectStoreNames)));
235 evalAndLog("transaction = db.transaction(db.objectStoreNames)");
236 testPassed("no exception thrown");
237 for (var i = 0; i < db.objectStoreNames.length; ++i) {
238 shouldBeTrue("transaction.objectStore(" + JSON.stringify(db.objectStoreNames[i]) + ") != null");
239 }
240 testPassed("all stores present in transaction");
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000241 finishJSTest();
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +0000242}
243
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000244var jsTestIsAsync = true;
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +0000245test();
246
247</script>
dgrogan@chromium.orga0508432011-11-30 09:07:29 +0000248<script src="../../fast/js/resources/js-test-post.js"></script>
jorlow@chromium.orgd189d2c2011-01-12 10:40:39 +0000249</body>
250</html>