Spaces:
Running
Running
| import unittest | |
| from battlewords.logic import build_letter_map, reveal_cell, guess_word, is_game_over | |
| from battlewords.models import Coord, Word, Puzzle, GameState | |
| class TestLogic(unittest.TestCase): | |
| def make_state(self): | |
| w1 = Word("TREE", Coord(0, 0), "H") | |
| w2 = Word("APPLE", Coord(2, 0), "H") | |
| w3 = Word("ORANGE", Coord(4, 0), "H") | |
| w4 = Word("WIND", Coord(0, 6), "V") | |
| w5 = Word("MOUSE", Coord(0, 8), "V") | |
| w6 = Word("PYTHON", Coord(0, 10), "V") | |
| p = Puzzle([w1, w2, w3, w4, w5, w6]) | |
| state = GameState( | |
| grid_size=12, | |
| puzzle=p, | |
| revealed=set(), | |
| guessed=set(), | |
| score=0, | |
| last_action="", | |
| can_guess=False, | |
| ) | |
| return state, p | |
| def test_reveal_and_guess_gating(self): | |
| state, puzzle = self.make_state() | |
| letter_map = build_letter_map(puzzle) | |
| # Can't guess before reveal | |
| ok, pts = guess_word(state, "TREE") | |
| self.assertFalse(ok) | |
| self.assertEqual(pts, 0) | |
| # Reveal one cell then guess | |
| reveal_cell(state, letter_map, Coord(0, 0)) | |
| self.assertTrue(state.can_guess) | |
| ok, pts = guess_word(state, "TREE") | |
| self.assertTrue(ok) | |
| self.assertGreater(pts, 0) | |
| self.assertIn("TREE", state.guessed) | |
| self.assertFalse(state.can_guess) | |
| def test_game_over(self): | |
| state, puzzle = self.make_state() | |
| letter_map = build_letter_map(puzzle) | |
| # Guess all words after a reveal each time | |
| for w in puzzle.words: | |
| reveal_cell(state, letter_map, w.start) | |
| ok, _ = guess_word(state, w.text) | |
| self.assertTrue(ok) | |
| self.assertTrue(is_game_over(state)) | |
| if __name__ == "__main__": | |
| unittest.main() |