package defactored3; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collection; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class TennisTest { private int player1Score; private int player2Score; private String expectedScore; public TennisTest(int player1Score, int player2Score, String expectedScore) { this.player1Score = player1Score; this.player2Score = player2Score; this.expectedScore = expectedScore; } @Parameters public static Collection getAllScores() { return Arrays.asList(new Object[][] { { 0, 0, "Love-All" }, { 1, 1, "Fifteen-All" }, { 2, 2, "Thirty-All"}, { 3, 3, "Forty-All"}, { 4, 4, "Deuce"}, { 1, 0, "Fifteen-Love"}, { 0, 1, "Love-Fifteen"}, { 2, 0, "Thirty-Love"}, { 0, 2, "Love-Thirty"}, { 3, 0, "Forty-Love"}, { 0, 3, "Love-Forty"}, { 4, 0, "Win for player1"}, { 0, 4, "Win for player2"}, { 2, 1, "Thirty-Fifteen"}, { 1, 2, "Fifteen-Thirty"}, { 3, 1, "Forty-Fifteen"}, { 1, 3, "Fifteen-Forty"}, { 4, 1, "Win for player1"}, { 1, 4, "Win for player2"}, { 3, 2, "Forty-Thirty"}, { 2, 3, "Thirty-Forty"}, { 4, 2, "Win for player1"}, { 2, 4, "Win for player2"}, { 4, 3, "Advantage player1"}, { 3, 4, "Advantage player2"}, { 5, 4, "Advantage player1"}, { 4, 5, "Advantage player2"}, { 15, 14, "Advantage player1"}, { 14, 15, "Advantage player2"}, { 6, 4, "Win for player1"}, { 4, 6, "Win for player2"}, { 16, 14, "Win for player1"}, { 14, 16, "Win for player2"}, }); } @Test public void checkAllScores() { TennisGame game = new TennisGame("player1", "player2"); int highestScore = Math.max(this.player1Score, this.player2Score); for (int i = 0; i < highestScore; i++) { if (i < this.player1Score) game.wonPoint("player1"); if (i < this.player2Score) game.wonPoint("player2"); } assertEquals(this.expectedScore, game.getScore()); } @Test public void realisticGame() { TennisGame game = new TennisGame("player1", "player2"); String[] points = {"player1", "player1", "player2", "player2", "player1", "player1"}; String[] expected_scores = {"Fifteen-Love", "Thirty-Love", "Thirty-Fifteen", "Thirty-All", "Forty-Thirty", "Win for player1"}; for (int i = 0; i < 6; i++) { game.wonPoint(points[i]); assertEquals(expected_scores[i], game.getScore()); } } }