refactor: defined isFullyProgressed method

pull/303/head
alestiago 3 years ago
parent 7584c90fe3
commit 46adba5cb5

@ -31,7 +31,7 @@ class FlutterForestBonusBehavior extends Component
bumper.bloc.onReset(); bumper.bloc.onReset();
} }
if (signpost.bloc.state.isFullyLit()) { if (signpost.bloc.isFullyProgressed()) {
gameRef gameRef
.read<GameBloc>() .read<GameBloc>()
.add(const BonusActivated(GameBonus.dashNest)); .add(const BonusActivated(GameBonus.dashNest));

@ -13,4 +13,6 @@ class SignpostCubit extends Cubit<SignpostState> {
SignpostState.values[(index + 1) % SignpostState.values.length], SignpostState.values[(index + 1) % SignpostState.values.length],
); );
} }
bool isFullyProgressed() => state == SignpostState.active3;
} }

@ -15,7 +15,3 @@ enum SignpostState {
/// Signpost with all signs of lit up dashes. /// Signpost with all signs of lit up dashes.
active3, active3,
} }
extension SignpostX on SignpostState {
bool isFullyLit() => this == SignpostState.active3;
}

@ -48,6 +48,12 @@ class Signpost extends BodyComponent with InitialPosition {
// ignore: public_member_api_docs // ignore: public_member_api_docs
final SignpostCubit bloc; final SignpostCubit bloc;
@override
void onRemove() {
bloc.close();
super.onRemove();
}
@override @override
Body createBody() { Body createBody() {
final shape = CircleShape()..radius = 0.25; final shape = CircleShape()..radius = 0.25;

@ -0,0 +1,39 @@
import 'package:bloc_test/bloc_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:pinball_components/pinball_components.dart';
void main() {
group('SignpostCubit', () {
blocTest<SignpostCubit, SignpostState>(
'onProgressed progresses',
build: SignpostCubit.new,
act: (bloc) {
bloc
..onProgressed()
..onProgressed()
..onProgressed()
..onProgressed();
},
expect: () => [
SignpostState.active1,
SignpostState.active2,
SignpostState.active3,
SignpostState.inactive,
],
);
test('isFullyProgressed when on active3', () {
final bloc = SignpostCubit();
expect(bloc.isFullyProgressed(), isFalse);
bloc.onProgressed();
expect(bloc.isFullyProgressed(), isFalse);
bloc.onProgressed();
expect(bloc.isFullyProgressed(), isFalse);
bloc.onProgressed();
expect(bloc.isFullyProgressed(), isTrue);
});
});
}

@ -1,12 +1,16 @@
// ignore_for_file: cascade_invocations // ignore_for_file: cascade_invocations
import 'package:bloc_test/bloc_test.dart';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import '../../../helpers/helpers.dart'; import '../../../helpers/helpers.dart';
class _MockSignpostCubit extends Mock implements SignpostCubit {}
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final assets = [ final assets = [
@ -140,5 +144,22 @@ void main() {
await game.ensureAdd(signpost); await game.ensureAdd(signpost);
expect(signpost.children, contains(component)); expect(signpost.children, contains(component));
}); });
flameTester.test('closes bloc when removed', (game) async {
final bloc = _MockSignpostCubit();
whenListen(
bloc,
const Stream<SignpostCubit>.empty(),
initialState: SignpostState.inactive,
);
when(bloc.close).thenAnswer((_) async {});
final component = Signpost.test(bloc: bloc);
await game.ensureAdd(component);
game.remove(component);
await game.ready();
verify(bloc.close).called(1);
});
}); });
} }

Loading…
Cancel
Save