Allow waitUntilFirstFrameRasterized without a root widget (#56430)

This commit is contained in:
Jia Hao 2020-05-14 00:12:03 +08:00 committed by GitHub
parent e88ef6d554
commit 073126fdb3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 0 deletions

View file

@ -31,6 +31,9 @@ class WaitForCondition extends Command {
@override
String get kind => 'waitForCondition';
@override
bool get requiresRootWidgetAttached => condition.requiresRootWidgetAttached;
}
/// A Flutter Driver command that waits until there are no more transient callbacks in the queue.
@ -148,6 +151,20 @@ abstract class SerializableWaitCondition {
'conditionName': conditionName
};
}
/// Whether this command requires the widget tree to be initialized before
/// the command may be run.
///
/// This defaults to true to force the application under test to call [runApp]
/// before attempting to remotely drive the application. Subclasses may
/// override this to return false if they allow invocation before the
/// application has started.
///
/// See also:
///
/// * [WidgetsBinding.isRootWidgetAttached], which indicates whether the
/// widget tree has been initialized.
bool get requiresRootWidgetAttached => true;
}
/// A condition that waits until no transient callbacks are scheduled.
@ -208,6 +225,9 @@ class FirstFrameRasterized extends SerializableWaitCondition {
@override
String get conditionName => 'FirstFrameRasterizedCondition';
@override
bool get requiresRootWidgetAttached => false;
}
/// A condition that waits until there are no pending platform messages.

View file

@ -41,6 +41,17 @@ void main() {
expect(waitForCondition.condition, equals(const NoTransientCallbacks()));
expect(waitForCondition.timeout, equals(const Duration(milliseconds: 10)));
});
test('WaitForCondition requiresRootWidget', () {
expect(
const WaitForCondition(NoTransientCallbacks())
.requiresRootWidgetAttached,
isTrue);
expect(
const WaitForCondition(FirstFrameRasterized())
.requiresRootWidgetAttached,
isFalse);
});
});
group('NoTransientCallbacksCondition', () {
@ -113,6 +124,10 @@ void main() {
throwsA(predicate<SerializationException>((SerializationException e) =>
e.message == 'Error occurred during deserializing the FirstFrameRasterizedCondition JSON string: {conditionName: Unknown}')));
});
test('FirstFrameRasterizedCondition requiresRootWidget', () {
expect(const FirstFrameRasterized().requiresRootWidgetAttached, isFalse);
});
});
group('CombinedCondition', () {