Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

// META: global=window,worker
// META: title=IDBCursor is reused
// META: script=resources/support.js
'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();
});
});
});