diff --git a/animations/test/misc/hero_animation_test.dart b/animations/test/misc/hero_animation_test.dart new file mode 100644 index 000000000..866c2e9e3 --- /dev/null +++ b/animations/test/misc/hero_animation_test.dart @@ -0,0 +1,91 @@ +// Copyright 2020 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:animations/src/misc/hero_animation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +Widget createHeroAnimationDemoScreen() => MaterialApp( + home: HeroAnimationDemo(), + ); + +void main() { + group('Hero Animation Tests', () { + testWidgets('Size of Container changes on Tap', (tester) async { + await tester.pumpWidget(createHeroAnimationDemoScreen()); + + // Get the initial Container. + var initialContainer = tester.firstWidget(find.byType(Container)); + + // Get the size of initial Container. + var initialSize = tester.getSize(find.byWidget(initialContainer)); + + // Tap on the Gesture Detector. + await tester.tap(find.byType(GestureDetector)); + await tester.pumpAndSettle(); + + // Get the final Container. + var finalContainer = tester.firstWidget(find.byType(Container)); + + // Get the size of final Container. + var finalSize = tester.getSize(find.byWidget(finalContainer)); + + // initialSize should be less than finalSize. + expect( + initialSize, + lessThan(finalSize), + ); + }); + + testWidgets('Color of Container changes on Tap', (tester) async { + await tester.pumpWidget(createHeroAnimationDemoScreen()); + + // Get the initial Container. + final initialContainer = + tester.firstWidget(find.byType(Container)) as Container; + + // Initial color should be Color.grey[300]. + expect( + (initialContainer.decoration as BoxDecoration).color, + Colors.grey[300], + ); + + // Tap on the GestureDetector. + await tester.tap(find.byType(GestureDetector)); + await tester.pumpAndSettle(); + + // Get the final Container. + final finalContainer = + tester.firstWidget(find.byType(Container)) as Container; + + // Final color should not be same as initial color. + expect( + (finalContainer.decoration as BoxDecoration).color, + isNot( + equals((initialContainer.decoration as BoxDecoration).color), + ), + ); + }); + + testWidgets('Screen Changes on Tap', (tester) async { + await tester.pumpWidget(createHeroAnimationDemoScreen()); + + // Get the initial Screen. + final initialScreen = tester.firstWidget(find.byType(HeroAnimationDemo)); + + // Tap on the GestureDetector. + await tester.tap(find.byType(GestureDetector)); + await tester.pumpAndSettle(); + + // Get the screen after navigation. + final finalScreen = tester.firstWidget(find.byType(HeroPage)); + + // initialScreen should not be same as finalScreen. + expect( + initialScreen, + isNot(equals(finalScreen)), + ); + }); + }); +}