예제 #1
0
 def test_tgt_recalc_attr_change(self):
     # Here dogma modifier changes value of one of attributes which are used
     # as source by python modifier, and sees if python modifier target value
     # is updated
     attr4 = self.mkattr()
     dogma_modifier = self.mkmod(affectee_filter=ModAffecteeFilter.item,
                                 affectee_domain=ModDomain.self,
                                 affectee_attr_id=self.attr2.id,
                                 operator=ModOperator.post_mul,
                                 affector_attr_id=attr4.id)
     dogma_effect = self.mkeffect(category_id=EffectCategoryId.active,
                                  modifiers=[dogma_modifier])
     item = ModuleHigh(
         self.mktype(attrs={
             self.attr1.id: 100,
             self.attr2.id: 2,
             attr4.id: 5
         },
                     effects=(self.python_effect, self.online_effect,
                              dogma_effect),
                     default_effect=dogma_effect).id)
     self.fit.modules.high.append(item)
     item.state = State.online
     self.assertAlmostEqual(item.attrs[self.attr1.id], 600)
     # Action
     item.state = State.active
     # Verification
     self.assertAlmostEqual(item.attrs[self.attr1.id], 3000)
     # Cleanup
     self.fit.ship = None
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #2
0
 def test_unsubscription(self):
     # Make sure that when python modifier unsubscribes from message type
     # needed by calculator, calculator still receives that message type
     dogma_modifier1 = self.mkmod(affectee_filter=ModAffecteeFilter.item,
                                  affectee_domain=ModDomain.self,
                                  affectee_attr_id=self.attr1.id,
                                  operator=ModOperator.post_mul,
                                  affector_attr_id=self.attr2.id)
     dogma_effect1 = self.mkeffect(category_id=EffectCategoryId.passive,
                                   modifiers=[dogma_modifier1])
     dogma_modifier2 = self.mkmod(affectee_filter=ModAffecteeFilter.item,
                                  affectee_domain=ModDomain.self,
                                  affectee_attr_id=self.attr2.id,
                                  operator=ModOperator.post_mul,
                                  affector_attr_id=self.attr3.id)
     dogma_effect2 = self.mkeffect(category_id=EffectCategoryId.online,
                                   modifiers=[dogma_modifier2])
     python_item = ModuleHigh(
         self.mktype(attrs={
             self.attr1.id: 100,
             self.attr2.id: 2
         },
                     effects=(self.python_effect, self.online_effect)).id)
     dogma_item = ModuleHigh(
         self.mktype(attrs={
             self.attr1.id: 100,
             self.attr2.id: 2,
             self.attr3.id: 3
         },
                     effects=(dogma_effect1, dogma_effect2,
                              self.online_effect)).id)
     self.fit.modules.high.append(python_item)
     self.assertAlmostEqual(python_item.attrs[self.attr1.id], 100)
     python_item.state = State.online
     self.assertAlmostEqual(python_item.attrs[self.attr1.id], 600)
     # Here modifier is unsubscribed from attribute change events
     self.fit.modules.high.remove(python_item)
     self.fit.modules.high.append(dogma_item)
     self.assertAlmostEqual(dogma_item.attrs[self.attr1.id], 200)
     # Action
     dogma_item.state = State.online
     # Verification
     # If value is updated, then calculator service received attribute
     # updated message
     self.assertAlmostEqual(dogma_item.attrs[self.attr1.id], 600)
     # Cleanup
     self.fit.ship = None
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #3
0
 def test_disabling(self):
     item = ModuleHigh(
         self.mktype(attrs={
             self.attr1.id: 100,
             self.attr2.id: 2
         },
                     effects=(self.python_effect, self.online_effect)).id)
     self.fit.modules.high.append(item)
     item.state = State.online
     self.assertAlmostEqual(item.attrs[self.attr1.id], 600)
     # Action
     item.state = State.offline
     # Verification
     self.assertAlmostEqual(item.attrs[self.attr1.id], 100)
     # Cleanup
     self.fit.ship = None
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #4
0
 def test_stopped_on_state_switch(self):
     effect = self.mkeffect(
         category_id=EffectCategoryId.overload,
         modifiers=[self.modifier])
     item = ModuleHigh(
         self.mktype(
             attrs={self.tgt_attr.id: 10, self.src_attr.id: 2},
             effects=[effect]).id,
         state=State.active)
     item.set_effect_mode(effect.id, EffectMode.force_stop)
     self.fit.modules.high.append(item)
     self.assertAlmostEqual(item.attrs[self.tgt_attr.id], 10)
     # Action
     item.state = State.overload
     # Verification
     self.assertAlmostEqual(item.attrs[self.tgt_attr.id], 10)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #5
0
 def test_started_on_state_switch(self):
     effect = self.mkeffect(category_id=EffectCategoryId.overload,
                            modifiers=[self.modifier])
     item = ModuleHigh(self.mktype(attrs={
         self.tgt_attr.id: 10,
         self.src_attr.id: 2
     },
                                   effects=[effect]).id,
                       state=State.active)
     item.set_effect_mode(effect.id, EffectMode.force_run)
     self.fit.modules.high.append(item)
     self.assertAlmostEqual(item.attrs[self.tgt_attr.id], 12)
     # Action
     item.state = State.overload
     # Verification
     self.assertAlmostEqual(item.attrs[self.tgt_attr.id], 12)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #6
0
파일: test_active.py 프로젝트: pyfa-org/eos
 def test_stopped_insufficient_state_on_state_switch(self):
     effect = self.mkeffect(category_id=EffectCategoryId.active,
                            modifiers=[self.modifier])
     item = ModuleHigh(self.mktype(attrs={
         self.tgt_attr.id: 10,
         self.src_attr.id: 2
     },
                                   effects=[effect],
                                   default_effect=effect).id,
                       state=State.active)
     item.set_effect_mode(effect.id, EffectMode.state_compliance)
     self.fit.modules.high.append(item)
     self.assertAlmostEqual(item.attrs[self.tgt_attr.id], 12)
     # Action
     item.state = State.online
     # Verification
     self.assertAlmostEqual(item.attrs[self.tgt_attr.id], 10)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #7
0
파일: test_online.py 프로젝트: DarkFenX/eos
 def test_started_on_state_switch(self):
     effect = self.mkeffect(
         category_id=EffectCategoryId.online,
         modifiers=[self.modifier])
     online_effect = self.mkeffect(
         effect_id=EffectId.online,
         category_id=EffectCategoryId.online)
     item = ModuleHigh(
         self.mktype(
             attrs={self.tgt_attr.id: 10, self.src_attr.id: 2},
             effects=[effect, online_effect]).id,
         state=State.offline)
     item.set_effect_mode(effect.id, EffectMode.state_compliance)
     self.fit.modules.high.append(item)
     self.assertAlmostEqual(item.attrs[self.tgt_attr.id], 10)
     # Action
     item.state = State.online
     # Verification
     self.assertAlmostEqual(item.attrs[self.tgt_attr.id], 12)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)