<!DOCTYPE html>
<title>IDBObjectStore.openCursor() - invalid</title>
<link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="support.js"></script>

<script>

    var db, open;

    setup(function() {
        open = indexedDB.open('testdb-' + new Date().getTime());
        open.onupgradeneeded = function(e) {
            db = e.target.result;
            var objStore = db.createObjectStore("test");
            objStore.createIndex("index", "");

            objStore.add("data",  1);
            objStore.add("data2", 2);
        };
    },
    { explicit_done: true });


    open.onsuccess = function() {

        async_test(document.title + " - pass something other than number").step(function(e) {
            var idx = db.transaction("test").objectStore("test").index("index");

            assert_throws("DataError",
                function() { idx.openCursor({ lower: "a" }); });

            assert_throws("DataError",
                function() { idx.openCursor({ lower: "a", lowerOpen: false }); });

            assert_throws("DataError",
                function() { idx.openCursor({ lower: "a", lowerOpen: false, upper: null, upperOpen: false }); });

            this.done();
        });


        // Stop blocking the testing system from hereon
        done();
    }

</script>

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