|
33 | 33 | import java.util.ArrayList;
|
34 | 34 | import java.util.Iterator;
|
35 | 35 | import java.util.List;
|
| 36 | +import java.util.NoSuchElementException; |
36 | 37 |
|
37 | 38 | public class CursorSimpleTest {
|
38 | 39 |
|
@@ -93,6 +94,10 @@ public void shouldGetAllUser() {
|
93 | 94 | Assert.assertEquals("User4", user.getName());
|
94 | 95 | Assert.assertEquals(3, usersCursor.getCurrentIndex());
|
95 | 96 |
|
| 97 | + user = iterator.next(); |
| 98 | + Assert.assertEquals("User5", user.getName()); |
| 99 | + Assert.assertEquals(4, usersCursor.getCurrentIndex()); |
| 100 | + |
96 | 101 | // Check no more elements
|
97 | 102 | Assert.assertFalse(iterator.hasNext());
|
98 | 103 | Assert.assertFalse(usersCursor.isOpen());
|
@@ -140,26 +145,80 @@ public void testCursorWithRowBound() {
|
140 | 145 |
|
141 | 146 | try {
|
142 | 147 | // RowBound starting at offset 1 and limiting to 2 items
|
143 |
| - Cursor<User> usersCursor = sqlSession.selectCursor("getAllUsers", null, new RowBounds(1, 2)); |
| 148 | + Cursor<User> usersCursor = sqlSession.selectCursor("getAllUsers", null, new RowBounds(1, 3)); |
144 | 149 |
|
145 | 150 | Iterator<User> iterator = usersCursor.iterator();
|
146 | 151 |
|
147 | 152 | User user = iterator.next();
|
148 | 153 | Assert.assertEquals("User2", user.getName());
|
149 | 154 | Assert.assertEquals(1, usersCursor.getCurrentIndex());
|
150 | 155 |
|
| 156 | + // Calling hasNext() before next() |
| 157 | + Assert.assertTrue(iterator.hasNext()); |
151 | 158 | user = iterator.next();
|
152 | 159 | Assert.assertEquals("User3", user.getName());
|
153 | 160 | Assert.assertEquals(2, usersCursor.getCurrentIndex());
|
154 | 161 |
|
| 162 | + // Calling next() without a previous hasNext() call |
| 163 | + user = iterator.next(); |
| 164 | + Assert.assertEquals("User4", user.getName()); |
| 165 | + Assert.assertEquals(3, usersCursor.getCurrentIndex()); |
| 166 | + |
| 167 | + Assert.assertFalse(iterator.hasNext()); |
| 168 | + Assert.assertFalse(usersCursor.isOpen()); |
| 169 | + Assert.assertTrue(usersCursor.isConsumed()); |
| 170 | + } finally { |
| 171 | + sqlSession.close(); |
| 172 | + } |
| 173 | + } |
| 174 | + |
| 175 | + @Test |
| 176 | + public void testCursorIteratorNoSuchElementExceptionWithHasNext() { |
| 177 | + SqlSession sqlSession = sqlSessionFactory.openSession(); |
| 178 | + |
| 179 | + Cursor<User> usersCursor = sqlSession.selectCursor("getAllUsers", null, new RowBounds(1, 1)); |
| 180 | + try { |
| 181 | + Iterator<User> iterator = usersCursor.iterator(); |
| 182 | + |
| 183 | + User user = iterator.next(); |
| 184 | + Assert.assertEquals("User2", user.getName()); |
| 185 | + Assert.assertEquals(1, usersCursor.getCurrentIndex()); |
| 186 | + |
155 | 187 | Assert.assertFalse(iterator.hasNext());
|
| 188 | + iterator.next(); |
| 189 | + Assert.fail("We should have failed since we call next() when hasNext() returned false"); |
| 190 | + } catch (NoSuchElementException e) { |
156 | 191 | Assert.assertFalse(usersCursor.isOpen());
|
157 | 192 | Assert.assertTrue(usersCursor.isConsumed());
|
158 | 193 | } finally {
|
159 | 194 | sqlSession.close();
|
160 | 195 | }
|
161 | 196 | }
|
162 | 197 |
|
| 198 | + @Test |
| 199 | + public void testCursorIteratorNoSuchElementExceptionNoHasNext() { |
| 200 | + SqlSession sqlSession = sqlSessionFactory.openSession(); |
| 201 | + |
| 202 | + Cursor<User> usersCursor = sqlSession.selectCursor("getAllUsers", null, new RowBounds(1, 1)); |
| 203 | + try { |
| 204 | + Iterator<User> iterator = usersCursor.iterator(); |
| 205 | + |
| 206 | + User user = iterator.next(); |
| 207 | + Assert.assertEquals("User2", user.getName()); |
| 208 | + Assert.assertEquals(1, usersCursor.getCurrentIndex()); |
| 209 | + |
| 210 | + // Trying next() without hasNext() |
| 211 | + iterator.next(); |
| 212 | + Assert.fail("We should have failed since we call next() when is no more items"); |
| 213 | + } catch (NoSuchElementException e) { |
| 214 | + Assert.assertFalse(usersCursor.isOpen()); |
| 215 | + Assert.assertTrue(usersCursor.isConsumed()); |
| 216 | + } finally { |
| 217 | + sqlSession.close(); |
| 218 | + } |
| 219 | + } |
| 220 | + |
| 221 | + |
163 | 222 | @Test
|
164 | 223 | public void testCursorWithBadRowBound() {
|
165 | 224 | SqlSession sqlSession = sqlSessionFactory.openSession();
|
@@ -285,8 +344,8 @@ public void testCursorUsageAfterClose() throws IOException {
|
285 | 344 | // trying next() will fail
|
286 | 345 | iterator.next();
|
287 | 346 |
|
288 |
| - Assert.fail("We should have failed since Cursor is closed"); |
289 |
| - } catch (CursorException e) { |
| 347 | + Assert.fail("We should have failed with NoSuchElementException since Cursor is closed"); |
| 348 | + } catch (NoSuchElementException e) { |
290 | 349 | // We had an exception and current index has not changed
|
291 | 350 | Assert.assertEquals(1, usersCursor.getCurrentIndex());
|
292 | 351 | return;
|
@@ -316,17 +375,19 @@ public void shouldGetAllUserUsingAnnotationBasedMapper() {
|
316 | 375 |
|
317 | 376 | Assert.assertFalse(usersCursor.isOpen());
|
318 | 377 | Assert.assertTrue(usersCursor.isConsumed());
|
319 |
| - Assert.assertEquals(3, usersCursor.getCurrentIndex()); |
| 378 | + Assert.assertEquals(4, usersCursor.getCurrentIndex()); |
320 | 379 |
|
321 |
| - Assert.assertEquals(4, userList.size()); |
| 380 | + Assert.assertEquals(5, userList.size()); |
322 | 381 | User user = userList.get(0);
|
323 | 382 | Assert.assertEquals("User1", user.getName());
|
324 | 383 | user = userList.get(1);
|
325 | 384 | Assert.assertEquals("User2", user.getName());
|
326 | 385 | user = userList.get(2);
|
327 | 386 | Assert.assertEquals("User3", user.getName());
|
328 |
| - user = userList.get(3);; |
| 387 | + user = userList.get(3); |
329 | 388 | Assert.assertEquals("User4", user.getName());
|
| 389 | + user = userList.get(4); |
| 390 | + Assert.assertEquals("User5", user.getName()); |
330 | 391 |
|
331 | 392 | } finally {
|
332 | 393 | sqlSession.close();
|
|
0 commit comments