idbcursor-reused.any.js (1889B)
1 // META: global=window,worker 2 // META: title=IDBCursor is reused 3 // META: script=resources/support.js 4 5 // Spec: https://w3c.github.io/IndexedDB/#dom-idbcursor-continue 6 7 'use strict'; 8 9 async_test(t => { 10 let db; 11 const open_rq = createdb(t); 12 13 open_rq.onupgradeneeded = t.step_func(e => { 14 db = e.target.result; 15 const os = db.createObjectStore('test'); 16 17 os.add('data', 'k'); 18 os.add('data2', 'k2'); 19 }); 20 21 open_rq.onsuccess = t.step_func(e => { 22 let cursor; 23 let count = 0; 24 const rq = 25 db.transaction('test', 'readonly').objectStore('test').openCursor(); 26 27 rq.onsuccess = t.step_func(e => { 28 switch (count) { 29 case 0: 30 cursor = e.target.result; 31 32 assert_equals(cursor.value, 'data', 'prerequisite cursor.value'); 33 cursor.custom_cursor_value = 1; 34 e.target.custom_request_value = 2; 35 36 cursor.continue(); 37 break; 38 39 case 1: 40 assert_equals(cursor.value, 'data2', 'prerequisite cursor.value'); 41 assert_equals(cursor.custom_cursor_value, 1, 'custom cursor value'); 42 assert_equals( 43 e.target.custom_request_value, 2, 'custom request value'); 44 45 cursor.advance(1); 46 break; 47 48 case 2: 49 assert_false(!!e.target.result, 'got cursor'); 50 assert_equals(cursor.custom_cursor_value, 1, 'custom cursor value'); 51 assert_equals( 52 e.target.custom_request_value, 2, 'custom request value'); 53 break; 54 } 55 count++; 56 }); 57 58 rq.transaction.oncomplete = t.step_func(e => { 59 assert_equals(count, 3, 'cursor callback runs'); 60 assert_equals( 61 rq.custom_request_value, 2, 'variable placed on old IDBRequest'); 62 assert_equals( 63 cursor.custom_cursor_value, 1, 64 'custom cursor value (transaction.complete)'); 65 t.done(); 66 }); 67 }); 68 });