<!DOCTYPE html>
<meta charset="utf-8">
<title>IDBCursor.continue() - index - throw TransactionInactiveError</title>
<link rel="author" title="Intel" href="http://www.intel.com">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="support.js"></script>
<div id="log"></div>
<script>

    var db,
      t = async_test(),
      records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" },
                  { pKey: "primaryKey_1", iKey: "indexKey_1" } ];

    var open_rq = createdb(t);
    open_rq.onupgradeneeded = function (event) {
        db = event.target.result;
        var objStore = db.createObjectStore("store", {keyPath : "pKey"});
        objStore.createIndex("index", "iKey");
        for (var i = 0; i < records.length; i++) {
            objStore.add(records[i]);
        }
        var rq = objStore.index("index").openCursor();
        rq.onsuccess = t.step_func(function(event) {
            var cursor = event.target.result;
            assert_true(cursor instanceof IDBCursor);

            event.target.transaction.abort();
            assert_throws("TransactionInactiveError", function() {
                cursor.continue();
            }, "Calling continue() should throws an exception TransactionInactiveError when the transaction is not active.");

            t.done();
        });
    }

</script>
