<!DOCTYPE html>
<title>IDBCursor.update() - index - modify a record in the object store </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.add("data", "key");
    };

    open_rq.onsuccess = t.step_func(function(e) {
        var txn = db.transaction("test", "readwrite"),
          cursor_rq = txn.objectStore("test")
                         .openCursor();

        cursor_rq.onsuccess = t.step_func(function(e) {
            var cursor = e.target.result;

            cursor.value = "new data!";
            cursor.update(cursor.value).onsuccess = t.step_func(function(e) {
                assert_equals(e.target.result, "key");
                t.done();
            });
        });
    });

</script>

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