| if (this.importScripts) { |
| importScripts('../../../resources/js-test.js'); |
| importScripts('shared.js'); |
| } |
| |
| description("Test IndexedDB keyPaths"); |
| |
| testData = [{ name: "simple identifier", |
| value: {id:10}, |
| keyPath: "id", |
| key: 10 }, |
| { name: "simple identifiers", |
| value: {id1:10, id2:20}, |
| keyPath: "id1", |
| key: 10 }, |
| { name: "nested identifiers", |
| value: {outer:{inner:10}}, |
| keyPath: "outer.inner", |
| key: 10 }, |
| { name: "nested identifiers with distractions", |
| value: {outer:{inner:10}, inner:{outer:20}}, |
| keyPath: "outer.inner", |
| key: 10 }, |
| ]; |
| nextToOpen = 0; |
| |
| indexedDBTest(prepareDatabase); |
| var db = null; |
| var trans = null; |
| function prepareDatabase() |
| { |
| db = db || event.target.result; |
| if (!trans) { |
| trans = event.target.transaction; |
| trans.onabort = unexpectedAbortCallback; |
| } |
| debug(""); |
| debug("testing " + testData[nextToOpen].name); |
| deleteAllObjectStores(db); |
| objectStore = evalAndLog("objectStore = db.createObjectStore(testData[nextToOpen].name, {keyPath: testData[nextToOpen].keyPath});"); |
| result = evalAndLog("result = objectStore.add(testData[nextToOpen].value);"); |
| result.onerror = unexpectedErrorCallback; |
| result.onsuccess = openCursor; |
| } |
| |
| function openCursor() |
| { |
| result = evalAndLog("result = objectStore.openCursor();"); |
| result.onerror = unexpectedErrorCallback; |
| result.onsuccess = checkCursor; |
| } |
| |
| function checkCursor() |
| { |
| cursor = evalAndLog("cursor = event.target.result;"); |
| if (cursor) { |
| shouldBe("cursor.key", "testData[nextToOpen].key"); |
| } else { |
| testFailed("cursor is null"); |
| } |
| if (++nextToOpen < testData.length) { |
| prepareDatabase(); |
| } else { |
| finishJSTest(); |
| } |
| } |