Test IndexedDB's cursor update.

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

dbname = "cursor-update.html"
indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)
setVersionSuccess():
trans = event.target.transaction
PASS trans is non-null.
Deleted all object stores.
objectStore = db.createObjectStore('basicStore')
objectStore.add('myValue1', 'myKey1').onerror = unexpectedErrorCallback
objectStore.add('myValue2', 'myKey2').onerror = unexpectedErrorCallback
objectStore.add('myValue3', 'myKey3').onerror = unexpectedErrorCallback
objectStore.add('myValue4', 'myKey4').onerror = unexpectedErrorCallback
objectStore = db.createObjectStore('autoIncrementStore', {autoIncrement: true})
objectStore.add('foo1').onerror = unexpectedErrorCallback
objectStore.add('foo2').onerror = unexpectedErrorCallback
objectStore.add('foo3').onerror = unexpectedErrorCallback
objectStore.add('foo4').onerror = unexpectedErrorCallback
objectStore = db.createObjectStore('keyPathStore', {keyPath: 'id'})
objectStore.createIndex('numberIndex', 'number')
objectStore.add({number: 1, id: 1}).onerror = unexpectedErrorCallback
objectStore.add({number: 2, id: 2}).onerror = unexpectedErrorCallback
objectStore.add({number: 3, id: 3}).onerror = unexpectedErrorCallback
objectStore.add({number: 4, id: 4}).onerror = unexpectedErrorCallback
openBasicCursor()
trans = db.transaction(['basicStore', 'autoIncrementStore', 'keyPathStore'], 'readwrite')
trans.objectStore('basicStore')
objectStore.openCursor(keyRange)
basicUpdateCursor()
PASS event.target.source is objectStore
event.target.result.update('myUpdatedValue' + counter++)
event.target.source.continue()
basicUpdateCursor()
PASS event.target.source is objectStore
event.target.result.update('myUpdatedValue' + counter++)
event.target.source.continue()
basicUpdateCursor()
PASS event.target.source is objectStore
event.target.result.update('myUpdatedValue' + counter++)
event.target.source.continue()
basicUpdateCursor()
PASS event.target.source is objectStore
event.target.result.update('myUpdatedValue' + counter++)
event.target.source.continue()
basicUpdateCursor()
PASS event.target.source is objectStore
PASS counter is 5
trans.objectStore('basicStore').openCursor(keyRange)
basicCheckCursor()
PASS event.target.result.key is "myKey1"
PASS event.target.result.value is "myUpdatedValue1"
event.target.result.continue()
basicCheckCursor()
PASS event.target.result.key is "myKey2"
PASS event.target.result.value is "myUpdatedValue2"
event.target.result.continue()
basicCheckCursor()
PASS event.target.result.key is "myKey3"
PASS event.target.result.value is "myUpdatedValue3"
event.target.result.continue()
basicCheckCursor()
PASS event.target.result.key is "myKey4"
PASS event.target.result.value is "myUpdatedValue4"
event.target.result.continue()
basicCheckCursor()
PASS counter is 5
trans.objectStore('autoIncrementStore').openCursor(keyRange)
autoIncrementUpdateCursor()
event.target.result.update('myUpdatedFoo' + counter++)
event.target.source.continue()
autoIncrementUpdateCursor()
event.target.result.update('myUpdatedFoo' + counter++)
event.target.source.continue()
autoIncrementUpdateCursor()
event.target.result.update('myUpdatedFoo' + counter++)
event.target.source.continue()
autoIncrementUpdateCursor()
event.target.result.update('myUpdatedFoo' + counter++)
event.target.source.continue()
autoIncrementUpdateCursor()
PASS counter is 5
trans.objectStore('autoIncrementStore').openCursor(keyRange)
autoIncrementCheckCursor()
PASS event.target.result.key is counter
PASS event.target.result.value is "myUpdatedFoo1"
event.target.result.continue()
autoIncrementCheckCursor()
PASS event.target.result.key is counter
PASS event.target.result.value is "myUpdatedFoo2"
event.target.result.continue()
autoIncrementCheckCursor()
PASS event.target.result.key is counter
PASS event.target.result.value is "myUpdatedFoo3"
event.target.result.continue()
autoIncrementCheckCursor()
PASS event.target.result.key is counter
PASS event.target.result.value is "myUpdatedFoo4"
event.target.result.continue()
autoIncrementCheckCursor()
PASS counter is 5
trans.objectStore('keyPathStore').openCursor(keyRange)
keyPathUpdateCursor()
Expecting exception from event.target.result.update({id: 100 + counter, number: 100 + counter})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'update' on 'IDBCursor': The effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor's effective key.
event.target.result.update({id: counter, number: 100 + counter++})
event.target.source.continue()
keyPathUpdateCursor()
Expecting exception from event.target.result.update({id: 100 + counter, number: 100 + counter})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'update' on 'IDBCursor': The effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor's effective key.
event.target.result.update({id: counter, number: 100 + counter++})
event.target.source.continue()
keyPathUpdateCursor()
Expecting exception from event.target.result.update({id: 100 + counter, number: 100 + counter})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'update' on 'IDBCursor': The effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor's effective key.
event.target.result.update({id: counter, number: 100 + counter++})
event.target.source.continue()
keyPathUpdateCursor()
Expecting exception from event.target.result.update({id: 100 + counter, number: 100 + counter})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'update' on 'IDBCursor': The effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor's effective key.
event.target.result.update({id: counter, number: 100 + counter++})
event.target.source.continue()
keyPathUpdateCursor()
PASS counter is 5
trans.objectStore('keyPathStore').openCursor(keyRange)
keyPathCheckCursor()
PASS event.target.result.key is counter
PASS event.target.result.value.id is counter
PASS event.target.result.value.number is 101
event.target.result.continue()
keyPathCheckCursor()
PASS event.target.result.key is counter
PASS event.target.result.value.id is counter
PASS event.target.result.value.number is 102
event.target.result.continue()
keyPathCheckCursor()
PASS event.target.result.key is counter
PASS event.target.result.value.id is counter
PASS event.target.result.value.number is 103
event.target.result.continue()
keyPathCheckCursor()
PASS event.target.result.key is counter
PASS event.target.result.value.id is counter
PASS event.target.result.value.number is 104
event.target.result.continue()
keyPathCheckCursor()
PASS counter is 5
trans.objectStore('keyPathStore').index('numberIndex').openKeyCursor(keyRange)
keyCursor()
PASS event.target.result.key is counter + 100
PASS event.target.result.primaryKey is counter
Expecting exception from event.target.result.update({id: counter, number: counter + 200})
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is a key cursor.
event.target.result.continue();
keyCursor()
PASS event.target.result.key is counter + 100
PASS event.target.result.primaryKey is counter
Expecting exception from event.target.result.update({id: counter, number: counter + 200})
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is a key cursor.
event.target.result.continue();
keyCursor()
PASS event.target.result.key is counter + 100
PASS event.target.result.primaryKey is counter
Expecting exception from event.target.result.update({id: counter, number: counter + 200})
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is a key cursor.
event.target.result.continue();
keyCursor()
PASS event.target.result.key is counter + 100
PASS event.target.result.primaryKey is counter
Expecting exception from event.target.result.update({id: counter, number: counter + 200})
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is a key cursor.
event.target.result.continue();
keyCursor()
PASS counter is 5
openBasicCursor()
trans = db.transaction('basicStore')
trans.objectStore('basicStore')
objectStore.openCursor(keyRange)
attemptUpdate()
Expecting exception from cursor.update('myUpdatedValue')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
Exception message: Failed to execute 'update' on 'IDBCursor': The record may not be updated inside a read-only transaction.
cursor.continue()
attemptUpdate()
Expecting exception from cursor.update('myUpdatedValue')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
Exception message: Failed to execute 'update' on 'IDBCursor': The record may not be updated inside a read-only transaction.
cursor.continue()
attemptUpdate()
Expecting exception from cursor.update('myUpdatedValue')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
Exception message: Failed to execute 'update' on 'IDBCursor': The record may not be updated inside a read-only transaction.
cursor.continue()
attemptUpdate()
Expecting exception from cursor.update('myUpdatedValue')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
Exception message: Failed to execute 'update' on 'IDBCursor': The record may not be updated inside a read-only transaction.
cursor.continue()
attemptUpdate()
transactionComplete()
PASS successfullyParsed is true

TEST COMPLETE

