mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-21 23:00:43 -08:00
Add example i/o test
This commit is contained in:
40
10_Blackjack/java/test/GameTest.java
Normal file
40
10_Blackjack/java/test/GameTest.java
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import java.io.EOFException;
|
||||||
|
import java.io.Reader;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.io.UncheckedIOException;
|
||||||
|
|
||||||
|
public class GameTest {
|
||||||
|
|
||||||
|
private StringReader in;
|
||||||
|
private StringWriter out;
|
||||||
|
private Game game;
|
||||||
|
|
||||||
|
private void givenInput(String input) {
|
||||||
|
Reader in = new StringReader("\u2404"); // U+2404 is "End of Transmission" sent by CTRL+D (or CTRL+Z on Windows)
|
||||||
|
StringWriter out = new StringWriter();
|
||||||
|
UserIo userIo = new UserIo(in, out);
|
||||||
|
Deck deck = new Deck((cards) -> cards);
|
||||||
|
game = new Game(deck, userIo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldQuitOnCtrlD() {
|
||||||
|
// Given
|
||||||
|
givenInput("\u2404"); // U+2404 is "End of Transmission" sent by CTRL+D (or CTRL+Z on Windows)
|
||||||
|
|
||||||
|
// When
|
||||||
|
Exception e = assertThrows(UncheckedIOException.class, game::run);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertTrue(e.getCause() instanceof EOFException);
|
||||||
|
assertEquals("!END OF INPUT", e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
84
10_Blackjack/java/test/UserIoTest.java
Normal file
84
10_Blackjack/java/test/UserIoTest.java
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
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\n1"); // 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\n? ", out.toString());
|
||||||
|
assertEquals(1, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user