Files
BattleTech/tests/test_mech_process.py
T

160 lines
6.8 KiB
Python
Executable File

from events import CriticalStrikeEvent, StrikeEvent
from mech_factory.component_storage.items import BigItem, DurableItem, Item, ItemStatus, ItemTypes
from test_mech import AbstractTestMechAmor, INNER_ARMOR, NEXT_OUTER_ZONE, OUTER_ARMOR
from mech_factory.component_storage import Area, AreaStatus, OuterAmor, ZoneNames
class TestMechAmor(AbstractTestMechAmor):
def test_process(self):
self.mech = self.factory.auslieferung()
for zone_name in ZoneNames:
with self.subTest(msg=zone_name.value):
zone = self.mech.inner_structure.zones.get(zone_name)
area = zone.area
start_outer_armor = OUTER_ARMOR[zone_name]
start_inner_armor = INNER_ARMOR[NEXT_OUTER_ZONE[zone_name]]
self.assertEqual(start_outer_armor, zone.armor)
self.assertEqual(area, zone.parent)
self.assertEqual(start_inner_armor, area.armor)
self.assertEqual(AreaStatus.FINE, zone.state)
self.assertEqual(AreaStatus.FINE, area.state)
event = self.mech.strike(zone_name, 10)
self.assertEqual(start_outer_armor, zone.armor)
self.assertEqual(start_inner_armor, area.armor)
self.assertEqual(AreaStatus.FINE, zone.state)
self.assertEqual(AreaStatus.FINE, area.state)
self.assertIsInstance(event, StrikeEvent)
self.assertEqual(zone, event.zone)
self.assertEqual(10, event.hits)
self.assertEqual(area, event.zone.parent)
def test_critical_process(self):
self.mech = self.factory.auslieferung()
for zone_name in ZoneNames:
with self.subTest(msg=zone_name.value):
zone = self.mech.inner_structure.zones.get(zone_name)
area = zone.area
event = self.mech.critical_strike(zone_name, (1, 2))
self.assertIsInstance(event, CriticalStrikeEvent)
self.assertEqual(area, event.area)
self.assertIsNone(event.is_empty())
def test_strike(self):
start_outer_armor = 11
start_area_armor = 5
start_parent_armor = 3
parent = Area()
parent.armor = start_parent_armor
area = Area()
area.armor = start_area_armor
area.parent = parent
zone = OuterAmor(area)
zone.armor = start_outer_armor
self.assertEqual(start_outer_armor, zone.armor)
self.assertEqual(start_area_armor, area.armor)
self.assertEqual(AreaStatus.FINE, zone.state)
self.assertEqual(AreaStatus.FINE, area.state)
event = StrikeEvent(zone, start_outer_armor - 3).process_event()
self.assertEqual(3, zone.armor)
self.assertEqual(start_area_armor, area.armor)
self.assertEqual(AreaStatus.DAMAGED, zone.state)
self.assertEqual(AreaStatus.FINE, area.state)
self.assertIsInstance(event, StrikeEvent)
self.assertEqual(zone, event.zone)
self.assertEqual(0, event.hits)
event = StrikeEvent(zone, 4).process_event()
self.assertEqual(0, zone.armor)
self.assertEqual(start_area_armor - 1, area.armor)
self.assertEqual(AreaStatus.DESTROYED, zone.state)
self.assertEqual(AreaStatus.DAMAGED, area.state)
self.assertIsInstance(event, StrikeEvent)
self.assertEqual(area, event.zone)
self.assertEqual(0, event.hits)
event = StrikeEvent(zone, start_area_armor - 1).process_event()
self.assertEqual(0, zone.armor)
self.assertEqual(0, area.armor)
self.assertEqual(AreaStatus.DESTROYED, zone.state)
self.assertEqual(AreaStatus.DESTROYED, area.state)
self.assertIsInstance(event, StrikeEvent)
self.assertEqual(area, event.zone)
self.assertEqual(0, event.hits)
event = StrikeEvent(zone, 1).process_event()
self.assertEqual(0, zone.armor)
self.assertEqual(0, area.armor)
self.assertEqual(AreaStatus.DESTROYED, zone.state)
self.assertEqual(AreaStatus.DESTROYED, area.state)
self.assertIsInstance(event, StrikeEvent)
self.assertNotEqual(area, event.zone)
self.assertEqual(area.parent, event.zone)
self.assertEqual(0, event.hits)
# noinspection PyUnresolvedReferences
def test_critical_strike(self):
parent = Area()
area = Area()
area.parent = parent
big_item_01 = BigItem(ItemTypes.SUSTAINMENT, 5.0)
item_01 = Item(ItemTypes.SUSTAINMENT)
durable_item_01 = DurableItem(ItemTypes.SUSTAINMENT, 3)
area.items = {
(1, 1): big_item_01,
(1, 2): durable_item_01,
(1, 3): durable_item_01,
(1, 4): None,
(1, 5): item_01,
(1, 6): None,
}
zone = OuterAmor(area)
event = CriticalStrikeEvent(zone, (1, 1)).process_event()
self.assertEqual(AreaStatus.DAMAGED, zone.state)
self.assertEqual(AreaStatus.DAMAGED, area.state)
self.assertIsInstance(event, CriticalStrikeEvent)
self.assertFalse(event.is_empty())
self.assertEqual(area, event.area)
self.assertEqual(ItemStatus.DESTROYED, area.items[(1, 1)].state)
event = CriticalStrikeEvent(zone, (1, 5)).process_event()
self.assertEqual(AreaStatus.DAMAGED, zone.state)
self.assertEqual(AreaStatus.DAMAGED, area.state)
self.assertIsInstance(event, CriticalStrikeEvent)
self.assertFalse(event.is_empty())
self.assertEqual(area, event.area)
self.assertEqual(ItemStatus.DESTROYED, area.items[(1, 5)].state)
event = CriticalStrikeEvent(zone, (1, 2)).process_event()
self.assertIsInstance(event, CriticalStrikeEvent)
self.assertFalse(event.is_empty())
self.assertEqual(area, event.area)
self.assertEqual(ItemStatus.DAMAGED, area.items[(1, 2)].state)
self.assertEqual(ItemStatus.DAMAGED, area.items[(1, 3)].state)
event = CriticalStrikeEvent(zone, (1, 3)).process_event()
self.assertIsInstance(event, CriticalStrikeEvent)
self.assertFalse(event.is_empty())
self.assertEqual(area, event.area)
self.assertEqual(ItemStatus.DAMAGED, area.items[(1, 2)].state)
self.assertEqual(ItemStatus.DAMAGED, area.items[(1, 3)].state)
event = CriticalStrikeEvent(zone, (1, 2)).process_event()
self.assertIsInstance(event, CriticalStrikeEvent)
self.assertFalse(event.is_empty())
self.assertEqual(area, event.area)
self.assertEqual(ItemStatus.DESTROYED, area.items[(1, 2)].state)
self.assertEqual(ItemStatus.DESTROYED, area.items[(1, 5)].state)
event = CriticalStrikeEvent(zone, (1, 4)).process_event()
self.assertIsInstance(event, CriticalStrikeEvent)
self.assertTrue(event.is_empty())
self.assertEqual(area, event.area)