blob: e1da397ed854ad20ee31188bb2d779d185081137 [file] [log] [blame]
// Copyright 2016 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 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart';
void main() {
testWidgets('Back during pushReplacement', (WidgetTester tester) async {
await tester.pumpWidget(MaterialApp(
home: const Material(child: Text('home')),
routes: <String, WidgetBuilder>{
'/a': (BuildContext context) => const Material(child: Text('a')),
'/b': (BuildContext context) => const Material(child: Text('b')),
},
));
final NavigatorState navigator = tester.state(find.byType(Navigator));
navigator.pushNamed('/a');
await tester.pumpAndSettle();
expect(find.text('a'), findsOneWidget);
expect(find.text('home'), findsNothing);
navigator.pushReplacementNamed('/b');
await tester.pump();
await tester.pump(const Duration(milliseconds: 10));
expect(find.text('a'), findsOneWidget);
expect(find.text('b'), findsOneWidget);
expect(find.text('home'), findsNothing);
navigator.pop();
await tester.pumpAndSettle();
expect(find.text('a'), findsNothing);
expect(find.text('b'), findsNothing);
expect(find.text('home'), findsOneWidget);
});
testWidgets('pushAndRemoveUntil', (WidgetTester tester) async {
await tester.pumpWidget(MaterialApp(
home: const Material(child: Text('home')),
routes: <String, WidgetBuilder>{
'/a': (BuildContext context) => const Material(child: Text('a')),
'/b': (BuildContext context) => const Material(child: Text('b')),
},
));
final NavigatorState navigator = tester.state(find.byType(Navigator));
navigator.pushNamed('/a');
await tester.pumpAndSettle();
expect(find.text('home', skipOffstage: false), findsOneWidget);
expect(find.text('a', skipOffstage: false), findsOneWidget);
expect(find.text('b', skipOffstage: false), findsNothing);
navigator.pushNamedAndRemoveUntil('/b', (Route<dynamic> route) => false);
await tester.pumpAndSettle();
expect(find.text('home', skipOffstage: false), findsNothing);
expect(find.text('a', skipOffstage: false), findsNothing);
expect(find.text('b', skipOffstage: false), findsOneWidget);
navigator.pushNamed('/');
await tester.pumpAndSettle();
expect(find.text('home', skipOffstage: false), findsOneWidget);
expect(find.text('a', skipOffstage: false), findsNothing);
expect(find.text('b', skipOffstage: false), findsOneWidget);
navigator.pushNamedAndRemoveUntil('/a', ModalRoute.withName('/b'));
await tester.pumpAndSettle();
expect(find.text('home', skipOffstage: false), findsNothing);
expect(find.text('a', skipOffstage: false), findsOneWidget);
expect(find.text('b', skipOffstage: false), findsOneWidget);
});
}