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');