Test that IndexedDB's cursor key/primaryKey/value properties preserve mutations.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;

indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname, 1)

onUpgradeNeeded():
db = event.target.result
store = db.createObjectStore('store')
index = store.createIndex('index', 'id')
store.put({id: ['indexKey']}, ['primaryKey'])

onOpenSuccess():
db = event.target.result
trans = db.transaction('store')
store = trans.objectStore('store')
index = store.index('index')

request = index.openCursor()

onCursorSuccess():
cursor = event.target.result
PASS cursor is non-null.
PASS areArraysEqual(cursor.key, ['indexKey']) is true
PASS areArraysEqual(cursor.primaryKey, ['primaryKey']) is true

Check identity:
v = cursor.key
PASS v === cursor.key is true
Check read-only:
cursor.key = null
PASS v === cursor.key is true
Check mutability:
cursor.key.expando = 123
PASS cursor.key.expando is 123

Check identity:
v = cursor.primaryKey
PASS v === cursor.primaryKey is true
Check read-only:
cursor.primaryKey = null
PASS v === cursor.primaryKey is true
Check mutability:
cursor.primaryKey.expando = 123
PASS cursor.primaryKey.expando is 123

Check identity:
v = cursor.value
PASS v === cursor.value is true
Check read-only:
cursor.value = null
PASS v === cursor.value is true
Check mutability:
cursor.value.expando = 123
PASS cursor.value.expando is 123
PASS successfullyParsed is true

TEST COMPLETE

