156 lines
4.5 KiB
JavaScript
156 lines
4.5 KiB
JavaScript
if (this.importScripts) {
|
|
importScripts('../../../resources/js-test.js');
|
|
importScripts('shared.js');
|
|
}
|
|
|
|
description("Test IndexedDB's IDBObjectStore.get(IDBKeyRange) method.");
|
|
|
|
indexedDBTest(prepareDatabase);
|
|
function prepareDatabase()
|
|
{
|
|
db = event.target.result;
|
|
event.target.transaction.onabort = unexpectedAbortCallback;
|
|
self.testLength = 10;
|
|
self.objectStore = evalAndLog("db.createObjectStore('someObjectStore')");
|
|
self.index = evalAndLog("objectStore.createIndex('someIndex', 'x')");
|
|
addData();
|
|
}
|
|
|
|
function addData()
|
|
{
|
|
for (var i=0; i<self.testLength; i++) {
|
|
evalAndLog("objectStore.add({'x': " + i + " }, " + i + ")");
|
|
}
|
|
|
|
evalAndLog("runObjStoreTests()");
|
|
}
|
|
|
|
function runObjStoreTests()
|
|
{
|
|
getRangeOnlyTest("objectStore", "get", ".x", "runIndexStoreTests()");
|
|
}
|
|
|
|
function runIndexStoreTests()
|
|
{
|
|
getRangeOnlyTest("index", "get", ".x", "runIndexKeyTests()");
|
|
}
|
|
|
|
function runIndexKeyTests()
|
|
{
|
|
getRangeOnlyTest("index", "getKey", "", "finishJSTest()");
|
|
}
|
|
|
|
function getRangeOnlyTest(store, method, resultPath, finish)
|
|
{
|
|
request = evalAndLog(store + "." + method + "(IDBKeyRange.only(3))");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function()
|
|
{
|
|
result = event.target.result;
|
|
shouldBe("result" + resultPath, "3");
|
|
|
|
getRangeLowerTest(store, method, resultPath, finish);
|
|
};
|
|
}
|
|
|
|
// A closed range with a lower bound should just return that value
|
|
function getRangeLowerTest(store, method, resultPath, finish)
|
|
{
|
|
request = evalAndLog(store + "." + method + "(IDBKeyRange.lowerBound(5))");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function()
|
|
{
|
|
result = event.target.result;
|
|
shouldBe("result" + resultPath, "5");
|
|
|
|
getRangeLowerOpenTest(store, method, resultPath, finish);
|
|
};
|
|
}
|
|
|
|
// An open range with a lower bound should skip the lower bound value
|
|
function getRangeLowerOpenTest(store, method, resultPath, finish)
|
|
{
|
|
request = evalAndLog(store + "." + method + "(IDBKeyRange.lowerBound(5, true))");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function()
|
|
{
|
|
result = event.target.result;
|
|
shouldBe("result" + resultPath, "6");
|
|
|
|
getRangeUpperTest(store, method, resultPath, finish);
|
|
};
|
|
}
|
|
|
|
// range with just upper should just return the first element
|
|
function getRangeUpperTest(store, method, resultPath, finish)
|
|
{
|
|
request = evalAndLog(store + "." + method + "(IDBKeyRange.upperBound(7))");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function()
|
|
{
|
|
result = event.target.result;
|
|
shouldBe("result" + resultPath, "0");
|
|
|
|
getRangeUpperOpenTest(store, method, resultPath, finish);
|
|
};
|
|
}
|
|
|
|
// range with just upper should just return the first element
|
|
function getRangeUpperOpenTest(store, method, resultPath, finish)
|
|
{
|
|
request = evalAndLog(store + "." + method + "(IDBKeyRange.upperBound(7, true))");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function()
|
|
{
|
|
result = event.target.result;
|
|
shouldBe("result" + resultPath, "0");
|
|
|
|
getRangeLowerFractionTest(store, method, resultPath, finish);
|
|
};
|
|
}
|
|
|
|
function getRangeLowerFractionTest(store, method, resultPath, finish)
|
|
{
|
|
request = evalAndLog(store + "." + method + "(IDBKeyRange.lowerBound(2.5))");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function()
|
|
{
|
|
result = event.target.result;
|
|
shouldBe("result" + resultPath, "3");
|
|
|
|
getOutOfRangeTest(store, method, resultPath, finish);
|
|
};
|
|
}
|
|
|
|
function getOutOfRangeTest(store, method, resultPath, finish)
|
|
{
|
|
request = evalAndLog(store + "." + method + "(IDBKeyRange.lowerBound(100))");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function()
|
|
{
|
|
result = event.target.result;
|
|
shouldBe("result", "undefined");
|
|
|
|
getBadOnlyTest(store, method, resultPath, finish);
|
|
};
|
|
}
|
|
|
|
function getBadOnlyTest(store, method, resultPath, finish)
|
|
{
|
|
request = evalAndLog(store + "." + method + "(IDBKeyRange.only(3.3))");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function()
|
|
{
|
|
result = event.target.result;
|
|
shouldBe("result", "undefined");
|
|
|
|
getNullTest(store, method, resultPath, finish);
|
|
};
|
|
}
|
|
|
|
function getNullTest(store, method, resultPath, finish)
|
|
{
|
|
evalAndExpectException(store + "." + method + "(null)", "0", "'DataError'");
|
|
evalAndLog(finish);
|
|
}
|