package eu.ehri.project.indexing.source.impl;
import com.google.common.collect.Lists;
import eu.ehri.project.indexing.source.Source;
import org.junit.Test;
import java.util.Iterator;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class MultiSourceTest {
public static class TestSource implements Source<String> {
private final List<String> data;
private boolean finished = false;
public TestSource(String... strings) {
data = Lists.newArrayList(strings);
}
@Override
public Iterable<String> iterable() throws SourceException {
return data;
}
@Override
public boolean isFinished() {
return finished;
}
@Override
public void close() throws SourceException {
finished = true;
}
}
@Test
public void testMultiIteration() throws Exception {
TestSource src1 = new TestSource("a", "b", "c");
TestSource src2 = new TestSource("d", "e", "f");
TestSource src3 = new TestSource("g", "h", "i");
MultiSource<String, TestSource> multiSource = new MultiSource<>(
Lists.newArrayList(src1, src2, src3));
Iterable<String> iterable = multiSource.iterable();
Iterator<String> iterator = iterable.iterator();
assertEquals("a", iterator.next());
assertEquals("b", iterator.next());
assertEquals("c", iterator.next());
assertTrue(iterator.hasNext());
assertTrue(src1.isFinished());
assertEquals("d", iterator.next());
assertEquals("e", iterator.next());
assertEquals("f", iterator.next());
assertTrue(iterator.hasNext());
assertTrue(src2.isFinished());
assertEquals("g", iterator.next());
assertEquals("h", iterator.next());
assertEquals("i", iterator.next());
assertFalse(iterator.hasNext());
assertTrue(src3.isFinished());
}
}