feat: tested and made classes private

pull/176/head
alestiago 4 years ago
parent db05df8eed
commit 2e36c805bb

@ -4,7 +4,6 @@ import 'dart:async';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flutter/material.dart';
import 'package:pinball/flame/flame.dart'; import 'package:pinball/flame/flame.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
@ -26,6 +25,7 @@ class GoogleWord extends Component
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
gameRef.addContactCallback(_GoogleLetterBallContactCallback());
final offsets = [ final offsets = [
Vector2(-12.92, -1.82), Vector2(-12.92, -1.82),
@ -73,11 +73,10 @@ class _GoogleWordController extends ComponentController<GoogleWord>
} }
/// Activates a [GoogleLetter] when it contacts with a [Ball]. /// Activates a [GoogleLetter] when it contacts with a [Ball].
@visibleForTesting class _GoogleLetterBallContactCallback
class BonusLetterBallContactCallback extends ContactCallback<GoogleLetter, Ball> {
extends ContactCallback<Ball, GoogleLetter> {
@override @override
void begin(Ball ball, GoogleLetter googleLetter, Contact contact) { void begin(GoogleLetter googleLetter, _, __) {
(googleLetter.parent! as GoogleWord) (googleLetter.parent! as GoogleWord)
.controller .controller
.activate(googleLetter.index); .activate(googleLetter.index);

@ -72,7 +72,6 @@ class PinballGame extends Forge2DGame
void _addContactCallbacks() { void _addContactCallbacks() {
addContactCallback(BallScorePointsCallback(this)); addContactCallback(BallScorePointsCallback(this));
addContactCallback(BottomWallBallContactCallback()); addContactCallback(BottomWallBallContactCallback());
addContactCallback(BonusLetterBallContactCallback());
} }
Future<void> _addGameBoundaries() async { Future<void> _addGameBoundaries() async {

@ -1,8 +1,13 @@
// ignore_for_file: cascade_invocations // ignore_for_file: cascade_invocations
import 'dart:math';
import 'package:bloc_test/bloc_test.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:mockingjay/mockingjay.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
@ -10,26 +15,65 @@ import '../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(EmptyPinballGameTest.new);
group('GoogleWord', () { group('GoogleWord', () {
const googleWord = 'Google'; late GameBloc gameBloc;
setUp(() {
gameBloc = MockGameBloc();
whenListen(
gameBloc,
const Stream<GameState>.empty(),
initialState: const GameState.initial(),
);
});
final flameTester = FlameTester(EmptyPinballGameTest.new);
final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>(
gameBuilder: EmptyPinballGameTest.new,
blocBuilder: () => gameBloc,
);
flameTester.test( flameTester.test(
'loads the letters correctly', 'loads the letters correctly',
(game) async { (game) async {
final bonusWord = GoogleWord( const word = 'Google';
position: Vector2.zero(), final googleWord = GoogleWord(position: Vector2.zero());
); await game.ensureAdd(googleWord);
await game.ensureAdd(bonusWord);
final letters = bonusWord.children.whereType<GoogleLetter>(); final letters = googleWord.children.whereType<GoogleLetter>();
expect(letters.length, equals(googleWord.length)); expect(letters.length, equals(word.length));
for (var index = 0; index < googleWord.length; index++) { for (var index = 0; index < word.length; index++) {
expect(letters.elementAt(index).index, equals(index)); expect(letters.elementAt(index).index, equals(index));
} }
}, },
); );
flameBlocTester.testGameWidget(
'adds GameBonus.word to the game when all letters are activated',
setUp: (game, _) async {
final ball = Ball(baseColor: const Color(0xFFFF0000));
final googleWord = GoogleWord(position: Vector2.zero());
await game.ensureAddAll([googleWord, ball]);
final letters = googleWord.children.whereType<GoogleLetter>();
expect(letters, isNotEmpty);
for (final letter in letters) {
beginContact(game, letter, ball);
await game.ready();
if (letter == letters.last) {
verify(
() => gameBloc.add(const BonusActivated(GameBonus.word)),
).called(1);
} else {
verifyNever(
() => gameBloc.add(const BonusActivated(GameBonus.word)),
);
}
}
},
);
}); });
} }

Loading…
Cancel
Save