Created
June 26, 2013 15:16
-
-
Save rodrigovilar/5868293 to your computer and use it in GitHub Desktop.
Código final da aula de Desenvolvimento orientado a testes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ExcecaoJogoDaVelha extends RuntimeException { | |
public ExcecaoJogoDaVelha(String msg) { | |
super(msg); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Jogo { | |
private boolean proximaJogadaX; | |
private boolean iniciouJogo = false; | |
private boolean primeiroJogadorDefinido = false; | |
private String[][] tabuleiro = new String[][] { | |
{null, null, null}, {null, null, null}, {null, null, null} | |
}; | |
public void acabou() { | |
return verificarColunas() || verificarLinhas() || | |
verificarDiagonais(); | |
} | |
public void desenharMarca(int linha, int coluna) { | |
if (acabou()) { | |
throw new ExcecaoJogoDaVelha("O jogo já acabou"); | |
} | |
if (!primeiroJogadorDefinido) { | |
throw new ExcecaoJogoDaVelha("O primeiro jogador ainda não foi " + | |
"definido"); | |
} | |
verificarLimites(linha, coluna); | |
if (tabuleiro[linha][coluna] != null) { | |
throw new ExcecaoJogoDaVelha("Célula ocupada"); | |
} | |
String marca = (proximaJogadaX) ? "X" : "O"; | |
tabuleiro[linha][coluna] = marca; | |
iniciouJogo = true; | |
proximaJogadaX = !proximaJogadaX; | |
} | |
public boolean isMarcaPrimeiroJogadorX() { | |
return proximaJogadaX; | |
} | |
public boolean isMarcaXNaPosicao(int linha, int coluna) { | |
verificarLimites(linha, coluna); | |
String celula = tabuleiro[linha][coluna]; | |
if (celula == null) { | |
throw new ExcecaoJogoDaVelha("Célula vazia"); | |
} | |
return celula == "X"; | |
} | |
public void setMarcaPrimeiroJogadorX(boolean b) { | |
if (iniciouJogo) { | |
throw new ExcecaoJogoDaVelha("O jogo já foi iniciado"); | |
} | |
proximaJogadaX = b; | |
primeiroJogadorDefinido = true; | |
} | |
private boolean verificarColunas() { | |
for (int i = 0; i < 3; i++) { | |
if (tabuleiro[0][i] == tabuleiro[1][i] && | |
tabuleiro[1][i] == tabuleiro[2][i] && tabuleiro[2][i] != null) { | |
return true; | |
} | |
} | |
return false; | |
} | |
private boolean verificarDiagonais() { | |
if (tabuleiro[0][0] == tabuleiro[1][1] && | |
tabuleiro[1][1] == tabuleiro[2][2] && tabuleiro[2][2] != null) { | |
return true; | |
} | |
if (tabuleiro[0][2] == tabuleiro[1][1] && | |
tabuleiro[1][1] == tabuleiro[2][0] && tabuleiro[2][0] != null) { | |
return true; | |
} | |
return false; | |
} | |
private void verificarLimites(int linha, int coluna) { | |
if (linha < 0 || linha > 2) { | |
throw new ExcecaoJogoDaVelha("Linha fora da faixa permitida"); | |
} | |
if (coluna < 0 || coluna > 2) { | |
throw new ExcecaoJogoDaVelha("Coluna fora da faixa permitida"); | |
} | |
} | |
private boolean verificarLinhas() { | |
for (int i = 0; i < 3; i++) { | |
if (tabuleiro[i][0] == tabuleiro[i][1] && | |
tabuleiro[i][1] == tabuleiro[i][2] && tabuleiro[i][2] != null) { | |
return true; | |
} | |
} | |
return false; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class JogoTest { | |
private Jogo jogo; | |
@Before //Executado antes de todos os testes | |
public void iniciar() { | |
jogo = new Jogo(); | |
} | |
@Test | |
public void criarJogo() { | |
Assert.assertFalse("O jogo iniciou acabado", jogo.acabou()); | |
} | |
@Test | |
public void definirPrimeiroJogador() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
Assert.assertTrue("Esperava que o primeiro jogador utilizasse X", | |
jogo.isMarcaPrimeiroJogadorX()); | |
} | |
@Test | |
public void definirPrimeiroJogadorDeNovo() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.setMarcaPrimeiroJogadorX(false); | |
Assert.assertFalse("Esperava que o primeiro jogador utilizasse O", | |
jogo.isMarcaPrimeiroJogadorX()); | |
} | |
@Test | |
public void desenharPrimeiraMarca() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.desenharMarca(0, 1); | |
Assert.assertTrue("Esperava X na posica 0,1", | |
jogo.isMarcaXNaPosicao()); | |
} | |
@Test(expected=ExcecaoJogoDaVelha.class) | |
public void desenharMarcaEmUmaCelulaOcupada() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.desenharMarca(0, 1); | |
jogo.desenharMarca(0, 1); | |
} | |
@Test(expected=ExcecaoJogoDaVelha.class) | |
public void desenharMarcaEmUmaColunaErrada() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.desenharMarca(1, 3); | |
} | |
@Test(expected=ExcecaoJogoDaVelha.class) | |
public void desenharMarcaEmUmaLinhaErrada() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.desenharMarca(-1, 1); | |
} | |
@Test(expected=ExcecaoJogoDaVelha.class) | |
public void lerMarcaDeUmaCelulaDesocupada() { | |
jogo.setMarcaPrimeiroJogadorX(false); | |
jogo.isMarcaXNaPosicao(0, 1); | |
} | |
@Test(expected=ExcecaoJogoDaVelha.class) | |
public void lerMarcaDeUmaColunaErrada() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.isMarcaXNaPosicao(1, 3); | |
} | |
@Test(expected=ExcecaoJogoDaVelha.class) | |
public void lerMarcaDeUmaLinhaErrada() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.isMarcaXNaPosicao(-1, 1); | |
} | |
@Test(expected=ExcecaoJogoDaVelha.class) | |
public void definirPrimeiroJogadorAposInicioDoJogo() { | |
jogo.setMarcaPrimeiroJogadorX(false); | |
jogo.desenharMarca(0, 1); | |
jogo.setMarcaPrimeiroJogadorX(true); | |
} | |
@Test(expected=ExcecaoJogoDaVelha.class) | |
public void desenharMarcaAntesDeDefinirPrimeiroJogador() { | |
jogo.desenharMarca(0, 1); | |
} | |
@Test | |
public void desenharSegundaMarca() { | |
jogo.setMarcaPrimeiroJogadorX(false); | |
jogo.desenharMarca(0, 1); | |
Assert.assertFalse("Esperava O na posição 0,1", | |
jogo.isMarcaXNaPosicao(0,1)); | |
jogo.desenharMarca(1, 2); | |
Assert.assertTrue("Esperava X na posição 1,2", | |
jogo.isMarcaXNaPosicao(1,2)); | |
} | |
@Test | |
public void jogoGanhoAtravesDeColuna() { | |
jogo.setMarcaPrimeiroJogadorX(false); | |
jogo.desenharMarca(0, 0); | |
jogo.desenharMarca(1, 2); | |
jogo.desenharMarca(1, 0); | |
jogo.desenharMarca(2, 2); | |
jogo.desenharMarca(2, 0); | |
Assert.assertTrue("Esperava que o jogo tivesse acabado", | |
jogo.acabou()); | |
} | |
@Test | |
public void jogoGanhoAtravesDeLinha() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.desenharMarca(1, 0); | |
jogo.desenharMarca(0, 2); | |
jogo.desenharMarca(1, 2); | |
jogo.desenharMarca(2, 0); | |
jogo.desenharMarca(1, 1); | |
Assert.assertTrue("Esperava que o jogo tivesse acabado", | |
jogo.acabou()); | |
} | |
@Test | |
public void jogoGanhoAtravesDeDiagonal() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.desenharMarca(0, 2); | |
jogo.desenharMarca(0, 0); | |
jogo.desenharMarca(1, 1); | |
jogo.desenharMarca(2, 2); | |
jogo.desenharMarca(2, 0); | |
Assert.assertTrue("Esperava que o jogo tivesse acabado", | |
jogo.acabou()); | |
} | |
@Test(expected=ExcecaoJogoDaVelha.class) | |
public void desenharMarcaAposJogoGanho() { | |
jogo.setMarcaPrimeiroJogadorX(true); | |
jogo.desenharMarca(0, 2); | |
jogo.desenharMarca(0, 0); | |
jogo.desenharMarca(1, 1); | |
jogo.desenharMarca(2, 2); | |
jogo.desenharMarca(2, 0); | |
jogo.desenharMarca(2, 1); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment