| // 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 'package:flutter_test/flutter_test.dart'; |
| import 'package:flutter/material.dart'; |
| import 'package:test/test.dart'; |
| |
| import 'test_matchers.dart'; |
| |
| class TestOverlayRoute extends OverlayRoute { |
| List<WidgetBuilder> get builders => <WidgetBuilder>[ _build ]; |
| Widget _build(BuildContext context) => new Text('Overlay'); |
| } |
| |
| void main() { |
| test('Check onstage/offstage handling around transitions', () { |
| testWidgets((WidgetTester tester) { |
| GlobalKey containerKey1 = new GlobalKey(); |
| GlobalKey containerKey2 = new GlobalKey(); |
| final Map<String, RouteBuilder> routes = <String, RouteBuilder>{ |
| '/': (_) => new Container(key: containerKey1, child: new Text('Home')), |
| '/settings': (_) => new Container(key: containerKey2, child: new Text('Settings')), |
| }; |
| |
| tester.pumpWidget(new MaterialApp(routes: routes)); |
| |
| expect(tester.findText('Home'), isOnStage); |
| expect(tester.findText('Settings'), isNull); |
| expect(tester.findText('Overlay'), isNull); |
| |
| expect(Navigator.canPop(containerKey1.currentContext), isFalse); |
| Navigator.pushNamed(containerKey1.currentContext, '/settings'); |
| expect(Navigator.canPop(containerKey1.currentContext), isTrue); |
| |
| tester.pump(); |
| |
| expect(tester.findText('Home'), isOnStage); |
| expect(tester.findText('Settings'), isOffStage); |
| expect(tester.findText('Overlay'), isNull); |
| |
| tester.pump(const Duration(milliseconds: 16)); |
| |
| expect(tester.findText('Home'), isOnStage); |
| expect(tester.findText('Settings'), isOnStage); |
| expect(tester.findText('Overlay'), isNull); |
| |
| tester.pump(const Duration(seconds: 1)); |
| |
| expect(tester.findText('Home'), isNull); |
| expect(tester.findText('Settings'), isOnStage); |
| expect(tester.findText('Overlay'), isNull); |
| |
| Navigator.push(containerKey2.currentContext, new TestOverlayRoute()); |
| |
| tester.pump(); |
| |
| expect(tester.findText('Home'), isNull); |
| expect(tester.findText('Settings'), isOnStage); |
| expect(tester.findText('Overlay'), isOnStage); |
| |
| tester.pump(const Duration(seconds: 1)); |
| |
| expect(tester.findText('Home'), isNull); |
| expect(tester.findText('Settings'), isOnStage); |
| expect(tester.findText('Overlay'), isOnStage); |
| |
| expect(Navigator.canPop(containerKey2.currentContext), isTrue); |
| Navigator.pop(containerKey2.currentContext); |
| tester.pump(); |
| |
| expect(tester.findText('Home'), isNull); |
| expect(tester.findText('Settings'), isOnStage); |
| expect(tester.findText('Overlay'), isNull); |
| |
| tester.pump(const Duration(seconds: 1)); |
| |
| expect(tester.findText('Home'), isNull); |
| expect(tester.findText('Settings'), isOnStage); |
| expect(tester.findText('Overlay'), isNull); |
| |
| expect(Navigator.canPop(containerKey2.currentContext), isTrue); |
| Navigator.pop(containerKey2.currentContext); |
| tester.pump(); |
| |
| expect(tester.findText('Home'), isOnStage); |
| expect(tester.findText('Settings'), isOnStage); |
| expect(tester.findText('Overlay'), isNull); |
| |
| tester.pump(const Duration(seconds: 1)); |
| |
| expect(tester.findText('Home'), isOnStage); |
| expect(tester.findText('Settings'), isNull); |
| expect(tester.findText('Overlay'), isNull); |
| |
| expect(Navigator.canPop(containerKey1.currentContext), isFalse); |
| |
| }); |
| }); |
| } |