tor-browser

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

idbcursor-continue.any.js (5767B)


      1 // META: global=window,worker
      2 // META: title=IDBCursor.continue()
      3 // META: script=resources/support.js
      4 
      5 // Spec: https://w3c.github.io/IndexedDB/#dom-idbcursor-continue
      6 
      7 'use strict';
      8 
      9 const store = [
     10    { value: 'cupcake', key: 5 },
     11    { value: 'pancake', key: 3 },
     12    { value: 'pie', key: 1 },
     13    { value: 'pie', key: 4 },
     14    { value: 'taco', key: 2 }
     15 ];
     16 
     17 function upgrade_func(t, db, tx) {
     18  let os;
     19  let i;
     20  os = db.createObjectStore('test');
     21  os.createIndex('index', '');
     22 
     23  for (i = 0; i < store.length; i++)
     24    os.add(store[i].value, store[i].key);
     25 }
     26 
     27 indexeddb_test(upgrade_func, function(t, db) {
     28  let count = 0;
     29  const rq = db.transaction('test', 'readonly')
     30                 .objectStore('test')
     31                 .index('index')
     32                 .openCursor();
     33 
     34  rq.onsuccess = t.step_func((e) => {
     35    if (!e.target.result) {
     36      assert_equals(count, 5, 'count');
     37      t.done();
     38      return;
     39    }
     40    const cursor = e.target.result;
     41 
     42    assert_equals(cursor.value, store[count].value);
     43    assert_equals(cursor.primaryKey, store[count].key);
     44 
     45    cursor.continue();
     46 
     47    count++;
     48  });
     49  rq.onerror = t.unreached_func('unexpected error');
     50 }, 'IDBCursor.continue() - continues');
     51 
     52 
     53 indexeddb_test(upgrade_func, function(t, db) {
     54  let count = 0;
     55  const rq = db.transaction('test', 'readonly')
     56                 .objectStore('test')
     57                 .index('index')
     58                 .openCursor();
     59 
     60  rq.onsuccess = t.step_func((e) => {
     61    if (!e.target.result) {
     62      assert_equals(count, 3, 'count');
     63      t.done();
     64      return;
     65    }
     66    const cursor = e.target.result;
     67 
     68    switch (count) {
     69      case 0:
     70        assert_equals(cursor.value, 'cupcake');
     71        assert_equals(cursor.primaryKey, 5);
     72        cursor.continue('pie');
     73        break;
     74 
     75      case 1:
     76        assert_equals(cursor.value, 'pie');
     77        assert_equals(cursor.primaryKey, 1);
     78        cursor.continue('taco');
     79        break;
     80 
     81      case 2:
     82        assert_equals(cursor.value, 'taco');
     83        assert_equals(cursor.primaryKey, 2);
     84        cursor.continue();
     85        break;
     86 
     87      default:
     88        assert_unreached('Unexpected count: ' + count);
     89    }
     90 
     91    count++;
     92  });
     93  rq.onerror = t.unreached_func('unexpected error');
     94 }, 'IDBCursor.continue() - with given key');
     95 
     96 
     97 indexeddb_test(upgrade_func, function(t, db) {
     98  let count = 0;
     99  const rq = db.transaction('test', 'readonly')
    100                 .objectStore('test')
    101                 .index('index')
    102                 .openCursor();
    103 
    104  rq.onsuccess = t.step_func((e) => {
    105    if (!e.target.result) {
    106      assert_equals(count, 1, 'count');
    107      t.done();
    108      return;
    109    }
    110    const cursor = e.target.result;
    111 
    112    switch (count) {
    113      case 0:
    114        assert_equals(cursor.value, 'cupcake');
    115        assert_equals(cursor.primaryKey, 5);
    116        break;
    117 
    118      default:
    119        assert_unreached('Unexpected count: ' + count);
    120    }
    121 
    122    count++;
    123    cursor.continue([]);  // Arrays are always bigger than strings
    124  });
    125  rq.onerror = t.unreached_func('unexpected error2');
    126 }, 'IDBCursor.continue() - skip far forward');
    127 
    128 
    129 indexeddb_test(upgrade_func, function(t, db) {
    130  let count = 0;
    131  const rq = db.transaction('test', 'readonly')
    132                 .objectStore('test')
    133                 .index('index')
    134                 .openCursor(IDBKeyRange.lowerBound('cupcake', true));
    135 
    136  rq.onsuccess = t.step_func((e) => {
    137    if (!e.target.result) {
    138      assert_equals(count, 2, 'count');
    139      t.done();
    140      return;
    141    }
    142    const cursor = e.target.result;
    143 
    144    switch (count) {
    145      case 0:
    146        assert_equals(cursor.value, 'pancake');
    147        assert_equals(cursor.primaryKey, 3);
    148        cursor.continue('pie');
    149        break;
    150 
    151      case 1:
    152        assert_equals(cursor.value, 'pie');
    153        assert_equals(cursor.primaryKey, 1);
    154        cursor.continue('zzz');
    155        break;
    156 
    157      default:
    158        assert_unreached('Unexpected count: ' + count);
    159    }
    160 
    161    count++;
    162  });
    163  rq.onerror = t.unreached_func('unexpected error1');
    164 }, 'IDBCursor.continue() - within range');
    165 
    166 
    167 indexeddb_test(upgrade_func, function(t, db) {
    168  let count = 0;
    169  const rq = db.transaction('test', 'readonly')
    170                 .objectStore('test')
    171                 .index('index')
    172                 .openCursor('pancake');
    173 
    174  rq.onsuccess = t.step_func((e) => {
    175    if (!e.target.result) {
    176      assert_equals(count, 1, 'count');
    177      t.done();
    178      return;
    179    }
    180    const cursor = e.target.result;
    181 
    182    switch (count) {
    183      case 0:
    184        assert_equals(cursor.value, 'pancake');
    185        assert_equals(cursor.primaryKey, 3);
    186        cursor.continue('pie');
    187        break;
    188 
    189      default:
    190        assert_unreached('Unexpected count: ' + count);
    191    }
    192 
    193    count++;
    194  });
    195  rq.onerror = t.unreached_func('unexpected error1');
    196 }, 'IDBCursor.continue() - within single key range');
    197 
    198 indexeddb_test(upgrade_func, function(t, db) {
    199  let count = 0;
    200  const rq = db.transaction('test', 'readonly')
    201                 .objectStore('test')
    202                 .index('index')
    203                 .openCursor('pie');
    204 
    205  rq.onsuccess = t.step_func((e) => {
    206    if (!e.target.result) {
    207      assert_equals(count, 2, 'count');
    208      t.done();
    209      return;
    210    }
    211    const cursor = e.target.result;
    212 
    213    switch (count) {
    214      case 0:
    215        assert_equals(cursor.value, 'pie');
    216        assert_equals(cursor.primaryKey, 1);
    217        cursor.continue();
    218        break;
    219 
    220      case 1:
    221        assert_equals(cursor.value, 'pie');
    222        assert_equals(cursor.primaryKey, 4);
    223        cursor.continue();
    224        break;
    225 
    226      default:
    227        assert_unreached('Unexpected count: ' + count);
    228    }
    229 
    230    count++;
    231  });
    232  rq.onerror = t.unreached_func('unexpected error1');
    233 }, 'IDBCursor.continue() - within single key range, with several results');