[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/pythonprobr/pythonbirds/simples/testes/fase_testes.py [Back]  [Original]

# -*- coding: utf-8 -*-

import os
import sys
from os import path
from unittest.case import TestCase

project_dir = path.dirname(__file__)
project_dir = path.join('..')
sys.path.append(project_dir)
from placa_grafica_tkinter import rodar_fase

project_dir = os.path.join(os.path.dirname(__file__), '..')
project_dir = os.path.normpath(project_dir)
sys.path.append(project_dir)

from atores import (Obstaculo, Porco, PassaroVermelho, PassaroAmarelo,
                    DESTRUIDO, ATIVO, DuploLancamentoExcecao)
from fase import Fase, Ponto, EM_ANDAMENTO, VITORIA, DERROTA


class AtorFake:
    def __init__(self, x=0, y=0):
        self.y = y
        self.x = x
        self.status = ATIVO
        self.colidir_executado = False
        self.calcular_posicao_executado = False
        self.intervalo_colisao = None

    def calcular_posicao(self, tempo):
        self.calcular_posicao_executado = True

    def colidir(self, outro_ator, intervalo):
        self.colidir_executado = outro_ator.colidir_executado = True
        self.intervalo_colisao = outro_ator.intervalo_colisao = intervalo

    def caracter(self):
        return ' '


class ObstaculoFake(AtorFake):
    pass


class PorcoFake(AtorFake):
    pass


class PassaroFake(AtorFake):
    def __init__(self, x=0, y=0):
        super().__init__(x, y)
        self._lancado = False
        self.colidir_com_chao_executado = False

    def foi_lancado(self):
        return self._lancado

    def lancar(self, angulo, tempo):
        if self._lancado:
            raise DuploLancamentoExcecao()
        self._lancado = True

    def colidir_com_chao(self):
        self.colidir_com_chao_executado = True


class FaseTestes(TestCase):
    def teste_adicionar_obstaculo(self):
        fase = Fase()
        self.assertListEqual([], fase._obstaculos)
        obstaculo = ObstaculoFake()
        fase.adicionar_obstaculo(obstaculo)
        self.assertListEqual([obstaculo], fase._obstaculos)

        obstaculo1, obstaculo2 = ObstaculoFake(), ObstaculoFake()
        fase.adicionar_obstaculo(obstaculo1, obstaculo2)
        self.assertListEqual([obstaculo, obstaculo1, obstaculo2],
                             fase._obstaculos)

    def teste_adicionar_porco(self):
        fase = Fase()
        self.assertListEqual([], fase._porcos)
        porco = PorcoFake()
        fase.adicionar_porco(porco)
        self.assertListEqual([porco], fase._porcos)

        porco1, porco2 = PorcoFake(), PorcoFake()
        fase.adicionar_porco(porco1, porco2)
        self.assertListEqual([porco, porco1, porco2], fase._porcos)

    def teste_adicionar_passaro(self):
        fase = Fase()
        self.assertListEqual([], fase._passaros)
        passaro = PassaroFake()
        fase.adicionar_passaro(passaro)
        self.assertListEqual([passaro], fase._passaros)

        passaro1, passaro2 = PassaroFake(), PassaroFake()
        fase.adicionar_passaro(passaro1, passaro2)
        self.assertListEqual([passaro, passaro1, passaro2], fase._passaros)

    def teste_acabou_sem_porcos(self):
        fase = Fase()
        self.assertEqual(VITORIA, fase.status())

    def teste_acabou_com_porcos_e_passaros(self):
        fase = Fase()
        porcos = [PorcoFake(1, 1) for _ in range(2)]  # criando 2 porcos
        passaros = [PassaroFake(1, 1) for _ in range(2)]  # criando 2 pssaros
        fase.adicionar_porco(*porcos)
        fase.adicionar_passaro(*passaros)

        self.assertEqual(EM_ANDAMENTO, fase.status())

        for ator in porcos + passaros:
            ator.status = DESTRUIDO
        self.assertEqual(VITORIA, fase.status())

        fase.adicionar_obstaculo(Obstaculo())
        self.assertEqual(VITORIA, fase.status(),
                         'Obstculo no interfere no fim do jogo')

        fase.adicionar_porco(PorcoFake())
        self.assertEqual(DERROTA, fase.status(),
                         'Com Porco ativo e sem pssaro para lanar, o jogo '
                         'deveria acabar')

        fase.adicionar_passaro(PassaroFake())
        self.assertEqual(EM_ANDAMENTO, fase.status(),
                         'Com Porco ativo e com pssaro para lanar, o jogo '
                         'no deveria acabar')

    def teste_status(self):
        fase = Fase()
        porcos = [PorcoFake(1, 1) for _ in range(2)]
        passaros = [PassaroFake(1, 1) for _ in range(2)]
        fase.adicionar_porco(*porcos)
        fase.adicionar_passaro(*passaros)
        self.assertEqual(EM_ANDAMENTO, fase.status())

        for ator in porcos + passaros:
            ator.status = DESTRUIDO
        self.assertEqual(VITORIA, fase.status(),
                         'Sem porcos ativos o jogo deveria terminar com '
                         'vitria')

        fase.adicionar_obstaculo(ObstaculoFake())
        self.assertEqual(VITORIA, fase.status(),
                         'Obstculo no interfere para definir vitria')

        porco = PorcoFake()
        fase.adicionar_porco(porco)
        self.assertEqual(DERROTA, fase.status(),
                         'Com Porco ativo e sem pssaro para lanar, o jogo '
                         'deveria acabar em derrota')

        fase.adicionar_passaro(PassaroFake())
        self.assertEqual(EM_ANDAMENTO, fase.status(),
                         'Com Porco ativo e com pssaro para lanar, o jogo '
                         'no deveria acabar')

        porco.status = DESTRUIDO
        self.assertEqual(VITORIA, fase.status(),
                         'Sem porco ativo, o jogo deveria acabar com vitria')

    def teste_lancar_passaro_sem_erro_quando_nao_existe_passaro(self):
        passaros = [PassaroFake(1, 1) for _ in range(2)]
        fase = Fase()
        fase.adicionar_passaro(*passaros)
        self.assertFalse(passaros[0].foi_lancado())
        self.assertFalse(passaros[1].foi_lancado())
        fase.lancar(90, 1)
        fase.lancar(45, 3)
        fase.lancar(31,
                    5)  # testando que lanar passaros depios de todos
        # lanados no causa erro

        self.assertTrue(passaros[0].foi_lancado())
        self.assertTrue(passaros[1].foi_lancado())

    def teste_intervalo_de_colisao_padrao(self):
        '''
        Mtodo que testa se o intervalo de coliso da Fase  repassado aos
        atores. Padro de intervalo  1
        '''
        fase = Fase()
        passaro = PassaroFake(1, 1)
        fase.adicionar_passaro(passaro)
        porco = PorcoFake(2, 2)
        fase.adicionar_porco(porco)
        fase.calcular_pontos(0)
        self.assertTrue(passaro.colidir_executado)
        self.assertTrue(porco.colidir_executado)
        self.assertTrue(passaro.calcular_posicao_executado)
        self.assertTrue(passaro.colidir_com_chao_executado)
        self.assertEqual(1, passaro.intervalo_colisao)
        self.assertEqual(1, porco.intervalo_colisao)

    def teste_intervalo_de_colisao_nao_padrao(self):
        '''
        Mtodo que testa se o intervalo de coliso da Fase  repassado aos
        atores. valor testado: 31
        '''
        fase = Fase(30)
        passaro = PassaroFake(1, 1)
        fase.adicionar_passaro(passaro)
        porco = PorcoFake(31, 31)
        fase.adicionar_porco(porco)
        fase.calcular_pontos(0)
        self.assertEqual(30, passaro.intervalo_colisao)
        self.assertEqual(30, porco.intervalo_colisao)

Web Proxy Viewer  |  New URL  |  Original Page