| // 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'); |