tor-browser

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

idbcursor-advance.any.js (5711B)


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