refactor: fixed ramp behaviors tests

pull/296/head
RuiAlonso 3 years ago
parent 02f4dee3c6
commit db3150b39e

@ -5,7 +5,6 @@ import 'dart:async';
import 'package:bloc_test/bloc_test.dart';
import 'package:flame/components.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:pinball/game/components/android_acres/behaviors/behaviors.dart';
@ -14,6 +13,10 @@ import 'package:pinball_components/pinball_components.dart';
import '../../../../helpers/helpers.dart';
class _MockGameBloc extends Mock implements GameBloc {}
class _MockSpaceshipRampCubit extends Mock implements SpaceshipRampCubit {}
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
final assets = [
@ -29,16 +32,16 @@ void main() {
Assets.images.android.ramp.arrow.active5.keyName,
Assets.images.android.rail.main.keyName,
Assets.images.android.rail.exit.keyName,
Assets.images.score.oneMillion.keyName,
Assets.images.score.fiveThousand.keyName,
];
group('RampBonusBehavior', () {
const bonusPoints = Points.oneMillion;
const shotPoints = Points.oneMillion;
late GameBloc gameBloc;
setUp(() {
gameBloc = MockGameBloc();
gameBloc = _MockGameBloc();
whenListen(
gameBloc,
const Stream<GameState>.empty(),
@ -53,145 +56,65 @@ void main() {
);
flameBlocTester.testGameWidget(
"hit on door sensor doesn't add any score",
"when withoutBonus doesn't add any score or show any score points",
setUp: (game, tester) async {
final ball = Ball(baseColor: Colors.red);
final behavior = RampBonusBehavior(
points: bonusPoints,
scorePosition: Vector2.zero(),
final bloc = _MockSpaceshipRampCubit();
whenListen(
bloc,
const Stream<SpaceshipRampState>.empty(),
initialState: SpaceshipRampState.initial(),
);
final parent = SpaceshipRamp.test();
final sensors = [
RampSensor.test(
type: RampSensorType.door,
bloc: RampSensorCubit(),
),
];
await parent.addAll(sensors);
await game.ensureAdd(parent);
await parent.ensureAdd(behavior);
for (final sensor in sensors) {
sensor.bloc.onDoor(ball);
}
await tester.pump();
final scores = game.descendants().whereType<ScoreComponent>();
await game.ready();
verifyNever(() => gameBloc.add(Scored(points: bonusPoints.value)));
expect(scores.length, 0);
},
);
flameBlocTester.testGameWidget(
'hit on inside sensor without previous hit on door sensor '
"doesn't add any score",
setUp: (game, tester) async {
final ball = Ball(baseColor: Colors.red);
final behavior = RampBonusBehavior(
points: bonusPoints,
final behavior = RampShotBehavior(
points: shotPoints,
scorePosition: Vector2.zero(),
);
final parent = SpaceshipRamp.test();
final doorSensor = RampSensor.test(
type: RampSensorType.door,
bloc: RampSensorCubit(),
);
final insideSensor = RampSensor.test(
type: RampSensorType.inside,
bloc: RampSensorCubit(),
final parent = SpaceshipRamp.test(
bloc: bloc,
);
await parent.addAll([doorSensor, insideSensor]);
await game.ensureAdd(parent);
await parent.ensureAdd(behavior);
insideSensor.bloc.onInside(ball);
await tester.pump();
final scores = game.descendants().whereType<ScoreComponent>();
await game.ready();
verifyNever(() => gameBloc.add(Scored(points: bonusPoints.value)));
verifyNever(() => gameBloc.add(Scored(points: shotPoints.value)));
expect(scores.length, 0);
},
);
flameBlocTester.testGameWidget(
'hit on inside sensor after hit on door sensor '
"less than 10 times doesn't add any score neither shows score points",
'when withBonus add score and show score points',
setUp: (game, tester) async {
final ball = Ball(baseColor: Colors.red);
final behavior = RampBonusBehavior(
points: bonusPoints,
scorePosition: Vector2.zero(),
);
final parent = SpaceshipRamp.test();
final doorSensor = RampSensor.test(
type: RampSensorType.door,
bloc: RampSensorCubit(),
);
final insideSensor = RampSensor.test(
type: RampSensorType.inside,
bloc: RampSensorCubit(),
final bloc = _MockSpaceshipRampCubit();
whenListen(
bloc,
const Stream<SpaceshipRampState>.empty(),
initialState: SpaceshipRampState.initial().copyWith(
status: SpaceshipRampStatus.withBonus,
),
);
await parent.addAll([doorSensor, insideSensor]);
await game.ensureAdd(parent);
await parent.ensureAdd(behavior);
doorSensor.bloc.onDoor(ball);
insideSensor.bloc.onInside(ball);
await tester.pump();
final scores = game.descendants().whereType<ScoreComponent>();
await game.ready();
verifyNever(() => gameBloc.add(Scored(points: bonusPoints.value)));
expect(scores.length, 0);
},
);
flameBlocTester.testGameWidget(
'hit on inside sensor after hit on door sensor '
'10 times add score and show score point',
setUp: (game, tester) async {
final ball = Ball(baseColor: Colors.red);
final behavior = RampBonusBehavior(
points: bonusPoints,
final behavior = RampShotBehavior(
points: shotPoints,
scorePosition: Vector2.zero(),
);
final parent = SpaceshipRamp.test();
final doorSensor = RampSensor.test(
type: RampSensorType.door,
bloc: RampSensorCubit(),
);
final insideSensor = RampSensor.test(
type: RampSensorType.inside,
bloc: RampSensorCubit(),
final parent = SpaceshipRamp.test(
bloc: bloc,
);
await parent.addAll([doorSensor, insideSensor]);
await game.ensureAdd(parent);
await parent.ensureAdd(behavior);
for (var i = 0; i < 10; i++) {
doorSensor.bloc.onDoor(ball);
insideSensor.bloc.onInside(ball);
}
await tester.pump();
final scores = game.descendants().whereType<ScoreComponent>();
await game.ready();
verify(() => gameBloc.add(Scored(points: bonusPoints.value))).called(1);
expect(scores.length, 1);
verifyNever(() => gameBloc.add(MultiplierIncreased()));
verifyNever(() => gameBloc.add(Scored(points: shotPoints.value)));
expect(scores.length, 0);
},
);
});

@ -5,7 +5,6 @@ import 'dart:async';
import 'package:bloc_test/bloc_test.dart';
import 'package:flame/components.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:pinball/game/components/android_acres/behaviors/behaviors.dart';
@ -14,6 +13,10 @@ import 'package:pinball_components/pinball_components.dart';
import '../../../../helpers/helpers.dart';
class _MockGameBloc extends Mock implements GameBloc {}
class _MockSpaceshipRampCubit extends Mock implements SpaceshipRampCubit {}
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
final assets = [
@ -38,7 +41,7 @@ void main() {
late GameBloc gameBloc;
setUp(() {
gameBloc = MockGameBloc();
gameBloc = _MockGameBloc();
whenListen(
gameBloc,
const Stream<GameState>.empty(),
@ -53,65 +56,26 @@ void main() {
);
flameBlocTester.testGameWidget(
"hit on door sensor doesn't increase multiplier "
"when not shot doesn't increase multiplier "
'neither add any score or show any score points',
setUp: (game, tester) async {
final ball = Ball(baseColor: Colors.red);
final behavior = RampShotBehavior(
points: shotPoints,
scorePosition: Vector2.zero(),
final bloc = _MockSpaceshipRampCubit();
whenListen(
bloc,
const Stream<SpaceshipRampState>.empty(),
initialState: SpaceshipRampState.initial(),
);
final parent = SpaceshipRamp.test();
final sensors = [
RampSensor.test(
type: RampSensorType.door,
bloc: RampSensorCubit(),
),
];
await parent.addAll(sensors);
await game.ensureAdd(parent);
await parent.ensureAdd(behavior);
for (final sensor in sensors) {
sensor.bloc.onDoor(ball);
}
await tester.pump();
final scores = game.descendants().whereType<ScoreComponent>();
await game.ready();
verifyNever(() => gameBloc.add(MultiplierIncreased()));
verifyNever(() => gameBloc.add(Scored(points: shotPoints.value)));
expect(scores.length, 0);
},
);
flameBlocTester.testGameWidget(
'hit on inside sensor without previous hit on door sensor '
"doesn't increase multiplier neither add any score or shows score points",
setUp: (game, tester) async {
final ball = Ball(baseColor: Colors.red);
final behavior = RampShotBehavior(
points: shotPoints,
scorePosition: Vector2.zero(),
);
final parent = SpaceshipRamp.test();
final doorSensor = RampSensor.test(
type: RampSensorType.door,
bloc: RampSensorCubit(),
);
final insideSensor = RampSensor.test(
type: RampSensorType.inside,
bloc: RampSensorCubit(),
final parent = SpaceshipRamp.test(
bloc: bloc,
);
await parent.addAll([doorSensor, insideSensor]);
await game.ensureAdd(parent);
await parent.ensureAdd(behavior);
insideSensor.bloc.onInside(ball);
await tester.pump();
final scores = game.descendants().whereType<ScoreComponent>();
@ -124,71 +88,35 @@ void main() {
);
flameBlocTester.testGameWidget(
'hit on inside sensor after hit on door sensor '
'increase multiplier',
'when shot increase multiplier add score and show score points',
setUp: (game, tester) async {
final ball = Ball(baseColor: Colors.red);
final behavior = RampShotBehavior(
points: shotPoints,
scorePosition: Vector2.zero(),
);
final parent = SpaceshipRamp.test();
final doorSensor = RampSensor.test(
type: RampSensorType.door,
bloc: RampSensorCubit(),
);
final insideSensor = RampSensor.test(
type: RampSensorType.inside,
bloc: RampSensorCubit(),
final bloc = _MockSpaceshipRampCubit();
whenListen(
bloc,
const Stream<SpaceshipRampState>.empty(),
initialState: SpaceshipRampState.initial().copyWith(
shot: false,
),
);
await parent.addAll([doorSensor, insideSensor]);
await game.ensureAdd(parent);
await parent.ensureAdd(behavior);
insideSensor.bloc.onDoor(ball);
insideSensor.bloc.onInside(ball);
await tester.pump();
await game.ready();
verify(() => gameBloc.add(MultiplierIncreased())).called(1);
},
);
flameBlocTester.testGameWidget(
'hit on inside sensor after hit on door sensor '
'add score and show score points',
setUp: (game, tester) async {
final ball = Ball(baseColor: Colors.red);
final behavior = RampShotBehavior(
points: shotPoints,
scorePosition: Vector2.zero(),
);
final parent = SpaceshipRamp.test();
final doorSensor = RampSensor.test(
type: RampSensorType.door,
bloc: RampSensorCubit(),
);
final insideSensor = RampSensor.test(
type: RampSensorType.inside,
bloc: RampSensorCubit(),
final parent = SpaceshipRamp.test(
bloc: bloc,
);
await parent.addAll([doorSensor, insideSensor]);
await game.ensureAdd(parent);
await parent.ensureAdd(behavior);
doorSensor.bloc.onDoor(ball);
insideSensor.bloc.onInside(ball);
await tester.pump();
final scores = game.descendants().whereType<ScoreComponent>();
await game.ready();
verify(() => gameBloc.add(Scored(points: shotPoints.value))).called(1);
expect(scores.length, 1);
verifyNever(() => gameBloc.add(MultiplierIncreased()));
verifyNever(() => gameBloc.add(Scored(points: shotPoints.value)));
expect(scores.length, 0);
},
);
});

Loading…
Cancel
Save