<!DOCTYPE html>
<meta charset=utf-8>
<title>IDBKeyRange Tests</title>
<link rel="author" title="Microsoft" href="http://www.microsoft.com">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=support.js></script>

<script>
    // only
    test( function() {
        var keyRange = IDBKeyRange.only(1);
        assert_true(keyRange instanceof IDBKeyRange, "keyRange instanceof IDBKeyRange");
        assert_equals(keyRange.lower, 1, "keyRange");
        assert_equals(keyRange.upper, 1, "keyRange");
        assert_false(keyRange.lowerOpen, "keyRange.lowerOpen");
        assert_false(keyRange.upperOpen, "keyRange.upperOpen");
    }, "IDBKeyRange.only() - returns an IDBKeyRange and the properties are set correctly");

    test( function() {
        assert_throws('DataError', function() { IDBKeyRange.only(undefined); }, 'undefined is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.only(null); }, 'null is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.only({}); }, 'Object is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.only(Symbol()); }, 'Symbol is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.only(true); }, 'boolean is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.only(() => {}); }, 'function is not a valid key');
    }, "IDBKeyRange.only() - throws on invalid keys");

    // lowerBound
    test( function() {
        var keyRange = IDBKeyRange.lowerBound(1, true)
        assert_true(keyRange instanceof IDBKeyRange, "keyRange instanceof IDBKeyRange");
        assert_equals(keyRange.lower, 1, "keyRange.lower");
        assert_equals(keyRange.upper, undefined, "keyRange.upper");
        assert_true(keyRange.lowerOpen, "keyRange.lowerOpen");
        assert_true(keyRange.upperOpen, "keyRange.upperOpen");
    }, "IDBKeyRange.lowerBound() - returns an IDBKeyRange and the properties are set correctly");

    test( function() {
        var keyRange = IDBKeyRange.lowerBound(1);
        assert_false(keyRange.lowerOpen, "keyRange.lowerOpen");
    }, "IDBKeyRange.lowerBound() - 'open' parameter has correct default set");

    test( function() {
        assert_throws('DataError', function() { IDBKeyRange.lowerBound(undefined); }, 'undefined is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.lowerBound(null); }, 'null is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.lowerBound({}); }, 'Object is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.lowerBound(Symbol()); }, 'Symbol is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.lowerBound(true); }, 'boolean is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.lowerBound(() => {}); }, 'function is not a valid key');
    }, "IDBKeyRange.lowerBound() - throws on invalid keys");

    // upperBound
    test( function() {
            var keyRange = IDBKeyRange.upperBound(1, true);
            assert_true(keyRange instanceof IDBKeyRange, "keyRange instanceof IDBKeyRange");
            assert_equals(keyRange.lower, undefined, "keyRange.lower");
            assert_equals(keyRange.upper, 1, "keyRange.upper");
            assert_true(keyRange.lowerOpen, "keyRange.lowerOpen");
            assert_true(keyRange.upperOpen, "keyRange.upperOpen");
    }, "IDBKeyRange.upperBound() - returns an IDBKeyRange and the properties are set correctly");

    test( function() {
        var keyRange = IDBKeyRange.upperBound(1);
        assert_false(keyRange.upperOpen, "keyRange.upperOpen");
    }, "IDBKeyRange.upperBound() - 'open' parameter has correct default set");

    test( function() {
        assert_throws('DataError', function() { IDBKeyRange.upperBound(undefined); }, 'undefined is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.upperBound(null); }, 'null is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.upperBound({}); }, 'Object is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.upperBound(Symbol()); }, 'Symbol is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.upperBound(true); }, 'boolean is not a valid key');
        assert_throws('DataError', function() { IDBKeyRange.upperBound(() => {}); }, 'function is not a valid key');
    }, "IDBKeyRange.upperBound() - throws on invalid keys");

    // bound
    test( function() {
        var keyRange = IDBKeyRange.bound(1, 2, true, true);
        assert_true(keyRange instanceof IDBKeyRange, "keyRange instanceof IDBKeyRange");
        assert_equals(keyRange.lower, 1, "keyRange");
        assert_equals(keyRange.upper, 2, "keyRange");
        assert_true(keyRange.lowerOpen, "keyRange.lowerOpen");
        assert_true(keyRange.upperOpen, "keyRange.upperOpen");
    }, "IDBKeyRange.bound() - returns an IDBKeyRange and the properties are set correctly");

    test( function() {
        var keyRange = IDBKeyRange.bound(1, 2);
        assert_false(keyRange.lowerOpen, "keyRange.lowerOpen");
        assert_false(keyRange.upperOpen, "keyRange.upperOpen");
    }, "IDBKeyRange.bound() - 'lowerOpen' and 'upperOpen' parameters have correct defaults set");
</script>

<div id=log></div>
