| <!doctype html> |
| <meta charset=utf-8> |
| <title>IndexedDB: IDBKeyRange.includes()</title> |
| <meta name="help" href="https://w3c.github.io/IndexedDB/#keyrange"> |
| <script src=/resources/testharness.js></script> |
| <script src=/resources/testharnessreport.js></script> |
| <script> |
| |
| test(function() { |
| var range = IDBKeyRange.bound(12, 34); |
| assert_throws(new TypeError, function() { range.includes(); }, |
| 'throws if key is not specified'); |
| |
| assert_throws('DataError', function() { range.includes(undefined); }, |
| 'throws if key is undefined'); |
| assert_throws('DataError', function() { range.includes(null); }, |
| 'throws if key is null'); |
| assert_throws('DataError', function() { range.includes({}); }, |
| 'throws if key is not valid type'); |
| assert_throws('DataError', function() { range.includes(NaN); }, |
| 'throws if key is not valid number'); |
| assert_throws('DataError', function() { range.includes(new Date(NaN)); }, |
| 'throws if key is not valid date'); |
| assert_throws('DataError', function() { |
| var a = []; a[0] = a; range.includes(a); |
| }, 'throws if key is not valid array'); |
| }, "IDBKeyRange.includes() with invalid input"); |
| |
| test(function() { |
| var closedRange = IDBKeyRange.bound(5, 20); |
| assert_true(!!closedRange.includes, "IDBKeyRange has a .includes"); |
| assert_true(closedRange.includes(7), "in range"); |
| assert_false(closedRange.includes(1), "below range"); |
| assert_false(closedRange.includes(42), "above range"); |
| assert_true(closedRange.includes(5.01), "at the lower end of the range"); |
| assert_true(closedRange.includes(19.99), "at the upper end of the range"); |
| assert_false(closedRange.includes(4.99), "right below range"); |
| assert_false(closedRange.includes(21.01), "right above range"); |
| |
| assert_true(closedRange.includes(5), "lower boundary"); |
| assert_true(closedRange.includes(20), "upper boundary"); |
| }, "IDBKeyRange.includes() with a closed range"); |
| |
| test(function() { |
| var closedRange = IDBKeyRange.bound(5, 20, true, true); |
| assert_true(closedRange.includes(7), "in range"); |
| assert_false(closedRange.includes(1), "below range"); |
| assert_false(closedRange.includes(42), "above range"); |
| assert_true(closedRange.includes(5.01), "at the lower end of the range"); |
| assert_true(closedRange.includes(19.99), "at the upper end of the range"); |
| assert_false(closedRange.includes(4.99), "right below range"); |
| assert_false(closedRange.includes(21.01), "right above range"); |
| |
| assert_false(closedRange.includes(5), "lower boundary"); |
| assert_false(closedRange.includes(20), "upper boundary"); |
| }, "IDBKeyRange.includes() with an open range"); |
| |
| test(function() { |
| var range = IDBKeyRange.bound(5, 20, true); |
| assert_true(range.includes(7), "in range"); |
| assert_false(range.includes(1), "below range"); |
| assert_false(range.includes(42), "above range"); |
| assert_true(range.includes(5.01), "at the lower end of the range"); |
| assert_true(range.includes(19.99), "at the upper end of the range"); |
| assert_false(range.includes(4.99), "right below range"); |
| assert_false(range.includes(21.01), "right above range"); |
| |
| assert_false(range.includes(5), "lower boundary"); |
| assert_true(range.includes(20), "upper boundary"); |
| }, "IDBKeyRange.includes() with a lower-open upper-closed range"); |
| |
| test(function() { |
| var range = IDBKeyRange.bound(5, 20, false, true); |
| assert_true(range.includes(7), "in range"); |
| assert_false(range.includes(1), "below range"); |
| assert_false(range.includes(42), "above range"); |
| assert_true(range.includes(5.01), "at the lower end of the range"); |
| assert_true(range.includes(19.99), "at the upper end of the range"); |
| assert_false(range.includes(4.99), "right below range"); |
| assert_false(range.includes(21.01), "right above range"); |
| |
| assert_true(range.includes(5), "lower boundary"); |
| assert_false(range.includes(20), "upper boundary"); |
| }, "IDBKeyRange.includes() with a lower-closed upper-open range"); |
| |
| test(function() { |
| var onlyRange = IDBKeyRange.only(42); |
| assert_true(onlyRange.includes(42), "in range"); |
| assert_false(onlyRange.includes(1), "below range"); |
| assert_false(onlyRange.includes(9000), "above range"); |
| assert_false(onlyRange.includes(41), "right below range"); |
| assert_false(onlyRange.includes(43), "right above range"); |
| }, "IDBKeyRange.includes() with an only range"); |
| |
| test(function() { |
| var range = IDBKeyRange.lowerBound(5); |
| assert_false(range.includes(4), 'value before closed lower bound'); |
| assert_true(range.includes(5), 'value at closed lower bound'); |
| assert_true(range.includes(6), 'value after closed lower bound'); |
| assert_true(range.includes(42), 'value way after open lower bound'); |
| }, "IDBKeyRange.includes() with an closed lower-bounded range"); |
| |
| test(function() { |
| var range = IDBKeyRange.lowerBound(5, true); |
| assert_false(range.includes(4), 'value before open lower bound'); |
| assert_false(range.includes(5), 'value at open lower bound'); |
| assert_true(range.includes(6), 'value after open lower bound'); |
| assert_true(range.includes(42), 'value way after open lower bound'); |
| }, "IDBKeyRange.includes() with an open lower-bounded range"); |
| |
| test(function() { |
| var range = IDBKeyRange.upperBound(5); |
| assert_true(range.includes(-42), 'value way before closed upper bound'); |
| assert_true(range.includes(4), 'value before closed upper bound'); |
| assert_true(range.includes(5), 'value at closed upper bound'); |
| assert_false(range.includes(6), 'value after closed upper bound'); |
| }, "IDBKeyRange.includes() with an closed upper-bounded range"); |
| |
| test(function() { |
| var range = IDBKeyRange.upperBound(5, true); |
| assert_true(range.includes(-42), 'value way before closed upper bound'); |
| assert_true(range.includes(4), 'value before open upper bound'); |
| assert_false(range.includes(5), 'value at open upper bound'); |
| assert_false(range.includes(6), 'value after open upper bound'); |
| }, "IDBKeyRange.includes() with an open upper-bounded range"); |
| |
| test(function(t) { |
| assert_true(IDBKeyRange.bound(new Date(0), new Date()) |
| .includes(new Date(102729600000))); |
| assert_false(IDBKeyRange.bound(new Date(0), new Date(1e11)) |
| .includes(new Date(1e11 + 1))); |
| |
| assert_true(IDBKeyRange.bound('a', 'c').includes('b')); |
| assert_false(IDBKeyRange.bound('a', 'c').includes('d')); |
| |
| assert_true(IDBKeyRange.bound([], [[], []]).includes([[]])); |
| assert_false(IDBKeyRange.bound([], [[]]).includes([[[]]])); |
| }, 'IDBKeyRange.includes() with non-numeric keys'); |
| |
| </script> |