From 8081455394044dc4836c9c8fc11b5376dc3106bd Mon Sep 17 00:00:00 2001 From: "Ming Lyu (CareF)" Date: Tue, 4 Aug 2020 20:26:05 -0400 Subject: [PATCH] revert widgettester breaking change (#62914) --- packages/flutter_test/lib/src/widget_tester.dart | 6 ++++++ packages/flutter_test/test/widget_tester_test.dart | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/flutter_test/lib/src/widget_tester.dart b/packages/flutter_test/lib/src/widget_tester.dart index 6dbd4a23f1..8e8e4fff64 100644 --- a/packages/flutter_test/lib/src/widget_tester.dart +++ b/packages/flutter_test/lib/src/widget_tester.dart @@ -608,9 +608,12 @@ class WidgetTester extends WidgetController implements HitTestDispatcher, Ticker Future pumpAndSettle([ Duration duration = const Duration(milliseconds: 100), EnginePhase phase = EnginePhase.sendSemanticsUpdate, + Duration timeout = const Duration(minutes: 10), ]) { assert(duration != null); assert(duration > Duration.zero); + assert(timeout != null); + assert(timeout > Duration.zero); assert(() { final WidgetsBinding binding = this.binding; if (binding is LiveTestWidgetsFlutterBinding && @@ -623,8 +626,11 @@ class WidgetTester extends WidgetController implements HitTestDispatcher, Ticker return true; }()); return TestAsyncUtils.guard(() async { + final DateTime endTime = binding.clock.fromNowBy(timeout); int count = 0; do { + if (binding.clock.now().isAfter(endTime)) + throw FlutterError('pumpAndSettle timed out'); await binding.pump(duration, phase); count += 1; } while (binding.hasScheduledFrame); diff --git a/packages/flutter_test/test/widget_tester_test.dart b/packages/flutter_test/test/widget_tester_test.dart index 1e92b16f76..bd91a48d6b 100644 --- a/packages/flutter_test/test/widget_tester_test.dart +++ b/packages/flutter_test/test/widget_tester_test.dart @@ -465,11 +465,21 @@ void main() { testWidgets('pumpAndSettle control test', (WidgetTester tester) async { final AnimationController controller = AnimationController( - duration: const Duration(seconds: 1), + duration: const Duration(minutes: 525600), vsync: const TestVSync(), ); expect(await tester.pumpAndSettle(), 1); controller.forward(); + try { + await tester.pumpAndSettle(); + expect(true, isFalse); + } catch (e) { + expect(e, isFlutterError); + } + controller.stop(); + expect(await tester.pumpAndSettle(), 1); + controller.duration = const Duration(seconds: 1); + controller.forward(); expect(await tester.pumpAndSettle(const Duration(milliseconds: 300)), 5); // 0, 300, 600, 900, 1200ms });