Files
BattleTech/tests/test_mech_bau.py
T

166 lines
7.0 KiB
Python
Executable File

import unittest
from Hangar.mech import Mech
from MechFabrik import MechFabrik
from MechFabrik.bauteile import InnerStructure, AreaNames, Area, OuterAmor, Zone, ZoneNames
from MechFabrik.bauteile.items import Cockpit, Gyroskope, Item, ItemTypes, Reaktor
from test_mech import AbstractTestMechAmor, INNER_ARMOR, OUTER_ARMOR
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)
for ara_name in AreaNames:
area = mech.inner_structure.areas.get(ara_name)
should_amor = INNER_ARMOR[ara_name]
self.assertIsInstance(area, Zone)
self.assertIsInstance(area, Area)
self.assertEqual(should_amor, area.armor)
for zone_name in ZoneNames:
zone = mech.inner_structure.zones.get(zone_name)
self.assertIsInstance(zone, Zone)
self.assertIsInstance(zone, OuterAmor)
self.assertEqual(0, zone.armor)
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.assertIsInstance(area_head.parent, Area)
self.assertEqual(middle_torso, area_head.parent)
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)
class TestMechAmor(AbstractTestMechAmor):
def test_build(self):
for zone_name in ZoneNames:
zone = self.mech.inner_structure.zones.get(zone_name)
should_outer_armor = OUTER_ARMOR[zone_name]
self.assertEqual(should_outer_armor, zone.armor)