| // 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'; |
| |
| void main() { |
| test('SnackBar control test', () { |
| testWidgets((WidgetTester tester) { |
| String helloSnackBar = 'Hello SnackBar'; |
| Key tapTarget = new Key('tap-target'); |
| tester.pumpWidget(new MaterialApp( |
| routes: <String, RouteBuilder>{ |
| '/': (RouteArguments args) { |
| return new Scaffold( |
| body: new Builder( |
| builder: (BuildContext context) { |
| return new GestureDetector( |
| onTap: () { |
| Scaffold.of(context).showSnackBar(new SnackBar( |
| content: new Text(helloSnackBar), |
| duration: new Duration(seconds: 2) |
| )); |
| }, |
| behavior: HitTestBehavior.opaque, |
| child: new Container( |
| height: 100.0, |
| width: 100.0, |
| key: tapTarget |
| ) |
| ); |
| } |
| ) |
| ); |
| } |
| } |
| )); |
| expect(tester.findText(helloSnackBar), isNull); |
| tester.tap(tester.findElementByKey(tapTarget)); |
| expect(tester.findText(helloSnackBar), isNull); |
| tester.pump(); // schedule animation |
| expect(tester.findText(helloSnackBar), isNotNull); |
| tester.pump(); // begin animation |
| expect(tester.findText(helloSnackBar), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 0.75s // animation last frame; two second timer starts here |
| expect(tester.findText(helloSnackBar), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 1.50s |
| expect(tester.findText(helloSnackBar), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 2.25s |
| expect(tester.findText(helloSnackBar), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 3.00s // timer triggers to dismiss snackbar, reverse animation is scheduled |
| tester.pump(); // begin animation |
| expect(tester.findText(helloSnackBar), isNotNull); // frame 0 of dismiss animation |
| tester.pump(new Duration(milliseconds: 750)); // 3.75s // last frame of animation, snackbar removed from build |
| expect(tester.findText(helloSnackBar), isNull); |
| }); |
| }); |
| |
| test('SnackBar twice test', () { |
| testWidgets((WidgetTester tester) { |
| int snackBarCount = 0; |
| Key tapTarget = new Key('tap-target'); |
| tester.pumpWidget(new MaterialApp( |
| routes: <String, RouteBuilder>{ |
| '/': (RouteArguments args) { |
| return new Scaffold( |
| body: new Builder( |
| builder: (BuildContext context) { |
| return new GestureDetector( |
| onTap: () { |
| snackBarCount += 1; |
| Scaffold.of(context).showSnackBar(new SnackBar( |
| content: new Text("bar$snackBarCount"), |
| duration: new Duration(seconds: 2) |
| )); |
| }, |
| behavior: HitTestBehavior.opaque, |
| child: new Container( |
| height: 100.0, |
| width: 100.0, |
| key: tapTarget |
| ) |
| ); |
| } |
| ) |
| ); |
| } |
| } |
| )); |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.tap(tester.findElementByKey(tapTarget)); // queue bar1 |
| tester.tap(tester.findElementByKey(tapTarget)); // queue bar2 |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(); // schedule animation for bar1 |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(); // begin animation |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(new Duration(milliseconds: 750)); // 0.75s // animation last frame; two second timer starts here |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(new Duration(milliseconds: 750)); // 1.50s |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(new Duration(milliseconds: 750)); // 2.25s |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(new Duration(milliseconds: 750)); // 3.00s // timer triggers to dismiss snackbar, reverse animation is scheduled |
| tester.pump(); // begin animation |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(new Duration(milliseconds: 750)); // 3.75s // last frame of animation, snackbar removed from build, new snack bar put in its place |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNotNull); |
| tester.pump(); // begin animation |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 4.50s // animation last frame; two second timer starts here |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 5.25s |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 6.00s |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 6.75s // timer triggers to dismiss snackbar, reverse animation is scheduled |
| tester.pump(); // begin animation |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 7.50s // last frame of animation, snackbar removed from build, new snack bar put in its place |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNull); |
| }); |
| }); |
| |
| test('SnackBar cancel test', () { |
| testWidgets((WidgetTester tester) { |
| int snackBarCount = 0; |
| Key tapTarget = new Key('tap-target'); |
| int time; |
| ScaffoldFeatureController<SnackBar> lastController; |
| tester.pumpWidget(new MaterialApp( |
| routes: <String, RouteBuilder>{ |
| '/': (RouteArguments args) { |
| return new Scaffold( |
| body: new Builder( |
| builder: (BuildContext context) { |
| return new GestureDetector( |
| onTap: () { |
| snackBarCount += 1; |
| lastController = Scaffold.of(context).showSnackBar(new SnackBar( |
| content: new Text("bar$snackBarCount"), |
| duration: new Duration(seconds: time) |
| )); |
| }, |
| behavior: HitTestBehavior.opaque, |
| child: new Container( |
| height: 100.0, |
| width: 100.0, |
| key: tapTarget |
| ) |
| ); |
| } |
| ) |
| ); |
| } |
| } |
| )); |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNull); |
| time = 1000; |
| tester.tap(tester.findElementByKey(tapTarget)); // queue bar1 |
| ScaffoldFeatureController<SnackBar> firstController = lastController; |
| time = 2; |
| tester.tap(tester.findElementByKey(tapTarget)); // queue bar2 |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(); // schedule animation for bar1 |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(); // begin animation |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(new Duration(milliseconds: 750)); // 0.75s // animation last frame; two second timer starts here |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(new Duration(milliseconds: 750)); // 1.50s |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(new Duration(milliseconds: 750)); // 2.25s |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(new Duration(milliseconds: 10000)); // 12.25s |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| |
| firstController.close(); // snackbar is manually dismissed |
| |
| tester.pump(new Duration(milliseconds: 750)); // 13.00s // reverse animation is scheduled |
| tester.pump(); // begin animation |
| expect(tester.findText('bar1'), isNotNull); |
| expect(tester.findText('bar2'), isNull); |
| tester.pump(new Duration(milliseconds: 750)); // 13.75s // last frame of animation, snackbar removed from build, new snack bar put in its place |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNotNull); |
| tester.pump(); // begin animation |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 14.50s // animation last frame; two second timer starts here |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 15.25s |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 16.00s |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 16.75s // timer triggers to dismiss snackbar, reverse animation is scheduled |
| tester.pump(); // begin animation |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNotNull); |
| tester.pump(new Duration(milliseconds: 750)); // 17.50s // last frame of animation, snackbar removed from build, new snack bar put in its place |
| expect(tester.findText('bar1'), isNull); |
| expect(tester.findText('bar2'), isNull); |
| }); |
| }); |
| } |