package io.fotoapparat.result; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import java.util.concurrent.Future; import io.fotoapparat.result.adapter.Adapter; import io.fotoapparat.result.transformer.Transformer; import io.fotoapparat.test.ImmediateExecutor; import static io.fotoapparat.test.TestUtils.immediateFuture; import static junit.framework.Assert.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) public class PendingResultTest { static final String RESULT = "Result"; static final Future<String> FUTURE = immediateFuture(RESULT); @Mock Transformer<String, Integer> transformer; @Mock Adapter<String, Integer> adapter; PendingResult<String> testee; @Before public void setUp() throws Exception { testee = new PendingResult<>( FUTURE, new ImmediateExecutor() ); } @Test public void transform() throws Exception { // Given given(transformer.transform(RESULT)) .willReturn(123); // When Integer result = testee.transform(transformer) .await(); // Then assertEquals( Integer.valueOf(123), result ); } @Test public void adapt() throws Exception { // Given given(adapter.adapt(FUTURE)) .willReturn(123); // When int result = testee.adapt(adapter); // Then verify(adapter).adapt(FUTURE); assertEquals(123, result); } @Test public void await() throws Exception { // When String result = testee.await(); // Then assertEquals( RESULT, result ); } }