Beispiel #1
0
    def __getitem__(self, args):
        # FUTURE : on a le droit de faire du *args, **kwargs avec getitem ?
        # Et ça donne quoi si on le fait ? À tester.

        if not args:
            return BoardIteratorRect(self)

        try:
            pos = Pos(args)
        except ValueError:
            pos = None

        if pos is not None:
            # Mode un seul élément
            return self._get_tile(pos.x, pos.y)

        slice_x = None
        slice_y = None
        id_coord_main = Coord.X

        try:
            iter_on_args = iter(args)
            slice_x = next(iter_on_args)
            slice_y = next(iter_on_args)
            id_coord_main = next(iter_on_args)
        except TypeError:
            slice_x = args
        except StopIteration:
            pass

        if (slice_x is None or slice_y is None or isinstance(slice_x, slice)
                or isinstance(slice_y, slice)):

            # Mode itération
            if slice_x is None:
                slice_x = slice(None, None, None)
            if isinstance(slice_x, int):
                slice_x = slice(slice_x, slice_x + 1, None)

            if slice_y is None:
                slice_y = slice(None, None, None)
            if isinstance(slice_y, int):
                slice_y = slice(slice_y, slice_y + 1, None)

            dict_coord_from_str = {"X": Coord.X, "Y": Coord.Y}
            if isinstance(id_coord_main, str):
                id_coord_main = id_coord_main.upper()
                if id_coord_main in dict_coord_from_str:
                    id_coord_main = dict_coord_from_str[id_coord_main]

            return BoardIteratorRect(self, slice_x, slice_y, id_coord_main)

            # Mode fail
        raise Exception("TODO fail get item" + "".join(args))
Beispiel #2
0
def test_simple_iteration_main_y():

    board = Board(120, 120)
    slice_x = slice(1, 13, 3)
    slice_y = slice(15, 135, 30)

    positions_check = [
        (1, 15),
        (1, 45),
        (1, 75),
        (1, 105),
        (4, 15),
        (4, 45),
        (4, 75),
        (4, 105),
        (7, 15),
        (7, 45),
        (7, 75),
        (7, 105),
        (10, 15),
        (10, 45),
        (10, 75),
        (10, 105),
    ]

    for tile in BoardIteratorRect(board, slice_x, slice_y, Coord.Y):
        print(tile.pos)
        position_check = positions_check.pop(0)
        assert tile.pos == position_check

    assert positions_check == []
Beispiel #3
0
def test_both_coord_changed():

    my_board_renderer = BoardRenderer(tile_w=2,
                                      tile_padding_w=1,
                                      tile_padding_h=1,
                                      chr_fill_tile=".")
    board = Board(2, 4, default_renderer=my_board_renderer)
    board_iter_rect = BoardIteratorRect(board)

    DICT_MARKERS = {False: "_", True: "B"}
    for index, tile in enumerate(board_iter_rect):
        both_coord_marker = DICT_MARKERS[board_iter_rect.both_coord_changed]
        tile.data = str(index) + both_coord_marker

    render_result = """

		0B 1_

		2B 3_

		4B 5_

		6B 7_

	"""
    assert strip_multiline(board.render()) == strip_multiline(render_result)
Beispiel #4
0
def test_jump_and_dir_change():

    board = Board(10, 10)
    slice_x = slice(5)
    slice_y = slice(3)
    rect_iter = BoardIteratorRect(board, slice_x, slice_y)

    for tile in rect_iter:
        pos = tile.pos
        print(pos)
        if pos == (0, 0):
            assert rect_iter.jumped == True
            assert rect_iter.changed_direction == False
            assert rect_iter.both_coord_changed == True
        elif pos == (1, 0):
            assert rect_iter.jumped == False
            assert rect_iter.changed_direction == False
            assert rect_iter.both_coord_changed == False
        elif pos.x == 0:
            assert rect_iter.jumped == True
            assert rect_iter.changed_direction == True
            assert rect_iter.both_coord_changed == True
        elif pos.x == 1:
            assert rect_iter.jumped == False
            assert rect_iter.changed_direction == True
            assert rect_iter.both_coord_changed == False
        else:
            assert rect_iter.jumped == False
            assert rect_iter.changed_direction == False
            assert rect_iter.both_coord_changed == False
Beispiel #5
0
def test_sur_iter_tell_both_coord_changed():

    board = Board(3, 2)

    for both_coord_changed, tile in BoardIteratorRect(board).tell_indicators():
        if tile.x == 0:
            assert both_coord_changed == True
        else:
            assert both_coord_changed == False
Beispiel #6
0
def test_skip_lines():

    board = Board(10, 4)
    board_iter_rect = BoardIteratorRect(board)

    for index, tile in enumerate(board_iter_rect):
        char_data = chr(index + ord("A"))
        if char_data in ("D", "V", "Z"):
            board_iter_rect.skip_line()
        tile.data = char_data

    render_result = """

		ABCD......
		EFGHIJKLMN
		OPQRSTUV..
		WXYZ......

	"""
    assert strip_multiline(board.render()) == strip_multiline(render_result)
Beispiel #7
0
    def set_data_from_string(self, data_lines, sep_line=None, sep_tiles=None):

        if sep_line is not None:
            data_lines = data_lines.split(sep_line)
        board_iter = BoardIteratorRect(self).group_by_subcoord()

        for data_line, board_line in zip(data_lines, board_iter):
            if sep_tiles is not None:
                data_line = data_line.split(sep_tiles)
            for data_tile, tile in zip(data_line, board_line):
                tile.data = data_tile
Beispiel #8
0
def test_sur_iter_group_by_simple():

    board = Board(5, 8)
    y_coord = 0

    for tile_group in BoardIteratorRect(board).group_by_subcoord():
        print(*map(str, tile_group))
        check_coords = [(x, y_coord) for x in range(5)]
        for tile, check_coord in zip(tile_group, check_coords):
            assert tile.pos == check_coord
        y_coord += 1

    assert y_coord == 8
Beispiel #9
0
def test_iteration_all_board():

    board = Board(4, 5)
    board_iter_rect = BoardIteratorRect(board)

    for index, tile in enumerate(board_iter_rect):
        tile.data = chr(index + ord("A"))

    render_result = """

		ABCD
		EFGH
		IJKL
		MNOP
		QRST

	"""
    assert strip_multiline(board.render()) == strip_multiline(render_result)
Beispiel #10
0
def test_simple_iteration_render():

    board = Board(12, 6)
    board_iter_rect = BoardIteratorRect(board, slice(3, 7), slice(1, 7, 2))

    for index, tile in enumerate(board_iter_rect):
        tile.data = index

    render_result = """

		............
		...0123.....
		............
		...4567.....
		............
		...8911.....

	"""
    assert strip_multiline(board.render()) == strip_multiline(render_result)
Beispiel #11
0
def test_iteration_rotated_and_reversed():

    board = Board(12, 6)
    board_iter_rect = BoardIteratorRect(board, slice(5, 1, -1),
                                        slice(None, 2, None), Coord.Y)

    for index, tile in enumerate(board_iter_rect):
        tile.data = index

    render_result = """

		..6420......
		..7531......
		............
		............
		............
		............

	"""
    assert strip_multiline(board.render()) == strip_multiline(render_result)
Beispiel #12
0
 def __iter__(self):
     return BoardIteratorRect(self)