1
- // META: global=window,worker
2
1
// META: title=IndexedDB: Test IDBIndex.getAll
2
+ // META: global=window,worker
3
+ // META: script=resources/nested-cloning-common.js
3
4
// META: script=resources/support.js
5
+ // META: script=resources/support-get-all.js
6
+ // META: script=resources/support-promises.js
4
7
5
8
'use_strict' ;
6
9
7
- const alphabet = 'abcdefghijklmnopqrstuvwxyz' . split ( '' ) ;
8
- const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' . split ( '' ) ;
9
-
10
- function getall_test ( func , name ) {
11
- indexeddb_test (
12
- function ( t , connection , tx ) {
13
- let store = connection . createObjectStore ( 'generated' ,
14
- { autoIncrement : true , keyPath : 'id' } ) ;
15
- let index = store . createIndex ( 'test_idx' , 'upper' ) ;
16
- alphabet . forEach ( function ( letter ) {
17
- store . put ( { ch : letter , upper : letter . toUpperCase ( ) } ) ;
18
- } ) ;
19
-
20
- store = connection . createObjectStore ( 'out-of-line' , null ) ;
21
- index = store . createIndex ( 'test_idx' , 'upper' ) ;
22
- alphabet . forEach ( function ( letter ) {
23
- store . put ( { ch : letter , upper : letter . toUpperCase ( ) } , letter ) ;
24
- } ) ;
25
-
26
- store = connection . createObjectStore ( 'out-of-line-not-unique' , null ) ;
27
- index = store . createIndex ( 'test_idx' , 'half' ) ;
28
- alphabet . forEach ( function ( letter ) {
29
- if ( letter <= 'm' )
30
- store . put ( { ch : letter , half : 'first' } , letter ) ;
31
- else
32
- store . put ( { ch : letter , half : 'second' } , letter ) ;
33
- } ) ;
34
-
35
- store = connection . createObjectStore ( 'out-of-line-multi' , null ) ;
36
- index = store . createIndex ( 'test_idx' , 'attribs' , { multiEntry : true } ) ;
37
- alphabet . forEach ( function ( letter ) {
38
- attrs = [ ] ;
39
- if ( [ 'a' , 'e' , 'i' , 'o' , 'u' ] . indexOf ( letter ) != - 1 )
40
- attrs . push ( 'vowel' ) ;
41
- else
42
- attrs . push ( 'consonant' ) ;
43
- if ( letter == 'a' )
44
- attrs . push ( 'first' ) ;
45
- if ( letter == 'z' )
46
- attrs . push ( 'last' ) ;
47
- store . put ( { ch : letter , attribs : attrs } , letter ) ;
48
- } ) ;
49
-
50
- store = connection . createObjectStore ( 'empty' , null ) ;
51
- index = store . createIndex ( 'test_idx' , 'upper' ) ;
52
- } ,
53
- func ,
54
- name
55
- ) ;
56
- }
57
-
58
10
function createGetAllRequest ( t , storeName , connection , range , maxCount ) {
59
11
const transaction = connection . transaction ( storeName , 'readonly' ) ;
60
12
const store = transaction . objectStore ( storeName ) ;
@@ -64,7 +16,8 @@ function createGetAllRequest(t, storeName, connection, range, maxCount) {
64
16
return req ;
65
17
}
66
18
67
- getall_test ( function ( t , connection ) {
19
+ index_get_all_test (
20
+ function ( t , connection ) {
68
21
const req = createGetAllRequest ( t , 'out-of-line' , connection , 'C' ) ;
69
22
req . onsuccess = t . step_func ( function ( evt ) {
70
23
const data = evt . target . result ;
@@ -73,18 +26,22 @@ getall_test(function(t, connection) {
73
26
assert_array_equals ( data . map ( function ( e ) { return e . upper ; } ) , [ 'C' ] ) ;
74
27
t . done ( ) ;
75
28
} ) ;
76
- } , 'Single item get' ) ;
29
+ } ,
30
+ 'Single item get' ) ;
77
31
78
- getall_test ( function ( t , connection ) {
32
+ index_get_all_test (
33
+ function ( t , connection ) {
79
34
const req = createGetAllRequest ( t , 'empty' , connection ) ;
80
35
req . onsuccess = t . step_func ( function ( evt ) {
81
36
assert_array_equals ( evt . target . result , [ ] ,
82
37
'getAll() on empty object store should return an empty array' ) ;
83
38
t . done ( ) ;
84
39
} ) ;
85
- } , 'Empty object store' ) ;
40
+ } ,
41
+ 'Empty object store' ) ;
86
42
87
- getall_test ( function ( t , connection ) {
43
+ index_get_all_test (
44
+ function ( t , connection ) {
88
45
const req = createGetAllRequest ( t , 'out-of-line' , connection ) ;
89
46
req . onsuccess = t . step_func ( function ( evt ) {
90
47
const data = evt . target . result ;
@@ -93,9 +50,36 @@ getall_test(function(t, connection) {
93
50
assert_array_equals ( data . map ( function ( e ) { return e . upper ; } ) , ALPHABET ) ;
94
51
t . done ( ) ;
95
52
} ) ;
96
- } , 'Get all keys' ) ;
53
+ } ,
54
+ 'Get all' ) ;
55
+
56
+ index_get_all_test ( ( test , connection ) => {
57
+ const request = createGetAllRequest ( test , 'large-values' , connection ) ;
58
+ request . onsuccess = test . step_func ( event => {
59
+ const actualResults = event . target . result ;
60
+ assert_true ( Array . isArray ( actualResults ) , 'The results must be an array' ) ;
97
61
98
- getall_test ( function ( t , connection ) {
62
+ const expectedRecords = expectedIndexRecords [ 'large-values' ] ;
63
+ assert_equals (
64
+ actualResults . length , expectedRecords . length ,
65
+ 'The results array must contain the expected number of records' ) ;
66
+
67
+ // Verify each value that must contain `{ seed, randomValue }`.
68
+ for ( let i = 0 ; i < expectedRecords . length ; i ++ ) {
69
+ assert_equals (
70
+ actualResults [ i ] . seed , expectedRecords [ i ] . value . seed ,
71
+ 'The results must contain the expected seed' ) ;
72
+
73
+ assert_large_array_equals (
74
+ actualResults [ i ] . randomValue , expectedRecords [ i ] . value . randomValue ,
75
+ 'The results must contain the expected value' ) ;
76
+ }
77
+ test . done ( ) ;
78
+ } ) ;
79
+ } , 'Get all with large values' ) ;
80
+
81
+ index_get_all_test (
82
+ function ( t , connection ) {
99
83
const req = createGetAllRequest ( t , 'out-of-line' , connection , undefined ,
100
84
10 ) ;
101
85
req . onsuccess = t . step_func ( function ( evt ) {
@@ -105,9 +89,11 @@ getall_test(function(t, connection) {
105
89
assert_array_equals ( data . map ( function ( e ) { return e . upper ; } ) , 'ABCDEFGHIJ' . split ( '' ) ) ;
106
90
t . done ( ) ;
107
91
} ) ;
108
- } , 'maxCount=10' ) ;
92
+ } ,
93
+ 'maxCount=10' ) ;
109
94
110
- getall_test ( function ( t , connection ) {
95
+ index_get_all_test (
96
+ function ( t , connection ) {
111
97
const req = createGetAllRequest ( t , 'out-of-line' , connection ,
112
98
IDBKeyRange . bound ( 'G' , 'M' ) ) ;
113
99
req . onsuccess = t . step_func ( function ( evt ) {
@@ -116,9 +102,11 @@ getall_test(function(t, connection) {
116
102
assert_array_equals ( data . map ( function ( e ) { return e . upper ; } ) , 'GHIJKLM' . split ( '' ) ) ;
117
103
t . done ( ) ;
118
104
} ) ;
119
- } , 'Get bound range' ) ;
105
+ } ,
106
+ 'Get bound range' ) ;
120
107
121
- getall_test ( function ( t , connection ) {
108
+ index_get_all_test (
109
+ function ( t , connection ) {
122
110
const req = createGetAllRequest ( t , 'out-of-line' , connection ,
123
111
IDBKeyRange . bound ( 'G' , 'M' ) , 3 ) ;
124
112
req . onsuccess = t . step_func ( function ( evt ) {
@@ -128,9 +116,11 @@ getall_test(function(t, connection) {
128
116
assert_array_equals ( data . map ( function ( e ) { return e . upper ; } ) , 'GHI' . split ( '' ) ) ;
129
117
t . done ( ) ;
130
118
} ) ;
131
- } , 'Get bound range with maxCount' ) ;
119
+ } ,
120
+ 'Get bound range with maxCount' ) ;
132
121
133
- getall_test ( function ( t , connection ) {
122
+ index_get_all_test (
123
+ function ( t , connection ) {
134
124
const req = createGetAllRequest ( t , 'out-of-line' , connection ,
135
125
IDBKeyRange . bound ( 'G' , 'K' , false , true ) ) ;
136
126
req . onsuccess = t . step_func ( function ( evt ) {
@@ -140,9 +130,11 @@ getall_test(function(t, connection) {
140
130
assert_array_equals ( data . map ( function ( e ) { return e . upper ; } ) , 'GHIJ' . split ( '' ) ) ;
141
131
t . done ( ) ;
142
132
} ) ;
143
- } , 'Get upper excluded' ) ;
133
+ } ,
134
+ 'Get upper excluded' ) ;
144
135
145
- getall_test ( function ( t , connection ) {
136
+ index_get_all_test (
137
+ function ( t , connection ) {
146
138
const req = createGetAllRequest ( t , 'out-of-line' , connection ,
147
139
IDBKeyRange . bound ( 'G' , 'K' , true , false ) ) ;
148
140
req . onsuccess = t . step_func ( function ( evt ) {
@@ -152,9 +144,11 @@ getall_test(function(t, connection) {
152
144
assert_array_equals ( data . map ( function ( e ) { return e . upper ; } ) , 'HIJK' . split ( '' ) ) ;
153
145
t . done ( ) ;
154
146
} ) ;
155
- } , 'Get lower excluded' ) ;
147
+ } ,
148
+ 'Get lower excluded' ) ;
156
149
157
- getall_test ( function ( t , connection ) {
150
+ index_get_all_test (
151
+ function ( t , connection ) {
158
152
const req = createGetAllRequest ( t , 'generated' ,
159
153
connection , IDBKeyRange . bound ( 4 , 15 ) , 3 ) ;
160
154
req . onsuccess = t . step_func ( function ( evt ) {
@@ -163,20 +157,23 @@ getall_test(function(t, connection) {
163
157
assert_equals ( data . length , 0 ) ;
164
158
t . done ( ) ;
165
159
} ) ;
166
- } , 'Get bound range (generated) with maxCount' ) ;
160
+ } ,
161
+ 'Get bound range (generated) with maxCount' ) ;
167
162
168
- getall_test ( function ( t , connection ) {
163
+ index_get_all_test (
164
+ function ( t , connection ) {
169
165
const req = createGetAllRequest ( t , 'out-of-line' ,
170
166
connection , "Doesn't exist" ) ;
171
167
req . onsuccess = t . step_func ( function ( evt ) {
172
168
assert_array_equals ( evt . target . result , [ ] ,
173
169
'getAll() using a nonexistent key should return an empty array' ) ;
174
170
t . done ( ) ;
175
- req . onerror = t . unreached_func ( 'getAll request should succeed' ) ;
176
171
} ) ;
177
- } , 'Non existent key' ) ;
172
+ } ,
173
+ 'Non existent key' ) ;
178
174
179
- getall_test ( function ( t , connection ) {
175
+ index_get_all_test (
176
+ function ( t , connection ) {
180
177
const req = createGetAllRequest ( t , 'out-of-line' , connection ,
181
178
undefined , 0 ) ;
182
179
req . onsuccess = t . step_func ( function ( evt ) {
@@ -186,9 +183,56 @@ getall_test(function(t, connection) {
186
183
assert_array_equals ( data . map ( function ( e ) { return e . upper ; } ) , ALPHABET ) ;
187
184
t . done ( ) ;
188
185
} ) ;
189
- } , 'maxCount=0' ) ;
186
+ } ,
187
+ 'maxCount=0' ) ;
188
+
189
+ index_get_all_test ( function ( test , connection ) {
190
+ const request = createGetAllRequest (
191
+ test , 'out-of-line' , connection ,
192
+ /*query=*/ undefined , /*count=*/ 4294967295 ) ;
193
+ request . onsuccess = test . step_func ( function ( event ) {
194
+ const data = event . target . result ;
195
+ assert_class_string ( data , 'Array' , 'result should be an array' ) ;
196
+ assert_array_equals (
197
+ data . map ( function ( e ) {
198
+ return e . ch ;
199
+ } ) ,
200
+ alphabet ) ;
201
+ assert_array_equals (
202
+ data . map ( function ( e ) {
203
+ return e . upper ;
204
+ } ) ,
205
+ ALPHABET ) ;
206
+ test . done ( ) ;
207
+ } ) ;
208
+ } , 'Max value count' ) ;
190
209
191
- getall_test ( function ( t , connection ) {
210
+ index_get_all_test ( ( test , connection ) => {
211
+ const request = createGetAllRequest (
212
+ test , /*storeName=*/ 'out-of-line' , connection ,
213
+ IDBKeyRange . upperBound ( '0' ) ) ;
214
+ request . onsuccess = test . step_func ( ( event ) => {
215
+ assert_array_equals (
216
+ event . target . result , /*expectedResults=*/ [ ] ,
217
+ 'getAll() with an empty query range must return an empty array' ) ;
218
+ test . done ( ) ;
219
+ } ) ;
220
+ } , 'Query with empty range where first key < upperBound' ) ;
221
+
222
+ index_get_all_test ( ( test , connection ) => {
223
+ const request = createGetAllRequest (
224
+ test , /*storeName=*/ 'out-of-line' , connection ,
225
+ IDBKeyRange . lowerBound ( 'ZZ' ) ) ;
226
+ request . onsuccess = test . step_func ( ( event ) => {
227
+ assert_array_equals (
228
+ event . target . result , /*expectedResults=*/ [ ] ,
229
+ 'getAll() with an empty query range must return an empty array' ) ;
230
+ test . done ( ) ;
231
+ } ) ;
232
+ } , 'Query with empty range where lowerBound < last key' ) ;
233
+
234
+ index_get_all_test (
235
+ function ( t , connection ) {
192
236
const req = createGetAllRequest ( t , 'out-of-line-not-unique' , connection ,
193
237
'first' ) ;
194
238
req . onsuccess = t . step_func ( function ( evt ) {
@@ -198,9 +242,11 @@ getall_test(function(t, connection) {
198
242
assert_true ( data . every ( function ( e ) { return e . half === 'first' ; } ) ) ;
199
243
t . done ( ) ;
200
244
} ) ;
201
- } , 'Retrieve multiEntry key' ) ;
245
+ } ,
246
+ 'Retrieve multiEntry key' ) ;
202
247
203
- getall_test ( function ( t , connection ) {
248
+ index_get_all_test (
249
+ function ( t , connection ) {
204
250
const req = createGetAllRequest ( t , 'out-of-line-multi' , connection ,
205
251
'vowel' ) ;
206
252
req . onsuccess = t . step_func ( function ( evt ) {
@@ -211,4 +257,5 @@ getall_test(function(t, connection) {
211
257
assert_true ( data . every ( function ( e ) { return e . attribs [ 0 ] === 'vowel' ; } ) ) ;
212
258
t . done ( ) ;
213
259
} ) ;
214
- } , 'Retrieve one key multiple values' ) ;
260
+ } ,
261
+ 'Retrieve one key multiple values' ) ;
0 commit comments