Index: LayoutTests/imported/web-platform-tests/IndexedDB/idbcursor_iterating.htm |
diff --git a/LayoutTests/imported/web-platform-tests/IndexedDB/idbcursor_iterating.htm b/LayoutTests/imported/web-platform-tests/IndexedDB/idbcursor_iterating.htm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b534bcc3b4f63fbe6982baaff0860f0be342cd91 |
--- /dev/null |
+++ b/LayoutTests/imported/web-platform-tests/IndexedDB/idbcursor_iterating.htm |
@@ -0,0 +1,110 @@ |
+<!DOCTYPE html> |
+<title>IDBCursor.continue() - objectstore - delete next element, and iterate to it</title> |
+<link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal"> |
+<script src="../../../resources/testharness.js"></script> |
+<script src="../../../resources/testharnessreport.js"></script> |
+<script src="support.js"></script> |
+ |
+<script> |
+ var db, |
+ count = 0, |
+ t = async_test(document.title, {timeout: 10000}); |
+ |
+ var open_rq = createdb(t); |
+ open_rq.onupgradeneeded = function(e) { |
+ db = e.target.result; |
+ var objStore = db.createObjectStore("test", { keyPath: "key" }); |
+ |
+ for (var i = 0; i < 500; i++) |
+ objStore.add({ key: i, val: "val_"+i }); |
+ |
+ var rq = objStore.add({ key: 500, val: "val_500" }); |
+ |
+ rq.onsuccess = t.step_func(function() { |
+ for (var i = 999; i > 500; i--) |
+ objStore.add({ key: i, val: "val_"+i }); |
+ }); |
+ |
+ objStore.createIndex('index', ['key', 'val']); |
+ }; |
+ |
+ open_rq.onsuccess = function(e) { |
+ var cursor_rq = db.transaction("test", "readwrite") |
+ .objectStore("test") |
+ .openCursor(); |
+ |
+ cursor_rq.onsuccess = t.step_func(function(e) { |
+ var cursor = e.target.result, |
+ store = e.target.source; |
+ if (!cursor) { |
+ assert_equals(count, 997, "cursor run count"); |
+ |
+ var rq = e.target.source.count(); |
+ rq.onsuccess = t.step_func(function(e) { |
+ assert_equals(e.target.result, 995, "object count"); |
+ t.done(); |
+ }); |
+ return; |
+ } |
+ |
+ switch (cursor.key) { |
+ case 10: |
+ assert_equals(count, cursor.key, "count"); |
+ store.delete(11); |
+ break; |
+ |
+ case 12: |
+ case 499: |
+ case 500: |
+ case 501: |
+ assert_equals(count, cursor.key - 1, "count"); |
+ break; |
+ |
+ // Delete the next key |
+ case 510: |
+ store.delete(511); |
+ break; |
+ |
+ // Delete randomly |
+ case 512: |
+ store.delete(611); |
+ store.delete(499); |
+ store.delete(500); |
+ break; |
+ |
+ // Delete and add a new key |
+ case 520: |
+ store.delete(521); |
+ store.add({ key: 521, val: "new"}); |
+ break; |
+ |
+ case 521: |
+ assert_equals(cursor.value.val, "new"); |
+ break; |
+ |
+ // We should only be here once although we're basically making the index |
+ // "heavier" with its new key. |
+ case 530: |
+ assert_equals(cursor.value.val, "val_530"); |
+ cursor.update({ key: 530, val: "val_531" }) |
+ |
+ store.get(530).onsuccess = t.step_func(function(e) { |
+ assert_equals(e.target.result.val, "val_531"); |
+ }); |
+ break; |
+ |
+ // Shouldn't happen. |
+ case 11: |
+ case 511: |
+ case 611: |
+ assert_unreached(cursor.key + " should be deleted and never run"); |
+ break; |
+ } |
+ |
+ cursor.continue(); |
+ count++; |
+ }); |
+ }; |
+</script> |
+ |
+<div id="log"> </div> |