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 |