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

description("Test that integer versions are encoded/decoded consistently.");

versions = [1,
            0x7f,
            0x80,
            0x80000000,
            9007199254740991]; // 2^53-1, maximum JavaScript integer.

function test()
{
    removeVendorPrefixes();
    setDBNameFromPath();
    request = evalAndLog("indexedDB.deleteDatabase(dbname)");
    request.onblocked = unexpectedBlockedCallback;
    request.onerror = unexpectedErrorCallback;
    request.onsuccess = openFirstTime;
}

function openFirstTime(evt) {
    preamble(evt);

    if (!versions.length) {
        finishJSTest();
        return;
    }

    evalAndLog("version = " + versions.shift());
    evalAndLog("upgradeNeededFired = false");
    evalAndLog("request = indexedDB.open(dbname, version)");
    request.onblocked = unexpectedBlockedCallback;
    request.onerror = unexpectedErrorCallback;
    request.onupgradeneeded = function() {
        evalAndLog("upgradeNeededFired = true");
        evalAndLog("db = request.result");
        shouldBe("db.version", "version");
    };
    request.onsuccess = function() {
        shouldBeTrue("upgradeNeededFired");
        evalAndLog("db = request.result");
        shouldBe("db.version", "version");
        evalAndLog("db.close()");
        openSecondTime();
    };
}

function openSecondTime() {
    preamble();
    evalAndLog("request = indexedDB.open(dbname)");
    request.onblocked = unexpectedBlockedCallback;
    request.onerror = unexpectedErrorCallback;
    request.onupgradeneeded = unexpectedUpgradeNeededCallback;
    request.onsuccess = function() {
        evalAndLog("db = request.result");
        shouldBe("db.version", "version");
        evalAndLog("db.close()");
        openFirstTime();
    };
}

test();
