@@ -12,6 +12,8 @@ class TestDisplay(unittest.TestCase):
1212 def setUp (self ):
1313 self .display = Display ()
1414 self .snake = Snake ()
15+ self .display .width = 640
16+ self .display .height = 480
1517
1618 @patch ('pygame.init' )
1719 @patch ('pygame.font.Font' )
@@ -67,12 +69,115 @@ def test_update_ui(self, mock_set_mode, mock_display_flip, mock_font, mock_draw_
6769 self .score = 10
6870 self .display .window = mock_window
6971 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 )
7174
7275 mock_draw_rect .assert_called ()
7376 mock_font_instance .render .assert_called ()
7477 mock_display_flip .assert_called ()
7578
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+
76181
77182if __name__ == '__main__' :
78183 unittest .main ()
0 commit comments