Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

// META: global=window,worker
// META: title=IDBCursor asyncness
// META: script=resources/support.js
'use strict';
function upgrade_func(t, db, tx) {
let objStore = db.createObjectStore('test');
objStore.createIndex('index', '');
objStore.add('data', 1);
objStore.add('data2', 2);
}
indexeddb_test(upgrade_func, function(t, db) {
let count = 0;
let rq = db.transaction('test', 'readonly').objectStore('test').openCursor();
rq.onsuccess = t.step_func(function(e) {
if (!e.target.result) {
assert_equals(count, 2, 'count');
t.done();
return;
}
let cursor = e.target.result;
switch (count) {
case 0:
assert_equals(cursor.value, 'data');
assert_equals(cursor.key, 1);
cursor.advance(1);
assert_equals(cursor.value, 'data');
assert_equals(cursor.key, 1);
break;
case 1:
assert_equals(cursor.value, 'data2');
assert_equals(cursor.key, 2);
cursor.advance(1);
assert_equals(cursor.value, 'data2');
assert_equals(cursor.key, 2);
break;
default:
assert_unreached('Unexpected count: ' + count);
}
count++;
});
rq.onerror = t.unreached_func('unexpected error');
}, 'IDBCursor asyncness - advance');
indexeddb_test(upgrade_func, function(t, db) {
let count = 0;
let rq = db.transaction('test', 'readonly')
.objectStore('test')
.index('index')
.openCursor();
rq.onsuccess = t.step_func(function(e) {
if (!e.target.result) {
assert_equals(count, 2, 'count');
t.done();
return;
}
let cursor = e.target.result;
switch (count) {
case 0:
assert_equals(cursor.value, 'data');
assert_equals(cursor.key, 'data');
assert_equals(cursor.primaryKey, 1);
cursor.continue('data2');
assert_equals(cursor.value, 'data');
assert_equals(cursor.key, 'data');
assert_equals(cursor.primaryKey, 1);
break;
case 1:
assert_equals(cursor.value, 'data2');
assert_equals(cursor.key, 'data2');
assert_equals(cursor.primaryKey, 2);
cursor.continue();
assert_equals(cursor.value, 'data2');
assert_equals(cursor.key, 'data2');
assert_equals(cursor.primaryKey, 2);
break;
default:
assert_unreached('Unexpected count: ' + count);
}
count++;
});
rq.onerror = t.unreached_func('unexpected error');
}, 'IDBCursor asyncness - continue');
indexeddb_test(upgrade_func, function(t, db) {
let count = 0;
let rq = db.transaction('test', 'readonly')
.objectStore('test')
.index('index')
.openCursor();
rq.onsuccess = t.step_func(function(e) {
if (!e.target.result) {
assert_equals(count, 2, 'count');
t.done();
return;
}
let cursor = e.target.result;
cursor.advance(1);
switch (count) {
case 0:
assert_equals(cursor.value, 'data');
assert_equals(cursor.key, 'data');
assert_equals(cursor.primaryKey, 1);
break;
case 1:
assert_equals(cursor.value, 'data2');
assert_equals(cursor.key, 'data2');
assert_equals(cursor.primaryKey, 2);
break;
default:
assert_unreached('Unexpected count: ' + count);
}
count++;
});
rq.onerror = t.unreached_func('unexpected error');
}, 'IDBCursor asyncness - fresh advance still async');
indexeddb_test(upgrade_func, function(t, db) {
let count = 0;
let rq = db.transaction('test', 'readonly').objectStore('test').openCursor();
rq.onsuccess = t.step_func(function(e) {
if (!e.target.result) {
assert_equals(count, 2, 'count');
t.done();
return;
}
let cursor = e.target.result;
cursor.continue();
switch (count) {
case 0:
assert_equals(cursor.value, 'data');
assert_equals(cursor.key, 1);
break;
case 1:
assert_equals(cursor.value, 'data2');
assert_equals(cursor.key, 2);
break;
default:
assert_unreached('Unexpected count: ' + count);
}
count++;
});
rq.onerror = t.unreached_func('unexpected error');
}, 'IDBCursor asyncness - fresh continue still async');