| <html> |
| <head> |
| <script src="../../fast/js/resources/js-test-pre.js"></script> |
| <script src="resources/shared.js"></script> |
| </head> |
| <body> |
| <script> |
| |
| description("Test IndexedDB's IDBIndex.count()."); |
| |
| function test() |
| { |
| removeVendorPrefixes(); |
| request = evalAndLog("indexedDB.open('index-count')"); |
| request.onerror = unexpectedErrorCallback; |
| request.onsuccess = function() { |
| db = evalAndLog("db = event.target.result"); |
| request = evalAndLog("db.setVersion('new version')"); |
| request.onerror = unexpectedErrorCallback; |
| request.onsuccess = prepareDatabase; |
| }; |
| } |
| |
| function prepareDatabase() |
| { |
| debug(""); |
| debug("preparing database"); |
| self.trans = evalAndLog("trans = event.target.result"); |
| shouldBeTrue("trans !== null"); |
| |
| deleteAllObjectStores(db); |
| |
| store = evalAndLog("store = db.createObjectStore('storeName', null)"); |
| |
| self.index = evalAndLog("store.createIndex('indexName', '')"); |
| shouldBeTrue("store.indexNames.contains('indexName')"); |
| |
| debug("adding 0 ... 99"); |
| for (var i = 0; i < 100; ++i) { |
| request = store.add(i, i); |
| request.onerror = unexpectedErrorCallback; |
| } |
| trans.oncomplete = verifyCount; |
| } |
| |
| function verifyCount() |
| { |
| debug(""); |
| debug("verifying count without range"); |
| trans = evalAndLog("trans = db.transaction('storeName', IDBTransaction.READ_ONLY)"); |
| shouldBeTrue("trans != null"); |
| trans.onabort = unexpectedAbortCallback; |
| trans.oncomplete = verifyCountWithRange; |
| |
| store = evalAndLog("store = trans.objectStore('storeName')"); |
| shouldBeTrue("store != null"); |
| index = evalAndLog("index = store.index('indexName')"); |
| shouldBeTrue("index != null"); |
| |
| request = evalAndLog("request = index.count()"); |
| request.onerror = unexpectedErrorCallback; |
| request.onsuccess = function() { |
| shouldBeTrue("typeof request.result == 'number'"); |
| shouldBe("request.result", "100"); |
| // let the transaction complete |
| }; |
| } |
| |
| function verifyCountWithRange() |
| { |
| debug(""); |
| debug("verifying count with range"); |
| trans = evalAndLog("trans = db.transaction('storeName', IDBTransaction.READ_ONLY)"); |
| shouldBeTrue("trans != null"); |
| trans.onabort = unexpectedAbortCallback; |
| trans.oncomplete = verifyCountWithKey; |
| |
| store = evalAndLog("store = trans.objectStore('storeName')"); |
| shouldBeTrue("store != null"); |
| store = evalAndLog("index = trans.objectStore('storeName').index('indexName')"); |
| shouldBeTrue("index != null"); |
| |
| var tests = [ |
| { lower: 0, lowerOpen: false, upper: 99, upperOpen: false, expected: 100 }, |
| { lower: 0, lowerOpen: true, upper: 99, upperOpen: false, expected: 99 }, |
| { lower: 0, lowerOpen: false, upper: 99, upperOpen: true, expected: 99 }, |
| { lower: 0, lowerOpen: true, upper: 99, upperOpen: true, expected: 98 }, |
| { lower: 0, lowerOpen: false, upper: 100, upperOpen: false, expected: 100 }, |
| { lower: 0, lowerOpen: false, upper: 100, upperOpen: false, expected: 100 }, |
| { lower: 10, lowerOpen: false, upper: 100, upperOpen: false, expected: 90 }, |
| { lower: 0, lowerOpen: false, upper: 0, upperOpen: false, expected: 1 }, |
| { lower: 500, lowerOpen: false, upper: 500, upperOpen: false, expected: 0 } |
| ]; |
| |
| function nextTest() { |
| debug(""); |
| evalAndLog("test = " + JSON.stringify(tests.shift())); |
| request = evalAndLog("request = index.count(IDBKeyRange.bound(test.lower, test.upper, test.lowerOpen, test.upperOpen))"); |
| request.onerror = unexpectedErrorCallback; |
| request.onsuccess = function() { |
| shouldBeTrue("typeof request.result == 'number'"); |
| shouldBe("request.result", String(test.expected)); |
| |
| if (tests.length) { |
| nextTest(); |
| } |
| // otherwise let the transaction complete |
| }; |
| } |
| |
| nextTest(); |
| } |
| |
| function verifyCountWithKey() |
| { |
| debug(""); |
| debug("verifying count with key"); |
| trans = evalAndLog("trans = db.transaction('storeName', IDBTransaction.READ_ONLY)"); |
| shouldBeTrue("trans != null"); |
| trans.onabort = unexpectedAbortCallback; |
| trans.oncomplete = finishJSTest; |
| |
| store = evalAndLog("store = trans.objectStore('storeName')"); |
| shouldBeTrue("store != null"); |
| store = evalAndLog("index = trans.objectStore('storeName').index('indexName')"); |
| shouldBeTrue("index != null"); |
| |
| evalAndExpectException("index.count(NaN)", "IDBDatabaseException.DATA_ERR"); |
| evalAndExpectException("index.count({})", "IDBDatabaseException.DATA_ERR"); |
| evalAndExpectException("index.count(/regex/)", "IDBDatabaseException.DATA_ERR"); |
| |
| var tests = [ |
| { key: 0, expected: 1 }, |
| { key: 100, expected: 0 }, |
| { key: null, expected: 100 } |
| ]; |
| |
| function nextTest() { |
| debug(""); |
| evalAndLog("test = " + JSON.stringify(tests.shift())); |
| request = evalAndLog("request = index.count(test.key)"); |
| request.onerror = unexpectedErrorCallback; |
| request.onsuccess = function() { |
| shouldBeTrue("typeof request.result == 'number'"); |
| shouldBe("request.result", String(test.expected)); |
| |
| if (tests.length) { |
| nextTest(); |
| } |
| // otherwise let the transaction complete |
| }; |
| } |
| |
| nextTest(); |
| } |
| |
| test(); |
| |
| </script> |
| <script src="../../fast/js/resources/js-test-post.js"></script> |
| </body> |
| </html> |