iosWebViewFix/example/integration_test/in_app_webview/javascript_code_evaluation....

213 lines
6.9 KiB
Dart

part of 'main.dart';
void javascriptCodeEvaluation() {
final shouldSkip = kIsWeb
? false
: ![
TargetPlatform.android,
TargetPlatform.iOS,
TargetPlatform.macOS,
].contains(defaultTargetPlatform);
skippableGroup('javascript code evaluation', () {
final shouldSkipTest1 = kIsWeb
? false
: ![
TargetPlatform.android,
TargetPlatform.iOS,
TargetPlatform.macOS,
].contains(defaultTargetPlatform);
skippableTestWidgets('evaluateJavascript', (WidgetTester tester) async {
final Completer<InAppWebViewController> controllerCompleter =
Completer<InAppWebViewController>();
final Completer<void> pageLoaded = Completer<void>();
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
child: InAppWebView(
key: GlobalKey(),
initialUrlRequest: URLRequest(url: TEST_URL_ABOUT_BLANK),
onWebViewCreated: (controller) {
controllerCompleter.complete(controller);
},
onLoadStop: (controller, url) {
pageLoaded.complete();
},
),
),
);
final InAppWebViewController controller =
await controllerCompleter.future;
await pageLoaded.future;
var result = await controller.evaluateJavascript(source: """
[1, true, ["bar", 5], {"foo": "baz"}];
""");
expect(result, isNotNull);
expect(result[0], 1);
expect(result[1], true);
expect(listEquals(result[2] as List<dynamic>?, ["bar", 5]), true);
expect(
mapEquals(result[3]?.cast<String, String>(), {"foo": "baz"}), true);
}, skip: shouldSkipTest1);
final shouldSkipTest2 = kIsWeb
? true
: ![
TargetPlatform.android,
TargetPlatform.iOS,
TargetPlatform.macOS,
].contains(defaultTargetPlatform);
skippableTestWidgets('evaluateJavascript with content world',
(WidgetTester tester) async {
final Completer<InAppWebViewController> controllerCompleter =
Completer<InAppWebViewController>();
final Completer<void> pageLoaded = Completer<void>();
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
child: InAppWebView(
key: GlobalKey(),
initialUrlRequest: URLRequest(url: TEST_URL_ABOUT_BLANK),
onWebViewCreated: (controller) {
controllerCompleter.complete(controller);
},
onLoadStop: (controller, url) {
pageLoaded.complete();
},
),
),
);
final InAppWebViewController controller =
await controllerCompleter.future;
await pageLoaded.future;
await controller.evaluateJavascript(
source: "var foo = 49;",
contentWorld: ContentWorld.world(name: "custom-world"));
var result = await controller.evaluateJavascript(source: "foo");
expect(result, isNull);
result = await controller.evaluateJavascript(
source: "foo",
contentWorld: ContentWorld.world(name: "custom-world"));
expect(result, 49);
}, skip: shouldSkipTest2);
final shouldSkipTest3 = kIsWeb
? true
: ![
TargetPlatform.android,
TargetPlatform.iOS,
TargetPlatform.macOS,
].contains(defaultTargetPlatform);
skippableTestWidgets('callAsyncJavaScript', (WidgetTester tester) async {
final Completer<InAppWebViewController> controllerCompleter =
Completer<InAppWebViewController>();
final Completer<void> pageLoaded = Completer<void>();
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
child: InAppWebView(
key: GlobalKey(),
initialUrlRequest: URLRequest(url: TEST_URL_ABOUT_BLANK),
onWebViewCreated: (controller) {
controllerCompleter.complete(controller);
},
onLoadStop: (controller, url) {
pageLoaded.complete();
},
),
),
);
final InAppWebViewController controller =
await controllerCompleter.future;
await pageLoaded.future;
final String functionBody = """
var p = new Promise(function (resolve, reject) {
window.setTimeout(function() {
if (x >= 0) {
resolve(x);
} else {
reject(y);
}
}, 1000);
});
await p;
return p;
""";
var result = await controller.callAsyncJavaScript(
functionBody: functionBody,
arguments: {'x': 49, 'y': 'error message'});
expect(result, isNotNull);
expect(result!.error, isNull);
expect(result.value, 49);
result = await controller.callAsyncJavaScript(
functionBody: functionBody,
arguments: {'x': -49, 'y': 'error message'});
expect(result, isNotNull);
expect(result!.value, isNull);
expect(result.error, 'error message');
}, skip: shouldSkipTest3);
final shouldSkipTest4 = kIsWeb
? true
: ![
TargetPlatform.android,
TargetPlatform.iOS,
TargetPlatform.macOS,
].contains(defaultTargetPlatform);
skippableTestWidgets('callAsyncJavaScript with content world',
(WidgetTester tester) async {
final Completer<InAppWebViewController> controllerCompleter =
Completer<InAppWebViewController>();
final Completer<void> pageLoaded = Completer<void>();
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
child: InAppWebView(
key: GlobalKey(),
initialUrlRequest: URLRequest(url: TEST_URL_ABOUT_BLANK),
onWebViewCreated: (controller) {
controllerCompleter.complete(controller);
},
onLoadStop: (controller, url) {
pageLoaded.complete();
},
),
),
);
final InAppWebViewController controller =
await controllerCompleter.future;
await pageLoaded.future;
await controller.callAsyncJavaScript(
functionBody: "window.foo = 49;",
contentWorld: ContentWorld.world(name: "custom-world"));
var result = await controller.callAsyncJavaScript(
functionBody: "return window.foo;");
expect(result, isNotNull);
expect(result!.error, isNull);
expect(result.value, isNull);
result = await controller.callAsyncJavaScript(
functionBody: "return window.foo;",
contentWorld: ContentWorld.world(name: "custom-world"));
expect(result, isNotNull);
expect(result!.error, isNull);
expect(result.value, 49);
}, skip: shouldSkipTest4);
}, skip: shouldSkip);
}