89 lines
3.1 KiB
JavaScript
89 lines
3.1 KiB
JavaScript
// META: title=IndexedDB: Test IDBObjectStore.getKey()
|
|
// META: script=resources/support.js
|
|
|
|
'use strict';
|
|
|
|
function getkey_test(func, name) {
|
|
indexeddb_test(
|
|
(t, db, tx) => {
|
|
const basic = db.createObjectStore('basic');
|
|
const key_path_store = db.createObjectStore('key path',
|
|
{ keyPath: 'id' });
|
|
const key_generator_store = db.createObjectStore('key generator',
|
|
{ autoIncrement: true });
|
|
const key_generator_and_path_store = db.createObjectStore(
|
|
'key generator and key path',
|
|
{ autoIncrement: true, key_path: 'id' });
|
|
|
|
for (let i = 1; i <= 10; ++i) {
|
|
basic.put(`value: ${i}`, i);
|
|
key_path_store.put({ id: i });
|
|
key_generator_store.put(`value: ${i}`);
|
|
key_generator_and_path_store.put({});
|
|
}
|
|
},
|
|
func,
|
|
name
|
|
);
|
|
}
|
|
|
|
getkey_test((t, db) => {
|
|
const tx = db.transaction('basic', 'readonly');
|
|
const store = tx.objectStore('basic');
|
|
assert_throws_js(TypeError, () => store.getKey());
|
|
assert_throws_dom('DataError', () => store.getKey(null));
|
|
assert_throws_dom('DataError', () => store.getKey({}));
|
|
t.done();
|
|
}, 'IDBObjectStore.getKey() - invalid parameters');
|
|
|
|
[
|
|
'basic',
|
|
'key path',
|
|
'key generator',
|
|
'key generator and key path'
|
|
].forEach(store_name => {
|
|
getkey_test((t, db) => {
|
|
const tx = db.transaction(store_name);
|
|
const store = tx.objectStore(store_name);
|
|
const request = store.getKey(5);
|
|
request.onerror = t.unreached_func('request failed');
|
|
request.onsuccess = t.step_func(() =>
|
|
assert_equals(request.result, 5));
|
|
tx.onabort = t.unreached_func('transaction aborted');
|
|
tx.oncomplete = t.step_func(() => t.done());
|
|
}, `IDBObjectStore.getKey() - ${store_name} - key`);
|
|
|
|
getkey_test((t, db) => {
|
|
const tx = db.transaction(store_name);
|
|
const store = tx.objectStore(store_name);
|
|
const request = store.getKey(IDBKeyRange.lowerBound(4.5));
|
|
request.onerror = t.unreached_func('request failed');
|
|
request.onsuccess = t.step_func(() =>
|
|
assert_equals(request.result, 5));
|
|
tx.onabort = t.unreached_func('transaction aborted');
|
|
tx.oncomplete = t.step_func(() => t.done());
|
|
}, `IDBObjectStore.getKey() - ${store_name} - range`);
|
|
|
|
getkey_test((t, db) => {
|
|
const tx = db.transaction(store_name);
|
|
const store = tx.objectStore(store_name);
|
|
const request = store.getKey(11);
|
|
request.onerror = t.unreached_func('request failed');
|
|
request.onsuccess = t.step_func(() =>
|
|
assert_equals(request.result, undefined));
|
|
tx.onabort = t.unreached_func('transaction aborted');
|
|
tx.oncomplete = t.step_func(() => t.done());
|
|
}, `IDBObjectStore.getKey() - ${store_name} - key - no match`);
|
|
|
|
getkey_test((t, db) => {
|
|
const tx = db.transaction(store_name);
|
|
const store = tx.objectStore(store_name);
|
|
const request = store.getKey(IDBKeyRange.lowerBound(11));
|
|
request.onerror = t.unreached_func('request failed');
|
|
request.onsuccess = t.step_func(() =>
|
|
assert_equals(request.result, undefined)
|
|
);
|
|
tx.onabort = t.unreached_func('transaction aborted');
|
|
tx.oncomplete = t.step_func(() => t.done());
|
|
}, `IDBObjectStore.getKey() - ${store_name} - range - no match`);
|
|
});
|