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

description("Regression test for IDBRequest issue calling continue on a cursor then aborting.");

indexedDBTest(prepareDatabase, testCursor);
function prepareDatabase()
{
    db = event.target.result;
    event.target.transaction.onabort = unexpectedAbortCallback;
    evalAndLog("db.createObjectStore('store')");
}


function testCursor()
{
    debug("");
    debug("testCursor:");
    evalAndLog("transaction = db.transaction('store', 'readwrite')");

    evalAndLog("store = transaction.objectStore('store')");
    request = evalAndLog("store.add('value1', 'key1')");
    request.onerror = unexpectedErrorCallback;
    request = evalAndLog("store.add('value2', 'key2')");
    request.onerror = unexpectedErrorCallback;

    debug("");
    evalAndLog("state = 0");
    evalAndLog("request = store.openCursor()");
    request.onsuccess = function() {
        debug("");
        debug("'success' event fired at request.");
        shouldBe("++state", "1");
        evalAndLog("request.result.continue()");
        transaction.abort();
    };
    request.onerror = function() {
        debug("");
        debug("'error' event fired at request.");
        shouldBe("++state", "2");
    };
    transaction.oncomplete = unexpectedCompleteCallback;
    transaction.onabort = function() {
        debug("");
        debug("'abort' event fired at transaction.");
        shouldBe("++state", "3");
        finishJSTest();
    };
}
