| // 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 'dart:ui' as ui; |
| |
| import 'package:quiver/testing/async.dart'; |
| import 'package:quiver/time.dart'; |
| import 'package:flutter/scheduler.dart'; |
| import 'package:flutter/widgets.dart'; |
| |
| import 'instrumentation.dart'; |
| |
| |
| /// Helper class for fluter tests providing fake async. |
| /// |
| /// This class extends Instrumentation to also abstract away the beginFrame |
| /// and async/clock access to allow writing tests which depend on the passage |
| /// of time without actually moving the clock forward. |
| class WidgetTester extends Instrumentation { |
| WidgetTester._(FakeAsync async) |
| : async = async, |
| clock = async.getClock(new DateTime.utc(2015, 1, 1)) { |
| timeDilation = 1.0; |
| ui.window.onBeginFrame = null; |
| runApp(new ErrorWidget()); // flush out the last build entirely |
| } |
| |
| final FakeAsync async; |
| final Clock clock; |
| |
| void pumpWidget(Widget widget, [ Duration duration ]) { |
| runApp(widget); |
| pump(duration); |
| } |
| |
| void setLocale(String languageCode, String countryCode) { |
| ui.Locale locale = new ui.Locale(languageCode, countryCode); |
| binding.dispatchLocaleChanged(locale); |
| async.flushMicrotasks(); |
| } |
| |
| void pump([ Duration duration ]) { |
| if (duration != null) |
| async.elapse(duration); |
| binding.handleBeginFrame(new Duration( |
| milliseconds: clock.now().millisecondsSinceEpoch) |
| ); |
| async.flushMicrotasks(); |
| } |
| } |
| |
| void testWidgets(callback(WidgetTester tester)) { |
| new FakeAsync().run((FakeAsync async) { |
| callback(new WidgetTester._(async)); |
| }); |
| } |