167 lines
4.2 KiB
JavaScript
167 lines
4.2 KiB
JavaScript
// 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');
|