tor-browser

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

idbcursor-advance-continue-async.any.js (4309B)


      1 // META: global=window,worker
      2 // META: title=IDBCursor asyncness
      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('data', 1);
     12  objStore.add('data2', 2);
     13 }
     14 
     15 indexeddb_test(upgrade_func, function(t, db) {
     16  let count = 0;
     17  let rq = db.transaction('test', 'readonly').objectStore('test').openCursor();
     18 
     19  rq.onsuccess = t.step_func(function(e) {
     20    if (!e.target.result) {
     21      assert_equals(count, 2, 'count');
     22      t.done();
     23      return;
     24    }
     25    let cursor = e.target.result;
     26 
     27    switch (count) {
     28      case 0:
     29        assert_equals(cursor.value, 'data');
     30        assert_equals(cursor.key, 1);
     31        cursor.advance(1);
     32        assert_equals(cursor.value, 'data');
     33        assert_equals(cursor.key, 1);
     34        break;
     35 
     36      case 1:
     37        assert_equals(cursor.value, 'data2');
     38        assert_equals(cursor.key, 2);
     39        cursor.advance(1);
     40        assert_equals(cursor.value, 'data2');
     41        assert_equals(cursor.key, 2);
     42        break;
     43 
     44      default:
     45        assert_unreached('Unexpected count: ' + count);
     46    }
     47 
     48    count++;
     49  });
     50  rq.onerror = t.unreached_func('unexpected error');
     51 }, 'IDBCursor asyncness - advance');
     52 
     53 indexeddb_test(upgrade_func, function(t, db) {
     54  let count = 0;
     55  let rq = db.transaction('test', 'readonly')
     56               .objectStore('test')
     57               .index('index')
     58               .openCursor();
     59 
     60  rq.onsuccess = t.step_func(function(e) {
     61    if (!e.target.result) {
     62      assert_equals(count, 2, 'count');
     63      t.done();
     64      return;
     65    }
     66    let cursor = e.target.result;
     67 
     68    switch (count) {
     69      case 0:
     70        assert_equals(cursor.value, 'data');
     71        assert_equals(cursor.key, 'data');
     72        assert_equals(cursor.primaryKey, 1);
     73        cursor.continue('data2');
     74        assert_equals(cursor.value, 'data');
     75        assert_equals(cursor.key, 'data');
     76        assert_equals(cursor.primaryKey, 1);
     77        break;
     78 
     79      case 1:
     80        assert_equals(cursor.value, 'data2');
     81        assert_equals(cursor.key, 'data2');
     82        assert_equals(cursor.primaryKey, 2);
     83        cursor.continue();
     84        assert_equals(cursor.value, 'data2');
     85        assert_equals(cursor.key, 'data2');
     86        assert_equals(cursor.primaryKey, 2);
     87        break;
     88 
     89      default:
     90        assert_unreached('Unexpected count: ' + count);
     91    }
     92 
     93    count++;
     94  });
     95  rq.onerror = t.unreached_func('unexpected error');
     96 }, 'IDBCursor asyncness - continue');
     97 
     98 indexeddb_test(upgrade_func, function(t, db) {
     99  let count = 0;
    100  let rq = db.transaction('test', 'readonly')
    101               .objectStore('test')
    102               .index('index')
    103               .openCursor();
    104 
    105  rq.onsuccess = t.step_func(function(e) {
    106    if (!e.target.result) {
    107      assert_equals(count, 2, 'count');
    108      t.done();
    109      return;
    110    }
    111    let cursor = e.target.result;
    112    cursor.advance(1);
    113 
    114    switch (count) {
    115      case 0:
    116        assert_equals(cursor.value, 'data');
    117        assert_equals(cursor.key, 'data');
    118        assert_equals(cursor.primaryKey, 1);
    119        break;
    120 
    121      case 1:
    122        assert_equals(cursor.value, 'data2');
    123        assert_equals(cursor.key, 'data2');
    124        assert_equals(cursor.primaryKey, 2);
    125        break;
    126 
    127      default:
    128        assert_unreached('Unexpected count: ' + count);
    129    }
    130 
    131    count++;
    132  });
    133  rq.onerror = t.unreached_func('unexpected error');
    134 }, 'IDBCursor asyncness - fresh advance still async');
    135 
    136 indexeddb_test(upgrade_func, function(t, db) {
    137  let count = 0;
    138  let rq = db.transaction('test', 'readonly').objectStore('test').openCursor();
    139 
    140  rq.onsuccess = t.step_func(function(e) {
    141    if (!e.target.result) {
    142      assert_equals(count, 2, 'count');
    143      t.done();
    144      return;
    145    }
    146    let cursor = e.target.result;
    147    cursor.continue();
    148 
    149    switch (count) {
    150      case 0:
    151        assert_equals(cursor.value, 'data');
    152        assert_equals(cursor.key, 1);
    153        break;
    154 
    155      case 1:
    156        assert_equals(cursor.value, 'data2');
    157        assert_equals(cursor.key, 2);
    158        break;
    159 
    160      default:
    161        assert_unreached('Unexpected count: ' + count);
    162    }
    163 
    164    count++;
    165  });
    166  rq.onerror = t.unreached_func('unexpected error');
    167 }, 'IDBCursor asyncness - fresh continue still async');