| if (this.importScripts) { |
| importScripts('../../../resources/js-test.js'); |
| importScripts('shared.js'); |
| } |
| |
| description("Test mutating an IndexedDB's objectstore from a cursor."); |
| |
| indexedDBTest(prepareDatabase, openForwardCursor); |
| function prepareDatabase() |
| { |
| db = event.target.result; |
| event.target.transaction.onabort = unexpectedAbortCallback; |
| |
| var objectStore = evalAndLog("objectStore = db.createObjectStore('store')"); |
| evalAndLog("objectStore.add(1, 1).onerror = unexpectedErrorCallback"); |
| evalAndLog("objectStore.add(2, 2).onerror = unexpectedErrorCallback"); |
| evalAndLog("objectStore.add(3, 3).onerror = unexpectedErrorCallback"); |
| evalAndLog("objectStore.add(4, 4).onerror = unexpectedErrorCallback"); |
| } |
| |
| function openForwardCursor() |
| { |
| debug("openForwardCursor()"); |
| evalAndLog("trans = db.transaction(['store'], 'readwrite')"); |
| trans.onabort = unexpectedAbortCallback; |
| trans.oncomplete = forwardCursorComplete; |
| |
| self.objectStore = evalAndLog("trans.objectStore('store')"); |
| request = evalAndLog("objectStore.openCursor()"); |
| request.onsuccess = forwardCursor; |
| request.onerror = unexpectedErrorCallback; |
| self.cursorSteps = 0; |
| } |
| |
| function forwardCursor() |
| { |
| debug("forwardCursor()"); |
| self.cursor = event.target.result; |
| |
| if (event.target.result == null) { |
| shouldBe("cursorSteps", "5"); |
| |
| // Let the transaction finish. |
| return; |
| } |
| |
| debug(++cursorSteps); |
| shouldBe("cursor.key", "cursorSteps"); |
| shouldBe("cursor.value", "cursorSteps"); |
| |
| if (cursorSteps == 1) { |
| request = evalAndLog("event.target.source.add(5, 5)"); |
| request.onsuccess = function() { evalAndLog("cursor.continue()"); } |
| request.onerror = unexpectedErrorCallback; |
| } else { |
| evalAndLog("cursor.continue()"); |
| } |
| } |
| |
| function forwardCursorComplete() |
| { |
| debug("forwardCursorComplete()"); |
| openReverseCursor() |
| } |
| |
| function openReverseCursor() |
| { |
| debug("openReverseCursor()"); |
| evalAndLog("trans = db.transaction(['store'], 'readwrite')"); |
| trans.onabort = unexpectedAbortCallback; |
| trans.oncomplete = reverseCursorComplete; |
| |
| self.objectStore = evalAndLog("trans.objectStore('store')"); |
| request = evalAndLog("objectStore.openCursor(null, 'prev')"); |
| request.onsuccess = reverseCursor; |
| request.onerror = unexpectedErrorCallback; |
| self.cursorSteps = 6; |
| } |
| |
| function reverseCursor() |
| { |
| debug("reverseCursor()"); |
| self.cursor = event.target.result; |
| |
| if (event.target.result == null) { |
| shouldBe("cursorSteps", "0"); |
| |
| // Let the transaction finish. |
| return; |
| } |
| |
| debug(--cursorSteps); |
| shouldBe("cursor.key", "cursorSteps"); |
| shouldBe("cursor.value", "cursorSteps"); |
| |
| if (cursorSteps == 2) { |
| request = evalAndLog("event.target.source.add(0, 0)"); |
| request.onsuccess = function() { evalAndLog("cursor.continue()"); } |
| request.onerror = unexpectedErrorCallback; |
| } else { |
| evalAndLog("cursor.continue()"); |
| } |
| } |
| |
| function reverseCursorComplete() |
| { |
| debug("reverseCursorComplete()"); |
| finishJSTest(); |
| } |