game/test/character_test.dart

144 lines
3.8 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:game_test/game/model/entity.dart';
import 'package:game_test/game/model/item.dart';
import 'package:game_test/game/enums.dart';
void main() {
group('Character Equipment & HP Logic', () {
late Character player;
late Item armorHp50;
late Item armorHp100;
late Item armorHp20;
setUp(() {
player = Character(name: "TestPlayer", maxHp: 100, armor: 0, atk: 10);
armorHp50 = Item(
id: "armor_hp_50",
name: "Armor +50",
description: "HP +50",
atkBonus: 0,
hpBonus: 50,
slot: EquipmentSlot.armor,
price: 100,
);
armorHp100 = Item(
id: "armor_hp_100",
name: "Armor +100",
description: "HP +100",
atkBonus: 0,
hpBonus: 100,
slot: EquipmentSlot.armor,
price: 200,
);
armorHp20 = Item(
id: "armor_hp_20",
name: "Armor +20",
description: "HP +20",
atkBonus: 0,
hpBonus: 20,
slot: EquipmentSlot.armor,
price: 50,
);
// Add items to inventory initially
player.addToInventory(armorHp50);
player.addToInventory(armorHp100);
player.addToInventory(armorHp20);
});
test(
'Equipping item increases MaxHP and scales Current HP proportionally',
() {
expect(player.hp, 100);
expect(player.totalMaxHp, 100);
player.equip(armorHp50); // From 100/100 (100% HP) to 150 MaxHP
expect(player.totalMaxHp, 150, reason: "Max HP should increase by 50");
expect(
player.hp,
150,
reason: "Current HP should scale to 100% of new MaxHP",
);
},
);
test(
'Unequipping item decreases MaxHP and scales Current HP proportionally',
() {
player.equip(armorHp50); // HP becomes 150/150
player.unequip(armorHp50); // MaxHP becomes 100
expect(player.totalMaxHp, 100);
expect(
player.hp,
100,
reason: "Current HP should scale to 100% of new MaxHP",
);
},
);
test(
'Unequipping item clamps Current HP if it exceeds new MaxHP (Already 100% HP)',
() {
player.equip(armorHp50); // HP becomes 150/150
// No need to heal(50) as it's already 150/150.
expect(player.hp, 150);
player.unequip(armorHp50); // MaxHP 100
expect(player.totalMaxHp, 100);
expect(
player.hp,
100,
reason: "Current HP should scale to 100% of new MaxHP",
);
},
);
test(
'Swapping items handles HP correctly (Upgrade and maintain percentage)',
() {
player.equip(armorHp50); // HP 100/100 -> equip -> 150/150 (100%)
player.hp = 75; // Set HP to 75/150 (50%)
expect(player.hp, 75);
expect(player.totalMaxHp, 150);
player.equip(
armorHp100,
); // Swap armorHp50 (HP+50) with armorHp100 (HP+100). New MaxHP is 200.
expect(player.totalMaxHp, 200);
expect(
player.hp,
100,
reason: "HP should scale to 50% of new MaxHP (200 * 0.5 = 100)",
);
expect(
player.inventory.contains(armorHp50),
true,
reason: "Old item returned to inventory",
);
},
);
test(
'Swapping items handles HP correctly (Downgrade causing clamp due to percentage)',
() {
player.equip(armorHp50); // HP 100/100 -> equip -> 150/150 (100%)
player.equip(
armorHp20,
); // Swap armorHp50 (HP+50) with armorHp20 (HP+20). New MaxHP is 120.
expect(player.totalMaxHp, 120);
expect(
player.hp,
120,
reason: "HP should scale to 100% of new MaxHP (120 * 1.0 = 120)",
);
},
);
});
}