| // 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`); |
| }); |