| Index: LayoutTests/imported/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm
|
| diff --git a/LayoutTests/imported/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm b/LayoutTests/imported/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e2504b9e41e68992e70b611a5ad29648ba4f1676
|
| --- /dev/null
|
| +++ b/LayoutTests/imported/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm
|
| @@ -0,0 +1,188 @@
|
| +<!DOCTYPE html>
|
| +<title>IDBCursor.advance() - invalid</title>
|
| +<link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
|
| +<link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBCursor-advance-void-unsigned-long-count">
|
| +<link rel=assert title="If the value for count is 0 (zero) or a negative number, this method must throw a JavaScript TypeError exception.">
|
| +<link rel=assert title="TypeError The value passed into the count parameter was zero or a negative number.">
|
| +<link rel=assert title="InvalidStateError The cursor is currently being iterated, or has iterated past its end.">
|
| +<link rel=assert title="Calling this method more than once before new cursor data has been loaded is not allowed and results in a DOMException of type InvalidStateError being thrown. For example, calling advance() twice from the same onsuccess handler results in a DOMException of type InvalidStateError being thrown on the second call.">
|
| +<link rel=assert title="Before this method returns, unless an exception was thrown, it sets the got value flag on the cursor to false.">
|
| +<script src="../../../resources/testharness.js"></script>
|
| +<script src="../../../resources/testharnessreport.js"></script>
|
| +<script src="support.js"></script>
|
| +
|
| +<script>
|
| +
|
| + var db, open;
|
| +
|
| + setup(function() {
|
| + open = indexedDB.open('testdb-' + new Date().getTime());
|
| + open.onupgradeneeded = function(e) {
|
| + db = e.target.result;
|
| + var objStore = db.createObjectStore("test");
|
| + objStore.createIndex("index", "");
|
| +
|
| + objStore.add("data", 1);
|
| + objStore.add("data2", 2);
|
| + };
|
| + },
|
| + { explicit_done: true });
|
| +
|
| +
|
| + open.onsuccess = function() {
|
| +
|
| + async_test(document.title + " - attempt to call advance twice").step(function(e) {
|
| + var count = 0;
|
| + var rq = db.transaction("test").objectStore("test").index("index").openCursor();
|
| +
|
| + rq.onsuccess = this.step_func(function(e) {
|
| + if (!e.target.result) {
|
| + assert_equals(count, 2, 'count');
|
| + this.done();
|
| + return;
|
| + }
|
| + var cursor = e.target.result;
|
| +
|
| + cursor.advance(1);
|
| +
|
| + // Second try
|
| + assert_throws('InvalidStateError',
|
| + function() { cursor.advance(1); }, 'second advance');
|
| +
|
| + assert_throws('InvalidStateError',
|
| + function() { cursor.advance(3); }, 'third advance');
|
| +
|
| + count++;
|
| + });
|
| + rq.onerror = fail(this, "unexpected error")
|
| + });
|
| +
|
| +
|
| + async_test(document.title + " - pass something other than number").step(function(e) {
|
| + var rq = db.transaction("test").objectStore("test").index("index").openCursor();
|
| +
|
| + rq.onsuccess = this.step_func(function(e) {
|
| + var cursor = e.target.result;
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(document); });
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance({}); });
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance([]); });
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(""); });
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance("1 2"); });
|
| +
|
| + this.done();
|
| + });
|
| + rq.onerror = fail(this, "unexpected error")
|
| + });
|
| +
|
| +
|
| + async_test(document.title + " - pass null/undefined").step(function(e) {
|
| + var rq = db.transaction("test").objectStore("test").index("index").openCursor();
|
| +
|
| + rq.onsuccess = this.step_func(function(e) {
|
| + var cursor = e.target.result;
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(null); });
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(undefined); });
|
| +
|
| + var myvar = null;
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(myvar); });
|
| +
|
| + this.done();
|
| + });
|
| + rq.onerror = fail(this, "unexpected error")
|
| + });
|
| +
|
| +
|
| + async_test(document.title + " - missing argument").step(function(e) {
|
| + var rq = db.transaction("test").objectStore("test").index("index").openCursor();
|
| +
|
| + rq.onsuccess = this.step_func(function(e) {
|
| + var cursor = e.target.result;
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(); });
|
| +
|
| + this.done();
|
| + });
|
| + rq.onerror = fail(this, "unexpected error")
|
| + });
|
| +
|
| +
|
| + async_test(document.title + " - pass negative numbers").step(function(e) {
|
| + var rq = db.transaction("test").objectStore("test").index("index").openCursor();
|
| +
|
| + rq.onsuccess = this.step_func(function(e) {
|
| + var cursor = e.target.result;
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(-1); });
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(NaN); });
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(0); });
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(-0); });
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(Infinity); });
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(-Infinity); });
|
| +
|
| + var myvar = -999999;
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(myvar); });
|
| +
|
| + this.done();
|
| + });
|
| + rq.onerror = fail(this, "unexpected error")
|
| + });
|
| +
|
| +
|
| + async_test(document.title + " - got value not set on exception").step(function(e) {
|
| + var count = 0;
|
| + var rq = db.transaction("test").objectStore("test").index("index").openCursor();
|
| +
|
| + rq.onsuccess = this.step_func(function(e) {
|
| + var cursor = e.target.result;
|
| + if (!cursor)
|
| + {
|
| + assert_equals(count, 2, "count runs");
|
| + this.done();
|
| + return;
|
| + }
|
| +
|
| + assert_throws({ name: "TypeError" },
|
| + function() { cursor.advance(0); });
|
| +
|
| + cursor.advance(1);
|
| + count++;
|
| + });
|
| + rq.onerror = fail(this, "unexpected error")
|
| + });
|
| +
|
| +
|
| + // Stop blocking the testing system from hereon
|
| + done();
|
| + }
|
| +
|
| +</script>
|
| +
|
| +<div id=log></div>
|
|
|