package lsr.common;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
public class SingleThreadDispatcherTest {
private SingleThreadDispatcher dispatcher;
@Before
public void setUp() {
dispatcher = new SingleThreadDispatcher("test");
}
@Test
public void shouldDeterminIfInDispatcherThread() {
assertFalse(dispatcher.amIInDispatcher());
dispatcher.executeAndWait(new Runnable() {
public void run() {
assertEquals(true, dispatcher.amIInDispatcher());
dispatcher.checkInDispatcher();
}
});
}
@Test
public void shouldExecuteTask() throws InterruptedException {
Runnable task = mock(Runnable.class);
dispatcher.executeAndWait(task);
verify(task).run();
}
@Test
public void shouldExecuteAndWaitIfInDispatcherThread() {
final Runnable task1 = mock(Runnable.class);
final Runnable task2 = mock(Runnable.class);
final Runnable task3 = mock(Runnable.class);
InOrder inOrder = inOrder(task1, task2, task3);
dispatcher.executeAndWait(new Runnable() {
public void run() {
task1.run();
dispatcher.executeAndWait(task2);
task3.run();
}
});
inOrder.verify(task1).run();
inOrder.verify(task2).run();
inOrder.verify(task3).run();
}
@Test
public void shouldExecuteIfInDispatcherThread() {
final Runnable task1 = mock(Runnable.class);
final Runnable task2 = mock(Runnable.class);
final Runnable task3 = mock(Runnable.class);
InOrder inOrder = inOrder(task1, task2, task3);
dispatcher.executeAndWait(new Runnable() {
public void run() {
task1.run();
dispatcher.execute(task2);
task3.run();
}
});
inOrder.verify(task1).run();
inOrder.verify(task3).run();
inOrder.verify(task2).run();
}
}