Initial commit, with rules 0.5 and basic bots
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from dojo.cli import EXIT_DESIGN_ERRORS, EXIT_FORMAT_ERRORS, EXIT_OK, main
|
||||
from dojo.grid import parse_grid
|
||||
|
||||
VALID = Path(__file__).parent / "fixtures" / "quadrant_valid.txt"
|
||||
|
||||
|
||||
def test_validate_valid_board(capsys: pytest.CaptureFixture[str]) -> None:
|
||||
assert main(["board", "validate", "--quadrant", str(VALID)]) == EXIT_OK
|
||||
|
||||
output = capsys.readouterr().out
|
||||
assert "Shortest walk Safe Room -> Dojo: Q0 10, Q1 10, Q2 10, Q3 10" in output
|
||||
assert output.rstrip().endswith("OK")
|
||||
|
||||
|
||||
def test_validate_reports_design_errors(tmp_path: Path, capsys: pytest.CaptureFixture[str]) -> None:
|
||||
no_entrance = VALID.read_text(encoding="utf-8").replace(
|
||||
"+ + + + + + +---+ +", "+ + + + + + +---+---+"
|
||||
)
|
||||
quadrant = tmp_path / "quadrant.txt"
|
||||
quadrant.write_text(no_entrance, encoding="utf-8")
|
||||
|
||||
assert main(["board", "validate", "--quadrant", str(quadrant)]) == EXIT_DESIGN_ERRORS
|
||||
assert "quadrant 0 has no Dojo entrance" in capsys.readouterr().out
|
||||
|
||||
|
||||
def test_format_errors_and_missing_files_exit_with_format_code(
|
||||
tmp_path: Path, capsys: pytest.CaptureFixture[str]
|
||||
) -> None:
|
||||
malformed = tmp_path / "bad.txt"
|
||||
malformed.write_text("+---+\n| . |\n", encoding="utf-8")
|
||||
|
||||
assert main(["board", "validate", "--quadrant", str(malformed)]) == EXIT_FORMAT_ERRORS
|
||||
assert main(["board", "validate", "--quadrant", str(tmp_path / "none")]) == EXIT_FORMAT_ERRORS
|
||||
assert "odd number of lines" in capsys.readouterr().err
|
||||
|
||||
|
||||
def test_render_writes_a_parseable_full_board(tmp_path: Path) -> None:
|
||||
output = tmp_path / "board.txt"
|
||||
|
||||
assert main(["board", "render", "--quadrant", str(VALID), "-o", str(output)]) == EXIT_OK
|
||||
|
||||
grid = parse_grid(output.read_text(encoding="utf-8"))
|
||||
assert (grid.height, grid.width) == (16, 16)
|
||||
|
||||
|
||||
def test_legend_next_to_the_quadrant_is_used_by_default(
|
||||
tmp_path: Path, capsys: pytest.CaptureFixture[str]
|
||||
) -> None:
|
||||
quadrant = tmp_path / "quadrant.txt"
|
||||
quadrant.write_text(VALID.read_text(encoding="utf-8"), encoding="utf-8")
|
||||
(tmp_path / "legend.toml").write_text("[tunnels.9]\nquadrant_offset = 1\n", encoding="utf-8")
|
||||
|
||||
assert main(["board", "validate", "--quadrant", str(quadrant)]) == EXIT_FORMAT_ERRORS
|
||||
assert "legend links tunnel '9'" in capsys.readouterr().err
|
||||
Reference in New Issue
Block a user