示例#1
0
 def test_mix_usage_zero(self):
     # If some item has zero usage and drone bandwidth error is still raised,
     # check it's not raised for item with zero usage
     self.fit.ship = Ship(
         self.mktype(attrs={
             AttrId.drone_bandwidth: 50
         }).id)
     item1 = Drone(self.mktype(attrs={
         AttrId.drone_bandwidth_used: 100
     }).id,
                   state=State.online)
     self.fit.drones.add(item1)
     item2 = Drone(self.mktype(attrs={
         AttrId.drone_bandwidth_used: 0
     }).id,
                   state=State.online)
     self.fit.drones.add(item2)
     # Action
     error1 = self.get_error(item1, Restriction.drone_bandwidth)
     # Verification
     self.assertIsNotNone(error1)
     self.assertEqual(error1.output, 50)
     self.assertEqual(error1.total_use, 100)
     self.assertEqual(error1.item_use, 100)
     # Action
     error2 = self.get_error(item2, Restriction.drone_bandwidth)
     # Verification
     self.assertIsNone(error2)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#2
0
 def test_fail_multiple(self):
     # When multiple consumers require less than drone bandwidth output
     # alone, but in sum want more than total output, it should be erroneous
     # situation
     self.fit.ship = Ship(
         self.mktype(attrs={
             AttrId.drone_bandwidth: 40
         }).id)
     item1 = Drone(self.mktype(attrs={
         AttrId.drone_bandwidth_used: 25
     }).id,
                   state=State.online)
     self.fit.drones.add(item1)
     item2 = Drone(self.mktype(attrs={
         AttrId.drone_bandwidth_used: 20
     }).id,
                   state=State.online)
     self.fit.drones.add(item2)
     # Action
     error1 = self.get_error(item1, Restriction.drone_bandwidth)
     # Verification
     self.assertIsNotNone(error1)
     self.assertEqual(error1.output, 40)
     self.assertEqual(error1.total_use, 45)
     self.assertEqual(error1.item_use, 25)
     # Action
     error2 = self.get_error(item2, Restriction.drone_bandwidth)
     # Verification
     self.assertIsNotNone(error2)
     self.assertEqual(error2.output, 40)
     self.assertEqual(error2.total_use, 45)
     self.assertEqual(error2.item_use, 20)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#3
0
 def test_pass(self):
     # When total consumption is less than output, no errors should be raised
     self.fit.ship = Ship(
         self.mktype(attrs={
             AttrId.drone_bandwidth: 50
         }).id)
     item1 = Drone(self.mktype(attrs={
         AttrId.drone_bandwidth_used: 25
     }).id,
                   state=State.online)
     self.fit.drones.add(item1)
     item2 = Drone(self.mktype(attrs={
         AttrId.drone_bandwidth_used: 20
     }).id,
                   state=State.online)
     self.fit.drones.add(item2)
     # Action
     error1 = self.get_error(item1, Restriction.drone_bandwidth)
     # Verification
     self.assertIsNone(error1)
     # Action
     error2 = self.get_error(item2, Restriction.drone_bandwidth)
     # Verification
     self.assertIsNone(error2)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#4
0
 def test_effect_disabled(self):
     fit = Fit()
     item = Drone(self.mktype(attrs={
         AttrId.dmg_mult: 2.5,
         AttrId.em_dmg: 52,
         AttrId.therm_dmg: 63,
         AttrId.kin_dmg: 74,
         AttrId.expl_dmg: 85,
         self.cycle_attr.id: 4000
     },
                              effects=[self.effect],
                              default_effect=self.effect).id,
                  state=State.active)
     item.set_effect_mode(self.effect.id, EffectMode.force_stop)
     fit.drones.add(item)
     # Verification
     volley = item.get_volley()
     self.assertAlmostEqual(volley.em, 0)
     self.assertAlmostEqual(volley.thermal, 0)
     self.assertAlmostEqual(volley.kinetic, 0)
     self.assertAlmostEqual(volley.explosive, 0)
     self.assertAlmostEqual(volley.total, 0)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
示例#5
0
文件: test_dps.py 项目: DarkFenX/eos
 def test_reload(self):
     fit = Fit()
     item = Drone(
         self.mktype(
             attrs={
                 AttrId.dmg_mult: 2.5,
                 AttrId.em_dmg: 52,
                 AttrId.therm_dmg: 63,
                 AttrId.kin_dmg: 74,
                 AttrId.expl_dmg: 85,
                 self.cycle_attr.id: 4000},
             effects=[self.effect],
             default_effect=self.effect).id,
         state=State.active)
     fit.drones.add(item)
     # Verification
     dps = item.get_dps(reload=True)
     self.assertAlmostEqual(dps.em, 32.5)
     self.assertAlmostEqual(dps.thermal, 39.375)
     self.assertAlmostEqual(dps.kinetic, 46.25)
     self.assertAlmostEqual(dps.explosive, 53.125)
     self.assertAlmostEqual(dps.total, 171.25)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
示例#6
0
 def test_generic(self):
     fit = Fit()
     item = Drone(
         self.mktype(
             attrs={
                 AttrId.dmg_mult: 2.5,
                 AttrId.em_dmg: 52,
                 AttrId.therm_dmg: 63,
                 AttrId.kin_dmg: 74,
                 AttrId.expl_dmg: 85,
                 self.cycle_attr.id: 4000},
             effects=[self.effect],
             default_effect=self.effect).id,
         state=State.active)
     fit.drones.add(item)
     # Verification
     volley = item.get_volley()
     self.assertAlmostEqual(volley.em, 130)
     self.assertAlmostEqual(volley.thermal, 157.5)
     self.assertAlmostEqual(volley.kinetic, 185)
     self.assertAlmostEqual(volley.explosive, 212.5)
     self.assertAlmostEqual(volley.total, 685)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
示例#7
0
 def test_use_multiple(self):
     self.fit.drones.add(Drone(self.mktype(attrs={AttrId.volume: 50}).id))
     self.fit.drones.add(Drone(self.mktype(attrs={AttrId.volume: 30}).id))
     # Verification
     self.assertAlmostEqual(self.fit.stats.dronebay.used, 80)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#8
0
 def test_use_multiple(self):
     self.fit.drones.add(Drone(self.mktype().id, state=State.online))
     self.fit.drones.add(Drone(self.mktype().id, state=State.online))
     # Verification
     self.assertEqual(self.fit.stats.launched_drones.used, 2)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#9
0
 def test_fail_modified(self):
     # Make sure modified drone bandwidth values are taken
     self.fit.ship = Ship(
         self.mktype(attrs={
             AttrId.drone_bandwidth: 50
         }).id)
     src_attr = self.mkattr()
     modifier = self.mkmod(affectee_filter=ModAffecteeFilter.item,
                           affectee_domain=ModDomain.self,
                           affectee_attr_id=AttrId.drone_bandwidth_used,
                           operator=ModOperator.post_mul,
                           affector_attr_id=src_attr.id)
     effect = self.mkeffect(category_id=EffectCategoryId.passive,
                            modifiers=[modifier])
     item = Drone(self.mktype(attrs={
         AttrId.drone_bandwidth_used: 50,
         src_attr.id: 2
     },
                              effects=[effect]).id,
                  state=State.online)
     self.fit.drones.add(item)
     # Action
     error = self.get_error(item, Restriction.drone_bandwidth)
     # Verification
     self.assertIsNotNone(error)
     self.assertEqual(error.output, 50)
     self.assertEqual(error.total_use, 100)
     self.assertEqual(error.item_use, 100)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#10
0
 def test_no_effect(self):
     tgt_attr = self.mkattr()
     src_attr = self.mkattr()
     modifier = self.mkmod(affectee_filter=ModAffecteeFilter.owner_skillrq,
                           affectee_domain=ModDomain.target,
                           affectee_filter_extra_arg=56,
                           affectee_attr_id=tgt_attr.id,
                           operator=ModOperator.post_percent,
                           affector_attr_id=src_attr.id)
     effect = self.mkeffect(category_id=EffectCategoryId.passive,
                            modifiers=[modifier])
     influence_src = Implant(
         self.mktype(attrs={
             src_attr.id: 20
         }, effects=[effect]).id)
     influence_tgt = Drone(
         self.mktype(
             attrs={
                 tgt_attr.id: 100,
                 AttrId.required_skill_1: 56,
                 AttrId.required_skill_1_level: 1
             }).id)
     self.fit.drones.add(influence_tgt)
     # Action
     self.fit.implants.add(influence_src)
     # Verification
     self.assertAlmostEqual(influence_tgt.attrs[tgt_attr.id], 100)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#11
0
 def test_use_item_not_loaded(self):
     self.fit.drones.add(Drone(self.allocate_type_id(), state=State.online))
     # Verification
     self.assertEqual(self.fit.stats.launched_drones.used, 1)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#12
0
 def test_use_item_class_other(self):
     self.fit.drones.add(Drone(self.mktype().id))
     # Verification
     self.assertEqual(self.fit.stats.fighter_squads.used, 0)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#13
0
 def test_use_multiple(self):
     self.fit.drones.add(
         Drone(self.mktype(attrs={
             AttrId.drone_bandwidth_used: 50
         }).id,
               state=State.online))
     self.fit.drones.add(
         Drone(self.mktype(attrs={
             AttrId.drone_bandwidth_used: 30
         }).id,
               state=State.online))
     # Verification
     self.assertAlmostEqual(self.fit.stats.drone_bandwidth.used, 80)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#14
0
 def test_use_item_not_loaded(self):
     self.fit.drones.add(Drone(self.allocate_type_id()))
     # Verification
     self.assertAlmostEqual(self.fit.stats.dronebay.used, 0)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#15
0
 def test_pass_item_class_other(self):
     item_type = self.mktype(group_id=12,
                             attrs={AttrId.max_group_fitted: 1})
     item1 = Drone(item_type.id)
     self.fit.drones.add(item1)
     item2 = Drone(item_type.id)
     self.fit.drones.add(item2)
     # Action
     error1 = self.get_error(item1, Restriction.max_group_fitted)
     # Verification
     self.assertIsNone(error1)
     # Action
     error2 = self.get_error(item2, Restriction.max_group_fitted)
     # Verification
     self.assertIsNone(error2)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#16
0
 def test_drone_fail_not_loaded(self):
     item = Drone(self.allocate_type_id())
     self.fit.drones.add(item)
     # Action
     error = self.get_error(item, Restriction.loaded_item)
     # Verification
     self.assertIsNotNone(error)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#17
0
 def test_use_single_no_rounding(self):
     self.fit.drones.add(
         Drone(self.mktype(attrs={
             AttrId.volume: 55.5555555555
         }).id))
     # Verification
     self.assertAlmostEqual(self.fit.stats.dronebay.used, 55.5555555555)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#18
0
 def test_pass_greater(self):
     self.fit.character = Character(self.mktype(
         attrs={AttrId.max_active_drones: 5}).id)
     item_type = self.mktype()
     item1 = Drone(item_type.id, state=State.online)
     item2 = Drone(item_type.id, state=State.online)
     self.fit.drones.add(item1)
     self.fit.drones.add(item2)
     # Action
     error1 = self.get_error(item1, Restriction.launched_drone)
     # Verification
     self.assertIsNone(error1)
     # Action
     error2 = self.get_error(item2, Restriction.launched_drone)
     # Verification
     self.assertIsNone(error2)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#19
0
 def test_drone_pass_loaded(self):
     item = Drone(self.mktype().id)
     self.fit.drones.add(item)
     # Action
     error = self.get_error(item, Restriction.loaded_item)
     # Verification
     self.assertIsNone(error)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#20
0
 def test_drone_pass(self):
     item = Drone(self.mktype(category_id=TypeCategoryId.drone).id)
     self.fit.drones.add(item)
     # Action
     error = self.get_error(item, Restriction.item_class)
     # Verification
     self.assertIsNone(error)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#21
0
 def test_drone(self):
     drone = Drone(self.make_item_types())
     self.fit.drones.add(drone)
     self.assertAlmostEqual(drone.attrs[self.tgt_attr_id], 18)
     # Action
     self.fit.solar_system.source = 'src2'
     # Verification
     self.assertAlmostEqual(drone.attrs[self.tgt_attr_id], 14)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#22
0
 def test_pass_item_not_loaded(self):
     self.fit.ship = Ship(self.mktype(attrs={AttrId.drone_bandwidth: 0}).id)
     item = Drone(self.allocate_type_id(), state=State.online)
     self.fit.drones.add(item)
     # Action
     error = self.get_error(item, Restriction.drone_bandwidth)
     # Verification
     self.assertIsNone(error)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#23
0
 def test_pass_ship_absent(self):
     # Check that restriction isn't applied when fit doesn't have ship
     item = Drone(self.mktype(group_id=None).id)
     self.fit.drones.add(item)
     # Action
     error = self.get_error(item, Restriction.drone_group)
     # Verification
     self.assertIsNone(error)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#24
0
 def test_pass_ship_not_loaded(self):
     self.fit.ship = Ship(self.allocate_type_id())
     item = Drone(self.mktype(group_id=56).id)
     self.fit.drones.add(item)
     # Action
     error = self.get_error(item, Restriction.drone_group)
     # Verification
     self.assertIsNone(error)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#25
0
 def test_use_single_no_rounding(self):
     self.fit.drones.add(
         Drone(self.mktype(attrs={
             AttrId.drone_bandwidth_used: 55.5555555555
         }).id,
               state=State.online))
     # Verification
     self.assertAlmostEqual(self.fit.stats.drone_bandwidth.used,
                            55.5555555555)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#26
0
 def test_pass_state(self):
     self.fit.character = Character(self.mktype(
         attrs={AttrId.max_active_drones: 0}).id)
     item = Drone(self.mktype().id, state=State.offline)
     self.fit.drones.add(item)
     # Action
     error = self.get_error(item, Restriction.launched_drone)
     # Verification
     self.assertIsNone(error)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#27
0
 def test_drone_fail_category_other(self):
     item = Drone(self.mktype(category_id=1008).id)
     self.fit.drones.add(item)
     # Action
     error = self.get_error(item, Restriction.item_class)
     # Verification
     self.assertIsNotNone(error)
     self.assertEqual(error.item_class, Drone)
     self.assertCountEqual(error.allowed_classes, [])
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#28
0
 def test_fail_char_not_loaded(self):
     self.fit.character = Character(self.allocate_type_id())
     item = Drone(self.mktype().id, state=State.online)
     self.fit.drones.add(item)
     # Action
     error = self.get_error(item, Restriction.launched_drone)
     # Verification
     self.assertIsNotNone(error)
     self.assertEqual(error.used, 1)
     self.assertEqual(error.total, 0)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#29
0
 def test_domain_other(self):
     influence_tgt = Drone(
         self.mktype(group_id=35, attrs={
             self.tgt_attr.id: 100
         }).id)
     self.fit.drones.add(influence_tgt)
     # Action
     self.fit.rigs.add(self.influence_src)
     # Verification
     self.assertAlmostEqual(influence_tgt.attrs[self.tgt_attr.id], 100)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#30
0
 def test_skill_other(self):
     influence_tgt = Drone(self.mktype(attrs={
         self.tgt_attr.id: 100,
         AttrId.required_skill_1: 87,
         AttrId.required_skill_1_level: 1}).id)
     self.fit.drones.add(influence_tgt)
     # Action
     self.fit.rigs.add(self.influence_src)
     # Verification
     self.assertAlmostEqual(influence_tgt.attrs[self.tgt_attr.id], 100)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
示例#31
0
 def test_attr_therm_absent(self):
     fit = Fit()
     item = Drone(self.mktype(attrs={
         AttrId.dmg_mult: 2.5,
         AttrId.em_dmg: 52,
         AttrId.kin_dmg: 74,
         AttrId.expl_dmg: 85,
         self.cycle_attr.id: 4000
     },
                              effects=[self.effect],
                              default_effect=self.effect).id,
                  state=State.active)
     fit.drones.add(item)
     # Verification
     volley = item.get_volley()
     self.assertAlmostEqual(volley.em, 130)
     self.assertAlmostEqual(volley.thermal, 0)
     self.assertAlmostEqual(volley.kinetic, 185)
     self.assertAlmostEqual(volley.explosive, 212.5)
     self.assertAlmostEqual(volley.total, 527.5)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
示例#32
0
 def test_fail_ship_attr_absent(self):
     self.fit.ship = Ship(self.mktype().id)
     item = Drone(self.mktype(attrs={AttrId.volume: 50}).id)
     self.fit.drones.add(item)
     # Action
     error = self.get_error(item, Restriction.dronebay_volume)
     # Verification
     self.assertIsNotNone(error)
     self.assertEqual(error.output, 0)
     self.assertEqual(error.total_use, 50)
     self.assertEqual(error.item_use, 50)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)