def test_xml(self):
        """Verifica integridade e corretude dos xmls gerados."""
        for i in range(300):
            data1 = RandomPoke()
            data2 = RandomPoke()
            dados1 = data1.gera()
            dados2 = data2.gera()
            poke1 = Pokemon(dados1)
            poke2 = Pokemon(dados2)

            # Testando to_xml
            bs_poke1 = poke1.to_xml()
            bs_poke2 = poke2.to_xml()
            data_teste1 = xml_to_poke(bs_poke1)
            data_teste2 = xml_to_poke(bs_poke2)
            for i in range(9):
                self.assertEqual(data_teste1[i], dados1[i])
                self.assertEqual(data_teste2[i], dados2[i])

            pos_atk = 9  # Posição da lista de ataques na lista de dados
            atk_dados1 = dados1[pos_atk]
            atk_dados2 = dados2[pos_atk]
            atk_test1 = data_teste1[pos_atk]
            atk_test2 = data_teste2[pos_atk]
            for i in range(len(poke1.ataques)):
                self.assertEqual(atk_dados1[i].nome, atk_test1[i].nome)
                self.assertEqual(atk_dados1[i].typ, atk_test1[i].typ)
                self.assertEqual(atk_dados1[i].acu, atk_test1[i].acu)
                self.assertEqual(atk_dados1[i].pwr, atk_test1[i].pwr)
                self.assertEqual(atk_dados1[i].pp, atk_test1[i].pp)
    def teste_melhor_ataque(self):
        """ Vamos testar se a função melhor_ataque dá realmente o
            ataque com a melhor relação dano x acurácia testando
            todos os ataques do pokemon atacante no pokemon defensor."""

        for j in range(100):
            # Cria um pokemon atacante e um defensor
            dados_atk = RandomPoke()
            dados_def = RandomPoke()
            atacante = Pokemon(dados_atk.gera())
            defensor = Pokemon(dados_def.gera())

            melhor = melhor_ataque(atacante, defensor)
            danos = []
            if atacante.hp < atacante.hp_max / 5:
                estado_critico = True
            else:
                estado_critico = False
            for ataque in atacante.ataques:
                if ataque.pp > 0 and estado_critico is False:
                    dano = ataque.calcula_dano(atacante, defensor, basico=True)
                    danos.append(dano * (ataque.acu * ataque.acu) / 10000)
                elif ataque.pp > 0 and estado_critico is True:
                    dano = ataque.calcula_dano(atacante, defensor, basico=True)

            # Caso não tire todo o hp, escolhe o que causa (em média) o maior
            # dano usando a relação dano x acurácia.
            if max(danos) < defensor.hp:
                melhor_dano = melhor.calcula_dano(atacante,
                                                  defensor,
                                                  basico=True)
                self.assertEqual(atacante.get_ataque(danos.index(max(danos))),
                                 melhor, 1)
Exemple #3
0
 def setUp(self):
     """Inicializa os dois Pokémons aleatórios para os testes."""
     sys.stdout = open(os.devnull, "w")  # Suprime o output de batalha.py
     sys.stderr = sys.stdout
     self.a = RandomPoke()
     self.b = RandomPoke()
     self.poke1 = Pokemon(self.a.gera())
     self.poke2 = Pokemon(self.b.gera())
     self.struggle = Ataque(["Struggle", 0, 100, 50, 10])
 def setUp(self):
     """Inicializa dados para teste."""
     sys.stdout = open(os.devnull, "w")  # Suprime o output de batalha.py
     sys.stderr = sys.stdout
     self.srv = Servidor(False)
     self.srv.app.config["TESTING"] = True
     self.app = self.srv.app.test_client()
     self.data1 = RandomPoke()
     self.data2 = RandomPoke()
     self.dados1 = self.data1.gera()
     self.dados2 = self.data2.gera()
     self.poke1 = Pokemon(self.dados1)
     self.poke2 = Pokemon(self.dados2)
Exemple #5
0
    def test_realiza_ataque_e_calcula_dano(self):
        """Verifica se ataque e suas consequências ocorrem sem problemas."""
        batalha.input = Mock(return_value="ok")

        # Geramos novos Pokémons para podermos realizar vários
        # testes sem acabar com todo o HP deles.
        for i in range(100):
            a = RandomPoke()
            b = RandomPoke()
            poke3 = poke1 = Pokemon(a.gera())
            poke4 = poke2 = Pokemon(b.gera())

            # Assumindo que o ataque sempre vai acertar
            with patch('batalha.random.uniform', return_value=1.0):
                # Aqui começa o cálculo do dano
                lvl = poke1.lvl
                ataque = Ataque(a.gera_ataque())
                if ataque.typ.especial:
                    atk = poke1.spc
                    dfs = poke2.spc
                else:
                    atk = poke1.atk
                    dfs = poke2.dfs

                pp = ataque.pp
                hp = poke2.hp
                base = ataque.pwr
                eff = efetividade(ataque, poke2, False)

                dano = (2 * lvl + 10) / 250 * atk / dfs * base + 2
                dano *= (stab(ataque, poke1) * critico(poke1, eff) * eff *
                         aleatorio())
                dano = int(dano)
                #Testa o dano.calcula_dano
                self.assertEqual(dano, calcula_dano(ataque, poke1, poke2))
                if (dano > 0):
                    poke1.remove_hp(dano)
                if ataque == self.struggle:
                    dano //= 2
                    poke2.remove(hp.dano)

                # Verficamos se o Pokemon.realiza_ataque está
                # aplicando corretamente o dano conforme a fórmula.
                pokemon.input = Mock(return_value="\n")
                poke3.realiza_ataque(ataque, poke4)
                self.assertEquals(pp - 1, ataque.pp)
                self.assertEquals(poke1.hp, poke3.hp)
                self.assertEquals(poke2.hp, poke4.hp)
Exemple #6
0
    def test_critico(self):
        """Verifica se o cálculo de golpes críticos está funcionando OK."""
        res = (2 * self.poke1.lvl + 5)/(self.poke1.lvl + 5)
        chance = self.poke1.spd/512
        maior_chance = chance + 0.001
        valores_menores = []
        valores_maiores = []

        # Novamente usamos valores conhecidos para testar a unidade do
        # batalha.critico que usa números pseudo-aleatórios. Os primeiros
        # 100 valores serão menores que a chance e os outros 100, maiores.
        for i in range(100):
            valores_menores.append(random.uniform(0.0, chance))
            valores_maiores.append(random.uniform(maior_chance, 1.0))
        valores = valores_menores + valores_maiores
        a = RandomPoke()
        ataque = Ataque(a.gera_ataque())
        with patch("batalha.random.uniform", side_effect=valores):
            # Em cada loop, a iteração chamará dano.critico duas
            # vezes, usando, então, dois valores do side_effect.
            for i in range(50):
                self.assertEqual(ataque.critico(self.poke1, 0), 1)
                self.assertEqual(ataque.critico(self.poke1,
                                         random.randint(1, 100)), res)
            for i in range(50):
                self.assertEqual(ataque.critico(self.poke1, 0), 1)
                self.assertEqual(ataque.critico(self.poke1,
                                         random.randint(1, 100)), 1)
        """
Exemple #7
0
    def test_efetividade(self):
        """Verifica se o cálculo de efetividade é feito corretamente."""
        # Novamente geramos um novo Pokémon para podermos realizar vários
        # testes com resultados diferentes.
        for i in range(100):
            a = RandomPoke()
            poke1 = Pokemon(a.gera())
            ataque = Ataque(a.gera_ataque())

            # Esta é a fórmula para calcular efetividade
            mult = ataque.typ.get_eff_contra(poke1.tipo1)
            if poke1.tipo2.nome != "Blank":
                mult *= ataque.typ.get_eff_contra(poke1.tipo2)

            self.assertEquals(mult, ataque.efetividade(poke1, False))
    def gera_poke(self):
        """Gera pokemons tais que os ataques estão ordenados em ordem
        crescente de pwr e acu."""
        t = RandomPoke()
        dados = t.gera()
        dados = dados[:9]  #Tiramos a lista de ataques aleatórios
        ataque = []
        rand_num = randint(1, 97)
        for i in range(4):  #Criamos ataques ordenados
            ataque.append(
                self.gera_ataque(i + rand_num, i + rand_num, randint(1, 255)))

        ataques = [Ataque(ataque[i]) for i in range(4)]
        dados.append(ataques)
        poke = Pokemon(dados)  #Agora nosso pokemón contém os ataques ordenados
        return poke
Exemple #9
0
 def setUp(self):
         sys.stdout = open(os.devnull, "w")  # Suprime o output de batalha.py
         sys.stderr = sys.stdout
         self.a = RandomPoke()
         self.poke1 = Pokemon(self.a.gera())
Exemple #10
0
 def setUp(self):
     """Inicializa o teste."""
     sys.stdout = open(os.devnull, 'w')  # Suprime o output de batalha.py
     self.ctrl = RandomPoke()
     self.test = Pokemon(self.ctrl.gera())