chromium/third_party/blink/web_tests/storage/indexeddb/resources/cursor-continue-dir.js

if (this.importScripts) {
    importScripts('../../../resources/js-test.js');
    importScripts('shared.js');
}

description("Test that continue() calls against cursors are validated by direction.");

indexedDBTest(prepareDatabase, testCursors);
function prepareDatabase()
{
    db = event.target.result;
    evalAndLog("store = db.createObjectStore('store')");
    for (i = 1; i <= 10; ++i) {
        evalAndLog("store.put(" + i + "," + i + ")");
    }
}

function testCursors()
{
    evalAndLog("trans = db.transaction('store', 'readonly', {durability: 'relaxed'})");
    evalAndLog("store = trans.objectStore('store')");
    testForwardCursor();
}

function testForwardCursor()
{
    evalAndLog("request = store.openCursor(IDBKeyRange.bound(-Infinity, Infinity), 'next')");
    request.onerror = unexpectedErrorCallback;
    request.onsuccess = function() {
        evalAndLog("cursor = request.result");
        shouldBeNonNull("cursor");
        debug("Expect DataError if: The parameter is less than or equal to this cursor's position and this cursor's direction is \"next\" or \"nextunique\".");
        shouldBe("cursor.key", "1");
        evalAndExpectException("cursor.continue(-1)", "0", "'DataError'");

        testReverseCursor();
    };
}

function testReverseCursor()
{
    evalAndLog("request = store.openCursor(IDBKeyRange.bound(-Infinity, Infinity), 'prev')");
    request.onerror = unexpectedErrorCallback;
    request.onsuccess = function() {
        evalAndLog("cursor = request.result");
        shouldBeNonNull("cursor");
        debug("Expect DataError if: The parameter is greater than or equal to this cursor's position and this cursor's direction is \"prev\" or \"prevunique\".");
        shouldBe("cursor.key", "10");
        evalAndExpectException("cursor.continue(11)", "0", "'DataError'");

        finishJSTest();
    };
}