ad6689b42f
Pure-Dart WAV synthesizer (tool/gen_sfx.dart) generates place/clear/ combo/win/lose effects; AudioService player pool fires on placement, line clears, combo streaks, and phase transitions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
69 lines
2.1 KiB
Dart
69 lines
2.1 KiB
Dart
import 'package:block_seasons/core/rng.dart';
|
|
import 'package:block_seasons/game/engine/piece_generator.dart';
|
|
import 'package:block_seasons/l10n/gen/app_localizations.dart';
|
|
import 'package:block_seasons/game/models/stage.dart';
|
|
import 'package:block_seasons/state/providers.dart';
|
|
import 'package:block_seasons/ui/screens/game_screen.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
final _stage = StageConfig.fromJson({
|
|
'id': 'golden_stage',
|
|
'seed': 777,
|
|
'moveLimit': 22,
|
|
'preset': [
|
|
{'x': 2, 'y': 2, 't': 'gem'},
|
|
{'x': 5, 'y': 2, 't': 'gem'},
|
|
{'x': 2, 'y': 5, 't': 'gem'},
|
|
{'x': 3, 'y': 7, 't': 'filled', 'c': 1},
|
|
{'x': 4, 'y': 7, 't': 'filled', 'c': 2},
|
|
{'x': 5, 'y': 7, 't': 'filled', 'c': 3},
|
|
{'x': 1, 'y': 6, 't': 'filled', 'c': 4},
|
|
],
|
|
'objectives': [
|
|
{'type': 'clearGems', 'count': 3},
|
|
],
|
|
'stars': {
|
|
'two': {'movesLeft': 5},
|
|
'three': {'movesLeft': 10},
|
|
},
|
|
'generatorProfile': 'mid',
|
|
});
|
|
|
|
void main() {
|
|
testWidgets('game screen golden snapshot', (tester) async {
|
|
await tester.binding.setSurfaceSize(const Size(390, 844)); // iPhone-ish
|
|
final container = ProviderContainer();
|
|
addTearDown(container.dispose);
|
|
container
|
|
.read(gameSessionProvider.notifier)
|
|
.startStage(_stage, generator: PieceGenerator(SeededRng(7)));
|
|
|
|
await tester.pumpWidget(
|
|
UncontrolledProviderScope(
|
|
container: container,
|
|
child: MaterialApp(
|
|
debugShowCheckedModeBanner: false,
|
|
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
|
supportedLocales: AppLocalizations.supportedLocales,
|
|
theme: ThemeData(
|
|
colorScheme: ColorScheme.fromSeed(
|
|
seedColor: const Color(0xFF5B7FFF),
|
|
brightness: Brightness.dark,
|
|
),
|
|
useMaterial3: true,
|
|
),
|
|
home: const GameScreen(),
|
|
),
|
|
),
|
|
);
|
|
await tester.pumpAndSettle();
|
|
|
|
await expectLater(
|
|
find.byType(GameScreen),
|
|
matchesGoldenFile('goldens/game_screen.png'),
|
|
);
|
|
});
|
|
}
|