Test IndexedDB's cursor mutation

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

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

