| import unittest |
|
|
| from wrdler.logic import build_letter_map, reveal_cell, guess_word, is_game_over |
| from wrdler.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) |
| |
| ok, pts = guess_word(state, "TREE") |
| self.assertFalse(ok) |
| self.assertEqual(pts, 0) |
| |
| 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) |
| |
| 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() |