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 controllerCompleter = Completer(); final Completer pageLoaded = Completer(); 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?, ["bar", 5]), true); expect( mapEquals(result[3]?.cast(), {"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 controllerCompleter = Completer(); final Completer pageLoaded = Completer(); 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 controllerCompleter = Completer(); final Completer pageLoaded = Completer(); 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 controllerCompleter = Completer(); final Completer pageLoaded = Completer(); 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); }