idbcursor-advance.any.js (5711B)
1 // META: global=window,worker 2 // META: title=IDBCursor.advance() 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('cupcake', 5); 12 objStore.add('pancake', 3); 13 objStore.add('pie', 1); 14 objStore.add('pie', 4); 15 objStore.add('taco', 2); 16 } 17 18 indexeddb_test(upgrade_func, function(t, db) { 19 let count = 0; 20 let rq = db.transaction('test', 'readonly') 21 .objectStore('test') 22 .index('index') 23 .openCursor(); 24 25 rq.onsuccess = t.step_func(function(e) { 26 if (!e.target.result) { 27 assert_equals(count, 3, 'count'); 28 t.done(); 29 return; 30 } 31 let cursor = e.target.result; 32 33 switch (count) { 34 case 0: 35 assert_equals(cursor.value, 'cupcake'); 36 assert_equals(cursor.primaryKey, 5); 37 break; 38 39 case 1: 40 assert_equals(cursor.value, 'pie'); 41 assert_equals(cursor.primaryKey, 1); 42 break; 43 44 case 2: 45 assert_equals(cursor.value, 'taco'); 46 assert_equals(cursor.primaryKey, 2); 47 break; 48 49 default: 50 assert_unreached('Unexpected count: ' + count); 51 } 52 53 count++; 54 cursor.advance(2); 55 }); 56 rq.onerror = t.unreached_func('unexpected error'); 57 }, 'IDBCursor.advance() - advances'); 58 59 indexeddb_test(upgrade_func, function(t, db) { 60 let count = 0; 61 let rq = db.transaction('test', 'readonly') 62 .objectStore('test') 63 .index('index') 64 .openCursor(null, 'prev'); 65 66 rq.onsuccess = t.step_func(function(e) { 67 if (!e.target.result) { 68 assert_equals(count, 3, 'count'); 69 t.done(); 70 return; 71 } 72 let cursor = e.target.result; 73 74 switch (count) { 75 case 0: 76 assert_equals(cursor.value, 'taco'); 77 assert_equals(cursor.primaryKey, 2); 78 break; 79 80 case 1: 81 assert_equals(cursor.value, 'pie'); 82 assert_equals(cursor.primaryKey, 1); 83 break; 84 85 case 2: 86 assert_equals(cursor.value, 'cupcake'); 87 assert_equals(cursor.primaryKey, 5); 88 break; 89 90 default: 91 assert_unreached('Unexpected count: ' + count); 92 } 93 94 count++; 95 cursor.advance(2); 96 }); 97 rq.onerror = t.unreached_func('unexpected error'); 98 }, 'IDBCursor.advance() - advances backwards'); 99 100 indexeddb_test(upgrade_func, function(t, db) { 101 let count = 0; 102 let rq = db.transaction('test', 'readonly') 103 .objectStore('test') 104 .index('index') 105 .openCursor(); 106 107 rq.onsuccess = t.step_func(function(e) { 108 if (!e.target.result) { 109 assert_equals(count, 1, 'count'); 110 t.done(); 111 return; 112 } 113 let cursor = e.target.result; 114 115 switch (count) { 116 case 0: 117 assert_equals(cursor.value, 'cupcake'); 118 assert_equals(cursor.primaryKey, 5); 119 break; 120 121 default: 122 assert_unreached('Unexpected count: ' + count); 123 } 124 125 count++; 126 cursor.advance(100000); 127 }); 128 rq.onerror = t.unreached_func('unexpected error'); 129 }, 'IDBCursor.advance() - skip far forward'); 130 131 indexeddb_test(upgrade_func, function(t, db) { 132 let count = 0; 133 let rq = db.transaction('test', 'readonly') 134 .objectStore('test') 135 .index('index') 136 .openCursor(IDBKeyRange.lowerBound('cupcake', true)); 137 138 rq.onsuccess = t.step_func(function(e) { 139 if (!e.target.result) { 140 assert_equals(count, 2, 'count'); 141 t.done(); 142 return; 143 } 144 let cursor = e.target.result; 145 146 switch (count) { 147 case 0: 148 assert_equals(cursor.value, 'pancake'); 149 assert_equals(cursor.primaryKey, 3); 150 break; 151 152 case 1: 153 assert_equals(cursor.value, 'pie'); 154 assert_equals(cursor.primaryKey, 4); 155 break; 156 157 default: 158 assert_unreached('Unexpected count: ' + count); 159 } 160 161 count++; 162 cursor.advance(2); 163 }); 164 rq.onerror = t.unreached_func('unexpected error'); 165 }, 'IDBCursor.advance() - within range'); 166 167 indexeddb_test(upgrade_func, function(t, db) { 168 let count = 0; 169 let rq = db.transaction('test', 'readonly') 170 .objectStore('test') 171 .index('index') 172 .openCursor('pancake'); 173 174 rq.onsuccess = t.step_func(function(e) { 175 if (!e.target.result) { 176 assert_equals(count, 1, 'count'); 177 t.done(); 178 return; 179 } 180 let cursor = e.target.result; 181 182 switch (count) { 183 case 0: 184 assert_equals(cursor.value, 'pancake'); 185 assert_equals(cursor.primaryKey, 3); 186 break; 187 188 default: 189 assert_unreached('Unexpected count: ' + count); 190 } 191 192 count++; 193 cursor.advance(1); 194 }); 195 rq.onerror = t.unreached_func('unexpected error'); 196 }, 'IDBCursor.advance() - within single key range'); 197 198 indexeddb_test(upgrade_func, function(t, db) { 199 let count = 0; 200 let rq = db.transaction('test', 'readonly') 201 .objectStore('test') 202 .index('index') 203 .openCursor('pie'); 204 205 rq.onsuccess = t.step_func(function(e) { 206 if (!e.target.result) { 207 assert_equals(count, 2, 'count'); 208 t.done(); 209 return; 210 } 211 let cursor = e.target.result; 212 213 switch (count) { 214 case 0: 215 assert_equals(cursor.value, 'pie'); 216 assert_equals(cursor.primaryKey, 1); 217 break; 218 219 case 1: 220 assert_equals(cursor.value, 'pie'); 221 assert_equals(cursor.primaryKey, 4); 222 break; 223 224 default: 225 assert_unreached('Unexpected count: ' + count); 226 } 227 228 count++; 229 cursor.advance(1); 230 }); 231 rq.onerror = t.unreached_func('unexpected error'); 232 }, 'IDBCursor.advance() - within single key range, with several results');