Test IndexedDB's cursor update.

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;

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'
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'
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'
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'
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'
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'
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'
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'
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'
cursor.continue()
attemptUpdate()
Expecting exception from cursor.update('myUpdatedValue')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
cursor.continue()
attemptUpdate()
Expecting exception from cursor.update('myUpdatedValue')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
cursor.continue()
attemptUpdate()
Expecting exception from cursor.update('myUpdatedValue')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
cursor.continue()
attemptUpdate()
transactionComplete()
PASS successfullyParsed is true

TEST COMPLETE

