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

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

description("Test consistency of IndexedDB's cursor objects.");

indexedDBTest(prepareDatabase, openBasicCursor);
function prepareDatabase()
{
    db = event.target.result;
    debug("setVersionSuccess():");
    self.trans = evalAndLog("trans = event.target.transaction");
    shouldBeNonNull("trans");
    trans.onabort = unexpectedAbortCallback;

    var objectStore = evalAndLog("objectStore = db.createObjectStore('basicStore')");
    evalAndLog("objectStore.add('someValue1', 'someKey1').onerror = unexpectedErrorCallback");
    evalAndLog("objectStore.add('someValue2', 'someKey2').onerror = unexpectedErrorCallback");
    evalAndLog("objectStore.add('someValue3', 'someKey3').onerror = unexpectedErrorCallback");
    evalAndLog("objectStore.add('someValue4', 'someKey4').onerror = unexpectedErrorCallback");
}

function openBasicCursor()
{
    debug("openBasicCursor()");
    evalAndLog("trans = db.transaction(['basicStore'], 'readwrite')");
    trans.onabort = unexpectedAbortCallback;
    trans.oncomplete = transactionComplete;

    keyRange = IDBKeyRange.lowerBound("someKey1");
    self.objectStore = evalAndLog("trans.objectStore('basicStore')");
    request = evalAndLog("objectStore.openCursor(keyRange)");
    request.onsuccess = checkCursor;
    request.onerror = unexpectedErrorCallback;
    counter = 1;
}

storedCursor = null;
function checkCursor()
{
    debug("")
    debug("checkCursor()");
    if (event.target.result == null) {
        shouldBe("counter", "5");
        return;
    }
    if (storedCursor == null)
      storedCursor = evalAndLog("storedCursor = event.target.result");

    shouldBe("storedCursor", "event.target.result");
    shouldBeEqualToString("storedCursor.key", "someKey" + counter);
    shouldBeEqualToString("event.target.result.key", "someKey" + counter);
    shouldBeEqualToString("storedCursor.value", "someValue" + counter);
    shouldBeEqualToString("event.target.result.value", "someValue" + counter);
    counter++;
    evalAndLog("event.target.result.continue()");
}

function transactionComplete()
{
    debug("transactionComplete()");
    finishJSTest();
}