예제 #1
0
class TestHolderMixinChargedCycles(FitTestCase):
    def setUp(self):
        super().setUp()
        self.holder = Module(type_id=None)
        self.holder.item = Mock()
        self.holder.item.attributes = {}
        self.holder.attributes = {}
        self.charge = Charge(type_id=None)
        self.charge.item = Mock()
        self.charge.item.attributes = {}
        self.charge.attributes = {}
        self.holder.charge = self.charge

    def test_ammo_generic(self):
        self.holder.attributes[Attribute.capacity] = 100.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.holder.item.attributes[Attribute.charge_rate] = 1.0
        self.holder.attributes[Attribute.charge_rate] = 2.0
        self.assertEqual(self.holder.fully_charged_cycles, 25)
        self.assertEqual(self.holder.fully_charged_cycles_max, 25)

    def test_ammo_override(self):
        self.holder.attributes[Attribute.capacity] = 100.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.holder.charge_quantity = 40
        self.holder.item.attributes[Attribute.charge_rate] = 1.0
        self.holder.attributes[Attribute.charge_rate] = 2.0
        self.assertEqual(self.holder.fully_charged_cycles, 20)
        self.assertEqual(self.holder.fully_charged_cycles_max, 25)

    def test_ammo_round_down(self):
        self.holder.attributes[Attribute.capacity] = 22.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.holder.item.attributes[Attribute.charge_rate] = 1.0
        self.holder.attributes[Attribute.charge_rate] = 4.0
        self.assertEqual(self.holder.fully_charged_cycles, 2)
        self.assertEqual(self.holder.fully_charged_cycles_max, 2)

    def test_ammo_no_quantity(self):
        self.holder.item.attributes[Attribute.charge_rate] = 1.0
        self.holder.attributes[Attribute.charge_rate] = 4.0
        self.assertIsNone(self.holder.fully_charged_cycles)
        self.assertIsNone(self.holder.fully_charged_cycles_max)

    def test_laser_combat(self):
        self.holder.attributes[Attribute.capacity] = 4.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.charge.attributes[Attribute.crystals_get_damaged] = 1.0
        self.charge.attributes[Attribute.hp] = 2.2
        self.charge.attributes[Attribute.crystal_volatility_chance] = 0.1
        self.charge.attributes[Attribute.crystal_volatility_damage] = 0.01
        self.holder.item.default_effect.id = Effect.target_attack
        self.assertEqual(self.holder.fully_charged_cycles, 4400)
        self.assertEqual(self.holder.fully_charged_cycles_max, 4400)

    def test_laser_mining(self):
        self.holder.attributes[Attribute.capacity] = 4.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.charge.attributes[Attribute.crystals_get_damaged] = 1.0
        self.charge.attributes[Attribute.hp] = 2.2
        self.charge.attributes[Attribute.crystal_volatility_chance] = 0.1
        self.charge.attributes[Attribute.crystal_volatility_damage] = 0.01
        self.holder.item.default_effect.id = Effect.mining_laser
        self.assertEqual(self.holder.fully_charged_cycles, 4400)
        self.assertEqual(self.holder.fully_charged_cycles_max, 4400)

    def test_laser_not_damageable(self):
        self.holder.attributes[Attribute.capacity] = 4.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.charge.attributes[Attribute.hp] = 2.2
        self.charge.attributes[Attribute.crystal_volatility_chance] = 0.1
        self.charge.attributes[Attribute.crystal_volatility_damage] = 0.01
        self.holder.item.default_effect.id = Effect.target_attack
        self.assertIsNone(self.holder.fully_charged_cycles)
        self.assertIsNone(self.holder.fully_charged_cycles_max)

    def test_laser_no_hp(self):
        self.holder.attributes[Attribute.capacity] = 4.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.charge.attributes[Attribute.crystals_get_damaged] = 1.0
        self.charge.attributes[Attribute.crystal_volatility_chance] = 0.1
        self.charge.attributes[Attribute.crystal_volatility_damage] = 0.01
        self.holder.item.default_effect.id = Effect.target_attack
        self.assertIsNone(self.holder.fully_charged_cycles)
        self.assertIsNone(self.holder.fully_charged_cycles_max)

    def test_laser_no_chance(self):
        self.holder.attributes[Attribute.capacity] = 4.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.charge.attributes[Attribute.crystals_get_damaged] = 1.0
        self.charge.attributes[Attribute.hp] = 2.2
        self.charge.attributes[Attribute.crystal_volatility_damage] = 0.01
        self.holder.item.default_effect.id = Effect.target_attack
        self.assertIsNone(self.holder.fully_charged_cycles)
        self.assertIsNone(self.holder.fully_charged_cycles_max)

    def test_laser_no_damage(self):
        self.holder.attributes[Attribute.capacity] = 4.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.charge.attributes[Attribute.crystals_get_damaged] = 1.0
        self.charge.attributes[Attribute.hp] = 2.2
        self.charge.attributes[Attribute.crystal_volatility_chance] = 0.1
        self.holder.item.default_effect.id = Effect.target_attack
        self.assertIsNone(self.holder.fully_charged_cycles)
        self.assertIsNone(self.holder.fully_charged_cycles_max)

    def test_laser_override(self):
        self.holder.attributes[Attribute.capacity] = 4.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.holder.charge_quantity = 3
        self.charge.attributes[Attribute.crystals_get_damaged] = 1.0
        self.charge.attributes[Attribute.hp] = 2.2
        self.charge.attributes[Attribute.crystal_volatility_chance] = 0.1
        self.charge.attributes[Attribute.crystal_volatility_damage] = 0.01
        self.holder.item.default_effect.id = Effect.target_attack
        self.assertEqual(self.holder.fully_charged_cycles, 6600)
        self.assertEqual(self.holder.fully_charged_cycles_max, 4400)

    def test_no_item(self):
        self.holder.attributes[Attribute.capacity] = 100.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.holder.item = None
        self.holder.attributes[Attribute.charge_rate] = 2.0
        self.assertIsNone(self.holder.fully_charged_cycles)
        self.assertIsNone(self.holder.fully_charged_cycles_max)

    def test_no_default_effect(self):
        self.holder.attributes[Attribute.capacity] = 100.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.holder.item.default_effect = None
        self.holder.attributes[Attribute.charge_rate] = 2.0
        self.assertIsNone(self.holder.fully_charged_cycles)
        self.assertIsNone(self.holder.fully_charged_cycles_max)

    def test_cache(self):
        self.holder.attributes[Attribute.capacity] = 100.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.holder.item.attributes[Attribute.charge_rate] = 1.0
        self.holder.attributes[Attribute.charge_rate] = 2.0
        self.assertEqual(self.holder.fully_charged_cycles, 25)
        self.assertEqual(self.holder.fully_charged_cycles_max, 25)
        del self.holder.item.attributes[Attribute.charge_rate]
        del self.holder.attributes[Attribute.charge_rate]
        self.holder.attributes[Attribute.capacity] = 4.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.charge.attributes[Attribute.crystals_get_damaged] = 1.0
        self.charge.attributes[Attribute.hp] = 2.2
        self.charge.attributes[Attribute.crystal_volatility_chance] = 0.1
        self.charge.attributes[Attribute.crystal_volatility_damage] = 0.01
        self.holder.item._effect_ids = (Effect.target_attack, )
        self.assertEqual(self.holder.fully_charged_cycles, 25)
        self.assertEqual(self.holder.fully_charged_cycles_max, 25)

    def test_cache_volatility(self):
        self.holder.attributes[Attribute.capacity] = 100.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.holder.item.attributes[Attribute.charge_rate] = 1.0
        self.holder.attributes[Attribute.charge_rate] = 2.0
        self.assertEqual(self.holder.fully_charged_cycles, 25)
        self.assertEqual(self.holder.fully_charged_cycles_max, 25)
        self.holder._clear_volatile_attrs()
        del self.holder.item.attributes[Attribute.charge_rate]
        del self.holder.attributes[Attribute.charge_rate]
        self.holder.attributes[Attribute.capacity] = 4.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.charge.attributes[Attribute.crystals_get_damaged] = 1.0
        self.charge.attributes[Attribute.hp] = 2.2
        self.charge.attributes[Attribute.crystal_volatility_chance] = 0.1
        self.charge.attributes[Attribute.crystal_volatility_damage] = 0.01
        self.holder.item.default_effect.id = Effect.target_attack
        self.assertEqual(self.holder.fully_charged_cycles, 4400)
        self.assertEqual(self.holder.fully_charged_cycles_max, 4400)
예제 #2
0
class TestHolderMixinChargeQuantity(FitTestCase):
    def setUp(self):
        super().setUp()
        self.holder = Module(type_id=None)
        self.holder.attributes = {}
        self.charge = Charge(type_id=None)
        self.charge.attributes = {}
        self.holder.charge = self.charge

    def make_fit(self, *args, **kwargs):
        fit = super().make_fit(*args, **kwargs)
        fit.container = HolderSet(fit, Module)
        return fit

    def test_generic(self):
        self.holder.attributes[Attribute.capacity] = 20.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.assertEqual(self.holder.charge_quantity_max, 10)
        self.assertEqual(self.holder.charge_quantity, 10)

    def test_float_error(self):
        self.holder.attributes[Attribute.capacity] = 2.3
        self.charge.attributes[Attribute.volume] = 0.1
        self.assertEqual(self.holder.charge_quantity_max, 23)
        self.assertEqual(self.holder.charge_quantity, 23)

    def test_round_down(self):
        self.holder.attributes[Attribute.capacity] = 19.7
        self.charge.attributes[Attribute.volume] = 2.0
        self.assertEqual(self.holder.charge_quantity_max, 9)
        self.assertEqual(self.holder.charge_quantity, 9)

    def test_no_volume(self):
        self.holder.attributes[Attribute.capacity] = 20.0
        self.assertIsNone(self.holder.charge_quantity_max)
        self.assertIsNone(self.holder.charge_quantity)

    def test_no_capacity(self):
        self.charge.attributes[Attribute.volume] = 2.0
        self.assertIsNone(self.holder.charge_quantity_max)
        self.assertIsNone(self.holder.charge_quantity)

    def test_no_charge(self):
        self.holder.attributes[Attribute.capacity] = 20.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.holder.charge = None
        self.assertIsNone(self.holder.charge_quantity_max)
        self.assertIsNone(self.holder.charge_quantity)

    def test_cache(self):
        self.holder.attributes[Attribute.capacity] = 20.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.assertEqual(self.holder.charge_quantity_max, 10)
        self.assertEqual(self.holder.charge_quantity, 10)
        self.holder.attributes[Attribute.capacity] = 200.0
        self.charge.attributes[Attribute.volume] = 1.0
        self.assertEqual(self.holder.charge_quantity_max, 10)
        self.assertEqual(self.holder.charge_quantity, 10)

    def test_volatility(self):
        self.holder.attributes[Attribute.capacity] = 20.0
        self.charge.attributes[Attribute.volume] = 2.0
        self.assertEqual(self.holder.charge_quantity_max, 10)
        self.assertEqual(self.holder.charge_quantity, 10)
        self.holder._clear_volatile_attrs()
        self.holder.attributes[Attribute.capacity] = 200.0
        self.charge.attributes[Attribute.volume] = 1.0
        self.assertEqual(self.holder.charge_quantity_max, 200)
        self.assertEqual(self.holder.charge_quantity, 200)

    def test_override_set_int(self):
        source = Mock(spec_set=Source)
        fit = self.make_fit(source=source)
        holder = self.holder
        charge = self.charge
        holder._clear_volatile_attrs = Mock()
        charge._clear_volatile_attrs = Mock()
        fit.container.add(holder)
        holder.attributes[Attribute.capacity] = 20.0
        charge.attributes[Attribute.volume] = 2.0
        self.assertEqual(holder.charge_quantity_max, 10)
        self.assertEqual(holder.charge_quantity, 10)
        st_cleans_before = len(fit.stats._clear_volatile_attrs.mock_calls)
        holder_cleans_before = len(holder._clear_volatile_attrs.mock_calls)
        charge_cleans_before = len(charge._clear_volatile_attrs.mock_calls)
        holder.charge_quantity = 26
        st_cleans_after = len(fit.stats._clear_volatile_attrs.mock_calls)
        holder_cleans_after = len(holder._clear_volatile_attrs.mock_calls)
        charge_cleans_after = len(charge._clear_volatile_attrs.mock_calls)
        self.assertEqual(st_cleans_after - st_cleans_before, 1)
        self.assertEqual(holder_cleans_after - holder_cleans_before, 1)
        self.assertEqual(charge_cleans_after - charge_cleans_before, 1)
        self.assertEqual(holder.charge_quantity_max, 10)
        self.assertEqual(holder.charge_quantity, 26)

    def test_override_set_other(self):
        source = Mock(spec_set=Source)
        fit = self.make_fit(source=source)
        holder = self.holder
        charge = self.charge
        holder._clear_volatile_attrs = Mock()
        charge._clear_volatile_attrs = Mock()
        fit.container.add(holder)
        holder.attributes[Attribute.capacity] = 20.0
        charge.attributes[Attribute.volume] = 2.0
        self.assertEqual(holder.charge_quantity_max, 10)
        self.assertEqual(holder.charge_quantity, 10)
        st_cleans_before = len(fit.stats._clear_volatile_attrs.mock_calls)
        holder_cleans_before = len(holder._clear_volatile_attrs.mock_calls)
        charge_cleans_before = len(charge._clear_volatile_attrs.mock_calls)
        self.assertRaises(TypeError, holder.__setattr__, 'charge_quantity',
                          26.0)
        st_cleans_after = len(fit.stats._clear_volatile_attrs.mock_calls)
        holder_cleans_after = len(holder._clear_volatile_attrs.mock_calls)
        charge_cleans_after = len(charge._clear_volatile_attrs.mock_calls)
        self.assertEqual(st_cleans_after - st_cleans_before, 0)
        self.assertEqual(holder_cleans_after - holder_cleans_before, 0)
        self.assertEqual(charge_cleans_after - charge_cleans_before, 0)
        self.assertEqual(holder.charge_quantity_max, 10)
        self.assertEqual(holder.charge_quantity, 10)

    def test_override_del(self):
        source = Mock(spec_set=Source)
        fit = self.make_fit(source=source)
        holder = self.holder
        charge = self.charge
        holder._clear_volatile_attrs = Mock()
        charge._clear_volatile_attrs = Mock()
        fit.container.add(holder)
        holder.attributes[Attribute.capacity] = 20.0
        charge.attributes[Attribute.volume] = 2.0
        holder.charge_quantity = 26
        st_cleans_before = len(fit.stats._clear_volatile_attrs.mock_calls)
        holder_cleans_before = len(holder._clear_volatile_attrs.mock_calls)
        charge_cleans_before = len(charge._clear_volatile_attrs.mock_calls)
        del holder.charge_quantity
        st_cleans_after = len(fit.stats._clear_volatile_attrs.mock_calls)
        holder_cleans_after = len(holder._clear_volatile_attrs.mock_calls)
        charge_cleans_after = len(charge._clear_volatile_attrs.mock_calls)
        self.assertEqual(st_cleans_after - st_cleans_before, 1)
        self.assertEqual(holder_cleans_after - holder_cleans_before, 1)
        self.assertEqual(charge_cleans_after - charge_cleans_before, 1)
        self.assertEqual(holder.charge_quantity_max, 10)
        self.assertEqual(holder.charge_quantity, 10)