tor-browser

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

idbindex-multientry.any.js (2876B)


      1 // META: global=window,worker
      2 // META: script=resources/support.js
      3 // META: title=IDBIndex.multiEntry
      4 
      5 'use strict';
      6 
      7 async_test(t => {
      8  createdb(t).onupgradeneeded = function(e) {
      9    let store = e.target.result.createObjectStore('store');
     10    assert_throws_dom('InvalidAccessError', function() {
     11      store.createIndex('actors', ['name'], {multiEntry: true})
     12    });
     13    t.done();
     14  };
     15 }, 'Array keyPath with multiEntry');
     16 
     17 async_test(t => {
     18  let db;
     19  let open_rq = createdb(t);
     20  let obj = {test: 'yo', idxkeys: []};
     21  for (let i = 0; i < 1000; i++)
     22    obj.idxkeys.push('index_no_' + i);
     23  open_rq.onupgradeneeded = function(e) {
     24    db = e.target.result;
     25    db.createObjectStore('store').createIndex(
     26        'index', 'idxkeys', {multiEntry: true});
     27  };
     28  open_rq.onsuccess = function(e) {
     29    let tx = db.transaction('store', 'readwrite');
     30    tx.objectStore('store').put(obj, 1).onsuccess = t.step_func(function(e) {
     31      assert_equals(e.target.result, 1, 'put\'d key');
     32    });
     33    tx.oncomplete = t.step_func(function() {
     34      let idx = db.transaction('store', 'readonly')
     35                    .objectStore('store')
     36                    .index('index');
     37      for (let i = 0; i < 1000; i++) {
     38        idx.get('index_no_' + i).onsuccess = t.step_func(function(e) {
     39          assert_equals(e.target.result.test, 'yo');
     40        });
     41      }
     42 
     43      idx.get('index_no_999').onsuccess = t.step_func(function(e) {
     44        assert_equals(e.target.result.test, 'yo');
     45        assert_equals(e.target.result.idxkeys.length, 1000);
     46        t.done();
     47      });
     48    });
     49  };
     50 }, 'A 1000 entry multiEntry array');
     51 
     52 async_test(t => {
     53  let db;
     54  let expected_keys = [1, 2, 2, 3, 3];
     55  let open_rq = createdb(t)
     56  open_rq.onupgradeneeded = function(e) {
     57    db = e.target.result;
     58    let store = db.createObjectStore('store')
     59    store.createIndex('actors', 'name', {multiEntry: true})
     60    store.add({name: 'Odin'}, 1);
     61    store.add({name: ['Rita', 'Scheeta', {Bobby: 'Bobby'}]}, 2);
     62    store.add({name: [{s: 'Robert'}, 'Neil', 'Bobby']}, 3);
     63  };
     64  open_rq.onsuccess = function(e) {
     65    let gotten_keys = [];
     66    let idx = db.transaction('store', 'readonly')
     67                  .objectStore('store')
     68                  .index('actors');
     69    idx.getKey('Odin').onsuccess = t.step_func(function(e) {
     70      gotten_keys.push(e.target.result)
     71    });
     72    idx.getKey('Rita').onsuccess = t.step_func(function(e) {
     73      gotten_keys.push(e.target.result)
     74    });
     75    idx.getKey('Scheeta').onsuccess = t.step_func(function(e) {
     76      gotten_keys.push(e.target.result)
     77    });
     78    idx.getKey('Neil').onsuccess = t.step_func(function(e) {
     79      gotten_keys.push(e.target.result)
     80    });
     81    idx.getKey('Bobby').onsuccess = t.step_func(function(e) {
     82      gotten_keys.push(e.target.result)
     83      assert_array_equals(gotten_keys, expected_keys);
     84      t.done();
     85    });
     86  }
     87 }, 'Adding keys');