tor-browser

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

idbkeyrange-includes.any.js (6312B)


      1 // META: title=IndexedDB: IDBKeyRange.includes()
      2 // META: global=window,worker
      3 // META: script=resources/support.js
      4 
      5 // Spec: https://w3c.github.io/IndexedDB/#keyrange
      6 
      7 'use strict';
      8 
      9 test(() => {
     10  const range = IDBKeyRange.bound(12, 34);
     11  assert_throws_js(TypeError, () => {
     12    range.includes();
     13  }, 'throws if key is not specified');
     14 
     15  assert_throws_dom('DataError', () => {
     16    range.includes(undefined);
     17  }, 'throws if key is undefined');
     18  assert_throws_dom('DataError', () => {
     19    range.includes(null);
     20  }, 'throws if key is null');
     21  assert_throws_dom('DataError', () => {
     22    range.includes({});
     23  }, 'throws if key is not valid type');
     24  assert_throws_dom('DataError', () => {
     25    range.includes(NaN);
     26  }, 'throws if key is not valid number');
     27  assert_throws_dom('DataError', () => {
     28    range.includes(new Date(NaN));
     29  }, 'throws if key is not valid date');
     30  assert_throws_dom('DataError', () => {
     31    var a = [];
     32    a[0] = a;
     33    range.includes(a);
     34  }, 'throws if key is not valid array');
     35 }, 'IDBKeyRange.includes() with invalid input');
     36 
     37 test(() => {
     38  const closedRange = IDBKeyRange.bound(5, 20);
     39  assert_true(!!closedRange.includes, 'IDBKeyRange has a .includes');
     40  assert_true(closedRange.includes(7), 'in range');
     41  assert_false(closedRange.includes(1), 'below range');
     42  assert_false(closedRange.includes(42), 'above range');
     43  assert_true(closedRange.includes(5.01), 'at the lower end of the range');
     44  assert_true(closedRange.includes(19.99), 'at the upper end of the range');
     45  assert_false(closedRange.includes(4.99), 'right below range');
     46  assert_false(closedRange.includes(21.01), 'right above range');
     47 
     48  assert_true(closedRange.includes(5), 'lower boundary');
     49  assert_true(closedRange.includes(20), 'upper boundary');
     50 }, 'IDBKeyRange.includes() with a closed range');
     51 
     52 test(() => {
     53  const closedRange = IDBKeyRange.bound(5, 20, true, true);
     54  assert_true(closedRange.includes(7), 'in range');
     55  assert_false(closedRange.includes(1), 'below range');
     56  assert_false(closedRange.includes(42), 'above range');
     57  assert_true(closedRange.includes(5.01), 'at the lower end of the range');
     58  assert_true(closedRange.includes(19.99), 'at the upper end of the range');
     59  assert_false(closedRange.includes(4.99), 'right below range');
     60  assert_false(closedRange.includes(21.01), 'right above range');
     61 
     62  assert_false(closedRange.includes(5), 'lower boundary');
     63  assert_false(closedRange.includes(20), 'upper boundary');
     64 }, 'IDBKeyRange.includes() with an open range');
     65 
     66 test(() => {
     67  const range = IDBKeyRange.bound(5, 20, true);
     68  assert_true(range.includes(7), 'in range');
     69  assert_false(range.includes(1), 'below range');
     70  assert_false(range.includes(42), 'above range');
     71  assert_true(range.includes(5.01), 'at the lower end of the range');
     72  assert_true(range.includes(19.99), 'at the upper end of the range');
     73  assert_false(range.includes(4.99), 'right below range');
     74  assert_false(range.includes(21.01), 'right above range');
     75 
     76  assert_false(range.includes(5), 'lower boundary');
     77  assert_true(range.includes(20), 'upper boundary');
     78 }, 'IDBKeyRange.includes() with a lower-open upper-closed range');
     79 
     80 test(() => {
     81  const range = IDBKeyRange.bound(5, 20, false, true);
     82  assert_true(range.includes(7), 'in range');
     83  assert_false(range.includes(1), 'below range');
     84  assert_false(range.includes(42), 'above range');
     85  assert_true(range.includes(5.01), 'at the lower end of the range');
     86  assert_true(range.includes(19.99), 'at the upper end of the range');
     87  assert_false(range.includes(4.99), 'right below range');
     88  assert_false(range.includes(21.01), 'right above range');
     89 
     90  assert_true(range.includes(5), 'lower boundary');
     91  assert_false(range.includes(20), 'upper boundary');
     92 }, 'IDBKeyRange.includes() with a lower-closed upper-open range');
     93 
     94 test(() => {
     95  const onlyRange = IDBKeyRange.only(42);
     96  assert_true(onlyRange.includes(42), 'in range');
     97  assert_false(onlyRange.includes(1), 'below range');
     98  assert_false(onlyRange.includes(9000), 'above range');
     99  assert_false(onlyRange.includes(41), 'right below range');
    100  assert_false(onlyRange.includes(43), 'right above range');
    101 }, 'IDBKeyRange.includes() with an only range');
    102 
    103 test(() => {
    104  const range = IDBKeyRange.lowerBound(5);
    105  assert_false(range.includes(4), 'value before closed lower bound');
    106  assert_true(range.includes(5), 'value at closed lower bound');
    107  assert_true(range.includes(6), 'value after closed lower bound');
    108  assert_true(range.includes(42), 'value way after open lower bound');
    109 }, 'IDBKeyRange.includes() with an closed lower-bounded range');
    110 
    111 test(() => {
    112  const range = IDBKeyRange.lowerBound(5, true);
    113  assert_false(range.includes(4), 'value before open lower bound');
    114  assert_false(range.includes(5), 'value at open lower bound');
    115  assert_true(range.includes(6), 'value after open lower bound');
    116  assert_true(range.includes(42), 'value way after open lower bound');
    117 }, 'IDBKeyRange.includes() with an open lower-bounded range');
    118 
    119 test(() => {
    120  const range = IDBKeyRange.upperBound(5);
    121  assert_true(range.includes(-42), 'value way before closed upper bound');
    122  assert_true(range.includes(4), 'value before closed upper bound');
    123  assert_true(range.includes(5), 'value at closed upper bound');
    124  assert_false(range.includes(6), 'value after closed upper bound');
    125 }, 'IDBKeyRange.includes() with an closed upper-bounded range');
    126 
    127 test(() => {
    128  const range = IDBKeyRange.upperBound(5, true);
    129  assert_true(range.includes(-42), 'value way before closed upper bound');
    130  assert_true(range.includes(4), 'value before open upper bound');
    131  assert_false(range.includes(5), 'value at open upper bound');
    132  assert_false(range.includes(6), 'value after open upper bound');
    133 }, 'IDBKeyRange.includes() with an open upper-bounded range');
    134 
    135 test((t) => {
    136  assert_true(IDBKeyRange.bound(new Date(0), new Date())
    137                  .includes(new Date(102729600000)));
    138  assert_false(IDBKeyRange.bound(new Date(0), new Date(1e11))
    139                   .includes(new Date(1e11 + 1)));
    140 
    141  assert_true(IDBKeyRange.bound('a', 'c').includes('b'));
    142  assert_false(IDBKeyRange.bound('a', 'c').includes('d'));
    143 
    144  assert_true(IDBKeyRange.bound([], [[], []]).includes([[]]));
    145  assert_false(IDBKeyRange.bound([], [[]]).includes([[[]]]));
    146 }, 'IDBKeyRange.includes() with non-numeric keys');