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