OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <title>IDBCursor.continue() - objectstore - delete next element, and iterate to
it</title> |
| 3 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal"> |
| 4 <script src="../../../resources/testharness.js"></script> |
| 5 <script src="../../../resources/testharnessreport.js"></script> |
| 6 <script src="support.js"></script> |
| 7 |
| 8 <script> |
| 9 var db, |
| 10 count = 0, |
| 11 t = async_test(document.title, {timeout: 10000}); |
| 12 |
| 13 var open_rq = createdb(t); |
| 14 open_rq.onupgradeneeded = function(e) { |
| 15 db = e.target.result; |
| 16 var objStore = db.createObjectStore("test", { keyPath: "key" }); |
| 17 |
| 18 for (var i = 0; i < 500; i++) |
| 19 objStore.add({ key: i, val: "val_"+i }); |
| 20 |
| 21 var rq = objStore.add({ key: 500, val: "val_500" }); |
| 22 |
| 23 rq.onsuccess = t.step_func(function() { |
| 24 for (var i = 999; i > 500; i--) |
| 25 objStore.add({ key: i, val: "val_"+i }); |
| 26 }); |
| 27 |
| 28 objStore.createIndex('index', ['key', 'val']); |
| 29 }; |
| 30 |
| 31 open_rq.onsuccess = function(e) { |
| 32 var cursor_rq = db.transaction("test", "readwrite") |
| 33 .objectStore("test") |
| 34 .openCursor(); |
| 35 |
| 36 cursor_rq.onsuccess = t.step_func(function(e) { |
| 37 var cursor = e.target.result, |
| 38 store = e.target.source; |
| 39 if (!cursor) { |
| 40 assert_equals(count, 997, "cursor run count"); |
| 41 |
| 42 var rq = e.target.source.count(); |
| 43 rq.onsuccess = t.step_func(function(e) { |
| 44 assert_equals(e.target.result, 995, "object count"); |
| 45 t.done(); |
| 46 }); |
| 47 return; |
| 48 } |
| 49 |
| 50 switch (cursor.key) { |
| 51 case 10: |
| 52 assert_equals(count, cursor.key, "count"); |
| 53 store.delete(11); |
| 54 break; |
| 55 |
| 56 case 12: |
| 57 case 499: |
| 58 case 500: |
| 59 case 501: |
| 60 assert_equals(count, cursor.key - 1, "count"); |
| 61 break; |
| 62 |
| 63 // Delete the next key |
| 64 case 510: |
| 65 store.delete(511); |
| 66 break; |
| 67 |
| 68 // Delete randomly |
| 69 case 512: |
| 70 store.delete(611); |
| 71 store.delete(499); |
| 72 store.delete(500); |
| 73 break; |
| 74 |
| 75 // Delete and add a new key |
| 76 case 520: |
| 77 store.delete(521); |
| 78 store.add({ key: 521, val: "new"}); |
| 79 break; |
| 80 |
| 81 case 521: |
| 82 assert_equals(cursor.value.val, "new"); |
| 83 break; |
| 84 |
| 85 // We should only be here once although we're basically making t
he index |
| 86 // "heavier" with its new key. |
| 87 case 530: |
| 88 assert_equals(cursor.value.val, "val_530"); |
| 89 cursor.update({ key: 530, val: "val_531" }) |
| 90 |
| 91 store.get(530).onsuccess = t.step_func(function(e) { |
| 92 assert_equals(e.target.result.val, "val_531"); |
| 93 }); |
| 94 break; |
| 95 |
| 96 // Shouldn't happen. |
| 97 case 11: |
| 98 case 511: |
| 99 case 611: |
| 100 assert_unreached(cursor.key + " should be deleted and never
run"); |
| 101 break; |
| 102 } |
| 103 |
| 104 cursor.continue(); |
| 105 count++; |
| 106 }); |
| 107 }; |
| 108 </script> |
| 109 |
| 110 <div id="log"> </div> |
OLD | NEW |