| // 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(); |
| }); |
| }); |
| }); |