tor-browser

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

test_count.js (13467B)


      1 /**
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/publicdomain/zero/1.0/
      4 */
      5 
      6 /* exported testGenerator */
      7 var testGenerator = testSteps();
      8 
      9 function* testSteps() {
     10  const name = this.window ? window.location.pathname : "Splendid Test";
     11  const objectStoreName = "People";
     12 
     13  const objectStoreData = [
     14    { key: "237-23-7732", value: { name: "Bob", height: 60, weight: 120 } },
     15    { key: "237-23-7733", value: { name: "Ann", height: 52, weight: 110 } },
     16    { key: "237-23-7734", value: { name: "Ron", height: 73, weight: 180 } },
     17    { key: "237-23-7735", value: { name: "Sue", height: 58, weight: 130 } },
     18    { key: "237-23-7736", value: { name: "Joe", height: 65, weight: 150 } },
     19    { key: "237-23-7737", value: { name: "Pat", height: 65 } },
     20    { key: "237-23-7738", value: { name: "Mel", height: 66, weight: {} } },
     21    { key: "237-23-7739", value: { name: "Tom", height: 62, weight: 130 } },
     22  ];
     23 
     24  const indexData = {
     25    name: "weight",
     26    keyPath: "weight",
     27    options: { unique: false },
     28  };
     29 
     30  const weightSort = [1, 0, 3, 7, 4, 2];
     31 
     32  let request = indexedDB.open(name, 1);
     33  request.onerror = errorHandler;
     34  request.onupgradeneeded = grabEventAndContinueHandler;
     35  request.onsuccess = grabEventAndContinueHandler;
     36  let event = yield undefined;
     37 
     38  is(event.type, "upgradeneeded", "Got correct event type");
     39 
     40  let db = event.target.result;
     41  db.onerror = errorHandler;
     42 
     43  let objectStore = db.createObjectStore(objectStoreName, {});
     44  objectStore.createIndex(indexData.name, indexData.keyPath, indexData.options);
     45 
     46  for (let data of objectStoreData) {
     47    objectStore.add(data.value, data.key);
     48  }
     49 
     50  event = yield undefined;
     51 
     52  is(event.type, "success", "Got correct event type");
     53 
     54  objectStore = db
     55    .transaction(db.objectStoreNames)
     56    .objectStore(objectStoreName);
     57 
     58  objectStore.count().onsuccess = grabEventAndContinueHandler;
     59  event = yield undefined;
     60 
     61  is(
     62    event.target.result,
     63    objectStoreData.length,
     64    "Correct number of object store entries for all keys"
     65  );
     66 
     67  objectStore.count(null).onsuccess = grabEventAndContinueHandler;
     68  event = yield undefined;
     69 
     70  is(
     71    event.target.result,
     72    objectStoreData.length,
     73    "Correct number of object store entries for null key"
     74  );
     75 
     76  objectStore.count(objectStoreData[2].key).onsuccess =
     77    grabEventAndContinueHandler;
     78  event = yield undefined;
     79 
     80  is(
     81    event.target.result,
     82    1,
     83    "Correct number of object store entries for single existing key"
     84  );
     85 
     86  objectStore.count("foo").onsuccess = grabEventAndContinueHandler;
     87  event = yield undefined;
     88 
     89  is(
     90    event.target.result,
     91    0,
     92    "Correct number of object store entries for single non-existing key"
     93  );
     94 
     95  let keyRange = IDBKeyRange.only(objectStoreData[2].key);
     96  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
     97  event = yield undefined;
     98 
     99  is(
    100    event.target.result,
    101    1,
    102    "Correct number of object store entries for existing only keyRange"
    103  );
    104 
    105  keyRange = IDBKeyRange.only("foo");
    106  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
    107  event = yield undefined;
    108 
    109  is(
    110    event.target.result,
    111    0,
    112    "Correct number of object store entries for non-existing only keyRange"
    113  );
    114 
    115  keyRange = IDBKeyRange.lowerBound(objectStoreData[2].key);
    116  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
    117  event = yield undefined;
    118 
    119  is(
    120    event.target.result,
    121    objectStoreData.length - 2,
    122    "Correct number of object store entries for lowerBound keyRange"
    123  );
    124 
    125  keyRange = IDBKeyRange.lowerBound(objectStoreData[2].key, true);
    126  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
    127  event = yield undefined;
    128 
    129  is(
    130    event.target.result,
    131    objectStoreData.length - 3,
    132    "Correct number of object store entries for lowerBound keyRange"
    133  );
    134 
    135  keyRange = IDBKeyRange.lowerBound("foo");
    136  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
    137  event = yield undefined;
    138 
    139  is(
    140    event.target.result,
    141    0,
    142    "Correct number of object store entries for lowerBound keyRange"
    143  );
    144 
    145  keyRange = IDBKeyRange.upperBound(objectStoreData[2].key, false);
    146  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
    147  event = yield undefined;
    148 
    149  is(
    150    event.target.result,
    151    3,
    152    "Correct number of object store entries for upperBound keyRange"
    153  );
    154 
    155  keyRange = IDBKeyRange.upperBound(objectStoreData[2].key, true);
    156  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
    157  event = yield undefined;
    158 
    159  is(
    160    event.target.result,
    161    2,
    162    "Correct number of object store entries for upperBound keyRange"
    163  );
    164 
    165  keyRange = IDBKeyRange.upperBound("foo", true);
    166  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
    167  event = yield undefined;
    168 
    169  is(
    170    event.target.result,
    171    objectStoreData.length,
    172    "Correct number of object store entries for upperBound keyRange"
    173  );
    174 
    175  keyRange = IDBKeyRange.bound(
    176    objectStoreData[0].key,
    177    objectStoreData[objectStoreData.length - 1].key
    178  );
    179  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
    180  event = yield undefined;
    181 
    182  is(
    183    event.target.result,
    184    objectStoreData.length,
    185    "Correct number of object store entries for bound keyRange"
    186  );
    187 
    188  keyRange = IDBKeyRange.bound(
    189    objectStoreData[0].key,
    190    objectStoreData[objectStoreData.length - 1].key,
    191    true
    192  );
    193  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
    194  event = yield undefined;
    195 
    196  is(
    197    event.target.result,
    198    objectStoreData.length - 1,
    199    "Correct number of object store entries for bound keyRange"
    200  );
    201 
    202  keyRange = IDBKeyRange.bound(
    203    objectStoreData[0].key,
    204    objectStoreData[objectStoreData.length - 1].key,
    205    true,
    206    true
    207  );
    208  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
    209  event = yield undefined;
    210 
    211  is(
    212    event.target.result,
    213    objectStoreData.length - 2,
    214    "Correct number of object store entries for bound keyRange"
    215  );
    216 
    217  keyRange = IDBKeyRange.bound("foo", "foopy", true, true);
    218  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
    219  event = yield undefined;
    220 
    221  is(
    222    event.target.result,
    223    0,
    224    "Correct number of object store entries for bound keyRange"
    225  );
    226 
    227  keyRange = IDBKeyRange.bound(objectStoreData[0].key, "foo", true, true);
    228  objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
    229  event = yield undefined;
    230 
    231  is(
    232    event.target.result,
    233    objectStoreData.length - 1,
    234    "Correct number of object store entries for bound keyRange"
    235  );
    236 
    237  let index = objectStore.index(indexData.name);
    238 
    239  index.count().onsuccess = grabEventAndContinueHandler;
    240  event = yield undefined;
    241 
    242  is(
    243    event.target.result,
    244    weightSort.length,
    245    "Correct number of index entries for no key"
    246  );
    247 
    248  index.count(objectStoreData[7].value.weight).onsuccess =
    249    grabEventAndContinueHandler;
    250  event = yield undefined;
    251 
    252  is(
    253    event.target.result,
    254    2,
    255    "Correct number of index entries for duplicate key"
    256  );
    257 
    258  index.count(objectStoreData[0].value.weight).onsuccess =
    259    grabEventAndContinueHandler;
    260  event = yield undefined;
    261 
    262  is(event.target.result, 1, "Correct number of index entries for single key");
    263 
    264  keyRange = IDBKeyRange.only(objectStoreData[0].value.weight);
    265  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    266  event = yield undefined;
    267 
    268  is(
    269    event.target.result,
    270    1,
    271    "Correct number of index entries for only existing keyRange"
    272  );
    273 
    274  keyRange = IDBKeyRange.only("foo");
    275  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    276  event = yield undefined;
    277 
    278  is(
    279    event.target.result,
    280    0,
    281    "Correct number of index entries for only non-existing keyRange"
    282  );
    283 
    284  keyRange = IDBKeyRange.only(objectStoreData[7].value.weight);
    285  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    286  event = yield undefined;
    287 
    288  is(
    289    event.target.result,
    290    2,
    291    "Correct number of index entries for only duplicate keyRange"
    292  );
    293 
    294  keyRange = IDBKeyRange.lowerBound(
    295    objectStoreData[weightSort[0]].value.weight
    296  );
    297  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    298  event = yield undefined;
    299 
    300  is(
    301    event.target.result,
    302    weightSort.length,
    303    "Correct number of index entries for lowerBound keyRange"
    304  );
    305 
    306  keyRange = IDBKeyRange.lowerBound(
    307    objectStoreData[weightSort[1]].value.weight
    308  );
    309  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    310  event = yield undefined;
    311 
    312  is(
    313    event.target.result,
    314    weightSort.length - 1,
    315    "Correct number of index entries for lowerBound keyRange"
    316  );
    317 
    318  keyRange = IDBKeyRange.lowerBound(
    319    objectStoreData[weightSort[0]].value.weight - 1
    320  );
    321  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    322  event = yield undefined;
    323 
    324  is(
    325    event.target.result,
    326    weightSort.length,
    327    "Correct number of index entries for lowerBound keyRange"
    328  );
    329 
    330  keyRange = IDBKeyRange.lowerBound(
    331    objectStoreData[weightSort[0]].value.weight,
    332    true
    333  );
    334  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    335  event = yield undefined;
    336 
    337  is(
    338    event.target.result,
    339    weightSort.length - 1,
    340    "Correct number of index entries for lowerBound keyRange"
    341  );
    342 
    343  keyRange = IDBKeyRange.lowerBound(
    344    objectStoreData[weightSort[weightSort.length - 1]].value.weight
    345  );
    346  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    347  event = yield undefined;
    348 
    349  is(
    350    event.target.result,
    351    1,
    352    "Correct number of index entries for lowerBound keyRange"
    353  );
    354 
    355  keyRange = IDBKeyRange.lowerBound(
    356    objectStoreData[weightSort[weightSort.length - 1]].value.weight,
    357    true
    358  );
    359  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    360  event = yield undefined;
    361 
    362  is(
    363    event.target.result,
    364    0,
    365    "Correct number of index entries for lowerBound keyRange"
    366  );
    367 
    368  keyRange = IDBKeyRange.lowerBound(
    369    objectStoreData[weightSort[weightSort.length - 1]].value.weight + 1,
    370    true
    371  );
    372  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    373  event = yield undefined;
    374 
    375  is(
    376    event.target.result,
    377    0,
    378    "Correct number of index entries for lowerBound keyRange"
    379  );
    380 
    381  keyRange = IDBKeyRange.upperBound(
    382    objectStoreData[weightSort[0]].value.weight
    383  );
    384  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    385  event = yield undefined;
    386 
    387  is(
    388    event.target.result,
    389    1,
    390    "Correct number of index entries for upperBound keyRange"
    391  );
    392 
    393  keyRange = IDBKeyRange.upperBound(
    394    objectStoreData[weightSort[0]].value.weight,
    395    true
    396  );
    397  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    398  event = yield undefined;
    399 
    400  is(
    401    event.target.result,
    402    0,
    403    "Correct number of index entries for upperBound keyRange"
    404  );
    405 
    406  keyRange = IDBKeyRange.upperBound(
    407    objectStoreData[weightSort[weightSort.length - 1]].value.weight
    408  );
    409  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    410  event = yield undefined;
    411 
    412  is(
    413    event.target.result,
    414    weightSort.length,
    415    "Correct number of index entries for upperBound keyRange"
    416  );
    417 
    418  keyRange = IDBKeyRange.upperBound(
    419    objectStoreData[weightSort[weightSort.length - 1]].value.weight,
    420    true
    421  );
    422  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    423  event = yield undefined;
    424 
    425  is(
    426    event.target.result,
    427    weightSort.length - 1,
    428    "Correct number of index entries for upperBound keyRange"
    429  );
    430 
    431  keyRange = IDBKeyRange.upperBound(
    432    objectStoreData[weightSort[weightSort.length - 1]].value.weight,
    433    true
    434  );
    435  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    436  event = yield undefined;
    437 
    438  is(
    439    event.target.result,
    440    weightSort.length - 1,
    441    "Correct number of index entries for upperBound keyRange"
    442  );
    443 
    444  keyRange = IDBKeyRange.upperBound("foo");
    445  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    446  event = yield undefined;
    447 
    448  is(
    449    event.target.result,
    450    weightSort.length,
    451    "Correct number of index entries for upperBound keyRange"
    452  );
    453 
    454  keyRange = IDBKeyRange.bound("foo", "foopy");
    455  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    456  event = yield undefined;
    457 
    458  is(
    459    event.target.result,
    460    0,
    461    "Correct number of index entries for bound keyRange"
    462  );
    463 
    464  keyRange = IDBKeyRange.bound(
    465    objectStoreData[weightSort[0]].value.weight,
    466    objectStoreData[weightSort[weightSort.length - 1]].value.weight
    467  );
    468  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    469  event = yield undefined;
    470 
    471  is(
    472    event.target.result,
    473    weightSort.length,
    474    "Correct number of index entries for bound keyRange"
    475  );
    476 
    477  keyRange = IDBKeyRange.bound(
    478    objectStoreData[weightSort[0]].value.weight,
    479    objectStoreData[weightSort[weightSort.length - 1]].value.weight,
    480    true
    481  );
    482  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    483  event = yield undefined;
    484 
    485  is(
    486    event.target.result,
    487    weightSort.length - 1,
    488    "Correct number of index entries for bound keyRange"
    489  );
    490 
    491  keyRange = IDBKeyRange.bound(
    492    objectStoreData[weightSort[0]].value.weight,
    493    objectStoreData[weightSort[weightSort.length - 1]].value.weight,
    494    true,
    495    true
    496  );
    497  index.count(keyRange).onsuccess = grabEventAndContinueHandler;
    498  event = yield undefined;
    499 
    500  is(
    501    event.target.result,
    502    weightSort.length - 2,
    503    "Correct number of index entries for bound keyRange"
    504  );
    505 
    506  finishTest();
    507 }