-
Notifications
You must be signed in to change notification settings - Fork 0
/
GameTest.py
77 lines (63 loc) · 2.94 KB
/
GameTest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import json
import unittest
from Analyzer import Analyzer
from Game import Game, GameEncoder, GameProperties
from Grid import Grid
from PrefixTrie import PrefixTrie
def game_update_callback(g, t, m):
pass
def list_request_callback(g):
pass
def send_analysis_callback(g, a):
pass
class GameTest(unittest.TestCase):
def setUp(self):
grid = Grid(5, 5, True)
valid_words = PrefixTrie("lexicons/prefix_trie_test.txt")
analyzer = Analyzer(valid_words, "English")
self.game = Game('test', GameProperties(min_letters = 4, minutes = 4), grid, analyzer, game_update_callback, list_request_callback, send_analysis_callback)
self.game.add_player("T-block")
self.game.add_player("O-block")
self.game.add_player("I-block")
def test_start_end_transitions(self):
self.assertEqual(self.game.state, "NEW_GAME")
self.game.start_round()
self.assertEqual(self.game.state, "ROUND_IN_PROGRESS")
self.game.end_round()
self.assertEqual(self.game.state, "GATHERING_LISTS")
def test_list_gathering_transition(self):
self.game.start_round()
self.game.end_round()
self.assertEqual(self.game.state, "GATHERING_LISTS")
self.game.add_player_list("T-block", ["a", "b"])
self.assertEqual(self.game.state, "GATHERING_LISTS")
self.game.add_player_list("I-block", ["b", "c"])
self.assertEqual(self.game.state, "GATHERING_LISTS")
self.game.add_player_list("O-block", ["c", "d"])
self.assertEqual(self.game.state, "BETWEEN_ROUNDS")
def test_add_player(self):
self.game.add_player("J-block")
self.game.start_round()
self.game.add_player("Z-block") # Should be blocked by ROUND_IN_PROGRESS
self.assertTrue(self.game.has_player("J-block"))
self.assertFalse(self.game.has_player("Z-block"))
self.assertEqual(self.game.num_players(), 4)
def test_remove_player(self):
self.assertTrue(self.game.has_player("O-block"))
self.game.remove_player("O-block")
self.assertFalse(self.game.has_player("O-block"))
self.game.start_round()
self.assertTrue(self.game.has_player("T-block"))
self.game.remove_player("T-block") # Should occur even if ROUND_IN_PROGRESS
self.assertFalse(self.game.has_player("T-block"))
self.assertEqual(self.game.num_players(), 1)
def test_JSON_encode(self):
self.game.start_round()
encoded = json.dumps(self.game, cls = GameEncoder)
expected_prefix = r'{"gid": "test", "state": "ROUND_IN_PROGRESS",'
expected_suffix = r'"min_letters": 4, "minutes": 4, "language": "English", "player_scores": {"T-block": 0, "O-block": 0, "I-block": 0}}'
self.assertTrue(encoded.startswith(expected_prefix))
self.assertTrue(encoded.endswith(expected_suffix))
# TODO: Add a "full game" test
if __name__ == "__main__":
unittest.main()