LiveTestWidgetsFlutterBinding class

A variant of TestWidgetsFlutterBinding for executing tests in the flutter run environment, on a device. This is intended to allow interactive test development.

This is not the way to run a remote-control test. To run a test on a device from a development computer, see the flutter_driver package and the flutter drive command.

When running tests using flutter run, consider adding the --use-test-fonts argument so that the fonts used match those used under flutter test. (This forces all text to use the "Ahem" font, which is a font that covers ASCII characters and gives them all the appearance of a square whose size equals the font size.)

This binding overrides the default SchedulerBinding behavior to ensure that tests work in the same way in this environment as they would under the AutomatedTestWidgetsFlutterBinding. To override this (and see intermediate frames that the test does not explicitly trigger), set framePolicy to LiveTestWidgetsFlutterBindingFramePolicy.fullyLive. (This is likely to make tests fail, though, especially if e.g. they test how many times a particular widget was built.) The default behavior is to show pumped frames and a few additional frames when pointers are triggered (to animate the pointer crosshairs).

This binding does not support the EnginePhase argument to pump. (There would be no point setting it to a value that doesn't trigger a paint, since then you could not see anything anyway.)

Inheritance

Constructors

LiveTestWidgetsFlutterBinding()

Properties

clock Clock
The current time. [...]
read-only, override
defaultTestTimeout Timeout
The default test timeout for tests when using this binding. [...]
read-only, override
deviceEventDispatcher HitTestDispatcher
An object to which real device events should be routed. [...]
read / write
framePolicy LiveTestWidgetsFlutterBindingFramePolicy
Whether to have pump with a duration only pump a single frame (as would happen in a normal test environment using AutomatedTestWidgetsFlutterBinding), or whether to instead pump every frame that the system requests during any asynchronous pause in the test (as would normally happen when running an application with WidgetsFlutterBinding). [...]
read / write
inTest bool
Whether there is currently a test executing.
read-only, override
microtaskCount int
The number of outstanding microtasks in the queue.
read-only, override
renderView ↔ _LiveTestRenderView
The render tree that's attached to the output surface.
read / write, inherited-setter, override-getter
accessibilityFeatures AccessibilityFeatures
The currently active set of AccessibilityFeatures. [...]
read-only, inherited
buildOwner BuildOwner
The BuildOwner in charge of executing the build pipeline for the widget tree rooted at this binding.
read-only, inherited
checkIntrinsicSizes bool
The value to set debugCheckIntrinsicSizes to while tests are running. [...]
@protected, read-only, inherited
currentFrameTimeStamp Duration
The time stamp for the frame currently being processed. [...]
read-only, inherited
debugBuildingDirtyElements bool
Whether we are currently in a frame. This is used to verify that frames are not scheduled redundantly. [...]
@protected, read / write, inherited
debugDidSendFirstFrameEvent bool
Whether the first frame has finished rendering. [...]
read-only, inherited
debugPrintOverride DebugPrintCallback
The value to set debugPrint to while tests are running. [...]
@protected, read-only, inherited
decodedCacheRatioCap double
The maximum multiple of the compressed image size used when caching an animated image. [...]
read / write, inherited
disableAnimations bool
The platform is requesting that animations be disabled or simplified. [...]
read-only, inherited
disableShadows bool
The value to set debugDisableShadows to while tests are running. [...]
@protected, read-only, inherited
endOfFrame Future<void>
Returns a Future that completes after the frame completes. [...]
read-only, inherited
focusedEditable EditableTextState
The current client of the onscreen keyboard. Callers must pump an additional frame after setting this property to complete the the focus change. [...]
read / write, inherited
focusManager FocusManager
The object in charge of the focus tree. [...]
read-only, inherited
framesEnabled bool
Whether frames are currently being scheduled when scheduleFrame is called. [...]
read-only, inherited
gestureArena GestureArenaManager
The gesture arenas used for disambiguating the meaning of sequences of pointer events.
final, inherited
hashCode int
The hash code for this object. [...]
read-only, inherited
hasScheduledFrame bool
Whether this scheduler has requested that handleBeginFrame be called soon.
read-only, inherited
imageCache ImageCache
The singleton that implements the Flutter framework's image cache. [...]
read-only, inherited
lifecycleState AppLifecycleState
Whether the application is visible, and if so, whether it is currently interactive. [...]
read-only, inherited
locked bool
Whether lockEvents is currently locking events. [...]
@protected, read-only, inherited
pipelineOwner PipelineOwner
The render tree's owner, which maintains dirty state for layout, composite, paint, and accessibility semantics
read-only, inherited
pointerRouter PointerRouter
A router that routes all pointer events received from the engine.
final, inherited
renderViewElement Element
The Element that is at the root of the hierarchy (and which wraps the RenderView object at the root of the rendering hierarchy). [...]
read-only, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited
schedulerPhase SchedulerPhase
The phase that the scheduler is currently operating under.
read-only, inherited
schedulingStrategy SchedulingStrategy
The strategy to use when deciding whether to run a task or not. [...]
read / write, inherited
showAppDumpInErrors bool
Whether to include the output of debugDumpApp() when reporting test failures.
read / write, inherited
testTextInput TestTextInput
A stub for the system's onscreen keyboard. Callers must set the focusedEditable before using this value.
read-only, inherited
transientCallbackCount int
The current number of transient frame callbacks scheduled. [...]
read-only, inherited

Methods

createViewConfiguration() ViewConfiguration
Returns a ViewConfiguration configured for the RenderView based on the current environment. [...]
override
dispatchEvent(PointerEvent event, HitTestResult result, { TestBindingEventSource source: TestBindingEventSource.device }) → void
Dispatch an event to a hit test result's path. [...]
override
globalToLocal(Offset point) Offset
Convert the given point from the global coordinate system (as used by pointer events from the device) to the coordinate system used by the tests (an 800 by 600 window).
override
handleBeginFrame(Duration rawTimeStamp) → void
Called by the engine to prepare the framework to produce a new frame. [...]
override
handleDrawFrame() → void
Called by the engine to produce a new frame. [...]
override
initInstances() → void
The initialization method. Subclasses override this method to hook into the platform and otherwise configure their services. Subclasses must call "super.initInstances()". [...]
override
initRenderView() → void
Creates a RenderView object to be the root of the RenderObject rendering tree, and initializes it so that it will be rendered when the engine is next ready to display a frame. [...]
override
localToGlobal(Offset point) Offset
Convert the given point from the coordinate system used by the tests (an 800 by 600 window) to the global coordinate system (as used by pointer events from the device).
override
postTest() → void
Called by the testWidgets function after a test is executed.
override
pump([Duration duration, EnginePhase newPhase = EnginePhase.sendSemanticsUpdate ]) Future<void>
Triggers a frame sequence (build/layout/paint/etc), then flushes microtasks. [...]
override
reportExceptionNoticed(FlutterErrorDetails exception) → void
Called when the framework catches an exception, even if that exception is being handled by takeException. [...]
override
runAsync<T>(Future<T> callback(), { Duration additionalTime: const Duration(milliseconds: 250) }) Future<T>
Runs a callback that performs real asynchronous work. [...]
override
runTest(Future<void> testBody(), VoidCallback invariantTester, { String description: '' }) Future<void>
Call the testBody inside a FakeAsync scope on which pump can advance time. [...]
override
scheduleForcedFrame() → void
Schedules a new frame by calling Window.scheduleFrame. [...]
override
scheduleFrame() → void
If necessary, schedules a new frame by calling Window.scheduleFrame. [...]
override
addObserver(WidgetsBindingObserver observer) → void
Registers the given object as a binding observer. Binding observers are notified when various application events occur, for example when the system locale changes. Generally, one widget in the widget tree registers itself as a binding observer, and converts the system state into inherited widgets. [...]
inherited
addPersistentFrameCallback(FrameCallback callback) → void
Adds a persistent frame callback. [...]
inherited
addPostFrameCallback(FrameCallback callback) → void
Schedule a callback for the end of this frame. [...]
inherited
allowFirstFrameReport() → void
When called after deferFirstFrameReport: tell the framework to report the frame it is building as a "useful" first frame. [...]
inherited
asyncBarrier() → void
This is called during test execution before and after the body has been executed. [...]
inherited
attachRootWidget(Widget rootWidget) → void
Takes a widget and attaches it to the renderViewElement, creating it if necessary. [...]
inherited
cancelFrameCallbackWithId(int id) → void
Cancels the transient frame callback with the given id. [...]
inherited
cancelPointer(int pointer) → void
Dispatch a PointerCancelEvent for the given pointer soon. [...]
inherited
createImageCache() ImageCache
Creates the ImageCache singleton (accessible via imageCache). [...]
@protected, inherited
debugAssertNoTransientCallbacks(String reason) bool
Asserts that there are no registered transient callbacks; if there are, prints their locations and throws an exception. [...]
inherited
deferFirstFrameReport() → void
Tell the framework not to report the frame it is building as a "useful" first frame until there is a corresponding call to allowFirstFrameReport. [...]
inherited
dispatchAccessibilityFeaturesChanged() → void
Notify all the observers that the active set of AccessibilityFeatures has changed (using WidgetsBindingObserver.didChangeAccessibilityFeatures), giving them the features argument. [...]
@mustCallSuper, @protected, inherited
dispatchLocalesChanged(List<Locale> locales) → void
Notify all the observers that the locale has changed (using WidgetsBindingObserver.didChangeLocales), giving them the locales argument. [...]
@mustCallSuper, @protected, inherited
drawFrame() → void
Pump the build and rendering pipeline to generate a frame. [...]
inherited
ensureVisualUpdate() → void
Schedules a new frame using scheduleFrame if this object is not currently producing a frame. [...]
inherited
evict(String asset) → void
Called in response to the ext.flutter.evict service extension. [...]
inherited
handleAccessibilityFeaturesChanged() → void
Called when the platform accessibility features change. [...]
inherited
handleAppLifecycleStateChanged(AppLifecycleState state) → void
Called when the application lifecycle state changes. [...]
inherited
handleEvent(PointerEvent event, HitTestEntry entry) → void
Override this method to receive events.
inherited
handleEventLoopCallback() bool
Execute the highest-priority task, if it is of a high enough priority. [...]
@visibleForTesting, inherited
handleLocaleChanged() → void
Called when the system locale changes. [...]
@mustCallSuper, @protected, inherited
handleMemoryPressure() → void
Called when the operating system notifies the application of a memory pressure situation. [...]
inherited
handleMetricsChanged() → void
Called when the system metrics change. [...]
inherited
handlePopRoute() Future<void>
Called when the system pops the current route. [...]
@protected, inherited
handlePushRoute(String route) Future<void>
Called when the host tells the app to push a new route onto the navigator. [...]
@mustCallSuper, @protected, inherited
handleTextScaleFactorChanged() → void
Called when the platform text scale factor changes. [...]
inherited
hitTest(HitTestResult result, Offset position) → void
Check whether the given position hits this object. [...]
inherited
idle() Future<void>
Acts as if the application went idle. [...]
inherited
initLicenses() → void
Adds relevant licenses to the LicenseRegistry. [...]
inherited
initServiceExtensions() → void
Called when the binding is initialized, to register service extensions. [...]
inherited
instantiateImageCodec(Uint8List list) Future<Codec>
Calls through to dart:ui with decodedCacheRatioCap from ImageCache.
inherited
lockEvents(Future<void> callback()) Future<void>
Locks the dispatching of asynchronous events and callbacks until the callback's future completes. [...]
@protected, inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
inherited
performReassemble() Future<void>
This method is called by reassembleApplication to actually cause the application to reassemble, e.g. after a hot reload. [...]
inherited
reassembleApplication() Future<void>
Cause the entire application to redraw, e.g. after a hot reload. [...]
inherited
registerBoolServiceExtension({String name, AsyncValueGetter<bool> getter, AsyncValueSetter<bool> setter }) → void
Registers a service extension method with the given name (full name "ext.flutter.name"), which takes a single argument "enabled" which can have the value "true" or the value "false" or can be omitted to read the current value. (Any value other than "true" is considered equivalent to "false". Other arguments are ignored.) [...]
@protected, inherited
registerNumericServiceExtension({String name, AsyncValueGetter<double> getter, AsyncValueSetter<double> setter }) → void
Registers a service extension method with the given name (full name "ext.flutter.name"), which takes a single argument with the same name as the method which, if present, must have a value that can be parsed by double.parse, and can be omitted to read the current value. (Other arguments are ignored.) [...]
@protected, inherited
registerServiceExtension({String name, ServiceExtensionCallback callback }) → void
Registers a service extension method with the given name (full name "ext.flutter.name"). [...]
@protected, inherited
registerSignalServiceExtension({String name, AsyncCallback callback }) → void
Registers a service extension method with the given name (full name "ext.flutter.name"), which takes no arguments and returns no value. [...]
@protected, inherited
registerStringServiceExtension({String name, AsyncValueGetter<String> getter, AsyncValueSetter<String> setter }) → void
Registers a service extension method with the given name (full name "ext.flutter.name"), which optionally takes a single argument with the name "value". If the argument is omitted, the value is to be read, otherwise it is to be set. Returns the current value. [...]
@protected, inherited
removeObserver(WidgetsBindingObserver observer) bool
Unregisters the given observer. This should be used sparingly as it is relatively expensive (O(N) in the number of registered observers). [...]
inherited
resetEpoch() → void
Prepares the scheduler for a non-monotonic change to how time stamps are calculated. [...]
inherited
scheduleFrameCallback(FrameCallback callback, { bool rescheduling: false }) int
Schedules the given transient frame callback. [...]
inherited
scheduleTask<T>(TaskCallback<T> task, Priority priority, { String debugLabel, Flow flow }) Future<T>
Schedules the given task with the given priority and returns a Future that completes to the task's eventual return value. [...]
inherited
scheduleWarmUpFrame() → void
Schedule a frame to run as soon as possible, rather than waiting for the engine to request a frame in response to a system "Vsync" signal. [...]
inherited
setLocale(String languageCode, String countryCode) Future<void>
Artificially calls dispatchLocalesChanged on the Widget binding, then flushes microtasks. [...]
inherited
setLocales(List<Locale> locales) Future<void>
Artificially calls dispatchLocalesChanged on the Widget binding, then flushes microtasks.
inherited
setSemanticsEnabled(bool enabled) → void
Whether the render tree associated with this binding should produce a tree of SemanticsNode objects.
inherited
setSurfaceSize(Size size) Future<void>
Artificially changes the surface size to size on the Widget binding, then flushes microtasks. [...]
inherited
takeException() → dynamic
Returns the exception most recently caught by the Flutter framework. [...]
inherited
toString() String
Returns a string representation of this object.
inherited
unlocked() → void
Called by lockEvents when events get unlocked. [...]
inherited

Operators

operator ==(dynamic other) bool
The equality operator. [...]
inherited