Ensure cursor calls behave as expected after cursor has run to the end.

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;


prepareDatabase():
indexedDB.deleteDatabase(dbname)

onDeleteSuccess():
indexedDB.open(dbname, 1)

onUpgradeNeeded():
db = event.target.result
store = db.createObjectStore('store')
store.put(1, 1)
store.put(2, 2)

onOpenSuccess():
db = event.target.result
transaction = db.transaction('store', 'readwrite')
store = transaction.objectStore('store')
count = 0
cursorRequest = store.openCursor()

onCursorSuccess():
cursor = event.target.result
PASS cursor is non-null.
count++
savedCursor = cursor
cursor.continue()

onCursorSuccess():
cursor = event.target.result
PASS cursor is non-null.
count++
savedCursor = cursor
cursor.continue()

onCursorSuccess():
cursor = event.target.result
PASS cursor is null
PASS savedCursor is non-null.

Expecting exception from savedCursor.update('value')
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 being iterated or has iterated past its end.
Expecting exception from savedCursor.advance(1)
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'advance' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
Expecting exception from savedCursor.continue()
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
Expecting exception from savedCursor.continue('key')
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
Expecting exception from savedCursor.delete()
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'delete' on 'IDBCursor': The cursor is being iterated or has iterated past its end.

PASS successfullyParsed is true

TEST COMPLETE

