Files
basic-computer-games/10_Blackjack/java/test/UserIoTest.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);
}
}