Test IndexedDB's cursor mutation during object store cursor iteration
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
dbname = "cursor-mutation-objectstore-only.html"
indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)
objectStore = db.createObjectStore('foo', { keyPath: 'ss' });
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[i]);
objectStore.add(objectStoreData[i]);
objectStore.add(objectStoreData[i]);
objectStore.add(objectStoreData[i]);
objectStore.add(objectStoreData[i]);
count = 0;
sawAdded = false;
sawRemoved = false;
request = objectStore.openCursor();
iterateCursor():
event.target.transaction.oncomplete = checkCursorResultsAndSetupMutatingCursor;
cursor = event.target.result;
sawRemoved = true;
count++;
cursor.continue();
iterateCursor():
event.target.transaction.oncomplete = checkCursorResultsAndSetupMutatingCursor;
cursor = event.target.result;
count++;
cursor.continue();
iterateCursor():
event.target.transaction.oncomplete = checkCursorResultsAndSetupMutatingCursor;
cursor = event.target.result;
count++;
cursor.continue();
iterateCursor():
event.target.transaction.oncomplete = checkCursorResultsAndSetupMutatingCursor;
cursor = event.target.result;
count++;
cursor.continue();
iterateCursor():
event.target.transaction.oncomplete = checkCursorResultsAndSetupMutatingCursor;
cursor = event.target.result;
count++;
cursor.continue();
iterateCursor():
event.target.transaction.oncomplete = checkCursorResultsAndSetupMutatingCursor;
cursor = event.target.result;
checkCursorResultsAndSetupMutatingCursor():
PASS count is objectStoreData.length - 1
PASS sawAdded is false
PASS sawRemoved is true
count = 0;
sawAdded = false;
sawRemoved = false;
request = db.transaction('foo', 'readwrite', {durability: 'relaxed'}).objectStore('foo').openCursor();
iterateMutatingCursor():
event.target.transaction.oncomplete = checkMutatingCursorResults;
cursor = event.target.result;
sawRemoved = true;
PASS cursor.value.name is 'Bob'
count++
objectStore = event.target.transaction.objectStore('foo');
request = objectStore.delete(objectStoreData[0].ss);
addFinalData():
request = objectStore.add(objectStoreData[objectStoreData.length - 1]);
iterateMutatingCursor():
event.target.transaction.oncomplete = checkMutatingCursorResults;
cursor = event.target.result;
PASS cursor.value.name is 'Ann'
count++
iterateMutatingCursor():
event.target.transaction.oncomplete = checkMutatingCursorResults;
cursor = event.target.result;
PASS cursor.value.name is 'Ron'
count++
iterateMutatingCursor():
event.target.transaction.oncomplete = checkMutatingCursorResults;
cursor = event.target.result;
PASS cursor.value.name is 'Sue'
count++
iterateMutatingCursor():
event.target.transaction.oncomplete = checkMutatingCursorResults;
cursor = event.target.result;
PASS cursor.value.name is 'Joe'
count++
iterateMutatingCursor():
event.target.transaction.oncomplete = checkMutatingCursorResults;
cursor = event.target.result;
sawAdded = true;
PASS cursor.value.name is 'Pat'
count++
iterateMutatingCursor():
event.target.transaction.oncomplete = checkMutatingCursorResults;
cursor = event.target.result;
checkMutatingCursorResults():
PASS count is objectStoreData.length
PASS sawAdded is true
PASS sawRemoved is true
PASS successfullyParsed is true
TEST COMPLETE