| // Copyright 2014 The Flutter 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 'package:flutter/material.dart'; | |
| import 'package:flutter_api_samples/widgets/basic/indexed_stack.0.dart' | |
| as example; | |
| import 'package:flutter_test/flutter_test.dart'; | |
| void main() { | |
| testWidgets('has correct forward rendering mechanism', ( | |
| WidgetTester tester, | |
| ) async { | |
| await tester.pumpWidget(const example.IndexedStackApp()); | |
| final Finder gesture2 = find.byKey(const Key('gesture2')); | |
| final Element containerFinder = find | |
| .byKey(const Key('Dash'), skipOffstage: false) | |
| .evaluate() | |
| .first; | |
| expect(containerFinder.renderObject!.debugNeedsPaint, false); | |
| final Element containerFinder1 = find | |
| .byKey(const Key('John'), skipOffstage: false) | |
| .evaluate() | |
| .first; | |
| expect(containerFinder1.renderObject!.debugNeedsPaint, true); | |
| final Element containerFinder2 = find | |
| .byKey(const Key('Mary'), skipOffstage: false) | |
| .evaluate() | |
| .first; | |
| expect(containerFinder2.renderObject!.debugNeedsPaint, true); | |
| await tester.tap(gesture2); | |
| await tester.pump(); | |
| expect(containerFinder.renderObject!.debugNeedsPaint, false); | |
| expect(containerFinder1.renderObject!.debugNeedsPaint, false); | |
| expect(containerFinder2.renderObject!.debugNeedsPaint, true); | |
| await tester.tap(gesture2); | |
| await tester.pump(); | |
| expect(containerFinder.renderObject!.debugNeedsPaint, false); | |
| expect(containerFinder1.renderObject!.debugNeedsPaint, false); | |
| expect(containerFinder2.renderObject!.debugNeedsPaint, false); | |
| }); | |
| testWidgets('has correct backward rendering mechanism', ( | |
| WidgetTester tester, | |
| ) async { | |
| await tester.pumpWidget(const example.IndexedStackApp()); | |
| final Finder gesture1 = find.byKey(const Key('gesture1')); | |
| final Element containerFinder = find | |
| .byKey(const Key('Dash'), skipOffstage: false) | |
| .evaluate() | |
| .first; | |
| final Element containerFinder1 = find | |
| .byKey(const Key('John'), skipOffstage: false) | |
| .evaluate() | |
| .first; | |
| final Element containerFinder2 = find | |
| .byKey(const Key('Mary'), skipOffstage: false) | |
| .evaluate() | |
| .first; | |
| await tester.tap(gesture1); | |
| await tester.pump(); | |
| expect(containerFinder.renderObject!.debugNeedsPaint, false); | |
| expect(containerFinder1.renderObject!.debugNeedsPaint, true); | |
| expect(containerFinder2.renderObject!.debugNeedsPaint, false); | |
| await tester.tap(gesture1); | |
| await tester.pump(); | |
| expect(containerFinder.renderObject!.debugNeedsPaint, false); | |
| expect(containerFinder1.renderObject!.debugNeedsPaint, false); | |
| expect(containerFinder2.renderObject!.debugNeedsPaint, false); | |
| }); | |
| testWidgets('has correct element addition handling', ( | |
| WidgetTester tester, | |
| ) async { | |
| await tester.pumpWidget(const example.IndexedStackApp()); | |
| expect(find.byType(example.PersonTracker), findsOneWidget); | |
| expect( | |
| find.byType(example.PersonTracker, skipOffstage: false), | |
| findsNWidgets(3), | |
| ); | |
| final Finder textField = find.byType(TextField); | |
| await tester.enterText(textField, 'hello'); | |
| await tester.testTextInput.receiveAction(TextInputAction.done); | |
| await tester.pump(); | |
| expect( | |
| find.byType(example.PersonTracker, skipOffstage: false), | |
| findsNWidgets(4), | |
| ); | |
| await tester.enterText(textField, 'hello1'); | |
| await tester.testTextInput.receiveAction(TextInputAction.done); | |
| await tester.pump(); | |
| expect( | |
| find.byType(example.PersonTracker, skipOffstage: false), | |
| findsNWidgets(5), | |
| ); | |
| }); | |
| testWidgets('has state preservation', (WidgetTester tester) async { | |
| await tester.pumpWidget(const example.IndexedStackApp()); | |
| final Finder gesture1 = find.byKey(const Key('gesture1')); | |
| final Finder gesture2 = find.byKey(const Key('gesture2')); | |
| final Finder containerFinder = find.byKey(const Key('Dash')); | |
| final Finder incrementFinder = find.byKey(const Key('incrementDash')); | |
| Finder counterFinder(int score) { | |
| return find.descendant( | |
| of: containerFinder, | |
| matching: find.text('Score: $score'), | |
| ); | |
| } | |
| expect(counterFinder(0), findsOneWidget); | |
| await tester.tap(incrementFinder); | |
| await tester.pump(); | |
| expect(counterFinder(1), findsOneWidget); | |
| await tester.tap(gesture2); | |
| await tester.pump(); | |
| await tester.tap(gesture1); | |
| await tester.pump(); | |
| expect(counterFinder(1), findsOneWidget); | |
| expect(counterFinder(0), findsNothing); | |
| }); | |
| } |