tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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