game/test/item_random_test.dart

50 lines
2.0 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:game_test/game/data/item_table.dart';
import 'package:game_test/game/enums.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
test('ItemTable.getRandomItem returns items correctly', () async {
await ItemTable.load();
// Test 1: Get Tier 1 item (Common/Rare/etc logic applies, but we just check if it returns *something* valid)
final item = ItemTable.getRandomItem(tier: ItemTier.tier1);
expect(item, isNotNull);
expect(item!.tier, equals(ItemTier.tier1));
print("Random Tier 1 Item: ${item.name} (${item.rarity.name})");
// Test 2: Get Tier 3 item
final item3 = ItemTable.getRandomItem(tier: ItemTier.tier3);
expect(item3, isNotNull);
expect(item3!.tier, equals(ItemTier.tier3));
print("Random Tier 3 Item: ${item3.name} (${item3.rarity.name})");
// Test 3: Get specific slot (Shield) from Tier 1
// We know 'pot_lid' and 'wooden_shield' are Tier 1 shields
final shield = ItemTable.getRandomItem(tier: ItemTier.tier1, slot: EquipmentSlot.shield);
expect(shield, isNotNull);
expect(shield!.slot, equals(EquipmentSlot.shield));
expect(shield.tier, equals(ItemTier.tier1));
// Test 4: Verify Rarity weights (Statistical test)
// We'll run 1000 times and expect roughly correct distribution.
// Tier 1 has Common and Rare items mostly.
int magicCount = 0;
int rareCount = 0;
for (int i = 0; i < 1000; i++) {
// Tier 1 items:
// Magic: Rusty Dagger, Torn Tunic, Pot Lid, Wooden Shield, Old Ring, Copper Ring
// Rare: Jagged Dagger
// So both exist.
final randItem = ItemTable.getRandomItem(tier: ItemTier.tier1);
if (randItem!.rarity == ItemRarity.magic) magicCount++;
if (randItem.rarity == ItemRarity.rare) rareCount++;
}
print("Tier 1 Stats (1000 runs): Magic=$magicCount, Rare=$rareCount");
expect(magicCount, greaterThan(rareCount)); // Should be significantly more magic items
});
}