2015-12-13 12:55:13 +01:00
|
|
|
package com.iluwatar.halfsynchalfasync;
|
|
|
|
|
|
|
|
import org.junit.Test;
|
|
|
|
import org.mockito.InOrder;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.util.concurrent.LinkedBlockingQueue;
|
|
|
|
|
|
|
|
import static org.mockito.Matchers.eq;
|
2015-12-27 21:21:57 +02:00
|
|
|
import static org.mockito.Mockito.*;
|
2015-12-13 12:55:13 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Date: 12/12/15 - 11:15 PM
|
|
|
|
*
|
|
|
|
* @author Jeroen Meulemeester
|
|
|
|
*/
|
|
|
|
public class AsynchronousServiceTest {
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testPerfectExecution() throws Exception {
|
|
|
|
final AsynchronousService service = new AsynchronousService(new LinkedBlockingQueue<>());
|
|
|
|
final AsyncTask<Object> task = mock(AsyncTask.class);
|
|
|
|
final Object result = new Object();
|
|
|
|
when(task.call()).thenReturn(result);
|
|
|
|
service.execute(task);
|
|
|
|
|
|
|
|
verify(task, timeout(2000)).onPostCall(eq(result));
|
|
|
|
|
|
|
|
final InOrder inOrder = inOrder(task);
|
|
|
|
inOrder.verify(task, times(1)).onPreCall();
|
|
|
|
inOrder.verify(task, times(1)).call();
|
|
|
|
inOrder.verify(task, times(1)).onPostCall(eq(result));
|
|
|
|
|
|
|
|
verifyNoMoreInteractions(task);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testCallException() throws Exception {
|
|
|
|
final AsynchronousService service = new AsynchronousService(new LinkedBlockingQueue<>());
|
|
|
|
final AsyncTask<Object> task = mock(AsyncTask.class);
|
|
|
|
final IOException exception = new IOException();
|
|
|
|
when(task.call()).thenThrow(exception);
|
|
|
|
service.execute(task);
|
|
|
|
|
|
|
|
verify(task, timeout(2000)).onError(eq(exception));
|
|
|
|
|
|
|
|
final InOrder inOrder = inOrder(task);
|
|
|
|
inOrder.verify(task, times(1)).onPreCall();
|
|
|
|
inOrder.verify(task, times(1)).call();
|
|
|
|
inOrder.verify(task, times(1)).onError(exception);
|
|
|
|
|
|
|
|
verifyNoMoreInteractions(task);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testPreCallException() throws Exception {
|
|
|
|
final AsynchronousService service = new AsynchronousService(new LinkedBlockingQueue<>());
|
|
|
|
final AsyncTask<Object> task = mock(AsyncTask.class);
|
|
|
|
final IllegalStateException exception = new IllegalStateException();
|
|
|
|
doThrow(exception).when(task).onPreCall();
|
|
|
|
service.execute(task);
|
|
|
|
|
|
|
|
verify(task, timeout(2000)).onError(eq(exception));
|
|
|
|
|
|
|
|
final InOrder inOrder = inOrder(task);
|
|
|
|
inOrder.verify(task, times(1)).onPreCall();
|
|
|
|
inOrder.verify(task, times(1)).onError(exception);
|
|
|
|
|
|
|
|
verifyNoMoreInteractions(task);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|