| OLD | NEW |
| (Empty) |
| 1 <!DOCTYPE html> | |
| 2 <title>IDBCursor.advance() - invalid</title> | |
| 3 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal"> | |
| 4 <link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#
widl-IDBCursor-advance-void-unsigned-long-count"> | |
| 5 <link rel=assert title="If the value for count is 0 (zero) or a negative number,
this method must throw a JavaScript TypeError exception."> | |
| 6 <link rel=assert title="TypeError The value passed into the count parameter was
zero or a negative number."> | |
| 7 <link rel=assert title="InvalidStateError The cursor is currently being iterated
, or has iterated past its end."> | |
| 8 <link rel=assert title="Calling this method more than once before new cursor dat
a has been loaded is not allowed and results in a DOMException of type InvalidSt
ateError being thrown. For example, calling advance() twice from the same onsucc
ess handler results in a DOMException of type InvalidStateError being thrown on
the second call."> | |
| 9 <link rel=assert title="Before this method returns, unless an exception was thro
wn, it sets the got value flag on the cursor to false."> | |
| 10 <script src="../../../resources/testharness.js"></script> | |
| 11 <script src="../../../resources/testharnessreport.js"></script> | |
| 12 <script src="support.js"></script> | |
| 13 | |
| 14 <script> | |
| 15 | |
| 16 var db, open; | |
| 17 | |
| 18 setup(function() { | |
| 19 open = indexedDB.open('testdb-' + new Date().getTime()); | |
| 20 open.onupgradeneeded = function(e) { | |
| 21 db = e.target.result; | |
| 22 var objStore = db.createObjectStore("test"); | |
| 23 objStore.createIndex("index", ""); | |
| 24 | |
| 25 objStore.add("data", 1); | |
| 26 objStore.add("data2", 2); | |
| 27 }; | |
| 28 }, | |
| 29 { explicit_done: true }); | |
| 30 | |
| 31 | |
| 32 open.onsuccess = function() { | |
| 33 | |
| 34 async_test(document.title + " - attempt to call advance twice").step(fun
ction(e) { | |
| 35 var count = 0; | |
| 36 var rq = db.transaction("test").objectStore("test").index("index").o
penCursor(); | |
| 37 | |
| 38 rq.onsuccess = this.step_func(function(e) { | |
| 39 if (!e.target.result) { | |
| 40 assert_equals(count, 2, 'count'); | |
| 41 this.done(); | |
| 42 return; | |
| 43 } | |
| 44 var cursor = e.target.result; | |
| 45 | |
| 46 cursor.advance(1); | |
| 47 | |
| 48 // Second try | |
| 49 assert_throws('InvalidStateError', | |
| 50 function() { cursor.advance(1); }, 'second advance'); | |
| 51 | |
| 52 assert_throws('InvalidStateError', | |
| 53 function() { cursor.advance(3); }, 'third advance'); | |
| 54 | |
| 55 count++; | |
| 56 }); | |
| 57 rq.onerror = fail(this, "unexpected error") | |
| 58 }); | |
| 59 | |
| 60 | |
| 61 async_test(document.title + " - pass something other than number").step(
function(e) { | |
| 62 var rq = db.transaction("test").objectStore("test").index("index").o
penCursor(); | |
| 63 | |
| 64 rq.onsuccess = this.step_func(function(e) { | |
| 65 var cursor = e.target.result; | |
| 66 | |
| 67 assert_throws({ name: "TypeError" }, | |
| 68 function() { cursor.advance(document); }); | |
| 69 | |
| 70 assert_throws({ name: "TypeError" }, | |
| 71 function() { cursor.advance({}); }); | |
| 72 | |
| 73 assert_throws({ name: "TypeError" }, | |
| 74 function() { cursor.advance([]); }); | |
| 75 | |
| 76 assert_throws({ name: "TypeError" }, | |
| 77 function() { cursor.advance(""); }); | |
| 78 | |
| 79 assert_throws({ name: "TypeError" }, | |
| 80 function() { cursor.advance("1 2"); }); | |
| 81 | |
| 82 this.done(); | |
| 83 }); | |
| 84 rq.onerror = fail(this, "unexpected error") | |
| 85 }); | |
| 86 | |
| 87 | |
| 88 async_test(document.title + " - pass null/undefined").step(function(e) { | |
| 89 var rq = db.transaction("test").objectStore("test").index("index").o
penCursor(); | |
| 90 | |
| 91 rq.onsuccess = this.step_func(function(e) { | |
| 92 var cursor = e.target.result; | |
| 93 | |
| 94 assert_throws({ name: "TypeError" }, | |
| 95 function() { cursor.advance(null); }); | |
| 96 | |
| 97 assert_throws({ name: "TypeError" }, | |
| 98 function() { cursor.advance(undefined); }); | |
| 99 | |
| 100 var myvar = null; | |
| 101 assert_throws({ name: "TypeError" }, | |
| 102 function() { cursor.advance(myvar); }); | |
| 103 | |
| 104 this.done(); | |
| 105 }); | |
| 106 rq.onerror = fail(this, "unexpected error") | |
| 107 }); | |
| 108 | |
| 109 | |
| 110 async_test(document.title + " - missing argument").step(function(e) { | |
| 111 var rq = db.transaction("test").objectStore("test").index("index").o
penCursor(); | |
| 112 | |
| 113 rq.onsuccess = this.step_func(function(e) { | |
| 114 var cursor = e.target.result; | |
| 115 | |
| 116 assert_throws({ name: "TypeError" }, | |
| 117 function() { cursor.advance(); }); | |
| 118 | |
| 119 this.done(); | |
| 120 }); | |
| 121 rq.onerror = fail(this, "unexpected error") | |
| 122 }); | |
| 123 | |
| 124 | |
| 125 async_test(document.title + " - pass negative numbers").step(function(e)
{ | |
| 126 var rq = db.transaction("test").objectStore("test").index("index").o
penCursor(); | |
| 127 | |
| 128 rq.onsuccess = this.step_func(function(e) { | |
| 129 var cursor = e.target.result; | |
| 130 | |
| 131 assert_throws({ name: "TypeError" }, | |
| 132 function() { cursor.advance(-1); }); | |
| 133 | |
| 134 assert_throws({ name: "TypeError" }, | |
| 135 function() { cursor.advance(NaN); }); | |
| 136 | |
| 137 assert_throws({ name: "TypeError" }, | |
| 138 function() { cursor.advance(0); }); | |
| 139 | |
| 140 assert_throws({ name: "TypeError" }, | |
| 141 function() { cursor.advance(-0); }); | |
| 142 | |
| 143 assert_throws({ name: "TypeError" }, | |
| 144 function() { cursor.advance(Infinity); }); | |
| 145 | |
| 146 assert_throws({ name: "TypeError" }, | |
| 147 function() { cursor.advance(-Infinity); }); | |
| 148 | |
| 149 var myvar = -999999; | |
| 150 assert_throws({ name: "TypeError" }, | |
| 151 function() { cursor.advance(myvar); }); | |
| 152 | |
| 153 this.done(); | |
| 154 }); | |
| 155 rq.onerror = fail(this, "unexpected error") | |
| 156 }); | |
| 157 | |
| 158 | |
| 159 async_test(document.title + " - got value not set on exception").step(fu
nction(e) { | |
| 160 var count = 0; | |
| 161 var rq = db.transaction("test").objectStore("test").index("index").o
penCursor(); | |
| 162 | |
| 163 rq.onsuccess = this.step_func(function(e) { | |
| 164 var cursor = e.target.result; | |
| 165 if (!cursor) | |
| 166 { | |
| 167 assert_equals(count, 2, "count runs"); | |
| 168 this.done(); | |
| 169 return; | |
| 170 } | |
| 171 | |
| 172 assert_throws({ name: "TypeError" }, | |
| 173 function() { cursor.advance(0); }); | |
| 174 | |
| 175 cursor.advance(1); | |
| 176 count++; | |
| 177 }); | |
| 178 rq.onerror = fail(this, "unexpected error") | |
| 179 }); | |
| 180 | |
| 181 | |
| 182 // Stop blocking the testing system from hereon | |
| 183 done(); | |
| 184 } | |
| 185 | |
| 186 </script> | |
| 187 | |
| 188 <div id=log></div> | |
| OLD | NEW |