summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/IndexedDB/idbobjectstore_batchGetAll.tentative.any.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/idbobjectstore_batchGetAll.tentative.any.js')
-rw-r--r--testing/web-platform/tests/IndexedDB/idbobjectstore_batchGetAll.tentative.any.js143
1 files changed, 143 insertions, 0 deletions
diff --git a/testing/web-platform/tests/IndexedDB/idbobjectstore_batchGetAll.tentative.any.js b/testing/web-platform/tests/IndexedDB/idbobjectstore_batchGetAll.tentative.any.js
new file mode 100644
index 0000000000..3aeb855359
--- /dev/null
+++ b/testing/web-platform/tests/IndexedDB/idbobjectstore_batchGetAll.tentative.any.js
@@ -0,0 +1,143 @@
+// META: title=Batch Get All
+// META: script=resources/support.js
+
+'use strict';
+
+const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');
+
+function batchgetall_test(storeName, func, name) {
+ indexeddb_test((t, connection, tx) => {
+ var store;
+ switch (storeName) {
+ case 'generated':
+ store = connection.createObjectStore(
+ 'generated', {autoIncrement: true, keyPath: 'id'});
+ alphabet.forEach(letter => {
+ store.put({ch: letter});
+ });
+ break;
+ case 'out-of-line':
+ store = connection.createObjectStore('out-of-line', null);
+ alphabet.forEach(letter => {
+ store.put(`value-${letter}`, letter);
+ });
+ break;
+ case 'empty':
+ store = connection.createObjectStore('empty', null);
+ break;
+ default:
+ t.fail(`Unsupported storeName: ${storeName}`);
+ }
+ }, func, name);
+}
+
+function createBatchGetAllRequest(t, storeName, connection, ranges, maxCount) {
+ const transaction = connection.transaction(storeName, 'readonly');
+ const store = transaction.objectStore(storeName);
+ const req = store.batchGetAll(ranges, maxCount);
+ req.onerror = t.unreached_func('batchGetAll request should succeed');
+ return req;
+}
+
+function assertTwoDArrayEquals(result, expected) {
+ assert_equals(JSON.stringify(result), JSON.stringify(expected));
+}
+
+batchgetall_test('out-of-line', (t, connection) => {
+ const req = createBatchGetAllRequest(t, 'out-of-line', connection, ['c']);
+ req.onsuccess = t.step_func(evt => {
+ let result = evt.target.result;
+ let expected = [['value-c']];
+ assertTwoDArrayEquals(result, expected)
+ t.done();
+ });
+}, 'Single item get');
+
+batchgetall_test('empty', (t, connection) => {
+ const req = createBatchGetAllRequest(t, 'empty', connection);
+ req.onsuccess = t.step_func(evt => {
+ assert_array_equals(
+ evt.target.result, [],
+ 'getAll() on empty object store should return an empty array');
+ t.done();
+ });
+}, 'batchGetAll on empty object store');
+
+
+batchgetall_test('out-of-line', (t, connection) => {
+ const req = createBatchGetAllRequest(
+ t, 'out-of-line', connection, ['c', 'dd', 'e', 'ff']);
+ req.onsuccess = t.step_func(evt => {
+ let result = evt.target.result;
+ let expected = [['value-c'], [], ['value-e'], []];
+ assertTwoDArrayEquals(result, expected);
+ t.done();
+ });
+}, 'batchGetAll with non-existing values');
+
+
+batchgetall_test('out-of-line', (t, connection) => {
+ const req = createBatchGetAllRequest(
+ t, 'out-of-line', connection, [IDBKeyRange.bound('a', 'z')], 5);
+ req.onsuccess = t.step_func(evt => {
+ let result = evt.target.result;
+ let expected = [['value-a', 'value-b', 'value-c', 'value-d', 'value-e']];
+ assertTwoDArrayEquals(result, expected);
+ t.done();
+ });
+}, 'Get bound range with maxCount');
+
+
+batchgetall_test('out-of-line', (t, connection) => {
+ const req = createBatchGetAllRequest(
+ t, 'out-of-line', connection, [IDBKeyRange.bound('a', 'e')]);
+ req.onsuccess = t.step_func(evt => {
+ let result = evt.target.result;
+ let expected = [['value-a', 'value-b', 'value-c', 'value-d', 'value-e']];
+ assertTwoDArrayEquals(result, expected);
+ t.done();
+ });
+}, 'Get bound range');
+
+batchgetall_test('out-of-line', (t, connection) => {
+ const req = createBatchGetAllRequest(t, 'out-of-line', connection, [
+ IDBKeyRange.bound('g', 'k', false, true),
+ IDBKeyRange.bound('g', 'k', true, false)
+ ]);
+ req.onsuccess = t.step_func(evt => {
+ let result = evt.target.result;
+ let expected = [
+ ['value-g', 'value-h', 'value-i', 'value-j'],
+ ['value-h', 'value-i', 'value-j', 'value-k']
+ ];
+ assertTwoDArrayEquals(result, expected);
+ t.done();
+ });
+}, 'Get upper/lower excluded');
+
+batchgetall_test('generated', (t, connection) => {
+ const req = createBatchGetAllRequest(
+ t, 'generated', connection,
+ [IDBKeyRange.bound(4, 15), IDBKeyRange.bound(5, 15)], 3);
+ req.onsuccess = t.step_func(evt => {
+ let result = evt.target.result;
+ let expected = [
+ [{ch: 'd', id: 4}, {ch: 'e', id: 5}, {ch: 'f', id: 6}],
+ [{ch: 'e', id: 5}, {ch: 'f', id: 6}, {ch: 'g', id: 7}]
+ ];
+ assertTwoDArrayEquals(result, expected);
+ t.done();
+ });
+}, 'Get bound range (generated) with maxCount');
+
+
+batchgetall_test('out-of-line', (t, connection) => {
+ const req = createBatchGetAllRequest(
+ t, 'out-of-line', connection, [IDBKeyRange.bound('a', 'e')], 0);
+ req.onsuccess = t.step_func(evt => {
+ let result = evt.target.result;
+ let expected = [['value-a', 'value-b', 'value-c', 'value-d', 'value-e']];
+ assertTwoDArrayEquals(result, expected);
+ t.done();
+ });
+}, 'zero maxCount'); \ No newline at end of file