class FieldTest(unittest.TestCase): def setUp(self): self.field = Field() def test_place(self): player = 'X' self.field.place(0, 0, player) cell = self.field.get(0, 0) self.assertEqual(player, cell) def test_get_winner_horiz(self): winner = 'X' for row in range(3): self.field.place(row, 0, winner) self.assertEqual(winner, self.field.get_winner()) def test_get_winner_vert(self): winner = 'X' for col in range(3): self.field.place(0, col, winner) self.assertEqual(winner, self.field.get_winner()) def test_get_winner_diag_from_top_left(self): winner = 'X' for i in range(3): self.field.place(i, i, winner) self.assertEqual(winner, self.field.get_winner()) def test_get_winner_diag_from_bot_left(self): winner = 'X' self.field.place(2, 0, winner) self.field.place(1, 1, winner) self.field.place(0, 2, winner) self.assertEqual(winner, self.field.get_winner())
class Game: def __init__(self): self.__player_gen = player_generator() self.__next_player = next(self.__player_gen) self.__field = Field() def turn(self, row, col): assert row < 3 and row >= 0 assert col < 3 and col >= 0 assert self.__field.get(row, col) == None self.__field.place(row, col, self.__next_player) self.__next_player = next(self.__player_gen) @property def winner(self): return self.__field.get_winner() @property def next_player(self): return self.__next_player