-
Notifications
You must be signed in to change notification settings - Fork 4
/
game_test.py
127 lines (102 loc) · 3.61 KB
/
game_test.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import sys
import io
import unittest
from unittest.mock import patch
from game import snowman
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
class TestSnowman(unittest.TestCase):
@patch('sys.stdout', new_callable=io.StringIO)
def test_prints_success_message_if_all_letters_guessed(self, mock_stdout):
# Arrange
input_letters = [
'n',
'a',
'm',
'w',
'o',
'n',
's',
]
try:
# Act
with unittest.mock.patch('builtins.input', side_effect=input_letters):
snowman('snowman')
# Assert
assert "you win" in mock_stdout.getvalue().lower()
except StopIteration as e:
raise StopIteration("Code continued to request letters after game should have finished.").with_traceback(e.__traceback__)
@patch('sys.stdout', new_callable=io.StringIO)
def test_prints_success_message_with_3_wrong_guesses_and_the_rest_right(self, mock_stdout):
# Arrange
input_letters = [
's',
'n',
'b',
'o',
'w',
'm',
'a',
'q',
'v',
'n',
]
try:
# Act
with unittest.mock.patch('builtins.input', side_effect=input_letters):
snowman('snowman')
# Assert
assert "you win" in mock_stdout.getvalue().lower()
assert "sorry, you lose!" not in mock_stdout.getvalue().lower()
assert "the word was snowman" not in mock_stdout.getvalue().lower()
except StopIteration as e:
raise StopIteration("Code continued to request letters after game should have finished.").with_traceback(e.__traceback__)
@patch('sys.stdout', new_callable=io.StringIO)
def test_prints_failure_message_with_7_straight_wrong_guesses(self, mock_stdout):
# Arrange
input_letters = [
'b',
'c',
'p',
'z',
'q',
'v',
'x',
]
# Act
try:
with unittest.mock.patch('builtins.input', side_effect=input_letters):
snowman('snowman')
# Assert
assert "you win" not in mock_stdout.getvalue().lower()
assert "sorry, you lose!" in mock_stdout.getvalue().lower()
assert "the word was snowman" in mock_stdout.getvalue().lower()
except StopIteration as e:
raise StopIteration("Code continued to request letters after game should have finished.").with_traceback(e.__traceback__)
@patch('sys.stdout', new_callable=io.StringIO)
def test_prints_failure_message_with_7_wrong_guesses_and_two_right(self, mock_stdout):
# Arrange
input_letters = [
's',
'b',
'c',
'p',
'n',
'z',
'q',
'v',
'x',
]
# Act
try:
with unittest.mock.patch('builtins.input', side_effect=input_letters):
snowman('snowman')
# Assert
assert "you win" not in mock_stdout.getvalue().lower()
assert "sorry, you lose!" in mock_stdout.getvalue().lower()
assert "the word was snowman" in mock_stdout.getvalue().lower()
except StopIteration as e:
raise StopIteration("Code continued to request letters after game should have finished.").with_traceback(e.__traceback__)
# Invalid letter please enter a single character.
if __name__ == '__main__':
unittest.main(exit=False)