package mocks;
import android.os.Parcel;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicInteger;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.when;
public class ParcelMock {
public static Parcel mock() {
Parcel parcel = Mockito.mock(Parcel.class);
final ArrayList<Object> objects = new ArrayList<>();
final AtomicInteger position = new AtomicInteger();
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
objects.add(invocation.getArguments()[0]);
position.incrementAndGet();
return null;
}
}).when(parcel).writeValue(any());
when(parcel.marshall()).thenReturn(new byte[0]);
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
position.set((Integer) invocation.getArguments()[0]);
return null;
}
}).when(parcel).setDataPosition(anyInt());
when(parcel.readValue(any(ClassLoader.class))).thenAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
return objects.get(position.getAndIncrement());
}
});
return parcel;
}
}