idbobjectstore_getKey.any.js (3218B)
1 // META: title=IndexedDB: Test IDBObjectStore.getKey() 2 // META: script=resources/support.js 3 4 'use strict'; 5 6 function getkey_test(func, name) { 7 indexeddb_test( 8 (t, db, tx) => { 9 const basic = db.createObjectStore('basic'); 10 const key_path_store = db.createObjectStore('key path', 11 { keyPath: 'id' }); 12 const key_generator_store = db.createObjectStore('key generator', 13 { autoIncrement: true }); 14 const key_generator_and_path_store = db.createObjectStore( 15 'key generator and key path', 16 { autoIncrement: true, key_path: 'id' }); 17 18 for (let i = 1; i <= 10; ++i) { 19 basic.put(`value: ${i}`, i); 20 key_path_store.put({ id: i }); 21 key_generator_store.put(`value: ${i}`); 22 key_generator_and_path_store.put({}); 23 } 24 }, 25 func, 26 name 27 ); 28 } 29 30 getkey_test((t, db) => { 31 const tx = db.transaction('basic', 'readonly'); 32 const store = tx.objectStore('basic'); 33 assert_throws_js(TypeError, () => store.getKey()); 34 assert_throws_dom('DataError', () => store.getKey(null)); 35 assert_throws_dom('DataError', () => store.getKey({})); 36 t.done(); 37 }, 'IDBObjectStore.getKey() - invalid parameters'); 38 39 [ 40 'basic', 41 'key path', 42 'key generator', 43 'key generator and key path' 44 ].forEach(store_name => { 45 getkey_test((t, db) => { 46 const tx = db.transaction(store_name); 47 const store = tx.objectStore(store_name); 48 const request = store.getKey(5); 49 request.onerror = t.unreached_func('request failed'); 50 request.onsuccess = t.step_func(() => 51 assert_equals(request.result, 5)); 52 tx.onabort = t.unreached_func('transaction aborted'); 53 tx.oncomplete = t.step_func(() => t.done()); 54 }, `IDBObjectStore.getKey() - ${store_name} - key`); 55 56 getkey_test((t, db) => { 57 const tx = db.transaction(store_name); 58 const store = tx.objectStore(store_name); 59 const request = store.getKey(IDBKeyRange.lowerBound(4.5)); 60 request.onerror = t.unreached_func('request failed'); 61 request.onsuccess = t.step_func(() => 62 assert_equals(request.result, 5)); 63 tx.onabort = t.unreached_func('transaction aborted'); 64 tx.oncomplete = t.step_func(() => t.done()); 65 }, `IDBObjectStore.getKey() - ${store_name} - range`); 66 67 getkey_test((t, db) => { 68 const tx = db.transaction(store_name); 69 const store = tx.objectStore(store_name); 70 const request = store.getKey(11); 71 request.onerror = t.unreached_func('request failed'); 72 request.onsuccess = t.step_func(() => 73 assert_equals(request.result, undefined)); 74 tx.onabort = t.unreached_func('transaction aborted'); 75 tx.oncomplete = t.step_func(() => t.done()); 76 }, `IDBObjectStore.getKey() - ${store_name} - key - no match`); 77 78 getkey_test((t, db) => { 79 const tx = db.transaction(store_name); 80 const store = tx.objectStore(store_name); 81 const request = store.getKey(IDBKeyRange.lowerBound(11)); 82 request.onerror = t.unreached_func('request failed'); 83 request.onsuccess = t.step_func(() => 84 assert_equals(request.result, undefined) 85 ); 86 tx.onabort = t.unreached_func('transaction aborted'); 87 tx.oncomplete = t.step_func(() => t.done()); 88 }, `IDBObjectStore.getKey() - ${store_name} - range - no match`); 89 });