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

description("Test IndexedDB undefined as record value");

indexedDBTest(prepareDatabase);
function prepareDatabase()
{
    db = event.target.result;
    event.target.transaction.onabort = unexpectedAbortCallback;

    objectStore = evalAndLog("objectStore = db.createObjectStore('foo');");
    result = evalAndLog("result = objectStore.add(undefined, Infinity);");
    result.onerror = unexpectedErrorCallback;
    result.onsuccess = getValue;
}

function getValue()
{
    result = evalAndLog("result = objectStore.get(Infinity);");
    result.onerror = unexpectedErrorCallback;
    result.onsuccess = checkValue;
}

function checkValue()
{
    value = evalAndLog("value = event.target.result;");
    shouldBe("value", "undefined");
    result = evalAndLog("result = objectStore.openCursor();");
    result.onerror = unexpectedErrorCallback;
    result.onsuccess = checkCursor;
}

function checkCursor()
{
    cursor = evalAndLog("cursor = event.target.result;");
    if (cursor) {
        shouldBe("cursor.key", "Infinity");
        shouldBe("cursor.value", "undefined");
    } else {
        testFailed("cursor is null");
    }
    finishJSTest();
}
