package com.constellio.data.utils;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.constellio.sdk.tests.ConstellioTest;
public class BatchBuilderIteratorTest extends ConstellioTest {
Iterator<String> nestedIterator;
BatchBuilderIterator<String> iterator;
@Before
public void setUp()
throws Exception {
}
@Test
public void whenIteratingOnEmptyNestedIteratorThenHasNextIsFalse()
throws Exception {
nestedIterator = Collections.emptyIterator();
iterator = new BatchBuilderIterator<>(nestedIterator, 3);
assertThat(iterator.hasNext()).isFalse();
}
@Test
public void whenIteratingOn3ItemsNestedIteratorThenReturnOneBatch()
throws Exception {
nestedIterator = asList("a", "b", "c").iterator();
iterator = new BatchBuilderIterator<>(nestedIterator, 3);
assertThat(iterator.hasNext()).isTrue();
assertThat(iterator.next()).isEqualTo(asList("a", "b", "c"));
assertThat(iterator.hasNext()).isFalse();
}
@Test
public void whenIteratingOn4ItemsNestedIteratorThenReturnTwoBatch()
throws Exception {
nestedIterator = asList("a", "b", "c", "d").iterator();
iterator = new BatchBuilderIterator<>(nestedIterator, 3);
assertThat(iterator.hasNext()).isTrue();
assertThat(iterator.next()).isEqualTo(asList("a", "b", "c"));
assertThat(iterator.hasNext()).isTrue();
assertThat(iterator.next()).isEqualTo(asList("d"));
assertThat(iterator.hasNext()).isFalse();
}
@Test
public void whenIteratingOnListIteratorThenOk()
throws Exception {
List<List<String>> lists = new ArrayList<>();
lists.add(asList("a", "b", "c", "d"));
lists.add(null);
lists.add(new ArrayList<String>());
lists.add(asList("e", "f", "g"));
iterator = BatchBuilderIterator.forListIterator(lists.iterator(), 3);
assertThat(iterator.hasNext()).isTrue();
assertThat(iterator.next()).isEqualTo(asList("a", "b", "c"));
assertThat(iterator.hasNext()).isTrue();
assertThat(iterator.next()).isEqualTo(asList("d", "e", "f"));
assertThat(iterator.hasNext()).isTrue();
assertThat(iterator.next()).isEqualTo(asList("g"));
assertThat(iterator.hasNext()).isFalse();
}
}