<!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");

    // 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");

    // 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");

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