Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / imported / web-platform-tests / IndexedDB / idbcursor_iterating.htm
1 <!DOCTYPE html>
2 <title>IDBCursor.continue() - objectstore - delete next element, and iterate to it</title>
3 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
4 <script src="../../../resources/testharness.js"></script>
5 <script src="../../../resources/testharnessreport.js"></script>
6 <script src="support.js"></script>
7
8 <script>
9     var db,
10       count = 0,
11       t = async_test(document.title, {timeout: 10000});
12
13     var open_rq = createdb(t);
14     open_rq.onupgradeneeded = function(e) {
15         db = e.target.result;
16         var objStore = db.createObjectStore("test", { keyPath: "key" });
17
18         for (var i = 0; i < 500; i++)
19             objStore.add({ key: i, val: "val_"+i });
20
21         var rq = objStore.add({ key: 500, val: "val_500" });
22
23         rq.onsuccess = t.step_func(function() {
24             for (var i = 999; i > 500; i--)
25                 objStore.add({ key: i, val: "val_"+i });
26         });
27
28         objStore.createIndex('index', ['key', 'val']);
29     };
30
31     open_rq.onsuccess = function(e) {
32         var cursor_rq = db.transaction("test", "readwrite")
33                           .objectStore("test")
34                           .openCursor();
35
36         cursor_rq.onsuccess = t.step_func(function(e) {
37             var cursor = e.target.result,
38               store = e.target.source;
39             if (!cursor) {
40                 assert_equals(count, 997, "cursor run count");
41
42                 var rq = e.target.source.count();
43                 rq.onsuccess = t.step_func(function(e) {
44                     assert_equals(e.target.result, 995, "object count");
45                     t.done();
46                 });
47                 return;
48             }
49
50             switch (cursor.key) {
51                 case 10:
52                     assert_equals(count, cursor.key, "count");
53                     store.delete(11);
54                     break;
55
56                 case 12:
57                 case 499:
58                 case 500:
59                 case 501:
60                     assert_equals(count, cursor.key - 1, "count");
61                     break;
62
63                 // Delete the next key
64                 case 510:
65                     store.delete(511);
66                     break;
67
68                 // Delete randomly
69                 case 512:
70                     store.delete(611);
71                     store.delete(499);
72                     store.delete(500);
73                     break;
74
75                 // Delete and add a new key
76                 case 520:
77                     store.delete(521);
78                     store.add({ key: 521, val: "new"});
79                     break;
80
81                 case 521:
82                     assert_equals(cursor.value.val, "new");
83                     break;
84
85                 // We should only be here once although we're basically making the index
86                 // "heavier" with its new key.
87                 case 530:
88                     assert_equals(cursor.value.val, "val_530");
89                     cursor.update({ key: 530, val: "val_531" })
90
91                     store.get(530).onsuccess = t.step_func(function(e) {
92                         assert_equals(e.target.result.val, "val_531");
93                     });
94                     break;
95
96                 // Shouldn't happen.
97                 case 11:
98                 case 511:
99                 case 611:
100                     assert_unreached(cursor.key + " should be deleted and never run");
101                     break;
102             }
103
104             cursor.continue();
105             count++;
106         });
107     };
108 </script>
109
110 <div id="log"> </div>