| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 30dbf8c commit b8f3003
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -5,43 +5,51 @@ | |||
| 5 | 5 | from atores import Ator, DESTRUIDO, ATIVO, Obstaculo, Porco, PassaroAmarelo, PassaroVermelho | |
| 6 | 6 | ||
| 7 | 7 | ||
| 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): | ||
| 21 | 27 | def teste_ator_posicao(self): | |
| 22 | 28 | ator = Ator() | |
| 23 | 29 | self.assertTupleEqual((0, 0), ator.calcular_posicao(0)) | |
| 24 | 30 | 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') | ||
| 26 | 32 | 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') | ||
| 28 | 34 | ||
| 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)) | ||
| 36 | 40 | ||
| 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') | ||
| 42 | 50 | ||
| 43 | 51 | 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 | ||
| 45 | 53 | ator2 = Ator(2, 2) | |
| 46 | 54 | self.assert_colisao_atores_ativos(ator, ator2) | |
| 47 | 55 | self.assert_colisao_atores_ativos(Ator(2, 2), Ator(2, 3)) | |
@@ -54,6 +62,7 @@ def teste_colisao_entre_atores_ativos(self): | |||
| 54 | 62 | self.assert_colisao_atores_ativos(Ator(2, 2), Ator(1, 3)) | |
| 55 | 63 | ||
| 56 | 64 | def teste_colisao_entre_atores_ativos_com_intervalo(self): | |
| 65 | + # Com intervalo 2, diferente do padrão 1, essa colisão deveria acontecer | ||
| 57 | 66 | self.assert_colisao_atores_ativos(Ator(2, 2), Ator(2, 4), 2) | |
| 58 | 67 | ||
| 59 | 68 | def teste_nao_colisao_entre_atores_ativos(self): | |
@@ -68,7 +77,7 @@ def teste_nao_colisao_entre_atores_ativos(self): | |||
| 68 | 77 | ||
| 69 | 78 | def teste_colisao_somente_um_ator_destruido(self): | |
| 70 | 79 | 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 | ||
| 72 | 81 | ator2 = Ator(2, 2) | |
| 73 | 82 | self.assert_nao_colisao(ator, ator2) | |
| 74 | 83 | self.assert_nao_colisao(Ator(2, 3), ator) | |
@@ -89,42 +98,75 @@ def teste_colisao_somente_um_ator_destruido(self): | |||
| 89 | 98 | self.assert_nao_colisao(Ator(1, 2), ator) | |
| 90 | 99 | self.assert_nao_colisao(Ator(1, 3), ator) | |
| 91 | 100 | ||
| 92 | - def teste_status(self): | ||
| 101 | + def test_caracter(self): | ||
| 93 | 102 | 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') | ||
| 95 | 129 | ||
| 96 | 130 | ||
| 97 | - class ObstaculoTestes(TestCase): | ||
| 131 | + class ObstaculoTestes(AtorBaseTest): | ||
| 98 | 132 | def teste_status(self): | |
| 99 | 133 | obstaculo = Obstaculo() | |
| 100 | - assert_ator_status(self, obstaculo, 'O', ' ') | ||
| 134 | + self.assert_ator_caracteres(obstaculo, 'O', ' ') | ||
| 101 | 135 | ||
| 102 | 136 | ||
| 103 | - class PorcoTestes(TestCase): | ||
| 137 | + class PorcoTestes(AtorBaseTest): | ||
| 104 | 138 | def teste_status(self): | |
| 105 | 139 | porco = Porco() | |
| 106 | - assert_ator_status(self, porco, '@', '+') | ||
| 140 | + self.assert_ator_caracteres(porco, '@', '+') | ||
| 107 | 141 | ||
| 108 | 142 | ||
| 109 | - class PassaroBaseTests(TestCase): | ||
| 143 | + class PassaroBaseTests(AtorBaseTest): | ||
| 110 | 144 | 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) | ||
| 113 | 148 | passaro.colidir_com_chao(tempo) | |
| 114 | - self.assertEqual(status_esperado, passaro.status(tempo), dct) | ||
| 149 | + self.assertEqual(status_esperado, passaro.status(tempo)) | ||
| 115 | 150 | ||
| 116 | 151 | ||
| 117 | 152 | class PassaroVermelhoTests(PassaroBaseTests): | |
| 153 | + def teste_status(self): | ||
| 154 | + passaro_amarelo = PassaroVermelho(1, 1) | ||
| 155 | + self.assert_ator_caracteres(passaro_amarelo, 'V', 'v') | ||
| 156 | + | ||
| 118 | 157 | def teste_velocidade_escalar(self): | |
| 119 | 158 | self.assertEqual(20, PassaroVermelho.velocidade_escalar) | |
| 120 | 159 | ||
| 121 | 160 | def teste_foi_lancado(self): | |
| 122 | 161 | 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') | ||
| 124 | 164 | 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') | ||
| 126 | 167 | ||
| 127 | 168 | def teste_posicao_antes_do_lancamento(self): | |
| 169 | + 'Método que testa que o pássaro fica parado antes do tempo de lançamento' | ||
| 128 | 170 | passaro_vermelho = PassaroVermelho(1, 1) | |
| 129 | 171 | passaro_vermelho.lancar(90, 2) # passaro lancado a 90 graus no tempo 2 segundos | |
| 130 | 172 | # | |
@@ -133,9 +175,6 @@ def teste_posicao_antes_do_lancamento(self): | |||
| 133 | 175 | self.assertEqual((1, 1), passaro_vermelho.calcular_posicao(t), | |
| 134 | 176 | 'Não deveria se mover no tempo %s < 2 segundtos' % t) | |
| 135 | 177 | ||
| 136 | - def teste_status(self): | ||
| 137 | - passaro_amarelo = PassaroVermelho(1, 1) | ||
| 138 | - assert_ator_status(self, passaro_amarelo, 'V', 'v') | ||
| 139 | 178 | ||
| 140 | 179 | def teste_colisao_com_chao(self): | |
| 141 | 180 | for i in range(30): | |
@@ -146,18 +185,30 @@ def teste_colisao_com_chao(self): | |||
| 146 | 185 | def teste_colisao(self): | |
| 147 | 186 | passaro_vermelho = PassaroVermelho(1, 1) | |
| 148 | 187 | passaro_vermelho.lancar(45, 2) # passaro lancado a 45 graus no tempo 2 segundos | |
| 149 | - # Código de geração de testes | ||
| 150 | 188 | ||
| 151 | 189 | 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 | + | ||
| 153 | 194 | passaro_vermelho.colidir(porco, 2.89) | |
| 154 | 195 | 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) | ||
| 158 | 205 | ||
| 159 | 206 | ||
| 160 | 207 | class PassaroAmareloTests(PassaroBaseTests): | |
| 208 | + def teste_status(self): | ||
| 209 | + passaro_amarelo = PassaroAmarelo(1, 1) | ||
| 210 | + self.assert_ator_caracteres(passaro_amarelo, 'A', 'a') | ||
| 211 | + | ||
| 161 | 212 | def teste_velocidade_escalar(self): | |
| 162 | 213 | self.assertEqual(30, PassaroAmarelo.velocidade_escalar) | |
| 163 | 214 | ||
@@ -170,9 +221,6 @@ def teste_posicao_antes_do_lancamento(self): | |||
| 170 | 221 | self.assertEqual((1, 1), passaro_amarelo.calcular_posicao(t), | |
| 171 | 222 | 'Não deveria se mover no tempo %s < 2 segundtos' % t) | |
| 172 | 223 | ||
| 173 | - def teste_status(self): | ||
| 174 | - passaro_amarelo = PassaroAmarelo(1, 1) | ||
| 175 | - assert_ator_status(self, passaro_amarelo, 'A', 'a') | ||
| 176 | 224 | ||
| 177 | 225 | def teste_colisao_com_chao(self): | |
| 178 | 226 | for i in range(30): | |
@@ -184,17 +232,26 @@ def teste_colisao(self): | |||
| 184 | 232 | passaro_amarelo = PassaroAmarelo(1, 1) | |
| 185 | 233 | passaro_amarelo.lancar(45, 2) # passaro lancado a 45 graus no tempo 2 segundos | |
| 186 | 234 | 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 | + | ||
| 188 | 239 | passaro_amarelo.colidir(porco, 2.12) | |
| 189 | 240 | 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) | ||
| 193 | 249 | ||
| 194 | 250 | def teste_lacamento_vertical(self): | |
| 195 | 251 | passaro_amarelo = PassaroAmarelo(1, 1) | |
| 196 | 252 | passaro_amarelo.lancar(90, 2) # passaro lancado a 90 graus no tempo 2 segundos | |
| 197 | 253 | ||
| 254 | + # função auxiliar que mantém x fixo com valor 1, status Ativo, variando apenas o tempo e a posição y | ||
| 198 | 255 | def assert_vertical(y_local, tempo): | |
| 199 | 256 | self.assert_passaro_posicao(1, y_local, ATIVO, passaro_amarelo, tempo) | |
| 200 | 257 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -169,6 +169,7 @@ def criar_fase_exemplo(): | |||
| 169 | 169 | ||
| 170 | 170 | for i in range(86): | |
| 171 | 171 | fase_exemplo.calcular_pontos(i / 10) | |
| 172 | + return fase_exemplo | ||
| 172 | 173 | ||
| 173 | 174 | ||
| 174 | 175 | if __name__ == '__main__': | |
| Back | FazBrowse Home | New Git URL |
0 commit comments