summaryrefslogtreecommitdiffstats
path: root/LayoutTests/storage/indexeddb/cursor-update.html
diff options
context:
space:
mode:
Diffstat (limited to 'LayoutTests/storage/indexeddb/cursor-update.html')
-rw-r--r--LayoutTests/storage/indexeddb/cursor-update.html249
1 files changed, 249 insertions, 0 deletions
diff --git a/LayoutTests/storage/indexeddb/cursor-update.html b/LayoutTests/storage/indexeddb/cursor-update.html
new file mode 100644
index 0000000..0a80b84
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/cursor-update.html
@@ -0,0 +1,249 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test IndexedDB's cursor update.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+test();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name')");
+ verifyResult(result);
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ verifySuccessEvent(event);
+ var db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = setVersionSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersionSuccess()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ trans.oncomplete = openBasicCursor;
+
+ deleteAllObjectStores(db, createAndPopulateObjectStore);
+}
+
+function createAndPopulateObjectStore()
+{
+ debug("createAndPopulateObjectStore():");
+ var objectStore = evalAndLog("objectStore = db.createObjectStore('basicStore')");
+ evalAndLog("objectStore.add('myValue1', 'myKey1').onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add('myValue2', 'myKey2').onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add('myValue3', 'myKey3').onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add('myValue4', 'myKey4').onerror = unexpectedErrorCallback");
+
+ var objectStore = evalAndLog("objectStore = db.createObjectStore('autoIncrementStore', {autoIncrement: true})");
+ evalAndLog("objectStore.add('foo1').onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add('foo2').onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add('foo3').onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add('foo4').onerror = unexpectedErrorCallback");
+
+ var objectStore = evalAndLog("objectStore = db.createObjectStore('keyPathStore', {keyPath: 'id'})");
+ evalAndLog("objectStore.createIndex('numberIndex', 'number')");
+ evalAndLog("objectStore.add({number: 1, id: 1}).onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add({number: 2, id: 2}).onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add({number: 3, id: 3}).onerror = unexpectedErrorCallback");
+ evalAndLog("objectStore.add({number: 4, id: 4}).onerror = unexpectedErrorCallback");
+}
+
+function openBasicCursor()
+{
+ debug("openBasicCursor()");
+ evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
+ trans.onabort = unexpectedAbortCallback;
+ trans.oncomplete = transactionComplete;
+
+ keyRange = webkitIDBKeyRange.lowerBound("myKey1");
+ result = evalAndLog("trans.objectStore('basicStore').openCursor(keyRange)");
+ verifyResult(result);
+ result.onsuccess = basicUpdateCursor;
+ result.onerror = unexpectedErrorCallback;
+ counter = 1;
+}
+
+function basicUpdateCursor()
+{
+ debug("basicUpdateCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ counter = 1;
+
+ result = evalAndLog("trans.objectStore('basicStore').openCursor(keyRange)");
+ verifyResult(result);
+ result.onsuccess = basicCheckCursor;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+
+ result = evalAndLog("event.result.update('myUpdatedValue' + counter++)");
+ result.onsuccess = function() { evalAndLog("event.source.continue()"); }
+ result.onerror = unexpectedErrorCallback;
+}
+
+function basicCheckCursor()
+{
+ debug("basicCheckCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ counter = 1;
+
+ keyRange = webkitIDBKeyRange.lowerBound(1);
+ result = evalAndLog("trans.objectStore('autoIncrementStore').openCursor(keyRange)");
+ verifyResult(result);
+ result.onsuccess = autoIncrementUpdateCursor;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+
+ shouldBeEqualToString("event.result.key", "myKey" + counter);
+ shouldBeEqualToString("event.result.value", "myUpdatedValue" + counter++);
+ evalAndLog("event.result.continue()");
+}
+
+function autoIncrementUpdateCursor()
+{
+ debug("autoIncrementUpdateCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ counter = 1;
+
+ result = evalAndLog("trans.objectStore('autoIncrementStore').openCursor(keyRange)");
+ verifyResult(result);
+ result.onsuccess = autoIncrementCheckCursor;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+
+ result = evalAndLog("event.result.update('myUpdatedFoo' + counter++)");
+ result.onsuccess = function() { evalAndLog("event.source.continue()"); }
+ result.onerror = unexpectedErrorCallback;
+}
+
+function autoIncrementCheckCursor()
+{
+ debug("autoIncrementCheckCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ counter = 1;
+
+ keyRange = webkitIDBKeyRange.lowerBound(1);
+ result = evalAndLog("trans.objectStore('keyPathStore').openCursor(keyRange)");
+ verifyResult(result);
+ result.onsuccess = keyPathUpdateCursor;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+
+ shouldBe("event.result.key", "counter");
+ shouldBeEqualToString("event.result.value", "myUpdatedFoo" + counter++);
+ evalAndLog("event.result.continue()");
+}
+
+function keyPathUpdateCursor()
+{
+ debug("keyPathUpdateCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ counter = 1;
+
+ result = evalAndLog("trans.objectStore('keyPathStore').openCursor(keyRange)");
+ verifyResult(result);
+ result.onsuccess = keyPathCheckCursor;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+
+ result = evalAndLog("event.result.update({id: 100 + counter, number: 100 + counter})");
+ result.onsuccess = unexpectedSuccessCallback;
+ result.onerror = function() {
+ verifyErrorEvent(event);
+ shouldBe("event.code", "webkitIDBDatabaseException.DATA_ERR");
+
+ evalAndLog("event.preventDefault()");
+
+ result = evalAndLog("event.source.update({id: counter, number: 100 + counter++})");
+ result.onsuccess = function() { evalAndLog("event.source.continue()") };
+ result.onerror = unexpectedErrorCallback;
+ }
+}
+
+function keyPathCheckCursor()
+{
+ debug("keyPathCheckCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ counter = 1;
+
+ keyRange = webkitIDBKeyRange.lowerBound(101);
+ result = evalAndLog("trans.objectStore('keyPathStore').index('numberIndex').openKeyCursor(keyRange)");
+ result.onsuccess = keyCursor;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+
+ shouldBe("event.result.key", "counter");
+ shouldBe("event.result.value.id", "counter");
+ shouldBe("event.result.value.number", (counter + 100).toString());
+ counter++;
+ evalAndLog("event.result.continue()");
+}
+
+function keyCursor()
+{
+ debug("keyCursor()");
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ return;
+ }
+
+ shouldBe("event.result.key", "counter + 100");
+ shouldBe("event.result.value", "counter");
+
+ try {
+ debug("event.result.update({id: counter, number: counter + 200})");
+ event.result.update({id: counter, number: counter + 200});
+ testFailed("Expected exception.");
+ } catch (e) {
+ code = e.code;
+ shouldBe("code", "webkitIDBDatabaseException.NOT_ALLOWED_ERR");
+ }
+
+ counter++;
+ event.result.continue();
+}
+
+function transactionComplete()
+{
+ debug("transactionComplete()");
+ done();
+}
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>