Files
BattleTech/tests/test_mech_bau.py
T

140 lines
6.0 KiB
Python
Executable File

import unittest
from tokenize import group
from MechFabrik import MechFabrik
from MechFabrik.bauteile import InnerStructure, Gyroskope, AreaNames, Area, Cockpit, Item, ItemTypes, Reaktor, Mech
class TestMechBau(unittest.TestCase):
def test_simple(self):
fabrik = MechFabrik('Heuschrecke', 20.0, 8)
mech = fabrik.auslieferung()
self.assertIsInstance(mech, Mech)
self.assertIsInstance(mech.name, str)
self.assertEqual('Heuschrecke', mech.name)
self.assertIsInstance(mech.tonnage, float)
self.assertEqual(20.0, mech.tonnage)
self.assertIsInstance(mech.movement_rate, int)
self.assertEqual(8, mech.movement_rate)
self.assertIsInstance(mech.inner_structure, InnerStructure)
self.assertIsInstance(mech.inner_structure.tonnage, float)
self.assertEqual(2.0, mech.inner_structure.tonnage)
self.assertIsInstance(mech.inner_structure.gyroskope, Gyroskope)
self.assertIsInstance(mech.inner_structure.gyroskope.tonnage, float)
self.assertEqual(2.0, mech.inner_structure.gyroskope.tonnage)
self.assertIsInstance(mech.inner_structure.areas, dict)
area_head = mech.inner_structure.areas.get(AreaNames.HEAD)
self.assertIsInstance(area_head, Area)
cockpit = area_head.cockpit
self.assertIsInstance(cockpit, Cockpit)
self.assertIsInstance(cockpit.tonnage, float)
self.assertEqual(3.0, cockpit.tonnage)
self._test_for_head_items(area_head)
middle_torso = self._test_middle_torso(mech)
right_torso = self._test_areas(mech=mech, parent=middle_torso, index=AreaNames.RIGHT_TORSO, children=2)
left_torso = self._test_areas(mech=mech, parent=middle_torso, index=AreaNames.LEFT_TORSO, children=2)
self.assertCountEqual([right_torso, left_torso], middle_torso.children)
right_arm = self._test_areas(mech=mech, parent=right_torso, index=AreaNames.RIGHT_ARM, children=0)
right_leg = self._test_areas(mech=mech, parent=right_torso, index=AreaNames.RIGHT_LEG, children=0)
self.assertCountEqual([right_arm, right_leg], right_torso.children)
self._test_for_arm_items(right_arm)
self._test_for_leg_items(right_leg)
left_arm = self._test_areas(mech=mech, parent=left_torso, index=AreaNames.LEFT_ARM, children=0)
left_leg = self._test_areas(mech=mech, parent=left_torso, index=AreaNames.LEFT_LEG, children=0)
self.assertCountEqual([left_arm, left_leg], left_torso.children)
self._test_for_arm_items(left_arm)
self._test_for_leg_items(left_leg)
def _test_middle_torso(self, mech) -> Area:
middle_torso = mech.inner_structure.areas.get(AreaNames.MIDDLE_TORSO)
self.assertIsInstance(middle_torso, Area)
reactor = middle_torso.reactor
self.assertIsInstance(reactor, Reaktor)
self.assertIsInstance(reactor.value, int)
self.assertEqual(160, reactor.value)
self.assertIsInstance(reactor.tonnage, float)
self.assertEqual(6.0, reactor.tonnage)
self.assertIsNone(middle_torso.parent)
self.assertIsInstance(middle_torso.children, list)
return middle_torso
def _test_areas(self, mech: Mech, parent: Area, index: AreaNames, children: int) -> Area:
area = mech.inner_structure.areas.get(index)
self.assertIsInstance(area, Area)
self.assertIsInstance(area.parent, Area)
self.assertEqual(parent, area.parent)
self.assertIsInstance(area.children, list)
self.assertEqual(children, len(area.children))
return area
def _test_for_head_items(self, area: Area):
self.assertEqual(6, len(area.items))
self.__test_for_items(area, [
((1, 1), ItemTypes.SUSTAINMENT),
((1, 2), ItemTypes.SENSORS),
((1, 3), ItemTypes.COCKPIT),
((1, 5), ItemTypes.SENSORS),
((1, 6), ItemTypes.SUSTAINMENT),
]
)
self.assertIsNone(area.items[(1, 4)])
def _test_for_middle_torso_items(self, area: Area):
self.assertEqual(12, len(area.items))
self.__test_for_items(area, [
((1, 1), ItemTypes.REAKTOR),
((1, 2), ItemTypes.REAKTOR),
((1, 3), ItemTypes.REAKTOR),
((1, 4), ItemTypes.GYROSKOPE),
((1, 5), ItemTypes.GYROSKOPE),
((1, 6), ItemTypes.GYROSKOPE),
((2, 1), ItemTypes.GYROSKOPE),
((2, 2), ItemTypes.GYROSKOPE),
((2, 3), ItemTypes.GYROSKOPE),
((2, 4), ItemTypes.REAKTOR),
]
)
self.assertIsNone(area.items[(2, 5)])
self.assertIsNone(area.items[(2, 6)])
def _test_for_side_torso_items(self, area: Area):
self.assertEqual(12, len(area.items))
for (group, key) in ((group, key + 1) for group in [1,2] for key in range(6)):
self.assertIsNone(area.items[key])
def _test_for_arm_items(self, area: Area):
self.assertEqual(12, len(area.items))
self._test_for_arm_leg_items(area)
for key in (key + 1 for key in range(6)):
self.assertIsNone(area.items[(2, key)])
pass
def _test_for_leg_items(self, area: Area):
self.assertEqual(6, len(area.items))
self._test_for_arm_leg_items(area)
pass
def _test_for_arm_leg_items(self, area: Area):
self.__test_for_items(area, [
((1, 1), ItemTypes.JOINT),
((1, 2), ItemTypes.ACTIVATOR),
((1, 3), ItemTypes.ACTIVATOR),
((1, 4), ItemTypes.ACTIVATOR),
]
)
self.assertIsNone(area.items[(1, 5)])
self.assertIsNone(area.items[(1, 6)])
pass
def __test_for_items(self, area: Area, should_list: list):
for (key, item_type) in should_list:
self.assertIsInstance(area.items[key], Item)
self.assertEqual(area.items[key].type, item_type)