Files
007-Hangman/tests/test_game.py
T
Tirsvad 16cd9d42b9
TirSystem/github-action: Sync GitHub mirror metadata / sync-metadata (push) Successful in 5s
step 5
Improving the user experience
2026-10-04 12:46:03 +08:00

90 lines
1.8 KiB
Python

import pytest
from hangman.constants import MAX_LIVES, STAGES, WORD_LIST
from hangman.game import Game, choose_word, is_in_word
def test_choose_word_from_list():
assert choose_word(["Cat"]) == "cat"
assert choose_word() in WORD_LIST
def test_letter_in_word():
assert is_in_word("camel", "a")
assert is_in_word("camel", "A")
def test_letter_not_in_word():
assert not is_in_word("camel", "z")
def test_display_starts_blank():
assert Game("cat").display() == "_ _ _"
def test_correct_guess_reveals_letters():
g = Game("banana")
assert g.guess("a") is True
assert g.display() == "_ a _ a _ a"
def test_wrong_guess_keeps_blanks():
g = Game("cat")
assert g.guess("z") is False
assert g.display() == "_ _ _"
def test_not_won_until_all_letters_guessed():
g = Game("hi")
assert not g.won
g.guess("h")
assert not g.won
g.guess("i")
assert g.won
def test_wrong_guesses_do_not_win():
g = Game("hi")
g.guess("x")
assert not g.won
def test_wrong_guess_loses_life():
g = Game("cat")
assert g.lives == MAX_LIVES
g.guess("z")
assert g.lives == MAX_LIVES - 1
def test_correct_guess_keeps_lives():
g = Game("cat")
g.guess("c")
assert g.lives == MAX_LIVES
def test_lost_when_out_of_lives():
g = Game("hi", lives=2)
g.guess("x")
assert not g.lost
g.guess("y")
assert g.lost and g.over and not g.won
def test_stages_cover_all_lives():
assert len(STAGES) == MAX_LIVES + 1
def test_repeated_guess_is_free():
g = Game("cat")
g.guess("z")
assert g.guess("Z") is None
assert g.lives == MAX_LIVES - 1
def test_invalid_guess():
g = Game("cat")
for bad in ("", "ab", "1", " "):
with pytest.raises(ValueError):
g.guess(bad)
assert g.lives == MAX_LIVES