99 lines
3.1 KiB
Dart
99 lines
3.1 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart'; // Import SharedPreferences
|
|
import 'package:game_test/providers/battle_provider.dart';
|
|
import 'package:game_test/providers/shop_provider.dart';
|
|
import 'package:game_test/game/models.dart';
|
|
import 'package:game_test/game/enums.dart';
|
|
import 'package:game_test/game/data/item_table.dart';
|
|
|
|
void main() {
|
|
group('BattleProvider Armor Reset Test', () {
|
|
late BattleProvider battleProvider;
|
|
late ShopProvider shopProvider;
|
|
|
|
setUp(() {
|
|
// Fix Binding has not yet been initialized error
|
|
TestWidgetsFlutterBinding.ensureInitialized();
|
|
// Mock SharedPreferences
|
|
SharedPreferences.setMockInitialValues({});
|
|
|
|
// Mock ItemTable data to prevent RangeError in initializeBattle
|
|
// initializeBattle accesses indices up to 5 for weapons and 3 for shields
|
|
ItemTable.weapons = List.generate(
|
|
10,
|
|
(index) => ItemTemplate(
|
|
id: "weapon_$index",
|
|
name: "Weapon $index",
|
|
description: "Test Weapon",
|
|
atkBonus: 10,
|
|
hpBonus: 0,
|
|
armorBonus: 0,
|
|
slot: EquipmentSlot.weapon,
|
|
effects: [],
|
|
price: 10,
|
|
),
|
|
);
|
|
ItemTable.shields = List.generate(
|
|
10,
|
|
(index) => ItemTemplate(
|
|
id: "shield_$index",
|
|
name: "Shield $index",
|
|
description: "Test Shield",
|
|
atkBonus: 0,
|
|
hpBonus: 0,
|
|
armorBonus: 10,
|
|
slot: EquipmentSlot.shield,
|
|
effects: [],
|
|
price: 10,
|
|
),
|
|
);
|
|
// Initialize other lists to empty to avoid null pointer if accessed loosely
|
|
ItemTable.armors = [];
|
|
ItemTable.accessories = [];
|
|
|
|
shopProvider = ShopProvider();
|
|
battleProvider = BattleProvider(shopProvider: shopProvider);
|
|
battleProvider.initializeBattle(); // Initialize player and stage 1
|
|
});
|
|
|
|
test('Armor should be reset to 0 when proceeding to next stage', () {
|
|
// 1. Setup initial state
|
|
battleProvider.player.armor = 50;
|
|
expect(
|
|
battleProvider.player.armor,
|
|
50,
|
|
reason: "Player armor should be set to 50 initially.",
|
|
);
|
|
|
|
// 2. Simulate proceeding to next stage
|
|
// Using proceedToNextStage which calls _prepareNextStage internally
|
|
battleProvider.proceedToNextStage();
|
|
|
|
// 3. Verify armor is reset
|
|
expect(battleProvider.stage, 2, reason: "Stage should advance to 2.");
|
|
expect(
|
|
battleProvider.player.armor,
|
|
0,
|
|
reason: "Player armor should be reset to 0 in the new stage.",
|
|
);
|
|
});
|
|
|
|
test('Armor should be reset to 0 when re-initializing battle', () {
|
|
// 1. Setup initial state
|
|
battleProvider.player.armor = 20;
|
|
expect(battleProvider.player.armor, 20);
|
|
|
|
// 2. Re-initialize
|
|
battleProvider.initializeBattle();
|
|
|
|
// 3. Verify armor is reset
|
|
expect(battleProvider.stage, 1);
|
|
expect(
|
|
battleProvider.player.armor,
|
|
0,
|
|
reason: "Player armor should be reset to 0 on initialization.",
|
|
);
|
|
});
|
|
});
|
|
}
|