tor-browser

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

idbcursor_iterating.any.js (2771B)


      1 // META: global=window,worker
      2 // META: title=IDBCursor.continue() - object store
      3 // META: script=resources/support.js
      4 
      5 'use strict';
      6 
      7 async_test(t => {
      8  let db;
      9  let count = 0;
     10 
     11  let open_rq = createdb(t);
     12  open_rq.onupgradeneeded = function (e) {
     13    db = e.target.result;
     14    t.add_cleanup(function () { db.close(); indexedDB.deleteDatabase(db.name); });
     15    let objStore = db.createObjectStore("test", { keyPath: "key" });
     16 
     17    for (let i = 0; i < 500; i++)
     18      objStore.add({ key: i, val: "val_" + i });
     19 
     20    let rq = objStore.add({ key: 500, val: "val_500" });
     21 
     22    rq.onsuccess = t.step_func(function () {
     23      for (let i = 999; i > 500; i--)
     24        objStore.add({ key: i, val: "val_" + i });
     25    });
     26 
     27    objStore.createIndex('index', ['key', 'val']);
     28  };
     29 
     30  open_rq.onsuccess = function (e) {
     31    let cursor_rq = db.transaction("test", "readwrite")
     32      .objectStore("test")
     33      .openCursor();
     34 
     35    cursor_rq.onsuccess = t.step_func(function (e) {
     36      let cursor = e.target.result,
     37        store = e.target.source;
     38      if (!cursor) {
     39        assert_equals(count, 997, "cursor run count");
     40 
     41        let rq = e.target.source.count();
     42        rq.onsuccess = t.step_func(function (e) {
     43          assert_equals(e.target.result, 995, "object count");
     44          t.done();
     45        });
     46        return;
     47      }
     48 
     49      switch (cursor.key) {
     50        case 10:
     51          assert_equals(count, cursor.key, "count");
     52          store.delete(11);
     53          break;
     54 
     55        case 12:
     56        case 499:
     57        case 500:
     58        case 501:
     59          assert_equals(count, cursor.key - 1, "count");
     60          break;
     61 
     62        // Delete the next key
     63        case 510:
     64          store.delete(511);
     65          break;
     66 
     67        // Delete randomly
     68        case 512:
     69          store.delete(611);
     70          store.delete(499);
     71          store.delete(500);
     72          break;
     73 
     74        // Delete and add a new key
     75        case 520:
     76          store.delete(521);
     77          store.add({ key: 521, val: "new" });
     78          break;
     79 
     80        case 521:
     81          assert_equals(cursor.value.val, "new");
     82          break;
     83 
     84        // We should only be here once although we're basically making the index
     85        // "heavier" with its new key.
     86        case 530:
     87          assert_equals(cursor.value.val, "val_530");
     88          cursor.update({ key: 530, val: "val_531" })
     89 
     90          store.get(530).onsuccess = t.step_func(function (e) {
     91            assert_equals(e.target.result.val, "val_531");
     92          });
     93          break;
     94 
     95        // Shouldn't happen.
     96        case 11:
     97        case 511:
     98        case 611:
     99          assert_unreached(cursor.key + " should be deleted and never run");
    100          break;
    101      }
    102 
    103      cursor.continue();
    104      count++;
    105    });
    106  };
    107 }, "Iterate and Delete elements");