Esempio n. 1
0
    def test_attacked(self):
        attacked_entity = random_movable_entity()
        attacker_entity = random_movable_entity()
        damage = rd.randint(attacked_entity.hp // 2, attacked_entity.hp)

        hp_left = attacked_entity.attacked(attacker_entity, damage,
                                           DamageKind['PHYSICAL'], [])
        self.assertEqual(hp_left, attacked_entity.hp)
        hp_expected = attacked_entity.hp_max - damage + attacked_entity.defense \
            if hp_left < attacked_entity.hp_max \
            else attacked_entity.hp_max
        self.assertEqual(hp_expected, hp_left)
Esempio n. 2
0
    def test_alteration_boost_defense(self):
        attacked_entity = random_movable_entity()
        attacker_entity = random_movable_entity()
        damage = rd.randint(attacked_entity.hp // 2, attacked_entity.hp)
        boost_alteration = random_alteration(name="defense_up",
                                             effects=["defense_up"])

        attacked_entity.set_alteration(boost_alteration)
        hp_left = attacked_entity.attacked(attacker_entity, damage,
                                           DamageKind['PHYSICAL'], [])
        self.assertEqual(hp_left, attacked_entity.hp)
        hp_expected = attacked_entity.hp_max - damage + attacked_entity.defense + boost_alteration.power \
            if hp_left < attacked_entity.hp_max \
            else attacked_entity.hp_max
        self.assertEqual(hp_expected, hp_left)
Esempio n. 3
0
    def test_different_alterations(self):
        movable_entity = random_movable_entity()
        alteration = random_alteration(name="alt_test")
        alteration_bis = random_alteration(name="alt_test_bis")

        self.assertEqual(0, len(movable_entity.alterations))
        self.assertEqual(
            0, len(movable_entity.get_alterations_effect('alt_test')))
        self.assertEqual(
            0, len(movable_entity.get_alterations_effect('alt_test_bis')))
        movable_entity.set_alteration(alteration)
        self.assertEqual(
            1, len(movable_entity.get_alterations_effect('alt_test')))
        self.assertEqual(
            0, len(movable_entity.get_alterations_effect('alt_test_bis')))
        movable_entity.set_alteration(alteration_bis)
        self.assertEqual(
            1, len(movable_entity.get_alterations_effect('alt_test')))
        self.assertEqual(
            1, len(movable_entity.get_alterations_effect('alt_test_bis')))

        # Test formatted alterations rendering
        self.assertEqual(f"{alteration}, {alteration_bis}",
                         movable_entity.get_formatted_alterations())
        self.assertEqual(
            f"{alteration.abbreviated_name}, {alteration_bis.abbreviated_name}",
            movable_entity.get_abbreviated_alterations())
Esempio n. 4
0
    def test_earn_xp(self):
        movable_entity = random_movable_entity()
        old_lvl = movable_entity.lvl
        earned_xp = rd.randint(1, movable_entity.xp_next_lvl - 1)

        self.assertEqual(0, movable_entity.xp)
        self.assertFalse(movable_entity.earn_xp(earned_xp))
        self.assertEqual(old_lvl, movable_entity.lvl)
        self.assertEqual(earned_xp, movable_entity.xp)
Esempio n. 5
0
    def test_remove_item(self):
        movable_entity = random_movable_entity()
        item = random_item()

        self.assertTrue(movable_entity.has_free_space())
        self.assertEqual(0, len(movable_entity.items))
        self.assertTrue(movable_entity.set_item(item))
        self.assertEqual(item, movable_entity.remove_item(item))
        self.assertEqual(0, len(movable_entity.items))
        self.assertFalse(movable_entity.get_item(0))
Esempio n. 6
0
    def test_stat_down(self):
        movable_entity = random_movable_entity()
        stat = rd.choice(STATS)
        stat_down_alteration = random_alteration(name=stat + "_down",
                                                 effects=[stat + '_down'])

        movable_entity.set_alteration(stat_down_alteration)
        # Test formatted stat change rendering
        self.assertEqual(f' (-{stat_down_alteration.power})',
                         movable_entity.get_formatted_stat_change(stat))
Esempio n. 7
0
    def test_simple_move(self):
        movable_entity = random_movable_entity()

        new_pos = (movable_entity.pos[0] + rd.randint(1, 20),
                   movable_entity.pos[1] + rd.randint(1, 20))
        movable_entity.set_move([new_pos])
        movable_entity.timer = 0
        movable_entity.move()

        self.assertTrue(movable_entity.is_on_pos(new_pos))
Esempio n. 8
0
    def test_lvl_up(self):
        movable_entity = random_movable_entity()
        old_lvl = movable_entity.lvl
        old_xp_required = movable_entity.xp_next_lvl
        earned_xp = old_xp_required

        self.assertEqual(0, movable_entity.xp)
        self.assertTrue(movable_entity.earn_xp(earned_xp))
        self.assertEqual(old_lvl + 1, movable_entity.lvl)
        self.assertEqual(0, movable_entity.xp)
        self.assertTrue(old_xp_required < movable_entity.xp_next_lvl)
    def test_more_than_letal_damage(self):
        destroyable = random_destroyable_entity()
        attacker = random_movable_entity()
        kind = DamageKind.PHYSICAL
        allies = []

        damage = destroyable.hp + destroyable.defense + rd.randint(1, 20)
        returned_hp = destroyable.attacked(attacker, damage, kind, allies)

        self.assertEqual(returned_hp, destroyable.hp)
        self.assertEqual(destroyable.hp, 0)
    def test_negative_damage(self):
        destroyable = random_destroyable_entity()
        attacker = random_movable_entity()
        kind = DamageKind.PHYSICAL
        allies = []

        damage = rd.randint(-10, -1)
        returned_hp = destroyable.attacked(attacker, damage, kind, allies)

        self.assertEqual(returned_hp, destroyable.hp)
        self.assertEqual(destroyable.hp, destroyable.hp_max)
Esempio n. 11
0
    def test_more_xp_than_needed(self):
        movable_entity = random_movable_entity()
        old_lvl = movable_entity.lvl
        old_xp_required = movable_entity.xp_next_lvl
        sup_xp_amount = rd.randint(1, 30)
        earned_xp = old_xp_required + sup_xp_amount

        self.assertEqual(0, movable_entity.xp)
        self.assertTrue(movable_entity.earn_xp(earned_xp))
        self.assertEqual(old_lvl + 1, movable_entity.lvl)
        self.assertEqual(sup_xp_amount, movable_entity.xp)
        self.assertTrue(old_xp_required < movable_entity.xp_next_lvl)
Esempio n. 12
0
    def test_add_multiple_items(self):
        movable_entity = random_movable_entity()
        item = random_item()
        other_item = random_item()

        self.assertTrue(movable_entity.has_free_space())
        self.assertEqual(0, len(movable_entity.items))
        self.assertTrue(movable_entity.set_item(item))
        self.assertTrue(movable_entity.set_item(other_item))
        self.assertEqual(2, len(movable_entity.items))
        self.assertEqual(item, movable_entity.get_item(0))
        self.assertEqual(other_item, movable_entity.get_item(1))
Esempio n. 13
0
    def test_earn_multiple_times_xp(self):
        movable_entity = random_movable_entity()
        old_lvl = movable_entity.lvl
        earned_xp = rd.randint(1, (movable_entity.xp_next_lvl // 2) - 1)
        earned_xp_bis = rd.randint(1, (movable_entity.xp_next_lvl // 2) - 1)

        self.assertEqual(0, movable_entity.xp)
        self.assertFalse(movable_entity.earn_xp(earned_xp))
        self.assertEqual(old_lvl, movable_entity.lvl)
        self.assertEqual(earned_xp, movable_entity.xp)
        self.assertFalse(movable_entity.earn_xp(earned_xp_bis))
        self.assertEqual(old_lvl, movable_entity.lvl)
        self.assertEqual(earned_xp + earned_xp_bis, movable_entity.xp)
Esempio n. 14
0
    def test_new_alteration(self):
        movable_entity = random_movable_entity()
        alteration = random_alteration(name='alt_test')

        self.assertEqual(0, len(movable_entity.alterations))
        self.assertEqual(
            0, len(movable_entity.get_alterations_effect('alt_test')))
        movable_entity.set_alteration(alteration)
        self.assertEqual(1, len(movable_entity.alterations))
        self.assertEqual(
            1, len(movable_entity.get_alterations_effect('alt_test')))
        self.assertEqual(
            0, len(movable_entity.get_alterations_effect(random_string())))
Esempio n. 15
0
    def test_stat_up(self):
        movable_entity = random_movable_entity()
        stat = rd.choice(STATS)
        other_stat = rd.choice(tuple(filter(lambda s: s != stat, STATS)))
        stat_up_alteration = random_alteration(name=stat + "_up",
                                               effects=[stat + '_up'])

        self.assertEqual(0, movable_entity.get_stat_change(stat))
        self.assertEqual(0, movable_entity.get_stat_change(other_stat))
        movable_entity.set_alteration(stat_up_alteration)
        self.assertEqual(stat_up_alteration.power,
                         movable_entity.get_stat_change(stat))
        self.assertEqual(0, movable_entity.get_stat_change(other_stat))

        # Test formatted stat change rendering
        self.assertEqual(f' (+{stat_up_alteration.power})',
                         movable_entity.get_formatted_stat_change(stat))
Esempio n. 16
0
    def test_physical_and_spiritual_damage(self):
        destroyable = random_destroyable_entity(min_hp=30, max_defense=10, max_res=10)
        attacker = random_movable_entity()
        kind = DamageKind.PHYSICAL
        allies = []

        damage = rd.randint(10, 15)
        returned_hp = destroyable.attacked(attacker, damage, kind, allies)

        self.assertEqual(returned_hp, destroyable.hp)
        self.assertEqual(destroyable.hp_max, destroyable.hp + damage - destroyable.defense)

        # Destroyable entity is healed before next attack for simplify test
        destroyable.hp = destroyable.hp_max
        kind = DamageKind.SPIRITUAL
        returned_hp = destroyable.attacked(attacker, damage, kind, allies)

        self.assertEqual(returned_hp, destroyable.hp)
        self.assertEqual(destroyable.hp_max, destroyable.hp + damage - destroyable.res)
Esempio n. 17
0
    def test_end_turn(self):
        movable_entity = random_movable_entity()

        self.assertFalse(movable_entity.turn_is_finished())
        movable_entity.end_turn()
        self.assertTrue(movable_entity.turn_is_finished())