iosWebViewFix/example/integration_test/in_app_webview/load_file_url.dart

151 lines
5.0 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:path_provider/path_provider.dart';
void loadFileUrl() {
final shouldSkip = kIsWeb ? true :
![
TargetPlatform.iOS,
TargetPlatform.macOS,
].contains(defaultTargetPlatform);
group('load file URL', () {
late Directory appSupportDir;
late File fileHtml;
late File fileJs;
setUpAll(() async {
appSupportDir = (await getApplicationSupportDirectory());
final Directory htmlFolder = Directory('${appSupportDir.path}/html/');
if (!await htmlFolder.exists()) {
await htmlFolder.create(recursive: true);
}
final Directory jsFolder = Directory('${appSupportDir.path}/js/');
if (!await jsFolder.exists()) {
await jsFolder.create(recursive: true);
}
var html = """
<!DOCTYPE html><html>
<head>
<title>file scheme</title>
</head>
<body>
<script src="../js/main.js"></script>
</body>
</html>
""";
fileHtml = File(htmlFolder.path + "index.html");
fileHtml.writeAsStringSync(html);
var js = """
console.log('message');
""";
fileJs = File(jsFolder.path + "main.js");
fileJs.writeAsStringSync(js);
});
testWidgets('initialUrl with file:// scheme and allowingReadAccessTo',
(WidgetTester tester) async {
final Completer<ConsoleMessage?> consoleMessageShouldNotComplete =
Completer<ConsoleMessage?>();
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
child: InAppWebView(
key: GlobalKey(),
initialUrlRequest:
URLRequest(url: Uri.parse('file://${fileHtml.path}')),
onConsoleMessage: (controller, consoleMessage) {
consoleMessageShouldNotComplete.complete(consoleMessage);
},
),
),
);
var result = await consoleMessageShouldNotComplete.future
.timeout(const Duration(seconds: 2), onTimeout: () => null);
expect(result, null);
final Completer<ConsoleMessage> consoleMessageCompleter =
Completer<ConsoleMessage>();
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
child: InAppWebView(
key: GlobalKey(),
initialUrlRequest:
URLRequest(url: Uri.parse('file://${fileHtml.path}')),
initialSettings: InAppWebViewSettings(
allowingReadAccessTo:
Uri.parse('file://${appSupportDir.path}/')),
onConsoleMessage: (controller, consoleMessage) {
consoleMessageCompleter.complete(consoleMessage);
},
),
),
);
final ConsoleMessage consoleMessage =
await consoleMessageCompleter.future;
expect(consoleMessage.messageLevel, ConsoleMessageLevel.LOG);
expect(consoleMessage.message, 'message');
});
testWidgets('loadUrl with file:// scheme and allowingReadAccessTo argument',
(WidgetTester tester) async {
final Completer<ConsoleMessage?> consoleMessageShouldNotComplete =
Completer<ConsoleMessage?>();
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
child: InAppWebView(
key: GlobalKey(),
onWebViewCreated: (controller) {
controller.loadUrl(
urlRequest:
URLRequest(url: Uri.parse('file://${fileHtml.path}')));
},
onConsoleMessage: (controller, consoleMessage) {
consoleMessageShouldNotComplete.complete(consoleMessage);
},
),
),
);
var result = await consoleMessageShouldNotComplete.future
.timeout(const Duration(seconds: 2), onTimeout: () => null);
expect(result, null);
final Completer<ConsoleMessage> consoleMessageCompleter =
Completer<ConsoleMessage>();
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
child: InAppWebView(
key: GlobalKey(),
onWebViewCreated: (controller) {
controller.loadUrl(
urlRequest:
URLRequest(url: Uri.parse('file://${fileHtml.path}')),
allowingReadAccessTo:
Uri.parse('file://${appSupportDir.path}/'));
},
onConsoleMessage: (controller, consoleMessage) {
consoleMessageCompleter.complete(consoleMessage);
},
),
),
);
final ConsoleMessage consoleMessage =
await consoleMessageCompleter.future;
expect(consoleMessage.messageLevel, ConsoleMessageLevel.LOG);
expect(consoleMessage.message, 'message');
});
}, skip: shouldSkip);
}