mirror of
https://github.com/servo/servo.git
synced 2025-10-18 01:09:16 +01:00
143 lines
No EOL
4.6 KiB
JavaScript
143 lines
No EOL
4.6 KiB
JavaScript
// 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'); |