<!DOCTYPE html>
<title>IDBCursor.direction</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>

    function cursor_direction(constant, dir)
    {
        var db,
          t = async_test(document.title + " - " + dir),
          expected = dir ? dir : "next";

        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 cursor_rq, count = 0;
            var os = db.transaction("test")
                       .objectStore("test");
            if (dir)
                cursor_rq = os.openCursor(undefined, dir);
            else
                cursor_rq = os.openCursor();

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

                assert_equals(cursor.direction, constant, 'direction constant');
                assert_equals(cursor.direction, expected, 'direction');
                assert_readonly(cursor, 'direction');

                count++;
                if (count >= 2)
                    t.done();
            });

            var cursor_rq2 = db.transaction("test")
                              .objectStore("test")
                              .openCursor(undefined, constant);

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

                assert_equals(cursor.direction, constant, 'direction constant (second try)');
                assert_equals(cursor.direction, expected, 'direction (second try)');
                assert_readonly(cursor, 'direction');

                count++;
                if (count >= 2)
                    t.done();
            });

        });
    }

    cursor_direction("next");
    cursor_direction("next",       "next");
    cursor_direction("prev",       "prev");
    cursor_direction("nextunique", "nextunique");
    cursor_direction("prevunique", "prevunique");

</script>

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