mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 07:10:42 -08:00
85 lines
2.7 KiB
Java
85 lines
2.7 KiB
Java
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
|
import java.io.Reader;
|
|
import java.io.StringReader;
|
|
import java.io.StringWriter;
|
|
|
|
import org.junit.jupiter.api.DisplayName;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.params.ParameterizedTest;
|
|
import org.junit.jupiter.params.provider.CsvSource;
|
|
import org.junit.jupiter.params.provider.ValueSource;
|
|
|
|
public class UserIoTest {
|
|
|
|
@ParameterizedTest(name = "''{0}'' is accepted as ''no''")
|
|
@ValueSource(strings = {"N", "n", "No", "NO", "no"})
|
|
public void testPromptBooleanAcceptsNo(String response) {
|
|
// Given
|
|
Reader in = new StringReader(response + "\n");
|
|
StringWriter out = new StringWriter();
|
|
UserIo userIo = new UserIo(in, out);
|
|
|
|
// When
|
|
boolean result = userIo.promptBoolean("TEST");
|
|
|
|
// Then
|
|
assertEquals("TEST? ", out.toString());
|
|
assertFalse(result);
|
|
}
|
|
|
|
@ParameterizedTest(name = "''{0}'' is accepted as ''yes''")
|
|
@ValueSource(strings = {"Y", "y", "Yes", "YES", "yes", "", "foobar"})
|
|
public void testPromptBooleanAcceptsYes(String response) {
|
|
// Given
|
|
Reader in = new StringReader(response + "\n");
|
|
StringWriter out = new StringWriter();
|
|
UserIo userIo = new UserIo(in, out);
|
|
|
|
// When
|
|
boolean result = userIo.promptBoolean("TEST");
|
|
|
|
// Then
|
|
assertEquals("TEST? ", out.toString());
|
|
assertTrue(result);
|
|
}
|
|
|
|
@ParameterizedTest(name = "''{0}'' is accepted as number")
|
|
@CsvSource({
|
|
"1,1",
|
|
"0,0",
|
|
"-1,-1",
|
|
})
|
|
public void testPromptIntAcceptsNumbers(String response, int expected) {
|
|
// Given
|
|
Reader in = new StringReader(response + "\n");
|
|
StringWriter out = new StringWriter();
|
|
UserIo userIo = new UserIo(in, out);
|
|
|
|
// When
|
|
int result = userIo.promptInt("TEST");
|
|
|
|
// Then
|
|
assertEquals("TEST? ", out.toString());
|
|
assertEquals(expected, result);
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("promptInt should print an error and reprompt if given a non-numeric response")
|
|
public void testPromptIntRepromptsOnNonNumeric() {
|
|
// Given
|
|
Reader in = new StringReader("foo" + System.lineSeparator() +"1"); // word, then number
|
|
StringWriter out = new StringWriter();
|
|
UserIo userIo = new UserIo(in, out);
|
|
|
|
// When
|
|
int result = userIo.promptInt("TEST");
|
|
|
|
// Then
|
|
assertEquals("TEST? !NUMBER EXPECTED - RETRY INPUT LINE" + System.lineSeparator() +"? ", out.toString());
|
|
assertEquals(1, result);
|
|
}
|
|
}
|