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)
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)
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)
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)
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)
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)
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)