rpg/tests/rpg_test.py
2023-11-22 22:05:31 +01:00

119 lines
4.1 KiB
Python

import random
import unittest
import builtins
import typing
from typing import Any
from character import Character
from weapon import Weapon
from rpg import RPG
class RPGTest(unittest.TestCase):
class InputShim:
"""
Třída pro nahrazení standardní funkce input pro vstup dat
"""
__idx:int = 0
__lines:list[str] = []
@staticmethod
def set_input_data(lines:list[str]):
RPGTest.InputShim.__idx = 0
RPGTest.InputShim.__lines = lines
builtins.input = typing.cast(Any, RPGTest.InputShim.__next)
@staticmethod
def get_latest_input() -> str|None:
if RPGTest.InputShim.__idx==0:
return None
else:
return RPGTest.InputShim.__lines[RPGTest.InputShim.__idx-1]
@staticmethod
def __next(prompt:str=""):
assert RPGTest.InputShim.__idx<len(RPGTest.InputShim.__lines), "| nejsou zadany dalsi hodnoty na vstupu"
result = RPGTest.InputShim.__lines[RPGTest.InputShim.__idx] # + "\n"
RPGTest.InputShim.__idx += 1
return result
"""
class PrintShim:
@staticmethod
def set_output_data():
builtins.print =
"""
def assertCharacter(self, char:Character, name:str, vitality:int, attack:int, defense:int, msg:str):
text = f"{name} [{vitality}] ({attack}/{defense})"
self.assertEqual(text, char.__str__(), msg)
def assertWeapon(self, weapon:Weapon, name:str, attack:int, defense: int, msg:str):
text = f"{name} [{attack}/{defense}]"
self.assertEqual(text, weapon.__str__(), msg)
def test_input_character(self):
strength = random.randrange(1,50)
agility = random.randrange(1,50)
vitality = random.randrange(1,50)
name = "nactiPostavu"
RPGTest.InputShim.set_input_data([name,strength,agility,vitality])
rpg = RPG()
char = rpg.input_character()
self.assertCharacter(char, name, vitality, strength, agility, "|Nactena postava tvrdi, ze ma jine vlastnosti, nez by mela mit.")
def test_input_weapon(self):
defense = random.randrange(1,50)
attack = random.randrange(1,50)
name = "nactiZbran"
RPGTest.InputShim.set_input_data([name,attack,defense])
rpg = RPG()
weapon = rpg.input_weapon()
self.assertWeapon(weapon,name,attack,defense,"|Nactena zbran tvrdi, ze ma jine vlastnosti, nez by mela mit.")
RPGTest.InputShim.set_input_data([""])
rpg = RPG()
weapon = rpg.input_weapon()
self.assertIsNone(weapon, "|Nemela se nacist zadna zbran")
def test_equip_character(self):
strength = random.randrange(1,50)
attackL = random.randrange(1,50)
attackR = random.randrange(1,50)
agility = random.randrange(1,50)
defenseL = random.randrange(1,50)
defenseR = random.randrange(1,50)
vitality = random.randrange(1,50)
name = "vyzbrojPostavu"
char = Character(name,strength,agility,vitality)
left = Weapon("leva",attackL,defenseL)
right = Weapon("prava",attackR,defenseR)
rpg = RPG()
rpg.equip_character(char,None,right)
self.assertCharacter(char,name,vitality,strength+attackR, agility + defenseR,"|Vyzbrojeni postavy se nepovedlo, cekal jsem jiny utok.")
rpg.equip_character(char,left,None)
self.assertCharacter(char,name,vitality,strength+attackR+attackL, agility + defenseR+defenseL,"|Vyzbrojeni postavy se nepovedlo, cekal jsem jiny utok.")
def test_fight(self):
char1=Character("Golias",3,0,10)
char2=Character("David",1,1,20)
c1s = char1.__str__()
c2s = char2.__str__()
rpg = RPG()
winner = rpg.fight(char1, char2)
self.assertEqual(winner, char1, f"|{c1s} zautocil na {c2s} a mel vyhrat")
char1=Character("Golias",3,0,10)
char2=Character("David",1,1,20)
c1s = char1.__str__()
c2s = char2.__str__()
rpg = RPG()
winner = rpg.fight(char2, char1)
self.assertEqual(winner, char2, f"|{c2s} zautocil na {c1s} a mel vyhrat")