196 lines
4.7 KiB
JavaScript
196 lines
4.7 KiB
JavaScript
// META: global=window,worker
|
|
// META: title=IDBCursor.advance() - invalid
|
|
// META: script=resources/support.js
|
|
|
|
// Spec:
|
|
// https://w3c.github.io/IndexedDB/#widl-IDBCursor-advance-void-unsigned-long-count
|
|
|
|
'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')
|
|
.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);
|
|
|
|
// Second try
|
|
assert_throws_dom('InvalidStateError', function() {
|
|
cursor.advance(1);
|
|
}, 'second advance');
|
|
|
|
assert_throws_dom('InvalidStateError', function() {
|
|
cursor.advance(3);
|
|
}, 'third advance');
|
|
|
|
count++;
|
|
});
|
|
rq.onerror = t.unreached_func('unexpected error');
|
|
}, 'IDBCursor.advance() - invalid - attempt to call advance twice');
|
|
|
|
indexeddb_test(upgrade_func, function(t, db) {
|
|
let rq = db.transaction('test', 'readonly')
|
|
.objectStore('test')
|
|
.index('index')
|
|
.openCursor();
|
|
|
|
rq.onsuccess = t.step_func(function(e) {
|
|
let cursor = e.target.result;
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance(self);
|
|
});
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance({});
|
|
});
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance([]);
|
|
});
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance('');
|
|
});
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance('1 2');
|
|
});
|
|
|
|
t.done();
|
|
});
|
|
rq.onerror = t.unreached_func('unexpected error');
|
|
}, 'IDBCursor.advance() - invalid - pass something other than number');
|
|
|
|
|
|
indexeddb_test(upgrade_func, function(t, db) {
|
|
let rq = db.transaction('test', 'readonly')
|
|
.objectStore('test')
|
|
.index('index')
|
|
.openCursor();
|
|
|
|
rq.onsuccess = t.step_func(function(e) {
|
|
let cursor = e.target.result;
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance(null);
|
|
});
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance(undefined);
|
|
});
|
|
|
|
let mylet = null;
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance(mylet);
|
|
});
|
|
|
|
t.done();
|
|
});
|
|
rq.onerror = t.unreached_func('unexpected error');
|
|
}, 'IDBCursor.advance() - invalid - pass null/undefined');
|
|
|
|
|
|
indexeddb_test(upgrade_func, function(t, db) {
|
|
let rq = db.transaction('test', 'readonly')
|
|
.objectStore('test')
|
|
.index('index')
|
|
.openCursor();
|
|
|
|
rq.onsuccess = t.step_func(function(e) {
|
|
let cursor = e.target.result;
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance();
|
|
});
|
|
|
|
t.done();
|
|
});
|
|
rq.onerror = t.unreached_func('unexpected error');
|
|
}, 'IDBCursor.advance() - invalid - missing argument');
|
|
|
|
indexeddb_test(upgrade_func, function(t, db) {
|
|
let rq = db.transaction('test', 'readonly')
|
|
.objectStore('test')
|
|
.index('index')
|
|
.openCursor();
|
|
|
|
rq.onsuccess = t.step_func(function(e) {
|
|
let cursor = e.target.result;
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance(-1);
|
|
});
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance(NaN);
|
|
});
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance(0);
|
|
});
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance(-0);
|
|
});
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance(Infinity);
|
|
});
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance(-Infinity);
|
|
});
|
|
|
|
let mylet = -999999;
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance(mylet);
|
|
});
|
|
|
|
t.done();
|
|
});
|
|
rq.onerror = t.unreached_func('unexpected error');
|
|
}, 'IDBCursor.advance() - invalid - pass negative numbers');
|
|
|
|
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) {
|
|
let cursor = e.target.result;
|
|
if (!cursor) {
|
|
assert_equals(count, 2, 'count runs');
|
|
t.done();
|
|
return;
|
|
}
|
|
|
|
assert_throws_js(TypeError, function() {
|
|
cursor.advance(0);
|
|
});
|
|
|
|
cursor.advance(1);
|
|
count++;
|
|
});
|
|
rq.onerror = t.unreached_func('unexpected error');
|
|
}, 'IDBCursor.advance() - invalid - got value not set on exception');
|