public static <T> ResourceIterator<T> concatResourceIterators( Iterator<ResourceIterator<T>> iterators ) { return new CombiningResourceIterator<>( iterators ); }
@Test void closesAllIteratorsOnShutdown() { // Given ResourceIterator<Long> it1 = spy( asResourceIterator( iterator( 1L, 2L, 3L ) ) ); ResourceIterator<Long> it2 = spy( asResourceIterator( iterator( 5L, 6L, 7L ) ) ); CombiningResourceIterator<Long> combingIterator = new CombiningResourceIterator<>( iterator(it1, it2) ); // Given I iterate through half of it int iterations = 4; while ( iterations-- > 0 ) { combingIterator.next(); } // When combingIterator.close(); // Then verify(it1).close(); verify(it2).close(); }
@Test void shouldNotCloseDuringIteration() { // Given ResourceIterator<Long> it1 = spy( asResourceIterator( iterator( 1L, 2L, 3L ) ) ); ResourceIterator<Long> it2 = spy( asResourceIterator( iterator( 5L, 6L, 7L ) ) ); CombiningResourceIterator<Long> combingIterator = new CombiningResourceIterator<>( iterator(it1, it2) ); // When I iterate through it, things come back in the right order assertThat( Iterators.asList( combingIterator ), equalTo(asList( 1L, 2L, 3L, 5L, 6L, 7L )) ); // Then verify(it1, never()).close(); verify(it2, never()).close(); }
@Test void shouldHandleSingleItemIterators() { // Given ResourceIterator<Long> it1 = asResourceIterator( iterator( 1L ) ); ResourceIterator<Long> it2 = asResourceIterator( iterator( 5L, 6L, 7L ) ); CombiningResourceIterator<Long> combingIterator = new CombiningResourceIterator<>( iterator(it1, it2) ); // When I iterate through it, things come back in the right order assertThat( Iterators.asList( combingIterator ), equalTo(asList( 1L, 5L, 6L, 7L )) ); } }
public static <T> ResourceIterator<T> concatResourceIterators( Iterator<ResourceIterator<T>> iterators ) { return new CombiningResourceIterator<>( iterators ); }