<!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>
