tizen beta release
[framework/web/webkit-efl.git] / LayoutTests / storage / indexeddb / mozilla / cursors.html
1 <!DOCTYPE html>
2 <!--
3   original test: http://mxr.mozilla.org/mozilla2.0/source/dom/indexedDB/test/test_cursors.html?force=1
4   license of original test:
5     " Any copyright is dedicated to the Public Domain.
6       http://creativecommons.org/publicdomain/zero/1.0/ "
7 -->
8 <html>
9 <head>
10 <script src="../../../fast/js/resources/js-test-pre.js"></script>
11 <script src="../resources/shared.js"></script>
12 </head>
13 <body>
14 <p id="description"></p>
15 <div id="console"></div>
16 <script>
17
18 description("Test IndexedDB cursor behavior");
19 if (window.layoutTestController)
20     layoutTestController.waitUntilDone();
21
22 function test()
23 {
24     indexedDB = evalAndLog("indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;");
25     shouldBeFalse("indexedDB == null");
26     IDBDatabaseException = evalAndLog("IDBDatabaseException = window.IDBDatabaseException || window.webkitIDBDatabaseException;");
27     shouldBeFalse("IDBDatabaseException == null");
28     IDBCursor = evalAndLog("IDBCursor = window.IDBCursor || window.webkitIDBCursor;");
29     shouldBeFalse("IDBCursor == null");
30     IDBKeyRange = evalAndLog("IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;");
31     shouldBeFalse("IDBKeyRange == null");
32
33     name = window.location.pathname;
34     description = "My Test Database";
35     request = evalAndLog("indexedDB.open(name, description)");
36     request.onsuccess = openSuccess;
37     request.onerror = unexpectedErrorCallback;
38 }
39
40 function openSuccess()
41 {
42     db = evalAndLog("db = event.target.result");
43
44     request = evalAndLog("request = db.setVersion('1')");
45     request.onsuccess = testGroup1;
46     request.onerror = unexpectedErrorCallback;
47 }
48
49 function testGroup1()
50 {
51     deleteAllObjectStores(db);
52
53     objectStore = evalAndLog("db.createObjectStore('autoIncrement', { autoIncrement: true });");
54
55     request = evalAndLog("request = objectStore.openCursor();");
56     request.onerror = unexpectedErrorCallback;
57     request.onsuccess = function (event) {
58       shouldBe("event.target.result", "null");
59       testGroup2();
60     }
61 }
62
63 function testGroup2()
64 {
65     objectStore = evalAndLog("db.createObjectStore('autoIncrementKeyPath', { keyPath: 'foo', autoIncrement: true });");
66
67     request = evalAndLog("request = objectStore.openCursor();");
68     request.onerror = unexpectedErrorCallback;
69     request.onsuccess = function (event) {
70       shouldBe("event.target.result", "null");
71       testGroup3();
72     }
73 }
74
75 function testGroup3()
76 {
77     objectStore = evalAndLog("db.createObjectStore('keyPath', { keyPath: 'foo' });");
78
79     request = evalAndLog("request = objectStore.openCursor();");
80     request.onerror = unexpectedErrorCallback;
81     request.onsuccess = function (event) {
82       shouldBe("event.target.result", "null");
83       testGroup4();
84     }
85 }
86
87 function testGroup4()
88 {
89     objectStore = evalAndLog("db.createObjectStore('foo');");
90
91     request = evalAndLog("request = objectStore.openCursor();");
92     request.onerror = unexpectedErrorCallback;
93     request.onsuccess = function (event) {
94       shouldBe("event.target.result", "null");
95       testGroup5();
96     }
97 }
98
99 function testGroup5()
100 {
101     keys = evalAndLog("keys = [1, -1, 0, 10, 2000, 'q', 'z', 'two', 'b', 'a'];");
102     sortedKeys = evalAndLog("sortedKeys = [-1, 0, 1, 10, 2000, 'a', 'b', 'q', 'two', 'z'];");
103
104     keyIndex = evalAndLog("keyIndex = 0;");
105
106     for (i in keys) {
107       request = evalAndLog("request = objectStore.add('foo', keys[i]);");
108       request.onerror = unexpectedErrorCallback;
109       request.onsuccess = function(event) {
110         if (++keyIndex == keys.length) {
111           testGroup6();
112         }
113       };
114     }
115 }
116
117 function testGroup6()
118 {
119     keyIndex = 0;
120
121     request = evalAndLog("request = objectStore.openCursor();");
122     request.onerror = unexpectedErrorCallback;
123     request.onsuccess = function (event) {
124       cursor = evalAndLog("cursor = event.target.result;");
125       if (cursor) {
126         shouldBe("cursor.key", "sortedKeys[keyIndex]");
127         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
128         shouldBe("cursor.value", "'foo'");
129
130         evalAndLog("cursor.continue();");
131         evalAndExpectException("cursor.continue();", "IDBDatabaseException.NOT_ALLOWED_ERR");
132
133         shouldBe("cursor.key", "sortedKeys[keyIndex]");
134         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
135         shouldBe("cursor.value", "'foo'");
136
137         evalAndLog("keyIndex++;");
138       }
139       else {
140         shouldBe("keyIndex", "keys.length");
141         testGroup7();
142       }
143     }
144 }
145
146 function testGroup7()
147 {
148     keyIndex = evalAndLog("keyIndex = 4;");
149
150     range = evalAndLog("range = IDBKeyRange.bound(2000, 'q');");
151     request = evalAndLog("request = objectStore.openCursor(range);");
152     request.onerror = unexpectedErrorCallback;
153     request.onsuccess = function (event) {
154       cursor = evalAndLog("cursor = event.target.result;");
155       if (cursor) {
156         shouldBe("cursor.key", "sortedKeys[keyIndex]");
157         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
158         shouldBe("cursor.value", "'foo'");
159
160         evalAndLog("cursor.continue();");
161
162         shouldBe("cursor.key", "sortedKeys[keyIndex]");
163         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
164         shouldBe("cursor.value", "'foo'");
165
166         evalAndLog("keyIndex++;");
167       }
168       else {
169         shouldBe("keyIndex", "8");
170         testGroup8();
171       }
172     }
173 }
174
175 function testGroup8()
176 {
177     keyIndex = 0;
178
179     request = evalAndLog("request = objectStore.openCursor();");
180     request.onerror = unexpectedErrorCallback;
181     request.onsuccess = function (event) {
182       cursor = evalAndLog("cursor = event.target.result;");
183       if (cursor) {
184         shouldBe("cursor.key", "sortedKeys[keyIndex]");
185         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
186         shouldBe("cursor.value", "'foo'");
187
188         if (keyIndex) {
189           evalAndLog("cursor.continue();");
190         }
191         else {
192           evalAndLog("cursor.continue('b');");
193         }
194
195         shouldBe("cursor.key", "sortedKeys[keyIndex]");
196         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
197         shouldBe("cursor.value", "'foo'");
198
199         evalAndLog("keyIndex += keyIndex ? 1: 6;");
200       }
201       else {
202         shouldBe("keyIndex", "keys.length");
203         testGroup9();
204       }
205     }
206 }
207
208 function testGroup9()
209 {
210     keyIndex = evalAndLog("keyIndex = 0;");
211
212     request = evalAndLog("request = objectStore.openCursor();");
213     request.onerror = unexpectedErrorCallback;
214     request.onsuccess = function (event) {
215       cursor = evalAndLog("cursor = event.target.result;");
216       if (cursor) {
217         shouldBe("cursor.key", "sortedKeys[keyIndex]");
218         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
219         shouldBe("cursor.value", "'foo'");
220
221         if (keyIndex) {
222           evalAndLog("cursor.continue();");
223         }
224         else {
225           evalAndLog("cursor.continue(10);");
226         }
227
228         shouldBe("cursor.key", "sortedKeys[keyIndex]");
229         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
230         shouldBe("cursor.value", "'foo'");
231
232         evalAndLog("keyIndex += keyIndex ? 1: 3;");
233       }
234       else {
235         shouldBe("keyIndex", "keys.length");
236         testGroup10();
237       }
238     }
239 }
240
241 function testGroup10()
242 {
243     keyIndex = evalAndLog("keyIndex = 0;");
244
245     request = evalAndLog("request = objectStore.openCursor();");
246     request.onerror = unexpectedErrorCallback;
247     request.onsuccess = function (event) {
248       cursor = evalAndLog("cursor = event.target.result;");
249       if (cursor) {
250         shouldBe("cursor.key", "sortedKeys[keyIndex]");
251         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
252         shouldBe("cursor.value", "'foo'");
253
254         if (keyIndex) {
255           evalAndLog("cursor.continue();");
256         }
257         else {
258           evalAndLog("cursor.continue('c');");
259         }
260
261         shouldBe("cursor.key", "sortedKeys[keyIndex]");
262         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
263         shouldBe("cursor.value", "'foo'");
264
265         evalAndLog("keyIndex += keyIndex ? 1 : 7;");
266       }
267       else {
268         shouldBe("keyIndex", "keys.length");
269         testGroup11();
270       }
271     }
272 }
273
274 function testGroup11()
275 {
276     keyIndex = evalAndLog("keyIndex = 0;");
277
278     request = evalAndLog("request = objectStore.openCursor();");
279     request.onerror = unexpectedErrorCallback;
280     request.onsuccess = function (event) {
281       cursor = evalAndLog("cursor = event.target.result;");
282       if (cursor) {
283         shouldBe("cursor.key", "sortedKeys[keyIndex]");
284         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
285         shouldBe("cursor.value", "'foo'");
286
287         if (keyIndex == 4) {
288           request = evalAndLog("request = cursor.update('bar');");
289           request.onerror = unexpectedErrorCallback;
290           request.onsuccess = function(event) {
291             evalAndLog("keyIndex++;");
292             evalAndLog("cursor.continue();");
293           };
294         }
295         else {
296           evalAndLog("keyIndex++;");
297           evalAndLog("cursor.continue();");
298         }
299       }
300       else {
301         shouldBe("keyIndex", "keys.length");
302         testGroup12();
303       }
304     }
305 }
306
307 function testGroup12()
308 {
309     request = evalAndLog("request = objectStore.get(sortedKeys[4]);");
310     request.onerror = unexpectedErrorCallback;
311     request.onsuccess = testGroup12b;
312 }
313
314 function testGroup12b()
315 {
316     shouldBe("event.target.result", "'bar'");
317
318     request = evalAndLog("request = objectStore.put('foo', sortedKeys[4]);");
319     request.onerror = unexpectedErrorCallback;
320     request.onsuccess = testGroup13;
321 }
322
323 function testGroup13()
324 {
325     keyIndex = evalAndLog("keyIndex = 0;");
326
327     gotRemoveEvent = false;
328     retval = false;
329
330     request = evalAndLog("request = objectStore.openCursor(null, IDBCursor.NEXT);");
331     request.onerror = unexpectedErrorCallback;
332     request.onsuccess = function (event) {
333       cursor = evalAndLog("cursor = event.target.result;");
334       if (cursor) {
335         shouldBe("cursor.key", "sortedKeys[keyIndex]");
336         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
337         shouldBe("cursor.value", "'foo'");
338
339         if (keyIndex == 4) {
340           request = evalAndLog("request = cursor.delete();");
341           request.onerror = unexpectedErrorCallback;
342           request.onsuccess = function(event) {
343             shouldBe("keyIndex", "5");
344             gotRemoveEvent = evalAndLog("gotRemoveEvent = true;");
345           };
346         }
347
348         evalAndLog("keyIndex++;");
349         evalAndLog("cursor.continue();");
350       }
351       else {
352         shouldBe("keyIndex", "keys.length");
353         shouldBe("gotRemoveEvent", "true");
354         testGroup14();
355       }
356     }
357 }
358
359 function testGroup14()
360 {
361     request = evalAndLog("request = objectStore.get(sortedKeys[4]);");
362     request.onerror = unexpectedErrorCallback;
363     request.onsuccess = testGroup14b;
364 }
365
366 function testGroup14b()
367 {
368     shouldBe("event.target.result", "undefined");
369
370     request = evalAndLog("request = objectStore.add('foo', sortedKeys[4]);");
371     request.onerror = unexpectedErrorCallback;
372     request.onsuccess = testGroup15;
373 }
374
375 function testGroup15()
376 {
377     keyIndex = sortedKeys.length - 1;
378
379     request = evalAndLog("request = objectStore.openCursor(null, IDBCursor.PREV);");
380     request.onerror = unexpectedErrorCallback;
381     request.onsuccess = function (event) {
382       cursor = evalAndLog("cursor = event.target.result;");
383       if (cursor) {
384         shouldBe("cursor.key", "sortedKeys[keyIndex]");
385         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
386         shouldBe("cursor.value", "'foo'");
387
388         evalAndLog("cursor.continue();");
389
390         shouldBe("cursor.key", "sortedKeys[keyIndex]");
391         shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
392         shouldBe("cursor.value", "'foo'");
393
394         evalAndLog("keyIndex--;");
395       }
396       else {
397         shouldBe("keyIndex", "-1");
398         done();
399       }
400     }
401 }
402
403
404 test();
405
406 </script>
407 </body>
408 </html>
409