Initial commit, with rules 0.5 and basic bots
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import pytest
|
||||
|
||||
from dojo.grid import GridFormatError, parse_grid, render_grid
|
||||
|
||||
SMALL = """\
|
||||
+---+---+
|
||||
| S | . |
|
||||
+ +---+
|
||||
| 1 +
|
||||
+---+---+
|
||||
"""
|
||||
|
||||
|
||||
def test_parse_small_grid() -> None:
|
||||
grid = parse_grid(SMALL)
|
||||
|
||||
assert (grid.height, grid.width) == (2, 2)
|
||||
assert grid.cells == (("S", "."), ("1", "+"))
|
||||
assert grid.h_walls == ((True, True), (False, True), (True, True))
|
||||
assert grid.v_walls == ((True, True, True), (True, False, False))
|
||||
|
||||
|
||||
def test_render_round_trips() -> None:
|
||||
grid = parse_grid(SMALL)
|
||||
|
||||
assert parse_grid(render_grid(grid)) == grid
|
||||
|
||||
|
||||
def test_stripped_trailing_space_is_an_open_right_border() -> None:
|
||||
grid = parse_grid(SMALL)
|
||||
|
||||
assert grid.v_walls[1][2] is False
|
||||
|
||||
|
||||
def test_comments_and_blank_lines_are_ignored() -> None:
|
||||
commented = "# header\n\n" + SMALL.replace("+ +---+\n", "+ +---+\n# note\n")
|
||||
|
||||
assert parse_grid(commented) == parse_grid(SMALL)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("text", "message"),
|
||||
[
|
||||
("", "no grid lines"),
|
||||
("+---+--+\n", "4*width+1"),
|
||||
("+---+\n| . |\n", "odd number of lines"),
|
||||
("+---+\n| . |\n----+\n", "expected '+'"),
|
||||
("+---+\n| . |\n+-- +\n", "expected '---' or blanks"),
|
||||
("+---+\n| . !\n+---+\n", "expected '|' or blank"),
|
||||
("+---+\n| . |\n+---+\n", "longer than the top border"),
|
||||
("+---+\n|. |\n+---+\n", "' X '"),
|
||||
("+---+\n| |\n+---+\n", "' X '"),
|
||||
],
|
||||
)
|
||||
def test_format_errors(text: str, message: str) -> None:
|
||||
with pytest.raises(GridFormatError) as raised:
|
||||
parse_grid(text, source="t.txt")
|
||||
|
||||
assert any(message in problem for problem in raised.value.problems)
|
||||
Reference in New Issue
Block a user