blob: f764f679f96de29b67e0fbf9f011119889921079 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter_test/flutter_test.dart';
import 'package:url_launcher_platform_interface/link.dart';
import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart';
class CapturingUrlLauncher extends UrlLauncherPlatform {
String? url;
bool? useSafariVC;
bool? useWebView;
bool? enableJavaScript;
bool? enableDomStorage;
bool? universalLinksOnly;
Map<String, String> headers = <String, String>{};
String? webOnlyWindowName;
@override
final LinkDelegate? linkDelegate = null;
@override
Future<bool> launch(
String url, {
required bool useSafariVC,
required bool useWebView,
required bool enableJavaScript,
required bool enableDomStorage,
required bool universalLinksOnly,
required Map<String, String> headers,
String? webOnlyWindowName,
}) async {
this.url = url;
this.useSafariVC = useSafariVC;
this.useWebView = useWebView;
this.enableJavaScript = enableJavaScript;
this.enableDomStorage = enableDomStorage;
this.universalLinksOnly = universalLinksOnly;
this.headers = headers;
this.webOnlyWindowName = webOnlyWindowName;
return true;
}
}
void main() {
test('launchUrl calls through to launch with default options for web URL',
() async {
final CapturingUrlLauncher launcher = CapturingUrlLauncher();
await launcher.launchUrl('https://flutter.dev', const LaunchOptions());
expect(launcher.url, 'https://flutter.dev');
expect(launcher.useSafariVC, true);
expect(launcher.useWebView, true);
expect(launcher.enableJavaScript, true);
expect(launcher.enableDomStorage, true);
expect(launcher.universalLinksOnly, false);
expect(launcher.headers, isEmpty);
expect(launcher.webOnlyWindowName, null);
});
test('launchUrl calls through to launch with default options for non-web URL',
() async {
final CapturingUrlLauncher launcher = CapturingUrlLauncher();
await launcher.launchUrl('tel:123456789', const LaunchOptions());
expect(launcher.url, 'tel:123456789');
expect(launcher.useSafariVC, false);
expect(launcher.useWebView, false);
expect(launcher.enableJavaScript, true);
expect(launcher.enableDomStorage, true);
expect(launcher.universalLinksOnly, false);
expect(launcher.headers, isEmpty);
expect(launcher.webOnlyWindowName, null);
});
test('launchUrl calls through to launch with universal links', () async {
final CapturingUrlLauncher launcher = CapturingUrlLauncher();
await launcher.launchUrl(
'https://flutter.dev',
const LaunchOptions(
mode: PreferredLaunchMode.externalNonBrowserApplication));
expect(launcher.url, 'https://flutter.dev');
expect(launcher.useSafariVC, false);
expect(launcher.useWebView, false);
expect(launcher.enableJavaScript, true);
expect(launcher.enableDomStorage, true);
expect(launcher.universalLinksOnly, true);
expect(launcher.headers, isEmpty);
expect(launcher.webOnlyWindowName, null);
});
test('launchUrl calls through to launch with all non-default options',
() async {
final CapturingUrlLauncher launcher = CapturingUrlLauncher();
await launcher.launchUrl(
'https://flutter.dev',
const LaunchOptions(
mode: PreferredLaunchMode.externalApplication,
webViewConfiguration: InAppWebViewConfiguration(
enableJavaScript: false,
enableDomStorage: false,
headers: <String, String>{'foo': 'bar'}),
webOnlyWindowName: 'a_name',
));
expect(launcher.url, 'https://flutter.dev');
expect(launcher.useSafariVC, false);
expect(launcher.useWebView, false);
expect(launcher.enableJavaScript, false);
expect(launcher.enableDomStorage, false);
expect(launcher.universalLinksOnly, false);
expect(launcher.headers['foo'], 'bar');
expect(launcher.webOnlyWindowName, 'a_name');
});
}