<!DOCTYPE html>
<title>IDBCursor.continue() - index - add 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_2", obj: { iKey: "iKey_2" }} ],

      expected = [ [ "primaryKey_2", "iKey_2" ],
                   [ "primaryKey_1", "iKey_1" ],
                   [ "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"});
        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, 3, "cursor run count");
                t.done();
            }

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

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

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