| <!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> |