diff --git a/lib/app/view/app.dart b/lib/app/view/app.dart index 2780b608..97cfec9b 100644 --- a/lib/app/view/app.dart +++ b/lib/app/view/app.dart @@ -13,7 +13,7 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball/l10n/l10n.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_audio/pinball_audio.dart'; class App extends StatelessWidget { @@ -36,7 +36,7 @@ class App extends StatelessWidget { RepositoryProvider.value(value: _pinballAudio), ], child: BlocProvider( - create: (context) => ThemeCubit(), + create: (context) => CharacterThemeCubit(), child: const MaterialApp( title: 'I/O Pinball', localizationsDelegates: [ diff --git a/lib/game/components/controlled_ball.dart b/lib/game/components/controlled_ball.dart index 4f089a7c..6468c821 100644 --- a/lib/game/components/controlled_ball.dart +++ b/lib/game/components/controlled_ball.dart @@ -15,8 +15,8 @@ class ControlledBall extends Ball with Controls { /// When a launched [Ball] is lost, it will decrease the [GameState.balls] /// count, and a new [Ball] is spawned. ControlledBall.launch({ - required PinballTheme theme, - }) : super(baseColor: theme.characterTheme.ballColor) { + required CharacterTheme characterTheme, + }) : super(baseColor: characterTheme.ballColor) { controller = BallController(this); priority = RenderPriority.ballOnLaunchRamp; layer = Layer.launcher; @@ -28,8 +28,8 @@ class ControlledBall extends Ball with Controls { /// When a bonus [Ball] is lost, the [GameState.balls] doesn't change. /// {@endtemplate} ControlledBall.bonus({ - required PinballTheme theme, - }) : super(baseColor: theme.characterTheme.ballColor) { + required CharacterTheme characterTheme, + }) : super(baseColor: characterTheme.ballColor) { controller = BallController(this); priority = RenderPriority.ballOnBoard; } diff --git a/lib/game/components/flutter_forest.dart b/lib/game/components/flutter_forest.dart index 9c8ab309..971cd700 100644 --- a/lib/game/components/flutter_forest.dart +++ b/lib/game/components/flutter_forest.dart @@ -71,7 +71,7 @@ class _FlutterForestController extends ComponentController Future _addBonusBall() async { await gameRef.add( - ControlledBall.bonus(theme: gameRef.theme) + ControlledBall.bonus(characterTheme: gameRef.characterTheme) ..initialPosition = Vector2(17.2, -52.7), ); } diff --git a/lib/game/components/game_flow_controller.dart b/lib/game/components/game_flow_controller.dart index 77afebe6..48dd5518 100644 --- a/lib/game/components/game_flow_controller.dart +++ b/lib/game/components/game_flow_controller.dart @@ -32,8 +32,7 @@ class GameFlowController extends ComponentController // next page component.firstChild()?.gameOverMode( score: state?.score ?? 0, - characterIconPath: - component.theme.characterTheme.leaderboardIcon.keyName, + characterIconPath: component.characterTheme.leaderboardIcon.keyName, ); component.firstChild()?.focusOnBackboard(); } diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 55a6b23a..374a55a1 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -20,7 +20,7 @@ class PinballGame extends Forge2DGame HasKeyboardHandlerComponents, Controls<_GameBallsController> { PinballGame({ - required this.theme, + required this.characterTheme, required this.audio, }) { images.prefix = ''; @@ -33,7 +33,7 @@ class PinballGame extends Forge2DGame @override Color backgroundColor() => Colors.transparent; - final PinballTheme theme; + final CharacterTheme characterTheme; final PinballAudio audio; @@ -119,7 +119,7 @@ class _GameBallsController extends ComponentController void _spawnBall() { final ball = ControlledBall.launch( - theme: gameRef.theme, + characterTheme: gameRef.characterTheme, )..initialPosition = Vector2( _plunger.body.position.x, _plunger.body.position.y - Ball.size.y, @@ -137,10 +137,10 @@ class _GameBallsController extends ComponentController class DebugPinballGame extends PinballGame with FPSCounter, TapDetector { DebugPinballGame({ - required PinballTheme theme, + required CharacterTheme characterTheme, required PinballAudio audio, }) : super( - theme: theme, + characterTheme: characterTheme, audio: audio, ) { controller = _DebugGameBallsController(this); diff --git a/lib/game/view/pinball_game_page.dart b/lib/game/view/pinball_game_page.dart index 38ae0144..3a0f5e24 100644 --- a/lib/game/view/pinball_game_page.dart +++ b/lib/game/view/pinball_game_page.dart @@ -5,8 +5,8 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:pinball/game/game.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball/start_game/start_game.dart'; -import 'package:pinball/theme/theme.dart'; import 'package:pinball_audio/pinball_audio.dart'; class PinballGamePage extends StatelessWidget { @@ -31,13 +31,14 @@ class PinballGamePage extends StatelessWidget { @override Widget build(BuildContext context) { - final theme = context.read().state.theme; + final characterTheme = + context.read().state.characterTheme; final audio = context.read(); final pinballAudio = context.read(); final game = isDebugMode - ? DebugPinballGame(theme: theme, audio: audio) - : PinballGame(theme: theme, audio: audio); + ? DebugPinballGame(characterTheme: characterTheme, audio: audio) + : PinballGame(characterTheme: characterTheme, audio: audio); final loadables = [ ...game.preLoadAssets(), diff --git a/lib/game/view/widgets/play_button_overlay.dart b/lib/game/view/widgets/play_button_overlay.dart index ce5dce4b..f90ebb98 100644 --- a/lib/game/view/widgets/play_button_overlay.dart +++ b/lib/game/view/widgets/play_button_overlay.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:pinball/game/pinball_game.dart'; import 'package:pinball/l10n/l10n.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; /// {@template play_button_overlay} /// [Widget] that renders the button responsible to starting the game diff --git a/lib/leaderboard/view/leaderboard_page.dart b/lib/leaderboard/view/leaderboard_page.dart index 61e63d75..b9866111 100644 --- a/lib/leaderboard/view/leaderboard_page.dart +++ b/lib/leaderboard/view/leaderboard_page.dart @@ -5,7 +5,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:pinball/l10n/l10n.dart'; import 'package:pinball/leaderboard/leaderboard.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_theme/pinball_theme.dart'; class LeaderboardPage extends StatelessWidget { diff --git a/lib/theme/cubit/theme_cubit.dart b/lib/select_character/cubit/character_theme_cubit.dart similarity index 59% rename from lib/theme/cubit/theme_cubit.dart rename to lib/select_character/cubit/character_theme_cubit.dart index 94eba4a6..84792a71 100644 --- a/lib/theme/cubit/theme_cubit.dart +++ b/lib/select_character/cubit/character_theme_cubit.dart @@ -5,12 +5,12 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:pinball_theme/pinball_theme.dart'; -part 'theme_state.dart'; +part 'character_theme_state.dart'; -class ThemeCubit extends Cubit { - ThemeCubit() : super(const ThemeState.initial()); +class CharacterThemeCubit extends Cubit { + CharacterThemeCubit() : super(const CharacterThemeState.initial()); void characterSelected(CharacterTheme characterTheme) { - emit(ThemeState(PinballTheme(characterTheme: characterTheme))); + emit(CharacterThemeState(characterTheme)); } } diff --git a/lib/select_character/cubit/character_theme_state.dart b/lib/select_character/cubit/character_theme_state.dart new file mode 100644 index 00000000..ffe5667c --- /dev/null +++ b/lib/select_character/cubit/character_theme_state.dart @@ -0,0 +1,15 @@ +// ignore_for_file: public_member_api_docs +// TODO(allisonryan0002): Document this section when the API is stable. + +part of 'character_theme_cubit.dart'; + +class CharacterThemeState extends Equatable { + const CharacterThemeState(this.characterTheme); + + const CharacterThemeState.initial() : characterTheme = const DashTheme(); + + final CharacterTheme characterTheme; + + @override + List get props => [characterTheme]; +} diff --git a/lib/select_character/select_character.dart b/lib/select_character/select_character.dart new file mode 100644 index 00000000..40699840 --- /dev/null +++ b/lib/select_character/select_character.dart @@ -0,0 +1,2 @@ +export 'cubit/character_theme_cubit.dart'; +export 'view/view.dart'; diff --git a/lib/theme/view/character_selection_page.dart b/lib/select_character/view/character_selection_page.dart similarity index 91% rename from lib/theme/view/character_selection_page.dart rename to lib/select_character/view/character_selection_page.dart index ef37270b..0e83db8d 100644 --- a/lib/theme/view/character_selection_page.dart +++ b/lib/select_character/view/character_selection_page.dart @@ -3,8 +3,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:pinball/l10n/l10n.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball/start_game/start_game.dart'; -import 'package:pinball/theme/theme.dart'; import 'package:pinball_theme/pinball_theme.dart'; class CharacterSelectionDialog extends StatelessWidget { @@ -19,7 +19,7 @@ class CharacterSelectionDialog extends StatelessWidget { @override Widget build(BuildContext context) { return BlocProvider( - create: (_) => ThemeCubit(), + create: (_) => CharacterThemeCubit(), child: const CharacterSelectionView(), ); } @@ -109,12 +109,14 @@ class CharacterImageButton extends StatelessWidget { @override Widget build(BuildContext context) { - final currentCharacterTheme = context.select( - (cubit) => cubit.state.theme.characterTheme, + final currentCharacterTheme = + context.select( + (cubit) => cubit.state.characterTheme, ); return GestureDetector( - onTap: () => context.read().characterSelected(characterTheme), + onTap: () => + context.read().characterSelected(characterTheme), child: DecoratedBox( decoration: BoxDecoration( color: (currentCharacterTheme == characterTheme) diff --git a/lib/theme/view/view.dart b/lib/select_character/view/view.dart similarity index 100% rename from lib/theme/view/view.dart rename to lib/select_character/view/view.dart diff --git a/lib/theme/cubit/theme_state.dart b/lib/theme/cubit/theme_state.dart deleted file mode 100644 index 078f5c84..00000000 --- a/lib/theme/cubit/theme_state.dart +++ /dev/null @@ -1,16 +0,0 @@ -// ignore_for_file: public_member_api_docs -// TODO(allisonryan0002): Document this section when the API is stable. - -part of 'theme_cubit.dart'; - -class ThemeState extends Equatable { - const ThemeState(this.theme); - - const ThemeState.initial() - : theme = const PinballTheme(characterTheme: DashTheme()); - - final PinballTheme theme; - - @override - List get props => [theme]; -} diff --git a/lib/theme/theme.dart b/lib/theme/theme.dart index 5e4fefe9..c9e2f9e1 100644 --- a/lib/theme/theme.dart +++ b/lib/theme/theme.dart @@ -1,4 +1,2 @@ export 'app_colors.dart'; export 'app_text_style.dart'; -export 'cubit/theme_cubit.dart'; -export 'view/view.dart'; diff --git a/packages/pinball_theme/lib/pinball_theme.dart b/packages/pinball_theme/lib/pinball_theme.dart index 139a70dc..c8f9b53e 100644 --- a/packages/pinball_theme/lib/pinball_theme.dart +++ b/packages/pinball_theme/lib/pinball_theme.dart @@ -1,5 +1,4 @@ library pinball_theme; export 'src/generated/generated.dart'; -export 'src/pinball_theme.dart'; export 'src/themes/themes.dart'; diff --git a/packages/pinball_theme/lib/src/pinball_theme.dart b/packages/pinball_theme/lib/src/pinball_theme.dart deleted file mode 100644 index a766a129..00000000 --- a/packages/pinball_theme/lib/src/pinball_theme.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'package:pinball_theme/pinball_theme.dart'; - -/// {@template pinball_theme} -/// Defines all theme assets and attributes. -/// -/// Game components should have a getter specified here to load their -/// corresponding assets for the game. -/// {@endtemplate} -class PinballTheme extends Equatable { - /// {@macro pinball_theme} - const PinballTheme({ - required CharacterTheme characterTheme, - }) : _characterTheme = characterTheme; - - final CharacterTheme _characterTheme; - - /// [CharacterTheme] for the chosen character. - CharacterTheme get characterTheme => _characterTheme; - - @override - List get props => [_characterTheme]; -} diff --git a/packages/pinball_theme/test/src/pinball_theme_test.dart b/packages/pinball_theme/test/src/pinball_theme_test.dart deleted file mode 100644 index 899eec64..00000000 --- a/packages/pinball_theme/test/src/pinball_theme_test.dart +++ /dev/null @@ -1,28 +0,0 @@ -// ignore_for_file: prefer_const_constructors - -import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball_theme/pinball_theme.dart'; - -void main() { - group('PinballTheme', () { - const characterTheme = SparkyTheme(); - - test('can be instantiated', () { - expect(PinballTheme(characterTheme: characterTheme), isNotNull); - }); - - test('supports value equality', () { - expect( - PinballTheme(characterTheme: characterTheme), - equals(PinballTheme(characterTheme: characterTheme)), - ); - }); - - test('characterTheme is correct', () { - expect( - PinballTheme(characterTheme: characterTheme).characterTheme, - equals(characterTheme), - ); - }); - }); -} diff --git a/test/game/components/game_flow_controller_test.dart b/test/game/components/game_flow_controller_test.dart index 4efc7174..3de04b90 100644 --- a/test/game/components/game_flow_controller_test.dart +++ b/test/game/components/game_flow_controller_test.dart @@ -57,8 +57,7 @@ void main() { when(game.firstChild).thenReturn(backboard); when(game.firstChild).thenReturn(cameraController); when(() => game.overlays).thenReturn(overlays); - when(() => game.theme) - .thenReturn(PinballTheme(characterTheme: DashTheme())); + when(() => game.characterTheme).thenReturn(DashTheme()); }); test( diff --git a/test/game/components/wall_test.dart b/test/game/components/wall_test.dart index 63a39991..92fe33ea 100644 --- a/test/game/components/wall_test.dart +++ b/test/game/components/wall_test.dart @@ -117,7 +117,9 @@ void main() { flameBlocTester.testGameWidget( 'when ball is launch', setUp: (game, tester) async { - final ball = ControlledBall.launch(theme: game.theme); + final ball = ControlledBall.launch( + characterTheme: game.characterTheme, + ); final wall = BottomWall(); await game.ensureAddAll([ball, wall]); game.addContactCallback(BottomWallBallContactCallback()); @@ -132,7 +134,9 @@ void main() { flameBlocTester.testGameWidget( 'when ball is bonus', setUp: (game, tester) async { - final ball = ControlledBall.bonus(theme: game.theme); + final ball = ControlledBall.bonus( + characterTheme: game.characterTheme, + ); final wall = BottomWall(); await game.ensureAddAll([ball, wall]); game.addContactCallback(BottomWallBallContactCallback()); diff --git a/test/game/view/pinball_game_page_test.dart b/test/game/view/pinball_game_page_test.dart index bbed2963..bf6391d9 100644 --- a/test/game/view/pinball_game_page_test.dart +++ b/test/game/view/pinball_game_page_test.dart @@ -5,7 +5,7 @@ import 'package:flame/game.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pinball/game/game.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; import '../../helpers/helpers.dart'; @@ -13,18 +13,18 @@ void main() { final game = PinballTestGame(); group('PinballGamePage', () { - late ThemeCubit themeCubit; + late CharacterThemeCubit characterThemeCubit; late GameBloc gameBloc; setUp(() async { await Future.wait(game.preLoadAssets()); - themeCubit = MockThemeCubit(); + characterThemeCubit = MockCharacterThemeCubit(); gameBloc = MockGameBloc(); whenListen( - themeCubit, - const Stream.empty(), - initialState: const ThemeState.initial(), + characterThemeCubit, + const Stream.empty(), + initialState: const CharacterThemeState.initial(), ); whenListen( @@ -37,7 +37,7 @@ void main() { testWidgets('renders PinballGameView', (tester) async { await tester.pumpApp( PinballGamePage(), - themeCubit: themeCubit, + characterThemeCubit: characterThemeCubit, ); expect(find.byType(PinballGameView), findsOneWidget); @@ -62,7 +62,7 @@ void main() { game: game, ), assetsManagerCubit: assetsManagerCubit, - themeCubit: themeCubit, + characterThemeCubit: characterThemeCubit, ); expect( @@ -95,7 +95,7 @@ void main() { game: game, ), assetsManagerCubit: assetsManagerCubit, - themeCubit: themeCubit, + characterThemeCubit: characterThemeCubit, gameBloc: gameBloc, ); @@ -126,7 +126,7 @@ void main() { }, ), ), - themeCubit: themeCubit, + characterThemeCubit: characterThemeCubit, ); await tester.tap(find.text('Tap me')); diff --git a/test/game/view/widgets/play_button_overlay_test.dart b/test/game/view/widgets/play_button_overlay_test.dart index 210cc347..0345978d 100644 --- a/test/game/view/widgets/play_button_overlay_test.dart +++ b/test/game/view/widgets/play_button_overlay_test.dart @@ -1,7 +1,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:pinball/game/game.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; import '../../../helpers/helpers.dart'; diff --git a/test/helpers/mocks.dart b/test/helpers/mocks.dart index 9b0f67c9..b75daf94 100644 --- a/test/helpers/mocks.dart +++ b/test/helpers/mocks.dart @@ -8,7 +8,7 @@ import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:mocktail/mocktail.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball/leaderboard/leaderboard.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_components/pinball_components.dart'; @@ -35,7 +35,7 @@ class MockGameBloc extends Mock implements GameBloc {} class MockGameState extends Mock implements GameState {} -class MockThemeCubit extends Mock implements ThemeCubit {} +class MockCharacterThemeCubit extends Mock implements CharacterThemeCubit {} class MockLeaderboardBloc extends Mock implements LeaderboardBloc {} diff --git a/test/helpers/pump_app.dart b/test/helpers/pump_app.dart index 92e2c042..b744c33a 100644 --- a/test/helpers/pump_app.dart +++ b/test/helpers/pump_app.dart @@ -14,7 +14,7 @@ import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:mockingjay/mockingjay.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball/l10n/l10n.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_audio/pinball_audio.dart'; import 'helpers.dart'; @@ -52,7 +52,7 @@ extension PumpApp on WidgetTester { MockNavigator? navigator, GameBloc? gameBloc, AssetsManagerCubit? assetsManagerCubit, - ThemeCubit? themeCubit, + CharacterThemeCubit? characterThemeCubit, LeaderboardRepository? leaderboardRepository, PinballAudio? pinballAudio, }) { @@ -70,7 +70,7 @@ extension PumpApp on WidgetTester { child: MultiBlocProvider( providers: [ BlocProvider.value( - value: themeCubit ?? MockThemeCubit(), + value: characterThemeCubit ?? MockCharacterThemeCubit(), ), BlocProvider.value( value: gameBloc ?? MockGameBloc(), diff --git a/test/helpers/test_games.dart b/test/helpers/test_games.dart index 10caa768..deeba2c3 100644 --- a/test/helpers/test_games.dart +++ b/test/helpers/test_games.dart @@ -20,9 +20,7 @@ class PinballTestGame extends PinballGame { : _assets = assets, super( audio: MockPinballAudio(), - theme: const PinballTheme( - characterTheme: DashTheme(), - ), + characterTheme: const DashTheme(), ); final List? _assets; @@ -40,9 +38,7 @@ class DebugPinballTestGame extends DebugPinballGame { : _assets = assets, super( audio: MockPinballAudio(), - theme: const PinballTheme( - characterTheme: DashTheme(), - ), + characterTheme: const DashTheme(), ); final List? _assets; diff --git a/test/select_character/cubit/character_theme_cubit_test.dart b/test/select_character/cubit/character_theme_cubit_test.dart new file mode 100644 index 00000000..967eb1e1 --- /dev/null +++ b/test/select_character/cubit/character_theme_cubit_test.dart @@ -0,0 +1,25 @@ +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball/select_character/select_character.dart'; +import 'package:pinball_theme/pinball_theme.dart'; + +void main() { + group('CharacterThemeCubit', () { + test('initial state has Dash character theme', () { + final characterThemeCubit = CharacterThemeCubit(); + expect( + characterThemeCubit.state.characterTheme, + equals(const DashTheme()), + ); + }); + + blocTest( + 'charcterSelected emits selected character theme', + build: CharacterThemeCubit.new, + act: (bloc) => bloc.characterSelected(const SparkyTheme()), + expect: () => [ + const CharacterThemeState(SparkyTheme()), + ], + ); + }); +} diff --git a/test/theme/cubit/theme_state_test.dart b/test/select_character/cubit/character_theme_state_test.dart similarity index 54% rename from test/theme/cubit/theme_state_test.dart rename to test/select_character/cubit/character_theme_state_test.dart index 49a2a387..c0d584e2 100644 --- a/test/theme/cubit/theme_state_test.dart +++ b/test/select_character/cubit/character_theme_state_test.dart @@ -1,18 +1,18 @@ // ignore_for_file: prefer_const_constructors import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball/theme/theme.dart'; +import 'package:pinball/select_character/select_character.dart'; void main() { group('ThemeState', () { test('can be instantiated', () { - expect(const ThemeState.initial(), isNotNull); + expect(const CharacterThemeState.initial(), isNotNull); }); test('supports value equality', () { expect( - ThemeState.initial(), - equals(const ThemeState.initial()), + CharacterThemeState.initial(), + equals(const CharacterThemeState.initial()), ); }); }); diff --git a/test/theme/view/character_selection_page_test.dart b/test/select_character/view/character_selection_page_test.dart similarity index 79% rename from test/theme/view/character_selection_page_test.dart rename to test/select_character/view/character_selection_page_test.dart index dcf54a13..0dda92d7 100644 --- a/test/theme/view/character_selection_page_test.dart +++ b/test/select_character/view/character_selection_page_test.dart @@ -4,21 +4,21 @@ import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockingjay/mockingjay.dart'; +import 'package:pinball/select_character/select_character.dart'; import 'package:pinball/start_game/start_game.dart'; -import 'package:pinball/theme/theme.dart'; import 'package:pinball_theme/pinball_theme.dart'; import '../../helpers/helpers.dart'; void main() { - late ThemeCubit themeCubit; + late CharacterThemeCubit characterThemeCubit; setUp(() { - themeCubit = MockThemeCubit(); + characterThemeCubit = MockCharacterThemeCubit(); whenListen( - themeCubit, - const Stream.empty(), - initialState: const ThemeState.initial(), + characterThemeCubit, + const Stream.empty(), + initialState: const CharacterThemeState.initial(), ); }); @@ -26,7 +26,7 @@ void main() { testWidgets('renders CharacterSelectionView', (tester) async { await tester.pumpApp( CharacterSelectionDialog(), - themeCubit: themeCubit, + characterThemeCubit: characterThemeCubit, ); expect(find.byType(CharacterSelectionView), findsOneWidget); }); @@ -46,7 +46,7 @@ void main() { }, ), ), - themeCubit: themeCubit, + characterThemeCubit: characterThemeCubit, ); await tester.tap(find.text('Tap me')); @@ -61,7 +61,7 @@ void main() { const titleText = 'Choose your character!'; await tester.pumpApp( CharacterSelectionView(), - themeCubit: themeCubit, + characterThemeCubit: characterThemeCubit, ); expect(find.text(titleText), findsOneWidget); @@ -75,19 +75,20 @@ void main() { await tester.pumpApp( CharacterSelectionView(), - themeCubit: themeCubit, + characterThemeCubit: characterThemeCubit, ); await tester.tap(find.byKey(sparkyButtonKey)); - verify(() => themeCubit.characterSelected(SparkyTheme())).called(1); + verify(() => characterThemeCubit.characterSelected(SparkyTheme())) + .called(1); }); testWidgets('displays how to play dialog when start is tapped', (tester) async { await tester.pumpApp( CharacterSelectionView(), - themeCubit: themeCubit, + characterThemeCubit: characterThemeCubit, ); await tester.ensureVisible(find.byType(TextButton)); await tester.tap(find.byType(TextButton)); @@ -100,7 +101,7 @@ void main() { testWidgets('CharacterImageButton renders correctly', (tester) async { await tester.pumpApp( CharacterImageButton(DashTheme()), - themeCubit: themeCubit, + characterThemeCubit: characterThemeCubit, ); expect(find.byType(Image), findsOneWidget); diff --git a/test/theme/cubit/theme_cubit_test.dart b/test/theme/cubit/theme_cubit_test.dart deleted file mode 100644 index 1f2d24e0..00000000 --- a/test/theme/cubit/theme_cubit_test.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:bloc_test/bloc_test.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball/theme/theme.dart'; -import 'package:pinball_theme/pinball_theme.dart'; - -void main() { - group('ThemeCubit', () { - test('initial state has Dash character theme', () { - final themeCubit = ThemeCubit(); - expect(themeCubit.state.theme.characterTheme, equals(const DashTheme())); - }); - - blocTest( - 'charcterSelected emits selected character theme', - build: ThemeCubit.new, - act: (bloc) => bloc.characterSelected(const SparkyTheme()), - expect: () => [ - const ThemeState(PinballTheme(characterTheme: SparkyTheme())), - ], - ); - }); -}