def test_reversi__play(self): class TestWindow: def __init__(self): class Board: def __init__(self): self.size = 4 def enable_moves(self, moves): print('enable_moves', moves) def disable_moves(self, moves): print('disable_moves', moves) def enable_move(self, x, y): print('enable_move', x, y) def disable_move(self, x, y): print('disable_move', x, y) def put_disc(self, color, x, y): print('put_disc', color, x, y) def turn_disc(self, color, captures): print('put_disc', color, captures) class Menu: def __init__(self): class Event: def is_set(self): return False self.event = Event() class Info: def set_text(self, color, text, score): print('set_text', color, text, score) def set_turn_text_on(self, color): print('set_turn_text_on', color) def set_turn_text_off(self, color): print('set_turn_text_off', color) def set_move_text_on(self, color, x, y): print('set_move_text_on', color, x, y) def set_move_text_off(self, color): print('set_move_text_off', color) def set_win_text_on(self, color): print('set_win_text_on', color) def set_lose_text_on(self, color): print('set_lose_text_on', color) self.board = Board() self.menu = Menu() self.player = {'black': 'WhiteWin', 'white': 'WhiteWin'} self.cputime = 0.1 self.info = Info() def set_state(self, state): print(state) class WhiteWin(AbstractStrategy): def next_move(self, color, board): depth = board._black_score + board._white_score - 4 move = None if depth == 0: move = (1, 0) elif depth == 1: move = (0, 0) elif depth == 2: move = (0, 1) elif depth == 3: move = (2, 0) elif depth == 4: move = (3, 0) elif depth == 5: move = (0, 2) elif depth == 6: move = (0, 3) elif depth == 7: move = (3, 2) elif depth == 8: move = (2, 3) return move app = Reversi(sleep_time_play=0.001, sleep_time_turn=0.001, sleep_time_move=0.001) app.window = TestWindow() app.players_info = {'WhiteWin': WhiteWin()} with captured_stdout() as stdout: app._Reversi__play() lines = stdout.getvalue().splitlines() self.assertEqual(lines[0], 'disable') self.assertEqual(lines[1], 'set_text black score 2') self.assertEqual(lines[2], 'set_text white score 2') self.assertEqual(lines[3], 'set_turn_text_on black') self.assertEqual(lines[4], 'enable_moves [(1, 0), (0, 1), (3, 2), (2, 3)]') self.assertEqual(lines[5], 'set_turn_text_off black') self.assertEqual(lines[6], 'set_move_text_off black') self.assertEqual(lines[7], 'set_turn_text_off white') self.assertEqual(lines[8], 'set_move_text_off white') self.assertEqual(lines[9], 'disable_moves [(1, 0), (0, 1), (3, 2), (2, 3)]') self.assertEqual(lines[10], 'enable_move 1 0') self.assertEqual(lines[11], 'put_disc black 1 0') self.assertEqual(lines[12], 'set_move_text_on black b 1') self.assertEqual(lines[13], 'put_disc black [(1, 1)]') self.assertEqual(lines[14], 'set_text black score 4') self.assertEqual(lines[15], 'set_text white score 1') self.assertEqual(lines[16], 'set_turn_text_on white') self.assertEqual(lines[17], 'enable_moves [(0, 0), (2, 0), (0, 2)]') self.assertEqual(lines[18], 'set_turn_text_off black') self.assertEqual(lines[19], 'set_move_text_off black') self.assertEqual(lines[20], 'set_turn_text_off white') self.assertEqual(lines[21], 'set_move_text_off white') self.assertEqual(lines[22], 'disable_moves [(0, 0), (2, 0), (0, 2)]') self.assertEqual(lines[23], 'disable_move 1 0') self.assertEqual(lines[24], 'enable_move 0 0') self.assertEqual(lines[25], 'put_disc white 0 0') self.assertEqual(lines[26], 'set_move_text_on white a 1') self.assertEqual(lines[27], 'put_disc white [(1, 1)]') self.assertEqual(lines[28], 'set_text black score 3') self.assertEqual(lines[29], 'set_text white score 3') self.assertEqual(lines[30], 'set_turn_text_on black') self.assertEqual(lines[31], 'enable_moves [(0, 1), (3, 2), (2, 3)]') self.assertEqual(lines[32], 'set_turn_text_off black') self.assertEqual(lines[33], 'set_move_text_off black') self.assertEqual(lines[34], 'set_turn_text_off white') self.assertEqual(lines[35], 'set_move_text_off white') self.assertEqual(lines[36], 'disable_moves [(0, 1), (3, 2), (2, 3)]') self.assertEqual(lines[37], 'disable_move 0 0') self.assertEqual(lines[38], 'enable_move 0 1') self.assertEqual(lines[39], 'put_disc black 0 1') self.assertEqual(lines[40], 'set_move_text_on black a 2') self.assertEqual(lines[41], 'put_disc black [(1, 1)]') self.assertEqual(lines[42], 'set_text black score 5') self.assertEqual(lines[43], 'set_text white score 2') self.assertEqual(lines[44], 'set_turn_text_on white') self.assertEqual(lines[45], 'enable_moves [(2, 0), (0, 2)]') self.assertEqual(lines[46], 'set_turn_text_off black') self.assertEqual(lines[47], 'set_move_text_off black') self.assertEqual(lines[48], 'set_turn_text_off white') self.assertEqual(lines[49], 'set_move_text_off white') self.assertEqual(lines[50], 'disable_moves [(2, 0), (0, 2)]') self.assertEqual(lines[51], 'disable_move 0 1') self.assertEqual(lines[52], 'enable_move 2 0') self.assertEqual(lines[53], 'put_disc white 2 0') self.assertEqual(lines[54], 'set_move_text_on white c 1') self.assertEqual(lines[55], 'put_disc white [(1, 0), (2, 1)]') self.assertEqual(lines[56], 'set_text black score 3') self.assertEqual(lines[57], 'set_text white score 5') self.assertEqual(lines[58], 'set_turn_text_on black') self.assertEqual(lines[59], 'enable_moves [(3, 0), (3, 1), (3, 2), (3, 3)]') self.assertEqual(lines[60], 'set_turn_text_off black') self.assertEqual(lines[61], 'set_move_text_off black') self.assertEqual(lines[62], 'set_turn_text_off white') self.assertEqual(lines[63], 'set_move_text_off white') self.assertEqual(lines[64], 'disable_moves [(3, 0), (3, 1), (3, 2), (3, 3)]') self.assertEqual(lines[65], 'disable_move 2 0') self.assertEqual(lines[66], 'enable_move 3 0') self.assertEqual(lines[67], 'put_disc black 3 0') self.assertEqual(lines[68], 'set_move_text_on black d 1') self.assertEqual(lines[69], 'put_disc black [(2, 1)]') self.assertEqual(lines[70], 'set_text black score 5') self.assertEqual(lines[71], 'set_text white score 4') self.assertEqual(lines[72], 'set_turn_text_on white') self.assertEqual(lines[73], 'enable_moves [(0, 2), (3, 2), (1, 3)]') self.assertEqual(lines[74], 'set_turn_text_off black') self.assertEqual(lines[75], 'set_move_text_off black') self.assertEqual(lines[76], 'set_turn_text_off white') self.assertEqual(lines[77], 'set_move_text_off white') self.assertEqual(lines[78], 'disable_moves [(0, 2), (3, 2), (1, 3)]') self.assertEqual(lines[79], 'disable_move 3 0') self.assertEqual(lines[80], 'enable_move 0 2') self.assertEqual(lines[81], 'put_disc white 0 2') self.assertEqual(lines[82], 'set_move_text_on white a 3') self.assertEqual(lines[83], 'put_disc white [(0, 1), (1, 1), (1, 2)]') self.assertEqual(lines[84], 'set_text black score 2') self.assertEqual(lines[85], 'set_text white score 8') self.assertEqual(lines[86], 'set_turn_text_on black') self.assertEqual(lines[87], 'enable_moves [(0, 3), (2, 3)]') self.assertEqual(lines[88], 'set_turn_text_off black') self.assertEqual(lines[89], 'set_move_text_off black') self.assertEqual(lines[90], 'set_turn_text_off white') self.assertEqual(lines[91], 'set_move_text_off white') self.assertEqual(lines[92], 'disable_moves [(0, 3), (2, 3)]') self.assertEqual(lines[93], 'disable_move 0 2') self.assertEqual(lines[94], 'enable_move 0 3') self.assertEqual(lines[95], 'put_disc black 0 3') self.assertEqual(lines[96], 'set_move_text_on black a 4') self.assertEqual(lines[97], 'put_disc black [(1, 2)]') self.assertEqual(lines[98], 'set_text black score 4') self.assertEqual(lines[99], 'set_text white score 7') self.assertEqual(lines[100], 'set_turn_text_on white') self.assertEqual(lines[101], 'enable_moves [(3, 1), (3, 2), (1, 3), (2, 3)]') self.assertEqual(lines[102], 'set_turn_text_off black') self.assertEqual(lines[103], 'set_move_text_off black') self.assertEqual(lines[104], 'set_turn_text_off white') self.assertEqual(lines[105], 'set_move_text_off white') self.assertEqual(lines[106], 'disable_moves [(3, 1), (3, 2), (1, 3), (2, 3)]') self.assertEqual(lines[107], 'disable_move 0 3') self.assertEqual(lines[108], 'enable_move 3 2') self.assertEqual(lines[109], 'put_disc white 3 2') self.assertEqual(lines[110], 'set_move_text_on white d 3') self.assertEqual(lines[111], 'put_disc white [(2, 1)]') self.assertEqual(lines[112], 'set_text black score 3') self.assertEqual(lines[113], 'set_text white score 9') self.assertEqual(lines[114], 'set_turn_text_on white') self.assertEqual(lines[115], 'enable_moves [(1, 3), (2, 3)]') self.assertEqual(lines[116], 'set_turn_text_off black') self.assertEqual(lines[117], 'set_move_text_off black') self.assertEqual(lines[118], 'set_turn_text_off white') self.assertEqual(lines[119], 'set_move_text_off white') self.assertEqual(lines[120], 'disable_moves [(1, 3), (2, 3)]') self.assertEqual(lines[121], 'disable_move 3 2') self.assertEqual(lines[122], 'enable_move 2 3') self.assertEqual(lines[123], 'put_disc white 2 3') self.assertEqual(lines[124], 'set_move_text_on white c 4') self.assertEqual(lines[125], 'put_disc white [(1, 2)]') self.assertEqual(lines[126], 'set_text black score 2') self.assertEqual(lines[127], 'set_text white score 11') self.assertEqual(lines[128], 'set_win_text_on white') self.assertEqual(lines[129], 'set_lose_text_on black') with self.assertRaises(IndexError): print(lines[131]) self.assertEqual(app.state, Reversi.END)