iosWebViewFix/example/integration_test/find_interaction_controller/find_interactions.dart

115 lines
4.2 KiB
Dart

import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_test/flutter_test.dart';
void findInteractions() {
final shouldSkip = kIsWeb
? true
: ![
TargetPlatform.android,
TargetPlatform.iOS,
TargetPlatform.macOS,
].contains(defaultTargetPlatform);
testWidgets('find interactions', (WidgetTester tester) async {
final Completer<void> pageLoaded = Completer<void>();
final findInteractionController = FindInteractionController();
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
child: InAppWebView(
key: GlobalKey(),
initialFile: "test_assets/in_app_webview_initial_file_test.html",
findInteractionController: findInteractionController,
initialSettings: InAppWebViewSettings(
clearCache: true, isFindInteractionEnabled: true),
onLoadStop: (controller, url) {
pageLoaded.complete();
},
),
),
);
await pageLoaded.future;
await tester.pump();
await Future.delayed(Duration(seconds: 1));
const firstSearchText = "InAppWebViewInitialFileTest";
await expectLater(
findInteractionController.findAll(find: firstSearchText), completes);
expect(await findInteractionController.getSearchText(), firstSearchText);
if ([TargetPlatform.android].contains(defaultTargetPlatform)) {
await Future.delayed(Duration(seconds: 1));
}
final session = await findInteractionController.getActiveFindSession();
expect(session!.resultCount, 2);
await expectLater(
findInteractionController.findNext(forward: true), completes);
await expectLater(
findInteractionController.findNext(forward: false), completes);
await expectLater(findInteractionController.clearMatches(), completes);
const secondSearchText = "text";
await expectLater(
findInteractionController.setSearchText(secondSearchText), completes);
if ([TargetPlatform.iOS, TargetPlatform.macOS]
.contains(defaultTargetPlatform)) {
await expectLater(
findInteractionController.presentFindNavigator(), completes);
expect(await findInteractionController.getSearchText(), secondSearchText);
expect(await findInteractionController.isFindNavigatorVisible(), true);
await expectLater(
findInteractionController.updateResultCount(), completes);
await expectLater(
findInteractionController.dismissFindNavigator(), completes);
expect(await findInteractionController.isFindNavigatorVisible(), false);
}
}, skip: shouldSkip);
testWidgets('onFindResultReceived', (WidgetTester tester) async {
final Completer<void> pageLoaded = Completer<void>();
final Completer<int> numberOfMatchesCompleter = Completer<int>();
final findInteractionController = FindInteractionController(
onFindResultReceived: (controller, int activeMatchOrdinal,
int numberOfMatches, bool isDoneCounting) async {
if (isDoneCounting && !numberOfMatchesCompleter.isCompleted) {
numberOfMatchesCompleter.complete(numberOfMatches);
}
},
);
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
child: InAppWebView(
key: GlobalKey(),
initialFile: "test_assets/in_app_webview_initial_file_test.html",
initialSettings: InAppWebViewSettings(
clearCache: true, isFindInteractionEnabled: false),
findInteractionController: findInteractionController,
onLoadStop: (controller, url) {
pageLoaded.complete();
},
),
),
);
await pageLoaded.future;
await tester.pump();
await Future.delayed(Duration(seconds: 1));
await findInteractionController.findAll(
find: "InAppWebViewInitialFileTest");
final int numberOfMatches = await numberOfMatchesCompleter.future;
expect(numberOfMatches, 2);
final session = await findInteractionController.getActiveFindSession();
expect(session!.resultCount, 2);
}, skip: shouldSkip);
}