package games.strategy.engine.framework.headlessGameServer;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintStream;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import games.strategy.util.ThreadUtil;
@RunWith(MockitoJUnitRunner.class)
public class HeadlessGameServerConsoleTest {
private HeadlessGameServerConsole testObj;
@Mock
private BufferedReader mockBufferedReader;
@Mock
private PrintStream mockPrintStream;
@Mock
private HeadlessConsoleController mockHeadlessConsoleController;
@Before
public void setUp() {
testObj = new HeadlessGameServerConsole(mockBufferedReader, mockPrintStream, mockHeadlessConsoleController);
}
/**
* Start the test object processing, it will read from the mock output and should
* send to the mock controller. The mock controller then just needs to check
* that it gets the input we send.
*/
@Test
public void testProcess() {
final String testValueToSendThru = " some value ";
try {
when(mockBufferedReader.readLine()).thenReturn(testValueToSendThru + "\n").thenReturn(null);
} catch (final IOException e) {
throw new IllegalStateException(e);
}
testObj.start();
// console thread reads on another thread, sleep for a bit to give it a chance to read.
ThreadUtil.sleep(HeadlessGameServerConsole.LOOP_SLEEP_MS * 5);
verify(mockHeadlessConsoleController, times(1)).process(testValueToSendThru.trim());
}
}