22
33from escape import state
44
5+ import pygame
56from pygame .locals import *
67
78import unittest
@@ -15,10 +16,44 @@ def __init__(self, typ, key=None):
1516 self .key = key
1617
1718
19+ class MockGame (state .GameState ):
20+
21+ def __init__ (self , screen ):
22+ self .drawn = 0
23+ super ().__init__ (screen )
24+
25+ def draw (self ):
26+ self .drawn += 1
27+
28+
29+ class MockScreen :
30+
31+ def __init__ (self ):
32+ self .fullscreen = False
33+
34+ def get_flags (self ):
35+ return FULLSCREEN if self .fullscreen else 0
36+
37+ def __getattr__ (self , name ):
38+ return unittest .mock .MagicMock ()
39+
40+
1841class GameStateTest (unittest .TestCase ):
1942
2043 def setUp (self ):
21- self .state = state .GameState ()
44+ self .state = MockGame (MockScreen ())
45+
46+ def mock_set_mode (self , size , fullscreen = False ):
47+ del size # unused
48+ self .state .screen .fullscreen = fullscreen
49+
50+ def test_abstract (self ):
51+ with self .assertRaises (TypeError ):
52+ state .GameState (MockScreen ()) # pytype: disable=not-instantiable
53+
54+ def test_basic (self ):
55+ self .assertTrue (self .state .active )
56+ self .assertEqual (self .state .drawn , 1 )
2257
2358 def test_quit_x (self ):
2459 self .assertTrue (self .state .active )
@@ -30,26 +65,62 @@ def test_quit_q(self):
3065 self .state .handle_quit (MockEvent (KEYDOWN , K_q ))
3166 self .assertFalse (self .state .active )
3267
33- @unittest .mock .patch ('pygame.display' , autospec = True )
34- def test_fullscreen (self , display_mock ):
35- display_mock .get_surface .return_value .get_flags .return_value = 0
36- self .state .handle_fullscreen (MockEvent (KEYDOWN , K_f ))
37- display_mock .set_mode .assert_called_once_with (state .WINSIZE , FULLSCREEN )
38-
39- @unittest .mock .patch ('pygame.display' , autospec = True )
40- def test_unfullscreen (self , display_mock ):
41- display_mock .get_surface .return_value .get_flags .return_value = (
42- FULLSCREEN )
43- self .state .handle_fullscreen (MockEvent (KEYDOWN , K_f ))
44- display_mock .set_mode .assert_called_once_with (state .WINSIZE )
45-
46- @unittest .mock .patch ('pygame.display' , autospec = True )
47- def test_multiple_events (self , display_mock ):
48- display_mock .get_surface .return_value .get_flags .return_value = 0
49- self .state .handle_events ([MockEvent (KEYDOWN , K_f ), MockEvent (QUIT )])
50- display_mock .set_mode .assert_called_once_with (state .WINSIZE , FULLSCREEN )
68+ def test_fullscreen (self ):
69+ self .state .screen .fullscreen = False
70+ with unittest .mock .patch .object (
71+ pygame .display , 'set_mode' , self .mock_set_mode ):
72+ self .state .handle_fullscreen (MockEvent (KEYDOWN , K_f ))
73+ self .assertTrue (self .state .screen .fullscreen )
74+ self .assertEqual (self .state .drawn , 2 )
75+
76+ def test_unfullscreen (self ):
77+ self .state .screen .fullscreen = True
78+ with unittest .mock .patch .object (
79+ pygame .display , 'set_mode' , self .mock_set_mode ):
80+ self .state .handle_fullscreen (MockEvent (KEYDOWN , K_f ))
81+ self .assertFalse (self .state .screen .fullscreen )
82+ self .assertEqual (self .state .drawn , 2 )
83+
84+ def test_multiple_events (self ):
85+ self .state .screen .fullscreen = False
86+ with unittest .mock .patch .object (
87+ pygame .display , 'set_mode' , self .mock_set_mode ):
88+ self .state .handle_events ([MockEvent (KEYDOWN , K_f ), MockEvent (QUIT )])
89+ self .assertTrue (self .state .screen .fullscreen )
90+ self .assertEqual (self .state .drawn , 2 )
5191 self .assertFalse (self .state .active )
5292
93+ def test_run (self ):
94+ self .state .screen .fullscreen = False
95+ with unittest .mock .patch .object (
96+ pygame .display , 'set_mode' , self .mock_set_mode ):
97+ with unittest .mock .patch .object (pygame .event , 'get' ) as mock_get :
98+ mock_get .return_value = [
99+ MockEvent (KEYDOWN , K_f ),
100+ MockEvent (KEYDOWN , K_f ),
101+ MockEvent (KEYDOWN , K_q ),
102+ ]
103+ self .state .run ()
104+ self .assertFalse (self .state .screen .fullscreen )
105+ self .assertEqual (self .state .drawn , 3 )
106+ self .assertFalse (self .state .active )
107+
108+
109+ class TitleCardTest (unittest .TestCase ):
110+
111+ def test_init (self ):
112+ with unittest .mock .patch ('pygame.display' , autospec = True ):
113+ with unittest .mock .patch ('pygame.image' , autospec = True ):
114+ with unittest .mock .patch ('pygame.transform' , autospec = True ):
115+ state .TitleCard (MockScreen ())
116+
117+
118+ class GameTest (unittest .TestCase ):
119+
120+ def test_init (self ):
121+ with unittest .mock .patch ('pygame.display' , autospec = True ):
122+ state .Game (MockScreen ())
123+
53124
54125if __name__ == '__main__' :
55126 unittest .main ()
0 commit comments