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

description("Ensure cursor calls behave as expected after cursor has run to the end.");

function test()
{
    setDBNameFromPath();
    prepareDatabase();
}

function prepareDatabase()
{
    preamble();
    request = evalAndLog("indexedDB.deleteDatabase(dbname)");
    request.onerror = unexpectedErrorCallback;
    request.onblocked = unexpectedBlockedCallback;
    request.onsuccess = onDeleteSuccess;
}

function onDeleteSuccess(evt)
{
    preamble(evt);
    request = evalAndLog("indexedDB.open(dbname, 1)");
    request.onerror = unexpectedErrorCallback;
    request.onblocked = unexpectedBlockedCallback;
    request.onupgradeneeded = onUpgradeNeeded;
    request.onsuccess = onOpenSuccess;
}

function onUpgradeNeeded(evt)
{
    preamble(evt);
    evalAndLog("db = event.target.result");
    evalAndLog("store = db.createObjectStore('store')");
    evalAndLog("store.put(1, 1)");
    evalAndLog("store.put(2, 2)");
}

function onOpenSuccess(evt)
{
    preamble(evt);
    evalAndLog("db = event.target.result");
    evalAndLog("transaction = db.transaction('store', 'readwrite', {durability: 'relaxed'})");
    evalAndLog("store = transaction.objectStore('store')");
    evalAndLog("count = 0");
    evalAndLog("cursorRequest = store.openCursor()");
    cursorRequest.onerror = unexpectedErrorCallback;
    cursorRequest.onsuccess = onCursorSuccess;
}

function onCursorSuccess(evt)
{
    preamble(evt);
    evalAndLog("cursor = event.target.result");
    if (count < 2) {
        shouldBeNonNull("cursor");
        evalAndLog("count++");
        evalAndLog("savedCursor = cursor");
        evalAndLog("cursor.continue()");
    } else {
        shouldBeNull("cursor");
        shouldBeNonNull("savedCursor");

        debug("");
        evalAndExpectException("savedCursor.update('value')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
        evalAndExpectException("savedCursor.advance(1)", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
        evalAndExpectException("savedCursor.continue()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
        evalAndExpectException("savedCursor.continue('key')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
        evalAndExpectException("savedCursor.delete()", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");

        debug("");
        finishJSTest();
    }
}

test();