if (this.importScripts) {
importScripts('../../../resources/js-test.js');
importScripts('shared.js');
}
description("Test IndexedDB index population.");
indexedDBTest(prepareDatabase, doSetVersion2);
function prepareDatabase()
{
db = event.target.result;
evalAndLog("transaction = event.target.transaction");
transaction.onerror = unexpectedErrorCallback;
transaction.onabort = unexpectedAbortCallback;
store = evalAndLog("store = db.createObjectStore('store1')");
evalAndLog("store.put({data: 'a', indexKey: 10}, 1)");
evalAndLog("store.put({data: 'b', indexKey: 20}, 2)");
evalAndLog("store.put({data: 'c', indexKey: 10}, 3)");
evalAndLog("store.put({data: 'd', indexKey: 20}, 4)");
evalAndLog("index = store.createIndex('index1', 'indexKey')");
shouldBeTrue("index instanceof IDBIndex");
shouldBeFalse("index.unique");
request = evalAndLog("request = index.count(IDBKeyRange.bound(-Infinity, Infinity))");
request.onerror = unexpectedErrorCallback;
request.onsuccess = function () {
shouldBe("request.result", "4");
};
}
function doSetVersion2() {
debug("");
debug("doSetVersion2():");
evalAndLog("db.close()");
evalAndLog("request = indexedDB.open(dbname, 2)");
request.onupgradeneeded = setVersion2;
request.onblocked = unexpectedBlockedCallback;
}
function setVersion2()
{
debug("");
debug("setVersion2():");
db = event.target.result;
transaction2 = evalAndLog("transaction = request.transaction");
transaction2.onabort = setVersion2Abort;
transaction2.oncomplete = unexpectedCompleteCallback;
var capturePhase = true;
transaction2.addEventListener("error", unexpectedErrorCallback, !capturePhase);
transaction2.addEventListener("error", unexpectedErrorCallback, capturePhase);
db.addEventListener("error", unexpectedErrorCallback, !capturePhase);
db.addEventListener("error", unexpectedErrorCallback, capturePhase);
store = evalAndLog("store = db.createObjectStore('store2')");
evalAndLog("store.put({data: 'a', indexKey: 10}, 1)");
evalAndLog("store.put({data: 'b', indexKey: 20}, 2)");
evalAndLog("store.put({data: 'c', indexKey: 10}, 3)");
evalAndLog("store.put({data: 'd', indexKey: 20}, 4)");
evalAndLog("index2 = store.createIndex('index2', 'indexKey', { unique: true })");
shouldBeTrue("index2 instanceof IDBIndex");
shouldBeTrue("index2.unique");
}
function setVersion2Abort()
{
debug("");
debug("setVersion2Abort():");
shouldBe("db.objectStoreNames.length", "1");
shouldBeEqualToString("db.objectStoreNames[0]", "store1");
finishJSTest();
}