// META: title=IndexedDB: Test IDBObjectStore.getAllRecords // META: global=window,worker // META: script=resources/nested-cloning-common.js // META: script=resources/support.js // META: script=resources/support-get-all.js // META: script=resources/support-promises.js // META: timeout=long 'use strict'; object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {query: /*key=*/ 'c'}, 'Single item'); object_store_get_all_records_test( /*storeName=*/ 'generated', /*options=*/ {query: /*key=*/ 3}, 'Single item with generated key'); object_store_get_all_records_test( /*storeName=*/ 'empty', /*options=*/ undefined, 'Empty object store'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ undefined, 'Get all records'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {}, 'Get all records with empty options'); object_store_get_all_records_test( /*storeName=*/ 'large-values', /*options=*/ undefined, 'Get all records with large values'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {count: 10}, 'Count'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {query: IDBKeyRange.bound('g', 'm')}, 'Query with bound range'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {query: IDBKeyRange.bound('g', 'm'), count: 3}, 'Query with bound range and count'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ { query: IDBKeyRange.bound('g', 'k', /*lowerOpen=*/ false, /*upperOpen=*/ true) }, 'Query with upper excluded bound range'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ { query: IDBKeyRange.bound('g', 'k', /*lowerOpen=*/ true, /*upperOpen=*/ false) }, 'Query with lower excluded bound range'); object_store_get_all_records_test( /*storeName=*/ 'generated', /*options=*/ {query: IDBKeyRange.bound(4, 15), count: 3}, 'Query with bound range and count for generated keys'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {query: 'Doesn\'t exist'}, 'Query with nonexistent key'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {count: 0}, 'Zero count'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {count: 4294967295}, 'Max value count'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {query: IDBKeyRange.upperBound('0')}, 'Query with empty range where first key < upperBound'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {query: IDBKeyRange.lowerBound('zz')}, 'Query with empty range where lowerBound < last key'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'next'}, 'Direction: next'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'prev'}, 'Direction: prev'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'nextunique'}, 'Direction: nextunique'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'prevunique'}, 'Direction: prevunique'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ { direction: 'prev', query: IDBKeyRange.bound('b', 'x'), }, 'Direction and query'); object_store_get_all_records_test( /*storeName=*/ 'out-of-line', /*options=*/ { direction: 'prev', query: IDBKeyRange.bound('b', 'x'), count: 4 }, 'Direction, query and count'); object_store_get_all_test_setup( /*storeName=*/ 'out-of-line', (test, connection, expectedRecords) => { const transaction = connection.transaction('out-of-line', 'readonly'); const store = transaction.objectStore('out-of-line'); const request = store.getAllRecords(); transaction.commit(); transaction.oncomplete = test.unreached_func('transaction completed before request succeeded'); request.onerror = test.unreached_func('getAllRecords request must succeed'); request.onsuccess = test.step_func((event) => { const actualResults = event.target.result; assert_records_equals(actualResults, expectedRecords); test.done(); }); }, 'Get all records with transaction.commit()'); get_all_with_invalid_keys_test( 'getAllRecords', /*storeName=*/ 'out-of-line', /*indexName=*/ undefined, /*shouldUseDictionary=*/ true, 'Get all records with invalid query keys');