<!DOCTYPE html>
<title>IDBCursor.update() - object store - attempt to modify 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" });

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

        var cursor_rq = objStore.openCursor();

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

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

</script>

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