| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:ui'; |
| |
| import 'package:flutter_sprites/flutter_sprites.dart'; |
| import 'package:test/test.dart'; |
| |
| const double epsilon = 0.01; |
| |
| void main() { |
| test("Actions - ActionTween", () { |
| // Tween doubles. |
| double doubleValue; |
| ActionTween tween = new ActionTween((double a) => doubleValue = a, 0.0, 10.0, 60.0); |
| |
| tween.update(0.0); |
| expect(doubleValue, closeTo(0.0, epsilon)); |
| |
| tween.update(0.1); |
| expect(doubleValue, closeTo(1.0, epsilon)); |
| |
| tween.update(0.5); |
| expect(doubleValue, closeTo(5.0, epsilon)); |
| |
| tween.update(1.0); |
| expect(doubleValue, closeTo(10.0, epsilon)); |
| |
| tween.update(1.5); |
| expect(doubleValue, closeTo(15.0, epsilon)); |
| |
| tween.update(-0.5); |
| expect(doubleValue, closeTo(-5.0, epsilon)); |
| |
| // Tween Points. |
| Point pointValue; |
| tween = new ActionTween((Point a) => pointValue = a, Point.origin, new Point(10.0, 20.0), 60.0); |
| |
| tween.update(0.0); |
| expect(pointValue.x, closeTo(0.0, epsilon)); |
| expect(pointValue.y, closeTo(0.0, epsilon)); |
| |
| tween.update(0.1); |
| expect(pointValue.x, closeTo(1.0, epsilon)); |
| expect(pointValue.y, closeTo(2.0, epsilon)); |
| |
| tween.update(0.5); |
| expect(pointValue.x, closeTo(5.0, epsilon)); |
| expect(pointValue.y, closeTo(10.0, epsilon)); |
| |
| tween.update(1.0); |
| expect(pointValue.x, closeTo(10.0, epsilon)); |
| expect(pointValue.y, closeTo(20.0, epsilon)); |
| |
| tween.update(1.5); |
| expect(pointValue.x, closeTo(15.0, epsilon)); |
| expect(pointValue.y, closeTo(30.0, epsilon)); |
| |
| tween.update(-0.5); |
| expect(pointValue.x, closeTo(-5.0, epsilon)); |
| expect(pointValue.y, closeTo(-10.0, epsilon)); |
| |
| // Tween Colors. |
| Color colorValue; |
| tween = new ActionTween((Color a) => colorValue = a, const Color(0xff000000), const Color(0xffffffff), 60.0); |
| |
| tween.update(0.0); |
| expect(colorValue, equals(const Color(0xff000000))); |
| |
| tween.update(0.5); |
| expect(colorValue, equals(const Color(0xff7f7f7f))); |
| |
| tween.update(1.0); |
| expect(colorValue, equals(const Color(0xffffffff))); |
| |
| tween.update(-0.5); |
| expect(colorValue, equals(const Color(0xff000000))); |
| |
| tween.update(1.5); |
| expect(colorValue, equals(const Color(0xffffffff))); |
| |
| // Tween Size. |
| Size sizeValue; |
| tween = new ActionTween((Size a) => sizeValue = a, Size.zero, const Size(200.0, 100.0), 60.0); |
| |
| tween.update(0.0); |
| expect(sizeValue, equals(Size.zero)); |
| |
| tween.update(1.0); |
| expect(sizeValue, equals(const Size(200.0, 100.0))); |
| |
| tween.update(0.5); |
| expect(sizeValue.width, closeTo(100.0, epsilon)); |
| expect(sizeValue.height, closeTo(50.0, epsilon)); |
| |
| // Tween Rect. |
| Rect rectValue; |
| tween = new ActionTween( |
| (Rect a) => rectValue = a, |
| new Rect.fromLTWH(0.0, 0.0, 100.0, 100.0), |
| new Rect.fromLTWH(100.0, 100.0, 200.0, 200.0), |
| 60.0 |
| ); |
| |
| tween.update(0.0); |
| expect(rectValue, equals(new Rect.fromLTWH(0.0, 0.0, 100.0, 100.0))); |
| |
| tween.update(1.0); |
| expect(rectValue, equals(new Rect.fromLTWH(100.0, 100.0, 200.0, 200.0))); |
| |
| tween.update(0.5); |
| expect(rectValue.left, closeTo(50.0, epsilon)); |
| expect(rectValue.top, closeTo(50.0, epsilon)); |
| expect(rectValue.width, closeTo(150.0, epsilon)); |
| expect(rectValue.height, closeTo(150.0, epsilon)); |
| }); |
| |
| test("Actions - ActionRepeat", () { |
| double doubleValue; |
| ActionTween tween = new ActionTween((double a) => doubleValue = a, 0.0, 1.0, 60.0); |
| |
| ActionRepeat repeat2x = new ActionRepeat(tween, 2); |
| expect(repeat2x.duration, closeTo(120.0, epsilon)); |
| |
| repeat2x.update(0.0); |
| expect(doubleValue, closeTo(0.0, epsilon)); |
| |
| repeat2x.update(0.25); |
| expect(doubleValue, closeTo(0.5, epsilon)); |
| |
| repeat2x.update(0.75); |
| expect(doubleValue, closeTo(0.5, epsilon)); |
| |
| repeat2x.update(1.0); |
| expect(doubleValue, closeTo(1.0, epsilon)); |
| |
| ActionRepeat repeat4x = new ActionRepeat(tween, 4); |
| expect(repeat4x.duration, closeTo(240.0, epsilon)); |
| |
| repeat4x.update(0.0); |
| expect(doubleValue, closeTo(0.0, epsilon)); |
| |
| repeat4x.update(0.125); |
| expect(doubleValue, closeTo(0.5, epsilon)); |
| |
| repeat4x.update(0.875); |
| expect(doubleValue, closeTo(0.5, epsilon)); |
| |
| repeat4x.update(1.0); |
| expect(doubleValue, closeTo(1.0, epsilon)); |
| }); |
| |
| test("Actions - ActionGroup", () { |
| double value0; |
| double value1; |
| |
| ActionTween tween0 = new ActionTween((double a) => value0 = a, 0.0, 1.0, 10.0); |
| ActionTween tween1 = new ActionTween((double a) => value1 = a, 0.0, 1.0, 20.0); |
| |
| ActionGroup group = new ActionGroup(<ActionTween>[tween0, tween1]); |
| expect(group.duration, closeTo(20.0, epsilon)); |
| |
| group.update(0.0); |
| expect(value0, closeTo(0.0, epsilon)); |
| expect(value1, closeTo(0.0, epsilon)); |
| |
| group.update(0.5); |
| expect(value0, closeTo(1.0, epsilon)); |
| expect(value1, closeTo(0.5, epsilon)); |
| |
| group.update(1.0); |
| expect(value0, closeTo(1.0, epsilon)); |
| expect(value1, closeTo(1.0, epsilon)); |
| }); |
| |
| test("Actions - ActionSequence", () { |
| double doubleValue; |
| |
| ActionTween tween0 = new ActionTween((double a) => doubleValue = a, 0.0, 1.0, 4.0); |
| ActionTween tween1 = new ActionTween((double a) => doubleValue = a, 1.0, 0.0, 12.0); |
| |
| ActionSequence sequence = new ActionSequence(<ActionTween>[tween0, tween1]); |
| expect(sequence.duration, closeTo(16.0, epsilon)); |
| |
| sequence.update(0.0); |
| expect(doubleValue, closeTo(0.0, epsilon)); |
| |
| sequence.update(0.125); |
| expect(doubleValue, closeTo(0.5, epsilon)); |
| |
| sequence.update(0.25); |
| expect(doubleValue, closeTo(1.0, epsilon)); |
| |
| sequence.update(1.0); |
| expect(doubleValue, closeTo(0.0, epsilon)); |
| }); |
| |
| test("Actions - stepping", () { |
| double doubleValue; |
| |
| ActionTween tween = new ActionTween((double a) => doubleValue = a, 0.0, 1.0, 60.0); |
| |
| tween.step(0.0); |
| expect(doubleValue, closeTo(0.0, epsilon)); |
| |
| tween.step(30.0); |
| expect(doubleValue, closeTo(0.5, epsilon)); |
| |
| tween.step(30.0); |
| expect(doubleValue, closeTo(1.0, epsilon)); |
| }); |
| } |