<!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_js(TypeError, function() { range.includes(); },
      'throws if key is not specified');

  assert_throws_dom('DataError', function() { range.includes(undefined); },
      'throws if key is undefined');
  assert_throws_dom('DataError', function() { range.includes(null); },
      'throws if key is null');
  assert_throws_dom('DataError', function() { range.includes({}); },
      'throws if key is not valid type');
  assert_throws_dom('DataError', function() { range.includes(NaN); },
      'throws if key is not valid number');
  assert_throws_dom('DataError', function() { range.includes(new Date(NaN)); },
      'throws if key is not valid date');
  assert_throws_dom('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>
