<!DOCTYPE html>
<title>IDBCursor.delete() - index - attempt to remove a record in an inactive transaction</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>

    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(e) {
        db = e.target.result;
        var objStore = db.createObjectStore("test", { keyPath: "pKey" });
        var index = objStore.createIndex("index", "iKey");

        for (var i = 0; i < records.length; i++)
            objStore.add(records[i]);

        var cursor_rq = index.openCursor();

        cursor_rq.onsuccess = t.step_func(function(e) {
            var cursor = e.target.result;
            assert_true(cursor instanceof IDBCursor, "cursor exist");
            window.cursor = cursor;
        });

        e.target.transaction.oncomplete = t.step_func(function(e) {
            assert_throws('TransactionInactiveError', function() { window.cursor.delete(); })
            t.done();
        });
    }

</script>

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