[ermine] Add pumpUntilVisible utility function to app_widget_test
This change adds pumpUntilVisibile to WidgetTester using an extension.
This allows waiting for a widget to become visible. For now, it is
used only in one test, but would find a better place in a shared
library. That is left for subsequent cls based on need of this
method.
Test: All unittests pass
Change-Id: I7c1e64cab066a2a16221409bf0dd4be350d1d4e0
Reviewed-on: https://fuchsia-review.googlesource.com/c/experiences/+/403198
Reviewed-by: Chase Latta <chaselatta@google.com>
Testability-Review: Chase Latta <chaselatta@google.com>
Commit-Queue: Sanjay Chouksey <sanjayc@google.com>
diff --git a/session_shells/ermine/shell/test/app_widget_test.dart b/session_shells/ermine/shell/test/app_widget_test.dart
index 7985de4..0ab4e60 100644
--- a/session_shells/ermine/shell/test/app_widget_test.dart
+++ b/session_shells/ermine/shell/test/app_widget_test.dart
@@ -62,8 +62,7 @@
when(model.overviewVisibility).thenReturn(overviewNotifier);
await tester.pumpWidget(app);
- await tester.pumpAndSettle();
- await tester.pumpAndSettle();
+ await tester.pumpUntilVisible(app.overview);
expect(find.byWidget(app.recents), findsOneWidget);
expect(find.byWidget(app.overview), findsOneWidget);
@@ -71,7 +70,7 @@
// Home should be visible.
overviewNotifier.value = false;
- await tester.pumpAndSettle();
+ await tester.pumpUntilVisible(app.home);
expect(find.byWidget(app.recents), findsOneWidget);
expect(find.byWidget(app.overview), findsNothing);
@@ -97,3 +96,14 @@
}
class MockAppModel extends Mock implements AppModel {}
+
+extension _WidgetVisibility on WidgetTester {
+ /// Calls [pumpAndSettle] until widget finder finds a widget or the default
+ /// timeout of the surrounding test is exceeded.
+ Future<void> pumpUntilVisible(Widget widget) async {
+ var matchState = {};
+ while (findsNothing.matches(find.byWidget(widget), matchState)) {
+ await pumpAndSettle();
+ }
+ }
+}