idbcursor-advance-continue-async.any.js (4309B)
1 // META: global=window,worker 2 // META: title=IDBCursor asyncness 3 // META: script=resources/support.js 4 5 'use strict'; 6 7 function upgrade_func(t, db, tx) { 8 let objStore = db.createObjectStore('test'); 9 objStore.createIndex('index', ''); 10 11 objStore.add('data', 1); 12 objStore.add('data2', 2); 13 } 14 15 indexeddb_test(upgrade_func, function(t, db) { 16 let count = 0; 17 let rq = db.transaction('test', 'readonly').objectStore('test').openCursor(); 18 19 rq.onsuccess = t.step_func(function(e) { 20 if (!e.target.result) { 21 assert_equals(count, 2, 'count'); 22 t.done(); 23 return; 24 } 25 let cursor = e.target.result; 26 27 switch (count) { 28 case 0: 29 assert_equals(cursor.value, 'data'); 30 assert_equals(cursor.key, 1); 31 cursor.advance(1); 32 assert_equals(cursor.value, 'data'); 33 assert_equals(cursor.key, 1); 34 break; 35 36 case 1: 37 assert_equals(cursor.value, 'data2'); 38 assert_equals(cursor.key, 2); 39 cursor.advance(1); 40 assert_equals(cursor.value, 'data2'); 41 assert_equals(cursor.key, 2); 42 break; 43 44 default: 45 assert_unreached('Unexpected count: ' + count); 46 } 47 48 count++; 49 }); 50 rq.onerror = t.unreached_func('unexpected error'); 51 }, 'IDBCursor asyncness - advance'); 52 53 indexeddb_test(upgrade_func, function(t, db) { 54 let count = 0; 55 let rq = db.transaction('test', 'readonly') 56 .objectStore('test') 57 .index('index') 58 .openCursor(); 59 60 rq.onsuccess = t.step_func(function(e) { 61 if (!e.target.result) { 62 assert_equals(count, 2, 'count'); 63 t.done(); 64 return; 65 } 66 let cursor = e.target.result; 67 68 switch (count) { 69 case 0: 70 assert_equals(cursor.value, 'data'); 71 assert_equals(cursor.key, 'data'); 72 assert_equals(cursor.primaryKey, 1); 73 cursor.continue('data2'); 74 assert_equals(cursor.value, 'data'); 75 assert_equals(cursor.key, 'data'); 76 assert_equals(cursor.primaryKey, 1); 77 break; 78 79 case 1: 80 assert_equals(cursor.value, 'data2'); 81 assert_equals(cursor.key, 'data2'); 82 assert_equals(cursor.primaryKey, 2); 83 cursor.continue(); 84 assert_equals(cursor.value, 'data2'); 85 assert_equals(cursor.key, 'data2'); 86 assert_equals(cursor.primaryKey, 2); 87 break; 88 89 default: 90 assert_unreached('Unexpected count: ' + count); 91 } 92 93 count++; 94 }); 95 rq.onerror = t.unreached_func('unexpected error'); 96 }, 'IDBCursor asyncness - continue'); 97 98 indexeddb_test(upgrade_func, function(t, db) { 99 let count = 0; 100 let rq = db.transaction('test', 'readonly') 101 .objectStore('test') 102 .index('index') 103 .openCursor(); 104 105 rq.onsuccess = t.step_func(function(e) { 106 if (!e.target.result) { 107 assert_equals(count, 2, 'count'); 108 t.done(); 109 return; 110 } 111 let cursor = e.target.result; 112 cursor.advance(1); 113 114 switch (count) { 115 case 0: 116 assert_equals(cursor.value, 'data'); 117 assert_equals(cursor.key, 'data'); 118 assert_equals(cursor.primaryKey, 1); 119 break; 120 121 case 1: 122 assert_equals(cursor.value, 'data2'); 123 assert_equals(cursor.key, 'data2'); 124 assert_equals(cursor.primaryKey, 2); 125 break; 126 127 default: 128 assert_unreached('Unexpected count: ' + count); 129 } 130 131 count++; 132 }); 133 rq.onerror = t.unreached_func('unexpected error'); 134 }, 'IDBCursor asyncness - fresh advance still async'); 135 136 indexeddb_test(upgrade_func, function(t, db) { 137 let count = 0; 138 let rq = db.transaction('test', 'readonly').objectStore('test').openCursor(); 139 140 rq.onsuccess = t.step_func(function(e) { 141 if (!e.target.result) { 142 assert_equals(count, 2, 'count'); 143 t.done(); 144 return; 145 } 146 let cursor = e.target.result; 147 cursor.continue(); 148 149 switch (count) { 150 case 0: 151 assert_equals(cursor.value, 'data'); 152 assert_equals(cursor.key, 1); 153 break; 154 155 case 1: 156 assert_equals(cursor.value, 'data2'); 157 assert_equals(cursor.key, 2); 158 break; 159 160 default: 161 assert_unreached('Unexpected count: ' + count); 162 } 163 164 count++; 165 }); 166 rq.onerror = t.unreached_func('unexpected error'); 167 }, 'IDBCursor asyncness - fresh continue still async');