| if (this.importScripts) { |
| importScripts('../../../resources/js-test.js'); |
| importScripts('shared.js'); |
| } |
| |
| description("Test that IndexedDB's cursor key/primaryKey/value properties preserve mutations."); |
| |
| function test() |
| { |
| removeVendorPrefixes(); |
| setDBNameFromPath(); |
| |
| request = evalAndLog("indexedDB.deleteDatabase(dbname)"); |
| request.onblocked = unexpectedBlockedCallback; |
| request.onerror = unexpectedErrorCallback; |
| request.onsuccess = function() { |
| request = evalAndLog("indexedDB.open(dbname, 1)"); |
| request.onblocked = unexpectedBlockedCallback; |
| request.onerror = unexpectedErrorCallback; |
| request.onupgradeneeded = onUpgradeNeeded; |
| request.onsuccess = onOpenSuccess; |
| }; |
| } |
| |
| function onUpgradeNeeded(evt) |
| { |
| preamble(evt); |
| evalAndLog("db = event.target.result"); |
| evalAndLog("store = db.createObjectStore('store')"); |
| evalAndLog("index = store.createIndex('index', 'id')"); |
| evalAndLog("store.put({id: ['indexKey']}, ['primaryKey'])"); |
| } |
| |
| function onOpenSuccess(evt) |
| { |
| preamble(evt); |
| evalAndLog("db = event.target.result"); |
| evalAndLog("trans = db.transaction('store')"); |
| trans.onabort = unexpectedAbortCallback; |
| evalAndLog("store = trans.objectStore('store')"); |
| evalAndLog("index = store.index('index')"); |
| |
| debug(""); |
| evalAndLog("request = index.openCursor()"); |
| request.onerror = unexpectedErrorCallback; |
| request.onsuccess = function onCursorSuccess(evt) { |
| preamble(evt); |
| evalAndLog("cursor = event.target.result"); |
| shouldBeNonNull("cursor"); |
| shouldBeTrue("areArraysEqual(cursor.key, ['indexKey'])"); |
| shouldBeTrue("areArraysEqual(cursor.primaryKey, ['primaryKey'])"); |
| checkProperty("cursor.key"); |
| checkProperty("cursor.primaryKey"); |
| checkProperty("cursor.value"); |
| }; |
| |
| trans.oncomplete = finishJSTest; |
| } |
| |
| function checkProperty(property) |
| { |
| debug(""); |
| |
| debug("Check identity:"); |
| evalAndLog("v = " + property); |
| shouldBeTrue("v === " + property); |
| |
| debug("Check read-only:"); |
| evalAndLog(property + " = null"); |
| shouldBeTrue("v === " + property); |
| |
| debug("Check mutability:"); |
| evalAndLog(property + ".expando = 123"); |
| shouldBe(property + ".expando", "123"); |
| } |
| |
| test(); |