<!DOCTYPE html>
<title>IDBCursor.continue() - attempt to call continue two times</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,
      t = async_test(document.title, {timeout: 10000});

    var open_rq = createdb(t);
    open_rq.onupgradeneeded = function(e) {
        db = e.target.result;
        var objStore = db.createObjectStore("test");

        objStore.createIndex("index", "");

        objStore.add("data",  1);
        objStore.add("data2", 2);
    };

    open_rq.onsuccess = function(e) {
        var count = 0;
        var cursor_rq = db.transaction("test")
                          .objectStore("test")
                          .index("index")
                          .openCursor();

        cursor_rq.onsuccess = t.step_func(function(e) {
            if (!e.target.result) {
                assert_equals(count, 2, 'count');
                t.done();
                return;
            }
            var cursor = e.target.result;

            cursor.continue(undefined);

            // Second try
            assert_throws('InvalidStateError',
                function() { cursor.continue(); }, 'second continue');

            assert_throws('InvalidStateError',
                function() { cursor.continue(3); }, 'third continue');

            count++;
        });
    };

</script>

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