// META: global=window,worker // META: title=IDBCursor is reused // META: script=resources/support.js // Spec: https://w3c.github.io/IndexedDB/#dom-idbcursor-continue 'use strict'; async_test(t => { let db; const open_rq = createdb(t); open_rq.onupgradeneeded = t.step_func(e => { db = e.target.result; const os = db.createObjectStore('test'); os.add('data', 'k'); os.add('data2', 'k2'); }); open_rq.onsuccess = t.step_func(e => { let cursor; let count = 0; const rq = db.transaction('test', 'readonly').objectStore('test').openCursor(); rq.onsuccess = t.step_func(e => { switch (count) { case 0: cursor = e.target.result; assert_equals(cursor.value, 'data', 'prerequisite cursor.value'); cursor.custom_cursor_value = 1; e.target.custom_request_value = 2; cursor.continue(); break; case 1: assert_equals(cursor.value, 'data2', 'prerequisite cursor.value'); assert_equals(cursor.custom_cursor_value, 1, 'custom cursor value'); assert_equals( e.target.custom_request_value, 2, 'custom request value'); cursor.advance(1); break; case 2: assert_false(!!e.target.result, 'got cursor'); assert_equals(cursor.custom_cursor_value, 1, 'custom cursor value'); assert_equals( e.target.custom_request_value, 2, 'custom request value'); break; } count++; }); rq.transaction.oncomplete = t.step_func(e => { assert_equals(count, 3, 'cursor callback runs'); assert_equals( rq.custom_request_value, 2, 'variable placed on old IDBRequest'); assert_equals( cursor.custom_cursor_value, 1, 'custom cursor value (transaction.complete)'); t.done(); }); }); });