Files

60 lines
1.6 KiB
Python

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)