Files
flame/test/effects/combined_effect_test.dart
Erick 19ff80a0eb Adds checking for trailling commas on the project (#670)
* Testing a new linter option for trailling commas

* Checking trailling commas on linter
2021-02-18 11:31:45 -03:00

189 lines
5.2 KiB
Dart

import 'dart:math';
import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flutter_test/flutter_test.dart';
import 'effect_test_utils.dart';
void main() {
final Random random = Random();
Vector2 randomVector2() => (Vector2.random(random) * 100)..round();
double randomAngle() => 1.0 + random.nextInt(5);
double randomDuration() => 1.0 + random.nextInt(100);
final Vector2 argumentSize = randomVector2();
final double argumentAngle = randomAngle();
final List<Vector2> path = List.generate(3, (i) => randomVector2());
TestComponent component() {
return TestComponent(
position: randomVector2(),
size: randomVector2(),
angle: randomAngle(),
);
}
CombinedEffect effect({
bool isInfinite = false,
bool isAlternating = false,
bool hasAlternatingMoveEffect = false,
bool hasAlternatingRotateEffect = false,
bool hasAlternatingScaleEffect = false,
}) {
final MoveEffect move = MoveEffect(
path: path,
duration: randomDuration(),
isAlternating: hasAlternatingMoveEffect,
);
final RotateEffect rotate = RotateEffect(
angle: argumentAngle,
duration: randomDuration(),
isAlternating: hasAlternatingRotateEffect,
);
final ScaleEffect scale = ScaleEffect(
size: argumentSize,
duration: randomDuration(),
isAlternating: hasAlternatingScaleEffect,
);
return CombinedEffect(
effects: [move, scale, rotate],
isInfinite: isInfinite,
isAlternating: isAlternating,
);
}
testWidgets('CombinedEffect can combine', (WidgetTester tester) async {
final PositionComponent positionComponent = component();
effectTest(
tester,
positionComponent,
effect(),
expectedPosition: path.last,
expectedAngle: argumentAngle,
expectedSize: argumentSize,
);
});
testWidgets(
'CombinedEffect will stop sequence after it is done',
(WidgetTester tester) async {
effectTest(
tester,
component(),
effect(),
expectedPosition: path.last,
expectedAngle: argumentAngle,
expectedSize: argumentSize,
iterations: 1.5,
);
},
);
testWidgets('CombinedEffect can alternate', (WidgetTester tester) async {
final PositionComponent positionComponent = component();
effectTest(
tester,
positionComponent,
effect(isAlternating: true),
expectedPosition: positionComponent.position.clone(),
expectedAngle: positionComponent.angle,
expectedSize: positionComponent.size.clone(),
iterations: 2.0,
);
});
testWidgets(
'CombinedEffect can alternate and be infinite',
(WidgetTester tester) async {
final PositionComponent positionComponent = component();
effectTest(
tester,
positionComponent,
effect(isInfinite: true, isAlternating: true),
expectedPosition: positionComponent.position.clone(),
expectedAngle: positionComponent.angle,
expectedSize: positionComponent.size.clone(),
shouldComplete: false,
);
},
);
testWidgets(
'CombinedEffect alternation can peak',
(WidgetTester tester) async {
final PositionComponent positionComponent = component();
effectTest(
tester,
positionComponent,
effect(isAlternating: true),
expectedPosition: path.last,
expectedAngle: argumentAngle,
expectedSize: argumentSize,
shouldComplete: false,
iterations: 0.5,
);
},
);
testWidgets('CombinedEffect can be infinite', (WidgetTester tester) async {
final PositionComponent positionComponent = component();
effectTest(
tester,
positionComponent,
effect(isInfinite: true),
expectedPosition: path.last,
expectedAngle: argumentAngle,
expectedSize: argumentSize,
iterations: 3.0,
shouldComplete: false,
);
});
testWidgets(
'CombinedEffect can contain alternating MoveEffect',
(WidgetTester tester) async {
final PositionComponent positionComponent = component();
effectTest(
tester,
positionComponent,
effect(hasAlternatingMoveEffect: true),
expectedPosition: positionComponent.position.clone(),
expectedAngle: argumentAngle,
expectedSize: argumentSize,
shouldComplete: true,
);
},
);
testWidgets(
'CombinedEffect can contain alternating RotateEffect',
(WidgetTester tester) async {
final PositionComponent positionComponent = component();
effectTest(
tester,
positionComponent,
effect(hasAlternatingRotateEffect: true),
expectedPosition: path.last,
expectedAngle: positionComponent.angle,
expectedSize: argumentSize,
shouldComplete: true,
);
},
);
testWidgets(
'CombinedEffect can contain alternating ScaleEffect',
(WidgetTester tester) async {
final PositionComponent positionComponent = component();
effectTest(
tester,
positionComponent,
effect(hasAlternatingScaleEffect: true),
expectedPosition: path.last,
expectedAngle: argumentAngle,
expectedSize: positionComponent.size.clone(),
shouldComplete: true,
);
},
);
}