Skip to content

Instantly share code, notes, and snippets.

@sbastn
Created November 29, 2011 17:20
Show Gist options
  • Save sbastn/1405592 to your computer and use it in GitHub Desktop.
Save sbastn/1405592 to your computer and use it in GitHub Desktop.
tic tac toe with Ruben
class Board {
def fields = ["."]
def mark(token){
if (fields[0] != ".") {
throw new RuntimeException("Already Taken!")
}
fields[0] = token
}
}
class Player {
Board board
def mark(token){
board.mark(token)
}
}
class Game {
def fields = ["."]
Player p1
Player p2
Board board
def mark(token) {
fields[0] = token
}
def isOver() {
def empty_fields = fields.findAll { it == "." }
if (empty_fields.size() > 0) {
return false
}
return true
}
}
def when_all_fields_are_empty_then_game_is_not_over() {
Game game = new Game()
assert game.isOver() == false
}
def when_all_fields_are_taken_then_the_game_is_over() {
Game game = new Game()
game.mark("X")
assert game.isOver() == true
}
def when_one_field_is_taken_then_other_player_cannot_mark_the_field_again() {
Board board = new Board()
Player p1 = new Player([board: board])
Player p2 = new Player([board: board])
Game game = new Game([board: board, p1: p1, p2: p2])
p1.mark("X")
try {
p2.mark("O")
assert true == false
} catch (RuntimeException ex) {
assert ex.getMessage() == "Already Taken!"
}
}
when_all_fields_are_taken_then_the_game_is_over()
when_all_fields_are_empty_then_game_is_not_over()
when_one_field_is_taken_then_other_player_cannot_mark_the_field_again()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment