| if (this.importScripts) { |
| importScripts('../../../resources/js-test.js'); |
| importScripts('shared.js'); |
| } |
| |
| description("Test IndexedDB keyPath with intrinsic properties"); |
| |
| indexedDBTest(prepareDatabase, testKeyPaths); |
| function prepareDatabase() |
| { |
| db = event.target.result; |
| event.target.transaction.onabort = unexpectedAbortCallback; |
| evalAndLog("store = db.createObjectStore('store', {keyPath: 'id'})"); |
| evalAndLog("store.createIndex('string length', 'string.length')"); |
| evalAndLog("store.createIndex('array length', 'array.length')"); |
| } |
| |
| function testKeyPaths() |
| { |
| debug(""); |
| debug("testKeyPaths():"); |
| |
| transaction = evalAndLog("transaction = db.transaction('store', 'readwrite')"); |
| transaction.onabort = unexpectedAbortCallback; |
| store = evalAndLog("store = transaction.objectStore('store')"); |
| |
| for (var i = 0; i < 5; i += 1) { |
| var datum = { |
| id: 'id#' + i, |
| string: Array(i * 2 + 1).join('x'), |
| array: Array(i * 3 + 1).join('x').split(/(?:)/) |
| }; |
| evalAndLog("store.put("+JSON.stringify(datum)+")"); |
| } |
| |
| checkStringLengths(); |
| |
| function checkStringLengths() { |
| evalAndLog("request = store.index('string length').openCursor()"); |
| request.onerror = unexpectedErrorCallback; |
| request.onsuccess = function (e) { |
| cursor = e.target.result; |
| if (cursor) { |
| shouldBe("cursor.key", "cursor.value.string.length"); |
| cursor.continue(); |
| } else { |
| checkArrayLengths(); |
| } |
| } |
| } |
| |
| function checkArrayLengths() { |
| evalAndLog("request = store.index('array length').openCursor()"); |
| request.onerror = unexpectedErrorCallback; |
| request.onsuccess = function (e) { |
| cursor = e.target.result; |
| if (cursor) { |
| shouldBe("cursor.key", "cursor.value.array.length"); |
| cursor.continue(); |
| } |
| } |
| } |
| |
| transaction.oncomplete = finishJSTest; |
| } |