def test_mutates_game_state(self): game = Game() moves = Moves(game) assert moves.game is game assert moves.game.state is game.state moves.perform({"position": [1, 1], "player": "X"}) self.assertEqual(len(game.state["moves"]), 1)
def test_diagonal_victory(self): game = Game() victory = Victory(game) moves = Moves(game) winning_line = [[1, 1], [2, 2], [3, 3]] winning_moves = [{ "player": "X", "position": position } for position in winning_line] moves.perform_all(winning_moves) assert victory.is_present()
def test_second_row_victory(self): game = Game() victory = Victory(game) moves = Moves(game) winning_line = [[2, 1], [2, 2], [2, 3]] winning_moves = [{ "player": "X", "position": position } for position in winning_line] moves.perform_all(winning_moves) self.assertEquals(victory.winning_symbol(), "X")
def test_victory_has_winner(self): game = Game() victory = Victory(game) moves = Moves(game) # create a winning line consisting of the top row winning_line = ThroughLine(game).rows()[0] winning_moves = [{ "player": "X", "position": position } for position in winning_line] moves.perform_all(winning_moves) self.assertEquals(victory.winning_symbol(), "X")
def test_victory_by_filled_row(self): game = Game() victory = Victory(game) moves = Moves(game) # create a winning line consisting of the top row winning_line = [[1, 1], [1, 2], [1, 3]] winning_moves = [{ "player": "X", "position": position } for position in winning_line] moves.perform_all(winning_moves) assert victory.is_present()
def test_three_moves_required(self): game = Game() moves = Moves(game) victory = Victory(game) # create a winning line consisting of the top row winning_line = ThroughLine(game).rows()[0] winning_moves = [{ "player": "X", "position": position } for position in winning_line] for move in winning_moves: moves.perform(move) assert not victory.is_present() or move["position"] == [1, 3]
def test_empty_positions_list(self): game = Game() moves = Moves(game) self.assertEqual(len(moves.get_empty_positions()), 9) move = {"position": [1, 1], "player": "X"} assert move["position"] not in moves.get_occupied_positions() moves.perform(move) assert move["position"] not in moves.get_empty_positions() self.assertEqual(len(moves.get_empty_positions()), 8)
def test_move_must_be_within_board(self): game = Game() moves = Moves(game) move = {"position": [-1, 2], "player": "X"} self.assertRaises( Exception, moves.valid, )
def test_player_from_symbol(self): game = Game() player = Player(game) Moves(game).perform({ "player": "X", "position": [1,1] }) self.assertEqual(player.player_from_symbol("X"), player.get_players()[0])
def test_occupied_position_has_player(self): game = Game() moves = Moves(game) move = {"position": [1, 1], "player": "X"} moves.perform(move) self.assertEqual(moves.symbol_at([1, 1]), "X")
def test_position_occupied_after_moving(self): game = Game() moves = Moves(game) move = {"position": [1, 1], "player": "X"} moves.perform(move) assert moves.is_occupied(move['position'])
def test_position_not_occupied_before_moving(self): game = Game() moves = Moves(game) board = Board(game) for position in board.positions(): assert not moves.is_occupied(position)