Test IndexedDB's cursor mutation

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-mutation.html"
indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)

setupObjectStoreAndCreateIndex():
objectStore = db.createObjectStore('foo', { keyPath: 'ss' })
index = objectStore.createIndex('name', 'name', { unique: true })
objectStoreData = [
        { ss: '237-23-7732', name: 'Bob' },
        { ss: '237-23-7733', name: 'Ann' },
        { ss: '237-23-7734', name: 'Ron' },
        { ss: '237-23-7735', name: 'Sue' },
        { ss: '237-23-7736', name: 'Joe' },
        { ss: '237-23-7737', name: 'Pat' }
    ]
objectStore.add(objectStoreData[0])
objectStore.add(objectStoreData[1])
objectStore.add(objectStoreData[2])
objectStore.add(objectStoreData[3])
objectStore.add(objectStoreData[4])

setupCursor():
count = 0
sawAdded = false
sawRemoved = false
request = objectStore.openCursor()

iterateCursor():
cursor = event.target.result
PASS cursor.value.name is "Bob"
sawRemoved = true
count++
cursor.continue()

iterateCursor():
cursor = event.target.result
PASS cursor.value.name is "Ann"
count++
cursor.continue()

iterateCursor():
cursor = event.target.result
PASS cursor.value.name is "Ron"
count++
cursor.continue()

iterateCursor():
cursor = event.target.result
PASS cursor.value.name is "Sue"
count++
cursor.continue()

iterateCursor():
cursor = event.target.result
PASS cursor.value.name is "Joe"
count++
cursor.continue()

iterateCursor():
cursor = event.target.result

checkCursorResults():
PASS count is objectStoreData.length - 1
PASS sawAdded is false
PASS sawRemoved is true

setupMutatingCursor():
count = 0
sawAdded = false
sawRemoved = false
[objectStoreDataNameSort is an array of indexes into objectStoreData in alphabetical order by name]
objectStoreDataNameSort = [ 1, 4, 5, 2, 3 ]

trans = db.transaction('foo', 'readwrite')
objectStore = trans.objectStore('foo')
request = objectStore.index('name').openCursor()
trans.oncomplete = checkMutatingCursorResults

iterateMutatingCursor():
cursor = event.target.result
PASS cursor.value.name is "Ann"
count++

Mutating the object store:
Removing Bob
request = objectStore.delete(objectStoreData[0].ss)

addFinalData():
Adding Pat
request = objectStore.add(objectStoreData[objectStoreData.length - 1])

iterateMutatingCursor():
cursor = event.target.result
PASS cursor.value.name is "Joe"
count++

iterateMutatingCursor():
cursor = event.target.result
PASS cursor.value.name is "Pat"
sawAdded = true
count++

iterateMutatingCursor():
cursor = event.target.result
PASS cursor.value.name is "Ron"
count++

iterateMutatingCursor():
cursor = event.target.result
PASS cursor.value.name is "Sue"
count++

iterateMutatingCursor():
cursor = event.target.result

checkMutatingCursorResults():
PASS count is objectStoreData.length - 1
PASS sawAdded is true
PASS sawRemoved is false
PASS successfullyParsed is true

TEST COMPLETE

