@Test public void wrap_closeables() throws Exception { AutoCloseable closeable1 = mock(AutoCloseable.class); AutoCloseable closeable2 = mock(AutoCloseable.class); CloseableIterator iterator = new SimpleCloseableIterator(); CloseableIterator wrapper = CloseableIterator.wrap(iterator, closeable1, closeable2); assertThat(wrapper.next()).isEqualTo(1); assertThat(wrapper.next()).isEqualTo(2); assertThat(wrapper.hasNext()).isFalse(); assertThat(wrapper.isClosed).isTrue(); assertThat(iterator.isClosed).isTrue(); InOrder order = inOrder(closeable1, closeable2); order.verify(closeable1).close(); order.verify(closeable2).close(); }
@Test public void iterate() { SimpleCloseableIterator it = new SimpleCloseableIterator(); assertThat(it.isClosed).isFalse(); // multiple calls to hasNext() moves only once the cursor assertThat(it.hasNext()).isTrue(); assertThat(it.hasNext()).isTrue(); assertThat(it.hasNext()).isTrue(); assertThat(it.next()).isEqualTo(1); assertThat(it.isClosed).isFalse(); assertThat(it.hasNext()).isTrue(); assertThat(it.next()).isEqualTo(2); assertThat(it.isClosed).isFalse(); assertThat(it.hasNext()).isFalse(); // automatic close assertThat(it.isClosed).isTrue(); // explicit close does not fail it.close(); assertThat(it.isClosed).isTrue(); }
@Test public void call_next_without_hasNext() { SimpleCloseableIterator it = new SimpleCloseableIterator(); assertThat(it.next()).isEqualTo(1); assertThat(it.next()).isEqualTo(2); try { it.next(); fail(); } catch (NoSuchElementException expected) { } }
@Test(expected = IllegalArgumentException.class) public void from_iterator_throws_IAE_if_arg_is_a_CloseableIterator() { CloseableIterator.from(new SimpleCloseableIterator()); }
@Test(expected = NullPointerException.class) public void wrap_fails_if_null_closeable() { CloseableIterator.wrap(new SimpleCloseableIterator(), (AutoCloseable)null); }
@Test public void remove_is_not_supported_by_default() { SimpleCloseableIterator it = new SimpleCloseableIterator(); try { it.remove(); fail(); } catch (UnsupportedOperationException expected) { assertThat(it.isClosed).isTrue(); } }
@Test(expected = IllegalArgumentException.class) public void wrap_fails_if_iterator_declared_in_other_closeables() { CloseableIterator iterator = new SimpleCloseableIterator(); CloseableIterator.wrap(iterator, iterator); }