<!DOCTYPE html>
<title>IDBCursor.continue() - index - delete next element, and iterate to it</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,
      count = 0,
      t = async_test(document.title, {timeout: 10000}),
      records = [ { pKey: "primaryKey_0", obj: { iKey: "iKey_0" }},
                  { pKey: "primaryKey_1", obj: { iKey: "iKey_1" }},
                  { pKey: "primaryKey_2", obj: { iKey: "iKey_2" }} ],

      expected = [ [ "primaryKey_2", "iKey_2" ],
                   [ "primaryKey_0", "iKey_0" ] ];

    var open_rq = createdb(t);
    open_rq.onupgradeneeded = function(e) {
        db = e.target.result;
        var objStore = db.createObjectStore("test", {keyPath:["pKey", "obj.iKey"]});
        objStore.createIndex("index", [ "pKey", "obj.iKey" ]);

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

    open_rq.onsuccess = function(e) {
        var cursor_rq = db.transaction("test", "readwrite")
                          .objectStore("test")
                          .index("index")
                          .openCursor(null, "prev");

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

            if (count === 0) {
                e.target.source.objectStore.delete(["primaryKey_1", "iKey_1"]);
            }
            assert_array_equals(cursor.key, expected[count], "primary key");

            cursor.continue();
            count++;
        });
    };
</script>

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