<!DOCTYPE html>
<title>IDBCursor is reused</title>
<link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
<meta rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBCursor-continue-void-any-key">
<meta rel=assert title="Otherwise this method runs the steps for asynchronously executing a request. However, the steps are slightly modified such that instead of creating a new IDBRequest, it reuses the request originally created when this cursor was created. The done flag on the request is set to false before the request is returned. The steps are run with the cursor's source as source and the steps for iterating a cursor as operation, using this cursor as cursor and the key parameter as key.">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="support.js"></script>

<script>

        var db
        var open_rq = createdb(async_test())

        open_rq.onupgradeneeded = function(e) {
            db = e.target.result
            var os = db.createObjectStore("test")

            os.add("data",  "k")
            os.add("data2", "k2")
        }

        open_rq.onsuccess = function(e) {
            var cursor
            var count = 0
            var rq = db.transaction("test").objectStore("test").openCursor()

            rq.onsuccess = this.step_func(function(e)
            {
                switch(count)
                {
                    case 0:
                        cursor = e.target.result

                        assert_equals(cursor.value, "data", "prequisite cursor.value")
                        cursor.custom_cursor_value = 1
                        e.target.custom_request_value = 2

                        cursor.continue()
                        break

                    case 1:
                        assert_equals(cursor.value, "data2", "prequisite cursor.value")
                        assert_equals(cursor.custom_cursor_value, 1, "custom cursor value")
                        assert_equals(e.target.custom_request_value, 2, "custom request value")

                        cursor.advance(1)
                        break

                    case 2:
                        assert_false(!!e.target.result, "got cursor")
                        assert_equals(cursor.custom_cursor_value, 1, "custom cursor value")
                        assert_equals(e.target.custom_request_value, 2, "custom request value")
                        break
                }
                count++
            })

            rq.transaction.oncomplete = this.step_func(function() {
                assert_equals(count, 3, "cursor callback runs")
                assert_equals(rq.custom_request_value, 2, "variable placed on old IDBRequest")
                assert_equals(cursor.custom_cursor_value, 1, "custom cursor value (transaction.complete)")
                this.done()
            })
        }

</script>

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