OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <title>IndexedDB: Test IDBIndex.getAll.</title> | 2 <title>IndexedDB: Test IDBIndex.getAll.</title> |
3 <script src="../../resources/testharness.js"></script> | 3 <script src="../../../resources/testharness.js"></script> |
4 <script src="../../resources/testharnessreport.js"></script> | 4 <script src="../../../resources/testharnessreport.js"></script> |
5 <script> | 5 <script> |
| 6 setup({explicit_done: true}); |
6 | 7 |
7 var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split(''); | 8 var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split(''); |
8 var ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); | 9 var ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); |
9 | 10 |
10 function doSetup(dbName, dbVersion, onsuccess) { | 11 function doSetup(dbName, dbVersion, onsuccess) { |
11 var delete_request = indexedDB.deleteDatabase(dbName); | 12 var delete_request = indexedDB.deleteDatabase(dbName); |
12 delete_request.onerror = function() { | 13 delete_request.onerror = function() { |
13 assert_unreached('deleteDatabase should not fail'); | 14 assert_unreached('deleteDatabase should not fail'); |
14 }; | 15 }; |
15 delete_request.onsuccess = function(e) { | 16 delete_request.onsuccess = function(e) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 store = connection.createObjectStore('empty', null); | 62 store = connection.createObjectStore('empty', null); |
62 index = store.createIndex('test_idx', 'upper'); | 63 index = store.createIndex('test_idx', 'upper'); |
63 }; | 64 }; |
64 }; | 65 }; |
65 } | 66 } |
66 | 67 |
67 function createGetAllRequest(t, storeName, connection, range, maxCount) { | 68 function createGetAllRequest(t, storeName, connection, range, maxCount) { |
68 var transaction = connection.transaction(storeName, 'readonly'); | 69 var transaction = connection.transaction(storeName, 'readonly'); |
69 var store = transaction.objectStore(storeName); | 70 var store = transaction.objectStore(storeName); |
70 var index = store.index('test_idx'); | 71 var index = store.index('test_idx'); |
71 // TODO(cmumford): Simplify once crbug.com/335871 is fixed. | 72 var req = index.getAll(range, maxCount); |
72 var req = maxCount !== undefined ? index.getAll(range, maxCount) : | |
73 range !== undefined ? index.getAll(range) : index.getAll(); | |
74 req.onerror = t.unreached_func('getAll request should succeed'); | 73 req.onerror = t.unreached_func('getAll request should succeed'); |
75 return req; | 74 return req; |
76 } | 75 } |
77 | 76 |
78 doSetup(location.pathname + '-IDBIndex.getAll', 1, function(evt) { | 77 doSetup(location.pathname + '-IDBIndex.getAll', 1, function(evt) { |
79 var connection = evt.target.result; | 78 var connection = evt.target.result; |
80 async_test(function(t) { | 79 async_test(function(t) { |
81 var req = createGetAllRequest(t, 'out-of-line', connection, 'C'); | 80 var req = createGetAllRequest(t, 'out-of-line', connection, 'C'); |
82 req.onsuccess = t.step_func(function(evt) { | 81 req.onsuccess = t.step_func(function(evt) { |
83 var data = evt.target.result; | 82 var data = evt.target.result; |
84 assert_class_string(data, 'Array', 'result should be an array'); | 83 assert_class_string(data, 'Array', 'result should be an array'); |
85 assert_array_equals(data.map(e => e.ch), ['c']); | 84 assert_array_equals(data.map(function(e) { return e.ch; }), ['c']); |
86 assert_array_equals(data.map(e => e.upper), ['C']); | 85 assert_array_equals(data.map(function(e) { return e.upper; }), ['C']); |
87 t.done(); | 86 t.done(); |
88 }); | 87 }); |
89 }, 'Single item get'); | 88 }, 'Single item get'); |
90 | 89 |
91 async_test(function(t) { | 90 async_test(function(t) { |
92 var req = createGetAllRequest(t, 'empty', connection); | 91 var req = createGetAllRequest(t, 'empty', connection); |
93 req.onsuccess = t.step_func(function(evt) { | 92 req.onsuccess = t.step_func(function(evt) { |
94 assert_array_equals(evt.target.result, [], | 93 assert_array_equals(evt.target.result, [], |
95 'getAll() on empty object store should return an empty array'); | 94 'getAll() on empty object store should return an empty array'); |
96 t.done(); | 95 t.done(); |
97 }); | 96 }); |
98 }, 'Empty object store'); | 97 }, 'Empty object store'); |
99 | 98 |
100 async_test(function(t) { | 99 async_test(function(t) { |
101 var req = createGetAllRequest(t, 'out-of-line', connection); | 100 var req = createGetAllRequest(t, 'out-of-line', connection); |
102 req.onsuccess = t.step_func(function(evt) { | 101 req.onsuccess = t.step_func(function(evt) { |
103 var data = evt.target.result; | 102 var data = evt.target.result; |
104 assert_class_string(data, 'Array', 'result should be an array'); | 103 assert_class_string(data, 'Array', 'result should be an array'); |
105 assert_array_equals(data.map(e => e.ch), alphabet); | 104 assert_array_equals(data.map(function(e) { return e.ch; }), alphabet); |
106 assert_array_equals(data.map(e => e.upper), ALPHABET); | 105 assert_array_equals(data.map(function(e) { return e.upper; }), ALPHABE
T); |
107 t.done(); | 106 t.done(); |
108 }); | 107 }); |
109 }, 'Get all keys'); | 108 }, 'Get all keys'); |
110 | 109 |
111 async_test(function(t) { | 110 async_test(function(t) { |
112 var req = createGetAllRequest(t, 'out-of-line', connection, undefined, | 111 var req = createGetAllRequest(t, 'out-of-line', connection, undefined, |
113 10); | 112 10); |
114 req.onsuccess = t.step_func(function(evt) { | 113 req.onsuccess = t.step_func(function(evt) { |
115 var data = evt.target.result; | 114 var data = evt.target.result; |
116 assert_class_string(data, 'Array', 'result should be an array'); | 115 assert_class_string(data, 'Array', 'result should be an array'); |
117 assert_array_equals(data.map(e => e.ch), 'abcdefghij'.split('')); | 116 assert_array_equals(data.map(function(e) { return e.ch; }), 'abcdefghi
j'.split('')); |
118 assert_array_equals(data.map(e => e.upper), 'ABCDEFGHIJ'.split('')); | 117 assert_array_equals(data.map(function(e) { return e.upper; }), 'ABCDEF
GHIJ'.split('')); |
119 t.done(); | 118 t.done(); |
120 }); | 119 }); |
121 }, 'maxCount=10'); | 120 }, 'maxCount=10'); |
122 | 121 |
123 async_test(function(t) { | 122 async_test(function(t) { |
124 var req = createGetAllRequest(t, 'out-of-line', connection, | 123 var req = createGetAllRequest(t, 'out-of-line', connection, |
125 IDBKeyRange.bound('G', 'M')); | 124 IDBKeyRange.bound('G', 'M')); |
126 req.onsuccess = t.step_func(function(evt) { | 125 req.onsuccess = t.step_func(function(evt) { |
127 var data = evt.target.result; | 126 var data = evt.target.result; |
128 assert_array_equals(data.map(e => e.ch), 'ghijklm'.split('')); | 127 assert_array_equals(data.map(function(e) { return e.ch; }), 'ghijklm'.
split('')); |
129 assert_array_equals(data.map(e => e.upper), 'GHIJKLM'.split('')); | 128 assert_array_equals(data.map(function(e) { return e.upper; }), 'GHIJKL
M'.split('')); |
130 t.done(); | 129 t.done(); |
131 }); | 130 }); |
132 }, 'Get bound range'); | 131 }, 'Get bound range'); |
133 | 132 |
134 async_test(function(t) { | 133 async_test(function(t) { |
135 var req = createGetAllRequest(t, 'out-of-line', connection, | 134 var req = createGetAllRequest(t, 'out-of-line', connection, |
136 IDBKeyRange.bound('G', 'M'), 3); | 135 IDBKeyRange.bound('G', 'M'), 3); |
137 req.onsuccess = t.step_func(function(evt) { | 136 req.onsuccess = t.step_func(function(evt) { |
138 var data = evt.target.result; | 137 var data = evt.target.result; |
139 assert_class_string(data, 'Array', 'result should be an array'); | 138 assert_class_string(data, 'Array', 'result should be an array'); |
140 assert_array_equals(data.map(e => e.ch), 'ghi'.split('')); | 139 assert_array_equals(data.map(function(e) { return e.ch; }), 'ghi'.spli
t('')); |
141 assert_array_equals(data.map(e => e.upper), 'GHI'.split('')); | 140 assert_array_equals(data.map(function(e) { return e.upper; }), 'GHI'.s
plit('')); |
142 t.done(); | 141 t.done(); |
143 }); | 142 }); |
144 }, 'Get bound range with maxCount'); | 143 }, 'Get bound range with maxCount'); |
145 | 144 |
146 async_test(function(t) { | 145 async_test(function(t) { |
147 var req = createGetAllRequest(t, 'out-of-line', connection, | 146 var req = createGetAllRequest(t, 'out-of-line', connection, |
148 IDBKeyRange.bound('G', 'K', false, true)); | 147 IDBKeyRange.bound('G', 'K', false, true)); |
149 req.onsuccess = t.step_func(function(evt) { | 148 req.onsuccess = t.step_func(function(evt) { |
150 var data = evt.target.result; | 149 var data = evt.target.result; |
151 assert_class_string(data, 'Array', 'result should be an array'); | 150 assert_class_string(data, 'Array', 'result should be an array'); |
152 assert_array_equals(data.map(e => e.ch), 'ghij'.split('')); | 151 assert_array_equals(data.map(function(e) { return e.ch; }), 'ghij'.spl
it('')); |
153 assert_array_equals(data.map(e => e.upper), 'GHIJ'.split('')); | 152 assert_array_equals(data.map(function(e) { return e.upper; }), 'GHIJ'.
split('')); |
154 t.done(); | 153 t.done(); |
155 }); | 154 }); |
156 }, 'Get upper excluded'); | 155 }, 'Get upper excluded'); |
157 | 156 |
158 async_test(function(t) { | 157 async_test(function(t) { |
159 var req = createGetAllRequest(t, 'out-of-line', connection, | 158 var req = createGetAllRequest(t, 'out-of-line', connection, |
160 IDBKeyRange.bound('G', 'K', true, false)); | 159 IDBKeyRange.bound('G', 'K', true, false)); |
161 req.onsuccess = t.step_func(function(evt) { | 160 req.onsuccess = t.step_func(function(evt) { |
162 var data = evt.target.result; | 161 var data = evt.target.result; |
163 assert_class_string(data, 'Array', 'result should be an array'); | 162 assert_class_string(data, 'Array', 'result should be an array'); |
164 assert_array_equals(data.map(e => e.ch), 'hijk'.split('')); | 163 assert_array_equals(data.map(function(e) { return e.ch; }), 'hijk'.spl
it('')); |
165 assert_array_equals(data.map(e => e.upper), 'HIJK'.split('')); | 164 assert_array_equals(data.map(function(e) { return e.upper; }), 'HIJK'.
split('')); |
166 t.done(); | 165 t.done(); |
167 }); | 166 }); |
168 }, 'Get lower excluded'); | 167 }, 'Get lower excluded'); |
169 | 168 |
170 async_test(function(t) { | 169 async_test(function(t) { |
171 var req = createGetAllRequest(t, 'generated', | 170 var req = createGetAllRequest(t, 'generated', |
172 connection, IDBKeyRange.bound(4, 15), 3); | 171 connection, IDBKeyRange.bound(4, 15), 3); |
173 req.onsuccess = t.step_func(function(evt) { | 172 req.onsuccess = t.step_func(function(evt) { |
174 var data = evt.target.result; | 173 var data = evt.target.result; |
175 assert_true(Array.isArray(data)); | 174 assert_true(Array.isArray(data)); |
(...skipping 12 matching lines...) Expand all Loading... |
188 req.onerror = t.unreached_func('getAll request should succeed'); | 187 req.onerror = t.unreached_func('getAll request should succeed'); |
189 }); | 188 }); |
190 }, 'Non existent key'); | 189 }, 'Non existent key'); |
191 | 190 |
192 async_test(function(t) { | 191 async_test(function(t) { |
193 var req = createGetAllRequest(t, 'out-of-line', connection, | 192 var req = createGetAllRequest(t, 'out-of-line', connection, |
194 undefined, 0); | 193 undefined, 0); |
195 req.onsuccess = t.step_func(function(evt) { | 194 req.onsuccess = t.step_func(function(evt) { |
196 var data = evt.target.result; | 195 var data = evt.target.result; |
197 assert_class_string(data, 'Array', 'result should be an array'); | 196 assert_class_string(data, 'Array', 'result should be an array'); |
198 assert_array_equals(data.map(e => e.ch), alphabet); | 197 assert_array_equals(data.map(function(e) { return e.ch; }), alphabet); |
199 assert_array_equals(data.map(e => e.upper), ALPHABET); | 198 assert_array_equals(data.map(function(e) { return e.upper; }), ALPHABE
T); |
200 t.done(); | 199 t.done(); |
201 }); | 200 }); |
202 }, 'maxCount=0'); | 201 }, 'maxCount=0'); |
203 | 202 |
204 async_test(function(t) { | 203 async_test(function(t) { |
205 var req = createGetAllRequest(t, 'out-of-line-not-unique', connection, | 204 var req = createGetAllRequest(t, 'out-of-line-not-unique', connection, |
206 'first'); | 205 'first'); |
207 req.onsuccess = t.step_func(function(evt) { | 206 req.onsuccess = t.step_func(function(evt) { |
208 var data = evt.target.result; | 207 var data = evt.target.result; |
209 assert_class_string(data, 'Array', 'result should be an array'); | 208 assert_class_string(data, 'Array', 'result should be an array'); |
210 assert_array_equals(data.map(e => e.ch), 'abcdefghijklm'.split('')); | 209 assert_array_equals(data.map(function(e) { return e.ch; }), 'abcdefghi
jklm'.split('')); |
211 assert_true(data.every(e => e.half === 'first')); | 210 assert_true(data.every(function(e) { return e.half === 'first'; })); |
212 t.done(); | 211 t.done(); |
213 }); | 212 }); |
214 }, 'Retrieve multiEntry key'); | 213 }, 'Retrieve multiEntry key'); |
215 | 214 |
216 async_test(function(t) { | 215 async_test(function(t) { |
217 var req = createGetAllRequest(t, 'out-of-line-multi', connection, | 216 var req = createGetAllRequest(t, 'out-of-line-multi', connection, |
218 'vowel'); | 217 'vowel'); |
219 req.onsuccess = t.step_func(function(evt) { | 218 req.onsuccess = t.step_func(function(evt) { |
220 var data = evt.target.result; | 219 var data = evt.target.result; |
221 assert_class_string(data, 'Array', 'result should be an array'); | 220 assert_class_string(data, 'Array', 'result should be an array'); |
222 assert_array_equals(data.map(e => e.ch), ['a', 'e', 'i', 'o', 'u']); | 221 assert_array_equals(data.map(function(e) { return e.ch; }), ['a', 'e',
'i', 'o', 'u']); |
223 assert_array_equals(data[0].attribs, ['vowel', 'first']); | 222 assert_array_equals(data[0].attribs, ['vowel', 'first']); |
224 assert_true(data.every(e => e.attribs[0] === 'vowel')); | 223 assert_true(data.every(function(e) { return e.attribs[0] === 'vowel';
})); |
225 t.done(); | 224 t.done(); |
226 }); | 225 }); |
227 }, 'Retrieve one key multiple values'); | 226 }, 'Retrieve one key multiple values'); |
| 227 |
| 228 // Explicit done needed in case async_test body fails synchronously. |
| 229 done(); |
228 }); | 230 }); |
229 | 231 |
230 </script> | 232 </script> |
OLD | NEW |