package com.github.scr.j8iterables;
import com.github.scr.j8iterables.core.Ends;
import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.util.*;
import java.util.stream.Stream;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat;
/**
* Created by scr on 7/13/15.
*/
@Test
public class J8IteratorsTest {
@Test
public void testStreamFromIterator() throws Exception {
Iterator<Integer> iterator = Arrays.asList(1, 2, 3).iterator();
Stream<Integer> stream = J8Iterators.toStream(iterator);
assertThat(stream.mapToInt(a -> a).sum(), is(6));
}
@Test
public void testCoverageTrickForUtilityClass() throws Exception {
assertThat(new J8Iterators(), notNullValue());
}
@DataProvider(name = "endIterators")
public static Iterator<Object[]> endIterators() {
return Iterators.transform(Arrays.asList(J8IterablesTest.endIterables()).iterator(),
objects -> new Object[]{objects[0], ((Iterable) objects[1]).iterator(), objects[2]});
}
@Test(dataProvider = "endIterators")
public <T> void testGetEnds(String desc, Iterator<T> iterator, Optional<Ends<T>> expectedEnds) throws Exception {
Optional<Ends<T>> ends = J8Iterators.ends(iterator);
assertThat(desc, ends, is(expectedEnds));
if (ends.isPresent() && expectedEnds.isPresent()) {
assertThat(ends.get().getFirst(), is(expectedEnds.get().getFirst()));
assertThat(ends.get().getLast(), is(expectedEnds.get().getLast()));
}
}
@Test
public void testPeek() throws Exception {
List<Integer> input = Arrays.asList(1, 2, 3);
List<Integer> peekedOutput = new ArrayList<>();
List<Integer> output = new ArrayList<>();
Iterator<Integer> inputIterator = input.iterator();
Iterator<Integer> peekingIterator = J8Iterators.peek(inputIterator, e -> peekedOutput.add(e + 1));
peekingIterator.forEachRemaining(output::add);
assertThat(peekedOutput, is(Arrays.asList(2, 3, 4)));
assertThat(output, is(Arrays.asList(1, 2, 3)));
}
}