update : icon image
This commit is contained in:
+51
-16
@@ -1,5 +1,8 @@
|
||||
import 'package:flutter/material.dart'; // For BuildContext in testWidgets
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:provider/provider.dart'; // For MultiProvider and ChangeNotifierProvider
|
||||
import 'package:game_test/providers/battle_provider.dart';
|
||||
import 'package:game_test/providers/shop_provider.dart'; // Required for BattleProvider's context
|
||||
import 'package:game_test/game/data/enemy_table.dart';
|
||||
import 'package:game_test/game/data/item_table.dart';
|
||||
import 'package:game_test/game/enums.dart';
|
||||
@@ -14,29 +17,61 @@ void main() {
|
||||
await EnemyTable.load();
|
||||
});
|
||||
|
||||
test('Enemy generates intent on spawn', () {
|
||||
final provider = BattleProvider();
|
||||
provider.initializeBattle();
|
||||
// Helper widget to provide the necessary providers in the widget tree
|
||||
Widget createTestApp() {
|
||||
return MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(create: (_) => ShopProvider()),
|
||||
ChangeNotifierProxyProvider<ShopProvider, BattleProvider>(
|
||||
create: (context) => BattleProvider(
|
||||
shopProvider: Provider.of<ShopProvider>(context, listen: false),
|
||||
),
|
||||
update: (context, shopProvider, battleProvider) =>
|
||||
battleProvider ?? BattleProvider(shopProvider: shopProvider),
|
||||
),
|
||||
],
|
||||
child: const MaterialApp(
|
||||
home: Scaffold(
|
||||
body: Text('Test App'),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
testWidgets('Enemy generates intent on spawn', (WidgetTester tester) async {
|
||||
await tester.pumpWidget(createTestApp());
|
||||
await tester.pumpAndSettle(); // Ensure providers are built and available
|
||||
|
||||
// Retrieve the BattleProvider instance from the context of the widget tree
|
||||
final battleProvider = Provider.of<BattleProvider>(
|
||||
tester.element(find.byType(MaterialApp)),
|
||||
listen: false,
|
||||
);
|
||||
|
||||
battleProvider.initializeBattle();
|
||||
await tester.pumpAndSettle(); // Allow async operations in initializeBattle to complete
|
||||
|
||||
// Should have an enemy and an intent
|
||||
expect(provider.enemy, isNotNull);
|
||||
expect(provider.currentEnemyIntent, isNotNull);
|
||||
print('Initial Intent: ${provider.currentEnemyIntent!.description}');
|
||||
expect(battleProvider.enemy, isNotNull);
|
||||
expect(battleProvider.currentEnemyIntent, isNotNull);
|
||||
print('Initial Intent: ${battleProvider.currentEnemyIntent!.description}');
|
||||
});
|
||||
|
||||
test('Enemy executes intent and generates new one', () async {
|
||||
final provider = BattleProvider();
|
||||
provider.initializeBattle();
|
||||
testWidgets('Enemy executes intent and generates new one', (WidgetTester tester) async {
|
||||
await tester.pumpWidget(createTestApp());
|
||||
await tester.pumpAndSettle(); // Ensure providers are built and available
|
||||
|
||||
// Force player turn to end to trigger enemy turn
|
||||
// We can't easily call private methods, but we can simulate flow or check state
|
||||
// BattleProvider logic is tightly coupled with async delays in _enemyTurn,
|
||||
// so unit testing the exact flow is tricky without mocking.
|
||||
// Instead, we will test the public state changes if possible or just rely on the fact that
|
||||
// initializeBattle calls _prepareNextStage which calls _generateEnemyIntent.
|
||||
// Retrieve the BattleProvider instance from the context of the widget tree
|
||||
final battleProvider = Provider.of<BattleProvider>(
|
||||
tester.element(find.byType(MaterialApp)),
|
||||
listen: false,
|
||||
);
|
||||
|
||||
battleProvider.initializeBattle();
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Let's verify the intent structure
|
||||
final intent = provider.currentEnemyIntent!;
|
||||
final intent = battleProvider.currentEnemyIntent!;
|
||||
expect(intent.value, greaterThan(0));
|
||||
expect(intent.type, anyOf(EnemyActionType.attack, EnemyActionType.defend));
|
||||
expect(
|
||||
|
||||
Reference in New Issue
Block a user