def it_can_undo_last_move_or_push(self, forward_mover): src = index_1d(4, 2, forward_mover.board.width) dest = index_1d(3, 2, forward_mover.board.width) forward_mover.move(Direction.LEFT) forward_mover.undo() assert forward_mover.state.pusher_position(DEFAULT_PIECE_ID) == src assert forward_mover.board[src].has_pusher == True assert forward_mover.board[dest].has_pusher == False
def it_moves_pusher_in_requested_direction(self, forward_mover): src = index_1d(4, 2, forward_mover.board.width) dest = index_1d(3, 2, forward_mover.board.width) assert forward_mover.move(Direction.LEFT) assert forward_mover.state.pusher_position(DEFAULT_PIECE_ID) == dest assert not forward_mover.board[src].has_pusher assert forward_mover.board[dest].has_pusher
def it_doesnt_memoize_failed_moves_and_pushes(self, forward_mover): forward_mover.move(Direction.UP) with pytest.raises(IllegalMoveError): forward_mover.move(Direction.UP) assert len(forward_mover.last_performed_moves) == 0 forward_mover.move(Direction.DOWN) with pytest.raises(IllegalMoveError): forward_mover.move(Direction.RIGHT) assert len(forward_mover.last_performed_moves) == 0
def it_refuses_to_push_two_boxes(self, forward_mover): assert forward_mover.move(Direction.UP) assert forward_mover.move(Direction.RIGHT) assert forward_mover.move(Direction.DOWN) forward_mover.selected_pusher = DEFAULT_PIECE_ID + 1 assert forward_mover.move(Direction.LEFT) assert forward_mover.move(Direction.LEFT) assert forward_mover.move(Direction.LEFT) with pytest.raises(IllegalMoveError): forward_mover.move(Direction.LEFT)
def it_pushes_box_in_front_of_pusher(self, forward_mover): assert forward_mover.move(Direction.DOWN) assert forward_mover.move(Direction.RIGHT) box_src = index_1d(5, 2, forward_mover.board.width) box_dest = index_1d(5, 1, forward_mover.board.width) pusher_src = index_1d(5, 3, forward_mover.board.width) pusher_dest = box_src assert forward_mover.move(Direction.UP) assert forward_mover.state.box_position( DEFAULT_PIECE_ID + 1 ) == box_dest assert forward_mover.state.pusher_position( DEFAULT_PIECE_ID ) == pusher_dest assert not forward_mover.board[box_src].has_box assert not forward_mover.board[pusher_src].has_pusher assert forward_mover.board[box_dest].has_box assert forward_mover.board[pusher_dest].has_pusher
def it_memoizes_last_move_or_push(self, forward_mover): forward_mover.move(Direction.DOWN) assert forward_mover.last_performed_moves == [ AtomicMove(Direction.DOWN, False) ] forward_mover.move(Direction.RIGHT) assert forward_mover.last_performed_moves == [ AtomicMove(Direction.RIGHT, False) ] forward_mover.move(Direction.UP) assert forward_mover.last_performed_moves == [ AtomicMove(Direction.UP, True) ]
def it_refuses_to_push_box_into_obstacle(self, forward_mover): with pytest.raises(IllegalMoveError): forward_mover.move(Direction.RIGHT)
def it_refuses_to_move_pusher_into_obstacles(self, forward_mover): assert forward_mover.move(Direction.UP) with pytest.raises(IllegalMoveError): forward_mover.move(Direction.UP)