55from atores import Ator , DESTRUIDO , ATIVO , Obstaculo , Porco , PassaroAmarelo , PassaroVermelho
66
77
8- def assert_ator_status (test_case , ator , caracter_status_ativo , carater_status_destruido ):
9- test_case .assertEqual (ATIVO , ator .status (0 ))
10- test_case .assertEqual (caracter_status_ativo , ator .caracter (0 ))
11- ator .colidir (ator , 3.2 )
12- test_case .assertEqual (ATIVO , ator .status (3.1 ))
13- test_case .assertEqual (caracter_status_ativo , ator .caracter (3.1 ))
14- test_case .assertEqual (DESTRUIDO , ator .status (3.2 ))
15- test_case .assertEqual (carater_status_destruido , ator .caracter (3.2 ))
16- test_case .assertEqual (DESTRUIDO , ator .status (4 ))
17- test_case .assertEqual (carater_status_destruido , ator .caracter (4 ))
18-
19-
20- class AtorTestes (TestCase ):
8+ class AtorBaseTest (TestCase ):
9+ def assert_ator_caracteres (self , ator , caracter_status_ativo , caracter_status_destruido ):
10+ 'Confere status e caracteres ativos e destruidos de um ator'
11+ # Conferencia de caracter de ator ativo
12+ self .assertEqual (ATIVO , ator .status (0 ))
13+ self .assertEqual (caracter_status_ativo , ator .caracter (0 ))
14+
15+ # Colidindo ator com ele mesmo para alterar seu status para destruido
16+ ator .colidir (ator , 3.2 )
17+
18+ self .assertEqual (caracter_status_ativo , ator .caracter (3.1 ),
19+ 'Status ativo, logo o caracter deveria ser %s' % caracter_status_ativo )
20+ self .assertEqual (caracter_status_destruido , ator .caracter (3.2 ),
21+ 'Status destruido, logo o caracter deveria ser %s' % caracter_status_destruido )
22+ self .assertEqual (caracter_status_destruido , ator .caracter (4 ),
23+ 'Status destruido, logo o caracter deveria ser %s' % caracter_status_destruido )
24+
25+
26+ class AtorTestes (AtorBaseTest ):
2127 def teste_ator_posicao (self ):
2228 ator = Ator ()
2329 self .assertTupleEqual ((0 , 0 ), ator .calcular_posicao (0 ))
2430 ator = Ator (0.3 , 0.5 )
25- self .assertTupleEqual ((0 , 0 ), ator .calcular_posicao (2.3 ))
31+ self .assertTupleEqual ((0 , 0 ), ator .calcular_posicao (2.3 ), 'Deveria arredondar para inteiro' )
2632 ator = Ator (0.6 , 2.1 )
27- self .assertTupleEqual ((1 , 2 ), ator .calcular_posicao (3.14 ))
33+ self .assertTupleEqual ((1 , 2 ), ator .calcular_posicao (3.14 ), 'Deveria arredondar para inteiro' )
2834
29- def assert_colisao_atores_ativos (self , ator , ator2 , intervalo = 1 ):
30- tempo_da_colisao = 2
31- self .assertEqual (ator .status (tempo_da_colisao ), ATIVO )
32- self .assertEqual (ator2 .status (tempo_da_colisao ), ATIVO )
33- ator .colidir (ator2 , tempo_da_colisao , intervalo )
34- self .assertEqual (ator2 .status (tempo_da_colisao ), DESTRUIDO )
35- self .assertEqual (ator .status (tempo_da_colisao ), DESTRUIDO )
35+ def teste_status (self ):
36+ ator = Ator ()
37+ 'Confere status de um ator'
38+ # Conferencia de caracter de ator ativo
39+ self .assertEqual (ATIVO , ator .status (0 ))
3640
37- def assert_nao_colisao (self , ator , ator2 ):
38- tempo_da_colisao = 2
39- status_iniciais = [ator .status (tempo_da_colisao ), ator2 .status (tempo_da_colisao )]
40- ator .colidir (ator2 , tempo_da_colisao )
41- self .assertListEqual (status_iniciais , [ator .status (tempo_da_colisao ), ator2 .status (tempo_da_colisao )])
41+ # Colidindo ator com ele mesmo para alterar seu status para destruido
42+ ator ._tempo_de_colisao = 3.2
43+
44+ self .assertEqual (ATIVO , ator .status (3.1 ),
45+ 'Status para tempo 3.1 de jogo deveria mostrar status ativo, já que é menor que o tempo de colisão 3.2' )
46+ self .assertEqual (DESTRUIDO , ator .status (3.2 ),
47+ 'Status para tempo 3.2 de jogo deveria mostrar status destruido, já que é igual ao tempo de colisão 3.2' )
48+ self .assertEqual (DESTRUIDO , ator .status (4 ),
49+ 'Status para tempo 4 de jogo deveria mostrar status destruido, já que é maior que o tempo de colisão 3.2' )
4250
4351 def teste_colisao_entre_atores_ativos (self ):
44- ator = Ator (2 , 2 )
52+ ator = Ator (2 , 2 ) # Ator recém criado deve ter status ativo
4553 ator2 = Ator (2 , 2 )
4654 self .assert_colisao_atores_ativos (ator , ator2 )
4755 self .assert_colisao_atores_ativos (Ator (2 , 2 ), Ator (2 , 3 ))
@@ -54,6 +62,7 @@ def teste_colisao_entre_atores_ativos(self):
5462 self .assert_colisao_atores_ativos (Ator (2 , 2 ), Ator (1 , 3 ))
5563
5664 def teste_colisao_entre_atores_ativos_com_intervalo (self ):
65+ # Com intervalo 2, diferente do padrão 1, essa colisão deveria acontecer
5766 self .assert_colisao_atores_ativos (Ator (2 , 2 ), Ator (2 , 4 ), 2 )
5867
5968 def teste_nao_colisao_entre_atores_ativos (self ):
@@ -68,7 +77,7 @@ def teste_nao_colisao_entre_atores_ativos(self):
6877
6978 def teste_colisao_somente_um_ator_destruido (self ):
7079 ator = Ator (2 , 2 )
71- ator .colidir (ator , 0 )
80+ ator .colidir (ator , 0 ) # colidingo ator com ele mesmo para alterar seu status para destruido
7281 ator2 = Ator (2 , 2 )
7382 self .assert_nao_colisao (ator , ator2 )
7483 self .assert_nao_colisao (Ator (2 , 3 ), ator )
@@ -89,42 +98,75 @@ def teste_colisao_somente_um_ator_destruido(self):
8998 self .assert_nao_colisao (Ator (1 , 2 ), ator )
9099 self .assert_nao_colisao (Ator (1 , 3 ), ator )
91100
92- def teste_status (self ):
101+ def test_caracter (self ):
93102 ator = Ator ()
94- assert_ator_status (self , ator , 'A' , ' ' )
103+ self .assert_ator_caracteres (ator , 'A' , ' ' )
104+
105+
106+ def assert_colisao_atores_ativos (self , ator , ator2 , intervalo = 1 ):
107+ 'Se certifica que há colisão entre atores ativos'
108+ tempo_da_colisao = 2
109+ # Conferindo status dos dois atores antes da colisão
110+ self .assertEqual (ator .status (tempo_da_colisao ), ATIVO , 'Status deveria ser ativo antes da colisão' )
111+ self .assertEqual (ator2 .status (tempo_da_colisao ), ATIVO , 'Status deveria ser ativo antes da colisão' )
112+ ator .colidir (ator2 , tempo_da_colisao , intervalo )
113+ # Conferindo status dos dois atores depois da colisão
114+ self .assertEqual (ator2 .status (tempo_da_colisao ), DESTRUIDO , 'Status deveria ser destruido depois da colisão' )
115+ self .assertEqual (ator .status (tempo_da_colisao ), DESTRUIDO , 'Status deveria ser destruido depois da colisão' )
116+
117+ def assert_nao_colisao (self , ator , ator2 ):
118+ 'Se certifica que não colisão entre dois atores'
119+ tempo_da_colisao = 2
120+ # Armazenando status antes da colisão
121+ status_inicial_ator = ator .status (tempo_da_colisao )
122+ status_inicial_ator_2 = ator2 .status (tempo_da_colisao )
123+
124+ ator .colidir (ator2 , tempo_da_colisao )
125+
126+ # Conferindo se status ficaram inalterados
127+ self .assertEqual (status_inicial_ator , ator .status (tempo_da_colisao ), 'Status de ator não deveria mudar' )
128+ self .assertEqual (status_inicial_ator_2 , ator2 .status (tempo_da_colisao ), 'Status de ator2 não deveria mudar' )
95129
96130
97- class ObstaculoTestes (TestCase ):
131+ class ObstaculoTestes (AtorBaseTest ):
98132 def teste_status (self ):
99133 obstaculo = Obstaculo ()
100- assert_ator_status ( self , obstaculo , 'O' , ' ' )
134+ self . assert_ator_caracteres ( obstaculo , 'O' , ' ' )
101135
102136
103- class PorcoTestes (TestCase ):
137+ class PorcoTestes (AtorBaseTest ):
104138 def teste_status (self ):
105139 porco = Porco ()
106- assert_ator_status ( self , porco , '@' , '+' )
140+ self . assert_ator_caracteres ( porco , '@' , '+' )
107141
108142
109- class PassaroBaseTests (TestCase ):
143+ class PassaroBaseTests (AtorBaseTest ):
110144 def assert_passaro_posicao (self , x_esperado , y_esperado , status_esperado , passaro , tempo ):
111- dct = {'x_esperado' : x_esperado , 'y_esperado' : y_esperado , 'status_esperado' : status_esperado , 'tempo' : tempo }
112- self .assertTupleEqual ((x_esperado , y_esperado ), passaro .calcular_posicao (tempo ), dct )
145+ x_calculado , y_calculado = passaro .calcular_posicao (tempo )
146+ self .assertEqual (x_esperado , x_calculado )
147+ self .assertEqual (y_esperado , y_calculado )
113148 passaro .colidir_com_chao (tempo )
114- self .assertEqual (status_esperado , passaro .status (tempo ), dct )
149+ self .assertEqual (status_esperado , passaro .status (tempo ))
115150
116151
117152class PassaroVermelhoTests (PassaroBaseTests ):
153+ def teste_status (self ):
154+ passaro_amarelo = PassaroVermelho (1 , 1 )
155+ self .assert_ator_caracteres (passaro_amarelo , 'V' , 'v' )
156+
118157 def teste_velocidade_escalar (self ):
119158 self .assertEqual (20 , PassaroVermelho .velocidade_escalar )
120159
121160 def teste_foi_lancado (self ):
122161 passaro_vermelho = PassaroVermelho (1 , 1 )
123- self .assertFalse (passaro_vermelho .foi_lancado ())
162+ self .assertFalse (passaro_vermelho .foi_lancado (),
163+ 'Se o método lançar ainda não foi executado, deve retornar falso' )
124164 passaro_vermelho .lancar (0 , 0 )
125- self .assertTrue (passaro_vermelho .foi_lancado ())
165+ self .assertTrue (passaro_vermelho .foi_lancado (),
166+ 'Se o método lançar foi executado, deve retornar verdadeiro' )
126167
127168 def teste_posicao_antes_do_lancamento (self ):
169+ 'Método que testa que o pássaro fica parado antes do tempo de lançamento'
128170 passaro_vermelho = PassaroVermelho (1 , 1 )
129171 passaro_vermelho .lancar (90 , 2 ) # passaro lancado a 90 graus no tempo 2 segundos
130172 #
@@ -133,9 +175,6 @@ def teste_posicao_antes_do_lancamento(self):
133175 self .assertEqual ((1 , 1 ), passaro_vermelho .calcular_posicao (t ),
134176 'Não deveria se mover no tempo %s < 2 segundtos' % t )
135177
136- def teste_status (self ):
137- passaro_amarelo = PassaroVermelho (1 , 1 )
138- assert_ator_status (self , passaro_amarelo , 'V' , 'v' )
139178
140179 def teste_colisao_com_chao (self ):
141180 for i in range (30 ):
@@ -146,18 +185,30 @@ def teste_colisao_com_chao(self):
146185 def teste_colisao (self ):
147186 passaro_vermelho = PassaroVermelho (1 , 1 )
148187 passaro_vermelho .lancar (45 , 2 ) # passaro lancado a 45 graus no tempo 2 segundos
149- # Código de geração de testes
150188
151189 porco = Porco (14 , 10 )
152- passaro_vermelho .calcular_posicao (2.89 ) # tempo exato quanto o passário chega em 14,10
190+ x_calculado , y_calculado = passaro_vermelho .calcular_posicao (2.89 )
191+ self .assertEqual (14 , x_calculado )
192+ self .assertEqual (10 , y_calculado )
193+
153194 passaro_vermelho .colidir (porco , 2.89 )
154195 self .assertEqual (DESTRUIDO , passaro_vermelho .status (2.89 ))
155- # Deve ficar parado onde colidiu para qualquer tempo maior que o de colisão
156- self .assertTupleEqual ((14 , 10 ), passaro_vermelho .calcular_posicao (2.9 ))
157- self .assertTupleEqual ((14 , 10 ), passaro_vermelho .calcular_posicao (1000 ))
196+
197+ # Deve ficar parado onde colidiu para qualquer tempo maior ou igual que o de colisão
198+ x_calculado , y_calculado = passaro_vermelho .calcular_posicao (2.89 )
199+ self .assertEqual (14 , x_calculado )
200+ self .assertEqual (10 , y_calculado )
201+
202+ x_calculado , y_calculado = passaro_vermelho .calcular_posicao (4 )
203+ self .assertEqual (14 , x_calculado )
204+ self .assertEqual (10 , y_calculado )
158205
159206
160207class PassaroAmareloTests (PassaroBaseTests ):
208+ def teste_status (self ):
209+ passaro_amarelo = PassaroAmarelo (1 , 1 )
210+ self .assert_ator_caracteres (passaro_amarelo , 'A' , 'a' )
211+
161212 def teste_velocidade_escalar (self ):
162213 self .assertEqual (30 , PassaroAmarelo .velocidade_escalar )
163214
@@ -170,9 +221,6 @@ def teste_posicao_antes_do_lancamento(self):
170221 self .assertEqual ((1 , 1 ), passaro_amarelo .calcular_posicao (t ),
171222 'Não deveria se mover no tempo %s < 2 segundtos' % t )
172223
173- def teste_status (self ):
174- passaro_amarelo = PassaroAmarelo (1 , 1 )
175- assert_ator_status (self , passaro_amarelo , 'A' , 'a' )
176224
177225 def teste_colisao_com_chao (self ):
178226 for i in range (30 ):
@@ -184,17 +232,26 @@ def teste_colisao(self):
184232 passaro_amarelo = PassaroAmarelo (1 , 1 )
185233 passaro_amarelo .lancar (45 , 2 ) # passaro lancado a 45 graus no tempo 2 segundos
186234 porco = Porco (4 , 4 )
187- passaro_amarelo .calcular_posicao (2.12 ) # tempo exato quanto o passário chega em 4,3
235+ x_calculado , y_calculado = passaro_amarelo .calcular_posicao (2.12 )
236+ self .assertEqual (4 , x_calculado )
237+ self .assertEqual (3 , y_calculado )
238+
188239 passaro_amarelo .colidir (porco , 2.12 )
189240 self .assertEqual (DESTRUIDO , passaro_amarelo .status (2.12 ))
190- # Deve ficar parado onde colidiu para qualquer tempo maior que o de colisão
191- self .assertTupleEqual ((4 , 3 ), passaro_amarelo .calcular_posicao (2.13 ))
192- self .assertTupleEqual ((4 , 3 ), passaro_amarelo .calcular_posicao (1000 ))
241+ # Deve ficar parado onde colidiu para qualquer tempo maior ou igual que o de colisão
242+ x_calculado , y_calculado = passaro_amarelo .calcular_posicao (2.12 )
243+ self .assertEqual (4 , x_calculado )
244+ self .assertEqual (3 , y_calculado )
245+
246+ x_calculado , y_calculado = passaro_amarelo .calcular_posicao (1000 )
247+ self .assertEqual (4 , x_calculado )
248+ self .assertEqual (3 , y_calculado )
193249
194250 def teste_lacamento_vertical (self ):
195251 passaro_amarelo = PassaroAmarelo (1 , 1 )
196252 passaro_amarelo .lancar (90 , 2 ) # passaro lancado a 90 graus no tempo 2 segundos
197253
254+ # função auxiliar que mantém x fixo com valor 1, status Ativo, variando apenas o tempo e a posição y
198255 def assert_vertical (y_local , tempo ):
199256 self .assert_passaro_posicao (1 , y_local , ATIVO , passaro_amarelo , tempo )
200257
0 commit comments