<!DOCTYPE html>
<!-- Submitted from TestTWF Paris -->
<html>
    <head>
        <meta charset=utf-8>
        <title id='desc'>IDBKeyRange Tests - Incorrect</title>
        <link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#range-concept">
        <link rel=assert title="If the lower key is greater than the upper key, then a DOMException of type DataError must be thrown.">
        <link rel=author href="mailto:chrcharles67@gmail.com" title="Christophe CHARLES">

        <script src="../../../resources/testharness.js"></script>
        <script src="../../../resources/testharnessreport.js"></script>
        <script src="support.js"></script>

        <script type="text/javascript">

            // TypeError: bound requires more than 0 arguments
            test( function() {
                assert_throws_js(TypeError, function() {
                    IDBKeyRange.bound();
                });
            }, "IDBKeyRange.bound() - bound requires more than 0 arguments.");

            // Null parameters
            test( function() {
                assert_throws_dom("DataError", function() {
                    IDBKeyRange.bound(null, null);
                });
            }, "IDBKeyRange.bound(null, null) - null parameters are incorrect.");

            // // Null parameter
            test( function() {
                assert_throws_dom("DataError", function() {
                    IDBKeyRange.bound(1, null);
                });
                assert_throws_dom("DataError", function() {
                    IDBKeyRange.bound(null, 1);
                });
            }, "IDBKeyRange.bound(1, null / null, 1) - null parameter is incorrect.");

            // bound incorrect
            test( function() {
                var lowerBad = Math.floor(Math.random()*31) + 5;
                var upper = lowerBad - 1;
                assert_throws_dom("DataError", function() {
                    IDBKeyRange.bound(lowerBad, upper);
                });
                assert_throws_dom("DataError", function() {
                    IDBKeyRange.bound('b', 'a');
                });
            }, "IDBKeyRange.bound(lower, upper / lower > upper) -  'lower' is greater than 'upper'."
            );

            test( function() {
                assert_throws_dom("DataError", function() {
                    IDBKeyRange.bound('a', 1);
                });
                assert_throws_dom("DataError", function() {
                    IDBKeyRange.bound(new Date(), 1);
                });
                assert_throws_dom("DataError", function() {
                    IDBKeyRange.bound([1, 2], 1);
                });
            }, "IDBKeyRange.bound(DOMString/Date/Array, 1) - A DOMString, Date and Array are greater than a float.");


            // ReferenceError: the variable is not defined
            test( function() {
                var goodVariable = 1;
                assert_throws_js(ReferenceError, function() {
                    IDBKeyRange.bound(noExistingVariable, 1);
                });
                assert_throws_js(ReferenceError, function() {
                    IDBKeyRange.bound(goodVariable, noExistingVariable);
                });
            }, "IDBKeyRange.bound(noExistingVariable, 1 / goodVariable, noExistingVariable) - noExistingVariable is not defined.");

            // Valid type key error
            test( function() {
                assert_throws_dom("DataError", function() {
                    IDBKeyRange.bound(true, 1);
                });
            }, "IDBKeyRange.bound(true, 1) - boolean is not a valid key type.");


        </script>
    </head>

    <body>
        <div id="log"></div>
    </body>
</html>