| Test IndexedDB's cursor mutation during object store cursor iteration |
| |
| 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; |
| |
| 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').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 |
| |