package testsupport;
import org.mockito.stubbing.Answer;
import java.util.Iterator;
import static java.util.Arrays.asList;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class Mocking {
@SuppressWarnings("unchecked")
public static Iterable mockIterable() {
Iterable iterable = (Iterable) mock(Iterable.class);
when(iterable.iterator()).thenReturn((Iterator) mock(Iterator.class));
return iterable;
}
@SafeVarargs
@SuppressWarnings("varargs")
public static void mockIteratorToHaveValues(Iterator iterator, T... values) {
Iterator real = asList(values).iterator();
when(iterator.hasNext()).then(delegateTo(real));
when(iterator.next()).then(delegateTo(real));
}
public static Answer delegateTo(final Object real) {
return invocation -> invocation.getMethod().invoke(real);
}
}