OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 <title>IDBCursor asyncness</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 | |
10 var db, open; | |
11 | |
12 setup(function() { | |
13 open = indexedDB.open('testdb-' + new Date().getTime()); | |
14 open.onupgradeneeded = function(e) { | |
15 db = e.target.result; | |
16 var objStore = db.createObjectStore("test"); | |
17 objStore.createIndex("index", ""); | |
18 | |
19 objStore.add("data", 1); | |
20 objStore.add("data2", 2); | |
21 }; | |
22 }, | |
23 { explicit_done: true }); | |
24 | |
25 | |
26 open.onsuccess = function() { | |
27 | |
28 | |
29 async_test(document.title + " - advance").step(function(e) { | |
30 var count = 0; | |
31 var rq = db.transaction("test").objectStore("test").openCursor(); | |
32 | |
33 rq.onsuccess = this.step_func(function(e) { | |
34 if (!e.target.result) { | |
35 assert_equals(count, 2, 'count'); | |
36 this.done(); | |
37 return; | |
38 } | |
39 var cursor = e.target.result; | |
40 | |
41 switch(count) { | |
42 case 0: | |
43 assert_equals(cursor.value, "data") | |
44 assert_equals(cursor.key, 1) | |
45 cursor.advance(1) | |
46 assert_equals(cursor.value, "data") | |
47 assert_equals(cursor.key, 1) | |
48 break | |
49 | |
50 case 1: | |
51 assert_equals(cursor.value, "data2") | |
52 assert_equals(cursor.key, 2) | |
53 cursor.advance(1) | |
54 assert_equals(cursor.value, "data2") | |
55 assert_equals(cursor.key, 2) | |
56 break | |
57 | |
58 default: | |
59 assert_unreached("Unexpected count: " + count) | |
60 } | |
61 | |
62 count++; | |
63 }); | |
64 rq.onerror = fail(this, "unexpected error") | |
65 }); | |
66 | |
67 | |
68 async_test(document.title + " - continue").step(function(e) { | |
69 var count = 0; | |
70 var rq = db.transaction("test").objectStore("test").index("index").o
penCursor(); | |
71 | |
72 rq.onsuccess = this.step_func(function(e) { | |
73 if (!e.target.result) { | |
74 assert_equals(count, 2, 'count'); | |
75 this.done(); | |
76 return; | |
77 } | |
78 var cursor = e.target.result; | |
79 | |
80 switch(count) { | |
81 case 0: | |
82 assert_equals(cursor.value, "data") | |
83 assert_equals(cursor.key, "data") | |
84 assert_equals(cursor.primaryKey, 1) | |
85 cursor.continue("data2") | |
86 assert_equals(cursor.value, "data") | |
87 assert_equals(cursor.key, "data") | |
88 assert_equals(cursor.primaryKey, 1) | |
89 break | |
90 | |
91 case 1: | |
92 assert_equals(cursor.value, "data2") | |
93 assert_equals(cursor.key, "data2") | |
94 assert_equals(cursor.primaryKey, 2) | |
95 cursor.continue() | |
96 assert_equals(cursor.value, "data2") | |
97 assert_equals(cursor.key, "data2") | |
98 assert_equals(cursor.primaryKey, 2) | |
99 break | |
100 | |
101 default: | |
102 assert_unreached("Unexpected count: " + count) | |
103 } | |
104 | |
105 count++; | |
106 }); | |
107 rq.onerror = fail(this, "unexpected error") | |
108 }); | |
109 | |
110 | |
111 async_test(document.title + " - fresh advance still async").step(functio
n(e) { | |
112 var count = 0; | |
113 var rq = db.transaction("test").objectStore("test").index("index").o
penCursor(); | |
114 | |
115 rq.onsuccess = this.step_func(function(e) { | |
116 if (!e.target.result) { | |
117 assert_equals(count, 2, 'count'); | |
118 this.done(); | |
119 return; | |
120 } | |
121 var cursor = e.target.result; | |
122 cursor.advance(1) | |
123 | |
124 switch(count) { | |
125 case 0: | |
126 assert_equals(cursor.value, "data") | |
127 assert_equals(cursor.key, "data") | |
128 assert_equals(cursor.primaryKey, 1) | |
129 break | |
130 | |
131 case 1: | |
132 assert_equals(cursor.value, "data2") | |
133 assert_equals(cursor.key, "data2") | |
134 assert_equals(cursor.primaryKey, 2) | |
135 break | |
136 | |
137 default: | |
138 assert_unreached("Unexpected count: " + count) | |
139 } | |
140 | |
141 count++; | |
142 }); | |
143 rq.onerror = fail(this, "unexpected error") | |
144 }); | |
145 | |
146 | |
147 async_test(document.title + " - fresh continue still async").step(functi
on(e) { | |
148 var count = 0; | |
149 var rq = db.transaction("test").objectStore("test").openCursor(); | |
150 | |
151 rq.onsuccess = this.step_func(function(e) { | |
152 if (!e.target.result) { | |
153 assert_equals(count, 2, 'count'); | |
154 this.done(); | |
155 return; | |
156 } | |
157 var cursor = e.target.result; | |
158 cursor.continue() | |
159 | |
160 switch(count) { | |
161 case 0: | |
162 assert_equals(cursor.value, "data") | |
163 assert_equals(cursor.key, 1) | |
164 break | |
165 | |
166 case 1: | |
167 assert_equals(cursor.value, "data2") | |
168 assert_equals(cursor.key, 2) | |
169 break | |
170 | |
171 default: | |
172 assert_unreached("Unexpected count: " + count) | |
173 } | |
174 | |
175 count++; | |
176 }); | |
177 rq.onerror = fail(this, "unexpected error") | |
178 }); | |
179 | |
180 // Stop blocking the testing system from hereon | |
181 done(); | |
182 } | |
183 | |
184 </script> | |
185 | |
186 <div id=log></div> | |
OLD | NEW |