// 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() => const 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)), ); }); }); }