OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 <title>IndexedDB: Test IDBIndex.getAllKeys.</title> | |
3 <script src="../../../resources/testharness.js"></script> | |
4 <script src="../../../resources/testharnessreport.js"></script> | |
5 <script> | |
6 setup({explicit_done: true}); | |
7 | |
8 var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split(''); | |
9 | |
10 function doSetup(dbName, dbVersion, onsuccess) { | |
11 var delete_request = indexedDB.deleteDatabase(dbName); | |
12 delete_request.onerror = function() { | |
13 assert_unreached('deleteDatabase should not fail'); | |
14 }; | |
15 delete_request.onsuccess = function(e) { | |
16 var req = indexedDB.open(dbName, dbVersion); | |
17 req.onsuccess = onsuccess; | |
18 req.onerror = function() { | |
19 assert_unreached('open should not fail'); | |
20 }; | |
21 req.onupgradeneeded = function(evt) { | |
22 var connection = evt.target.result; | |
23 | |
24 var store = connection.createObjectStore('generated', | |
25 {autoIncrement: true, keyPath: 'id'}); | |
26 var index = store.createIndex('test_idx', 'upper'); | |
27 alphabet.forEach(function(letter) { | |
28 store.put({ch: letter, upper: letter.toUpperCase()}); | |
29 }); | |
30 | |
31 store = connection.createObjectStore('out-of-line', null); | |
32 index = store.createIndex('test_idx', 'upper'); | |
33 alphabet.forEach(function(letter) { | |
34 store.put({ch: letter, upper: letter.toUpperCase()}, letter); | |
35 }); | |
36 | |
37 store = connection.createObjectStore('out-of-line-multi', null); | |
38 index = store.createIndex('test_idx', 'attribs', {multiEntry: true}); | |
39 alphabet.forEach(function(letter) { | |
40 attrs = []; | |
41 if (['a', 'e', 'i', 'o', 'u'].indexOf(letter) != -1) | |
42 attrs.push('vowel'); | |
43 else | |
44 attrs.push('consonant'); | |
45 if (letter == 'a') | |
46 attrs.push('first'); | |
47 if (letter == 'z') | |
48 attrs.push('last'); | |
49 store.put({ch: letter, attribs: attrs}, letter.toUpperCase()); | |
50 }); | |
51 | |
52 store = connection.createObjectStore('empty', null); | |
53 index = store.createIndex('test_idx', 'upper'); | |
54 }; | |
55 }; | |
56 } | |
57 | |
58 function createGetAllKeysRequest(t, storeName, connection, range, maxCount) { | |
59 var transaction = connection.transaction(storeName, 'readonly'); | |
60 var store = transaction.objectStore(storeName); | |
61 var index = store.index('test_idx'); | |
62 var req = index.getAllKeys(range, maxCount); | |
63 req.onerror = t.unreached_func('getAllKeys request should succeed'); | |
64 return req; | |
65 } | |
66 | |
67 doSetup(location.pathname + '-IDBIndex.getAllKeys', 1, function(evt) { | |
68 var connection = evt.target.result; | |
69 async_test(function(t) { | |
70 var req = createGetAllKeysRequest(t, 'out-of-line', connection, 'C'); | |
71 req.onsuccess = t.step_func(function(evt) { | |
72 var data = evt.target.result; | |
73 assert_array_equals(evt.target.result, ['c']); | |
74 t.done(); | |
75 }); | |
76 }, 'Single item get'); | |
77 | |
78 async_test(function(t) { | |
79 var req = createGetAllKeysRequest(t, 'empty', connection); | |
80 req.onsuccess = t.step_func(function(evt) { | |
81 assert_array_equals(evt.target.result, [], | |
82 'getAllKeys() on empty object store should return empty array'); | |
83 t.done(); | |
84 }); | |
85 }, 'Empty object store'); | |
86 | |
87 async_test(function(t) { | |
88 var req = createGetAllKeysRequest(t, 'out-of-line', connection); | |
89 req.onsuccess = t.step_func(function(evt) { | |
90 assert_array_equals(evt.target.result, alphabet, | |
91 'getAllKeys() should return a..z'); | |
92 t.done(); | |
93 }); | |
94 }, 'Get all keys'); | |
95 | |
96 async_test(function(t) { | |
97 var req = createGetAllKeysRequest(t, 'generated', connection); | |
98 req.onsuccess = t.step_func(function(evt) { | |
99 assert_array_equals(evt.target.result, | |
100 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, | |
101 19, 20, 21, 22, 23, 24, 25, 26], | |
102 'getAllKeys() should return 1..26'); | |
103 t.done(); | |
104 }); | |
105 }, 'Get all generated keys'); | |
106 | |
107 async_test(function(t) { | |
108 var req = createGetAllKeysRequest(t, 'out-of-line', connection, undefined, | |
109 10); | |
110 req.onsuccess = t.step_func(function(evt) { | |
111 assert_array_equals(evt.target.result, | |
112 'abcdefghij'.split(''), | |
113 'getAllKeys() should return a..j'); | |
114 t.done(); | |
115 }); | |
116 }, 'maxCount=10'); | |
117 | |
118 async_test(function(t) { | |
119 var req = createGetAllKeysRequest(t, 'out-of-line', connection, | |
120 IDBKeyRange.bound('G', 'M')); | |
121 req.onsuccess = t.step_func(function(evt) { | |
122 assert_array_equals(evt.target.result, | |
123 'ghijklm'.split(''), | |
124 'getAllKeys() should return g..m'); | |
125 t.done(); | |
126 }); | |
127 }, 'Get bound range'); | |
128 | |
129 async_test(function(t) { | |
130 var req = createGetAllKeysRequest(t, 'out-of-line', connection, | |
131 IDBKeyRange.bound('G', 'M'), 3); | |
132 req.onsuccess = t.step_func(function(evt) { | |
133 assert_array_equals(evt.target.result, | |
134 ['g', 'h', 'i'], | |
135 'getAllKeys() should return g..i'); | |
136 t.done(); | |
137 }); | |
138 }, 'Get bound range with maxCount'); | |
139 | |
140 async_test(function(t) { | |
141 var req = createGetAllKeysRequest(t, 'out-of-line', connection, | |
142 IDBKeyRange.bound('G', 'K', false, true)); | |
143 req.onsuccess = t.step_func(function(evt) { | |
144 assert_array_equals(evt.target.result, | |
145 ['g', 'h', 'i', 'j'], | |
146 'getAllKeys() should return g..j'); | |
147 t.done(); | |
148 }); | |
149 }, 'Get upper excluded'); | |
150 | |
151 async_test(function(t) { | |
152 var req = createGetAllKeysRequest(t, 'out-of-line', connection, | |
153 IDBKeyRange.bound('G', 'K', true, false)); | |
154 req.onsuccess = t.step_func(function(evt) { | |
155 assert_array_equals(evt.target.result, | |
156 ['h', 'i', 'j', 'k'], | |
157 'getAllKeys() should return h..k'); | |
158 t.done(); | |
159 }); | |
160 }, 'Get lower excluded'); | |
161 | |
162 async_test(function(t) { | |
163 var req = createGetAllKeysRequest(t, 'generated', | |
164 connection, IDBKeyRange.bound(4, 15), 3); | |
165 req.onsuccess = t.step_func(function(evt) { | |
166 assert_array_equals(evt.target.result, [], | |
167 'getAllKeys() should return []'); | |
168 t.done(); | |
169 }); | |
170 }, 'Get bound range (generated) with maxCount'); | |
171 | |
172 async_test(function(t) { | |
173 var req = createGetAllKeysRequest(t, 'out-of-line', | |
174 connection, "Doesn't exist"); | |
175 req.onsuccess = t.step_func(function(evt) { | |
176 assert_array_equals(evt.target.result, [], | |
177 'getAllKeys() using a nonexistent key should return empty array'); | |
178 t.done(); | |
179 req.onerror = t.unreached_func('getAllKeys request should succeed'); | |
180 }); | |
181 }, 'Non existent key'); | |
182 | |
183 async_test(function(t) { | |
184 var req = createGetAllKeysRequest(t, 'out-of-line', connection, | |
185 undefined, 0); | |
186 req.onsuccess = t.step_func(function(evt) { | |
187 assert_array_equals(evt.target.result, alphabet, | |
188 'getAllKeys() should return a..z'); | |
189 t.done(); | |
190 }); | |
191 }, 'maxCount=0'); | |
192 | |
193 async_test(function(t) { | |
194 var req = createGetAllKeysRequest(t, 'out-of-line-multi', connection, | |
195 'vowel'); | |
196 req.onsuccess = t.step_func(function(evt) { | |
197 assert_array_equals(evt.target.result, ['A','E','I','O','U']) | |
198 t.done(); | |
199 }); | |
200 req.onerror = t.unreached_func('getAllKeys request should succeed'); | |
201 }, 'Retrieve multiEntry keys'); | |
202 | |
203 // Explicit done needed in case async_test body fails synchronously. | |
204 done(); | |
205 }); | |
206 | |
207 </script> | |
OLD | NEW |