Skip to content

Commit fd2841f

Browse files
[webview_flutter_android] Fix timeouts in the integration tests (flutter#6857)
* fix timeouts * remove broadcast instead * just use completers like a lame person
1 parent 4d11be4 commit fd2841f

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

packages/webview_flutter/webview_flutter_android/example/integration_test/webview_flutter_test.dart

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -682,8 +682,7 @@ Future<void> main() async {
682682
'${base64Encode(const Utf8Encoder().convert(blankPage))}';
683683

684684
testWidgets('can allow requests', (WidgetTester tester) async {
685-
final StreamController<String> pageLoads =
686-
StreamController<String>.broadcast();
685+
Completer<void> pageLoaded = Completer<void>();
687686

688687
final PlatformWebViewController controller = PlatformWebViewController(
689688
const PlatformWebViewControllerCreationParams(),
@@ -693,7 +692,7 @@ Future<void> main() async {
693692
PlatformNavigationDelegate(
694693
const PlatformNavigationDelegateCreationParams(),
695694
)
696-
..setOnPageFinished((String url) => pageLoads.add(url))
695+
..setOnPageFinished((_) => pageLoaded.complete())
697696
..setOnNavigationRequest((NavigationRequest navigationRequest) {
698697
return (navigationRequest.url.contains('youtube.com'))
699698
? NavigationDecision.prevent
@@ -712,10 +711,12 @@ Future<void> main() async {
712711
},
713712
));
714713

715-
await pageLoads.stream.first; // Wait for initial page load.
714+
await pageLoaded.future; // Wait for initial page load.
715+
716+
pageLoaded = Completer<void>();
716717
await controller.runJavaScript('location.href = "$secondaryUrl"');
718+
await pageLoaded.future; // Wait for the next page load.
717719

718-
await pageLoads.stream.first; // Wait for the next page load.
719720
final String? currentUrl = await controller.currentUrl();
720721
expect(currentUrl, secondaryUrl);
721722
});
@@ -799,8 +800,7 @@ Future<void> main() async {
799800
});
800801

801802
testWidgets('can block requests', (WidgetTester tester) async {
802-
final StreamController<String> pageLoads =
803-
StreamController<String>.broadcast();
803+
Completer<void> pageLoaded = Completer<void>();
804804

805805
final PlatformWebViewController controller = PlatformWebViewController(
806806
const PlatformWebViewControllerCreationParams(),
@@ -810,7 +810,7 @@ Future<void> main() async {
810810
PlatformNavigationDelegate(
811811
const PlatformNavigationDelegateCreationParams(),
812812
)
813-
..setOnPageFinished((String url) => pageLoads.add(url))
813+
..setOnPageFinished((_) => pageLoaded.complete())
814814
..setOnNavigationRequest((NavigationRequest navigationRequest) {
815815
return (navigationRequest.url.contains('youtube.com'))
816816
? NavigationDecision.prevent
@@ -827,22 +827,23 @@ Future<void> main() async {
827827
},
828828
));
829829

830-
await pageLoads.stream.first; // Wait for initial page load.
830+
await pageLoaded.future; // Wait for initial page load.
831+
832+
pageLoaded = Completer<void>();
831833
await controller
832834
.runJavaScript('location.href = "https://www.youtube.com/"');
833835

834836
// There should never be any second page load, since our new URL is
835837
// blocked. Still wait for a potential page change for some time in order
836838
// to give the test a chance to fail.
837-
await pageLoads.stream.first
838-
.timeout(const Duration(milliseconds: 500), onTimeout: () => '');
839+
await pageLoaded.future
840+
.timeout(const Duration(milliseconds: 500), onTimeout: () => false);
839841
final String? currentUrl = await controller.currentUrl();
840842
expect(currentUrl, isNot(contains('youtube.com')));
841843
});
842844

843845
testWidgets('supports asynchronous decisions', (WidgetTester tester) async {
844-
final StreamController<String> pageLoads =
845-
StreamController<String>.broadcast();
846+
Completer<void> pageLoaded = Completer<void>();
846847

847848
final PlatformWebViewController controller = PlatformWebViewController(
848849
const PlatformWebViewControllerCreationParams(),
@@ -852,7 +853,7 @@ Future<void> main() async {
852853
PlatformNavigationDelegate(
853854
const PlatformNavigationDelegateCreationParams(),
854855
)
855-
..setOnPageFinished((String url) => pageLoads.add(url))
856+
..setOnPageFinished((_) => pageLoaded.complete())
856857
..setOnNavigationRequest(
857858
(NavigationRequest navigationRequest) async {
858859
NavigationDecision decision = NavigationDecision.prevent;
@@ -872,10 +873,12 @@ Future<void> main() async {
872873
},
873874
));
874875

875-
await pageLoads.stream.first; // Wait for initial page load.
876+
await pageLoaded.future; // Wait for initial page load.
877+
878+
pageLoaded = Completer<void>();
876879
await controller.runJavaScript('location.href = "$secondaryUrl"');
880+
await pageLoaded.future; // Wait for second page to load.
877881

878-
await pageLoads.stream.first; // Wait for second page to load.
879882
final String? currentUrl = await controller.currentUrl();
880883
expect(currentUrl, secondaryUrl);
881884
});

0 commit comments

Comments
 (0)