@@ -12,6 +12,8 @@ class TestDisplay(unittest.TestCase):
12
12
def setUp (self ):
13
13
self .display = Display ()
14
14
self .snake = Snake ()
15
+ self .display .width = 640
16
+ self .display .height = 480
15
17
16
18
@patch ('pygame.init' )
17
19
@patch ('pygame.font.Font' )
@@ -67,12 +69,115 @@ def test_update_ui(self, mock_set_mode, mock_display_flip, mock_font, mock_draw_
67
69
self .score = 10
68
70
self .display .window = mock_window
69
71
self .display .font = mock_font_instance
70
- self .display .update_ui (self .snake , self .food , self .score )
72
+ self .high_score = 100
73
+ self .display .update_ui (self .snake , self .food , self .score , self .high_score )
71
74
72
75
mock_draw_rect .assert_called ()
73
76
mock_font_instance .render .assert_called ()
74
77
mock_display_flip .assert_called ()
75
78
79
+ @patch ('pygame.draw.rect' )
80
+ def test_draw_snake (self , mock_draw_rect ):
81
+ snake = MagicMock ()
82
+ snake .blocks = [Point (0 , 0 ), Point (GameSettings .BLOCK_SIZE , 0 ), Point (2 * GameSettings .BLOCK_SIZE , 0 )]
83
+
84
+ self .display .draw_snake (snake )
85
+
86
+ # Check for correct snake block rendering
87
+ mock_draw_rect .assert_any_call (
88
+ self .display .window , RgbColors .BLUE1 , pygame .Rect (0 , 0 , GameSettings .BLOCK_SIZE , GameSettings .BLOCK_SIZE )
89
+ )
90
+ mock_draw_rect .assert_any_call (
91
+ self .display .window , RgbColors .BLUE2 , pygame .Rect (4 , 4 , 12 , 12 )
92
+ )
93
+
94
+ @patch ('pygame.draw.rect' )
95
+ def test_draw_food (self , mock_draw_rect ):
96
+ food = Point (0 , 0 )
97
+ self .display .draw_food (food )
98
+ # Check for correct food rendering
99
+ mock_draw_rect .assert_called_once_with (
100
+ self .display .window , RgbColors .RED , pygame .Rect (0 , 0 , GameSettings .BLOCK_SIZE , GameSettings .BLOCK_SIZE )
101
+ )
102
+
103
+ @patch ('pygame.font.Font' )
104
+ def test_draw_score (self , mock_font ):
105
+ score = 10
106
+ mock_font_instance = mock_font .return_value
107
+ mock_render = MagicMock ()
108
+ mock_font_instance .render .return_value = mock_render
109
+ mock_render .get_width .return_value = 160
110
+ mock_render .get_height .return_value = 120
111
+ mock_window_surface = MagicMock ()
112
+ self .display .window = mock_window_surface
113
+ self .display .font = mock_font_instance
114
+ self .display .draw_score (score )
115
+
116
+ mock_font_instance .render .assert_called_once ()
117
+ mock_window_surface .blit .assert_called_once ()
118
+
119
+ @patch ('pygame.display.flip' )
120
+ @patch ('pygame.font.Font' )
121
+ def test_render_game_over (self , mock_font , mock_flip ):
122
+ mock_font_instance = mock_font .return_value
123
+ mock_render = MagicMock ()
124
+ mock_font_instance .render .return_value = mock_render
125
+ mock_render .get_width .return_value = 160
126
+ mock_render .get_height .return_value = 120
127
+ mock_window_surface = MagicMock ()
128
+ self .display .window = mock_window_surface
129
+ self .display .render_game_over ()
130
+
131
+ mock_font_instance .render .assert_called_once ()
132
+ mock_window_surface .blit .assert_called_once ()
133
+ mock_flip .assert_called_once ()
134
+
135
+ @patch ('pygame.display.flip' )
136
+ @patch ('pygame.font.Font' )
137
+ def test_render_play_again (self , mock_font , mock_flip ):
138
+ mock_font_instance = mock_font .return_value
139
+ mock_render = MagicMock ()
140
+ mock_font_instance .render .return_value = mock_render
141
+ mock_render .get_rect .return_value = pygame .Rect (0 , 0 , 100 , 50 )
142
+ mock_window_surface = MagicMock ()
143
+ self .display .window = mock_window_surface
144
+ self .display .render_play_again ()
145
+
146
+ mock_font_instance .render .assert_called_once ()
147
+ mock_window_surface .blit .assert_called_once ()
148
+ mock_flip .assert_called_once ()
149
+
150
+ @patch ('pygame.font.Font' )
151
+ def test_render_high_score (self , mock_font ):
152
+ high_score = 100
153
+ mock_font_instance = mock_font .return_value
154
+ mock_render = MagicMock ()
155
+ mock_font_instance .render .return_value = mock_render
156
+ mock_render .get_width .return_value = 160
157
+ mock_render .get_height .return_value = 120
158
+ mock_window_surface = MagicMock ()
159
+ self .display .window = mock_window_surface
160
+ self .display .font = mock_font_instance
161
+ self .display .draw_score (high_score )
162
+
163
+ mock_font_instance .render .assert_called_once ()
164
+ mock_window_surface .blit .assert_called_once ()
165
+
166
+ @patch ('pygame.display.flip' )
167
+ @patch ('pygame.font.Font' )
168
+ def test_render_new_high_score (self , mock_font , mock_flip ):
169
+ mock_font_instance = mock_font .return_value
170
+ mock_render = MagicMock ()
171
+ mock_font_instance .render .return_value = mock_render
172
+ mock_render .get_rect .return_value = pygame .Rect (0 , 0 , 100 , 50 )
173
+ mock_window_surface = MagicMock ()
174
+ self .display .window = mock_window_surface
175
+ self .display .render_play_again ()
176
+
177
+ mock_font_instance .render .assert_called_once ()
178
+ mock_window_surface .blit .assert_called_once ()
179
+ mock_flip .assert_called_once ()
180
+
76
181
77
182
if __name__ == '__main__' :
78
183
unittest .main ()
0 commit comments