| 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); |
| } |