• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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