blob: b7e107d892cfdaf8a333d1131188ddbbf352e59d [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@TestOn('chrome') // Uses web-only Flutter SDK
import 'dart:html' as html;
import 'package:flutter_test/flutter_test.dart';
import 'package:url_launcher_web/url_launcher_web.dart';
import 'package:mockito/mockito.dart';
import 'package:platform_detect/test_utils.dart' as platform;
class MockWindow extends Mock implements html.Window {}
void main() {
group('$UrlLauncherPlugin', () {
MockWindow mockWindow = MockWindow();
UrlLauncherPlugin plugin = UrlLauncherPlugin(window: mockWindow);
setUp(() {
platform.configurePlatformForTesting(browser: platform.chrome);
});
group('canLaunch', () {
test('"http" URLs -> true', () {
expect(plugin.canLaunch('http://google.com'), completion(isTrue));
});
test('"https" URLs -> true', () {
expect(plugin.canLaunch('https://google.com'), completion(isTrue));
});
test('"mailto" URLs -> true', () {
expect(
plugin.canLaunch('mailto:name@mydomain.com'), completion(isTrue));
});
test('"tel" URLs -> true', () {
expect(plugin.canLaunch('tel:5551234567'), completion(isTrue));
});
test('"sms" URLs -> true', () {
expect(plugin.canLaunch('sms:+19725551212?body=hello%20there'),
completion(isTrue));
});
});
group('launch', () {
setUp(() {
// Simulate that window.open does something.
when(mockWindow.open('https://www.google.com', ''))
.thenReturn(MockWindow());
when(mockWindow.open('mailto:name@mydomain.com', ''))
.thenReturn(MockWindow());
when(mockWindow.open('tel:5551234567', '')).thenReturn(MockWindow());
when(mockWindow.open('sms:+19725551212?body=hello%20there', ''))
.thenReturn(MockWindow());
});
test('launching a URL returns true', () {
expect(
plugin.launch(
'https://www.google.com',
useSafariVC: null,
useWebView: null,
universalLinksOnly: null,
enableDomStorage: null,
enableJavaScript: null,
headers: null,
),
completion(isTrue));
});
test('launching a "mailto" returns true', () {
expect(
plugin.launch(
'mailto:name@mydomain.com',
useSafariVC: null,
useWebView: null,
universalLinksOnly: null,
enableDomStorage: null,
enableJavaScript: null,
headers: null,
),
completion(isTrue));
});
test('launching a "tel" returns true', () {
expect(
plugin.launch(
'tel:5551234567',
useSafariVC: null,
useWebView: null,
universalLinksOnly: null,
enableDomStorage: null,
enableJavaScript: null,
headers: null,
),
completion(isTrue));
});
test('launching a "sms" returns true', () {
expect(
plugin.launch(
'sms:+19725551212?body=hello%20there',
useSafariVC: null,
useWebView: null,
universalLinksOnly: null,
enableDomStorage: null,
enableJavaScript: null,
headers: null,
),
completion(isTrue));
});
});
group('openNewWindow', () {
test('http urls should be launched in a new window', () {
plugin.openNewWindow('http://www.google.com');
verify(mockWindow.open('http://www.google.com', ''));
});
test('https urls should be launched in a new window', () {
plugin.openNewWindow('https://www.google.com');
verify(mockWindow.open('https://www.google.com', ''));
});
test('mailto urls should be launched on a new window', () {
plugin.openNewWindow('mailto:name@mydomain.com');
verify(mockWindow.open('mailto:name@mydomain.com', ''));
});
test('tel urls should be launched on a new window', () {
plugin.openNewWindow('tel:5551234567');
verify(mockWindow.open('tel:5551234567', ''));
});
test('sms urls should be launched on a new window', () {
plugin.openNewWindow('sms:+19725551212?body=hello%20there');
verify(mockWindow.open('sms:+19725551212?body=hello%20there', ''));
});
group('Safari', () {
setUp(() {
platform.configurePlatformForTesting(browser: platform.safari);
});
test('http urls should be launched in a new window', () {
plugin.openNewWindow('http://www.google.com');
verify(mockWindow.open('http://www.google.com', ''));
});
test('https urls should be launched in a new window', () {
plugin.openNewWindow('https://www.google.com');
verify(mockWindow.open('https://www.google.com', ''));
});
test('mailto urls should be launched on the same window', () {
plugin.openNewWindow('mailto:name@mydomain.com');
verify(mockWindow.open('mailto:name@mydomain.com', '_top'));
});
test('tel urls should be launched on the same window', () {
plugin.openNewWindow('tel:5551234567');
verify(mockWindow.open('tel:5551234567', '_top'));
});
test('sms urls should be launched on the same window', () {
plugin.openNewWindow('sms:+19725551212?body=hello%20there');
verify(
mockWindow.open('sms:+19725551212?body=hello%20there', '_top'));
});
});
});
});
}