0% found this document useful (0 votes)
361 views4 pages

Url Launcher Test - Dart

This document contains unit tests for the url_launcher plugin for Flutter. It tests the various capabilities and configurations of the launch method such as specifying headers, forcing the use of Safari View Controller or web view, enabling JavaScript, and setting status bar brightness. Mock objects are used to isolate the tests from the native platform implementations. The tests verify the correct parameters are passed to the mock launcher.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
361 views4 pages

Url Launcher Test - Dart

This document contains unit tests for the url_launcher plugin for Flutter. It tests the various capabilities and configurations of the launch method such as specifying headers, forcing the use of Safari View Controller or web view, enabling JavaScript, and setting status bar brightness. Mock objects are used to isolate the tests from the native platform implementations. The tests verify the correct parameters are passed to the mock launcher.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

// Copyright 2017 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.

import 'dart:async';
import 'dart:ui';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:flutter/foundation.dart';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:url_launcher_platform_interface/url_launcher_platform_interface.
dart';
import 'package:flutter/services.dart' show PlatformException;

void main() {
final MockUrlLauncher mock = MockUrlLauncher();
UrlLauncherPlatform.instance = mock;

test('closeWebView default behavior', () async {


await closeWebView();
verify(mock.closeWebView());
});

group('canLaunch', () {
test('returns true', () async {
when(mock.canLaunch('foo')).thenAnswer((_) => Future<bool>.value(true));

final bool result = await canLaunch('foo');

expect(result, isTrue);
});

test('returns false', () async {


when(mock.canLaunch('foo')).thenAnswer((_) => Future<bool>.value(false));

final bool result = await canLaunch('foo');

expect(result, isFalse);
});
});
group('launch', () {
test('requires a non-null urlString', () {
expect(() => launch(null), throwsAssertionError);
});

test('default behavior', () async {


await launch('http://flutter.dev/');
expect(
verify(mock.launch(
captureAny,
useSafariVC: captureAnyNamed('useSafariVC'),
useWebView: captureAnyNamed('useWebView'),
enableJavaScript: captureAnyNamed('enableJavaScript'),
enableDomStorage: captureAnyNamed('enableDomStorage'),
universalLinksOnly: captureAnyNamed('universalLinksOnly'),
headers: captureAnyNamed('headers'),
)).captured,
<dynamic>[
'http://flutter.dev/',
true,
false,
false,
false,
false,
<String, String>{},
],
);
});

test('with headers', () async {


await launch(
'http://flutter.dev/',
headers: <String, String>{'key': 'value'},
);
expect(
verify(mock.launch(
any,
useSafariVC: anyNamed('useSafariVC'),
useWebView: anyNamed('useWebView'),
enableJavaScript: anyNamed('enableJavaScript'),
enableDomStorage: anyNamed('enableDomStorage'),
universalLinksOnly: anyNamed('universalLinksOnly'),
headers: captureAnyNamed('headers'),
)).captured.single,
<String, String>{'key': 'value'},
);
});

test('force SafariVC', () async {


await launch('http://flutter.dev/', forceSafariVC: true);
expect(
verify(mock.launch(
any,
useSafariVC: captureAnyNamed('useSafariVC'),
useWebView: anyNamed('useWebView'),
enableJavaScript: anyNamed('enableJavaScript'),
enableDomStorage: anyNamed('enableDomStorage'),
universalLinksOnly: anyNamed('universalLinksOnly'),
headers: anyNamed('headers'),
)).captured.single,
true,
);
});

test('universal links only', () async {


await launch('http://flutter.dev/',
forceSafariVC: false, universalLinksOnly: true);
expect(
verify(mock.launch(
any,
useSafariVC: captureAnyNamed('useSafariVC'),
useWebView: anyNamed('useWebView'),
enableJavaScript: anyNamed('enableJavaScript'),
enableDomStorage: anyNamed('enableDomStorage'),
universalLinksOnly: captureAnyNamed('universalLinksOnly'),
headers: anyNamed('headers'),
)).captured,
<bool>[false, true],
);
});

test('force WebView', () async {


await launch('http://flutter.dev/', forceWebView: true);
expect(
verify(mock.launch(
any,
useSafariVC: anyNamed('useSafariVC'),
useWebView: captureAnyNamed('useWebView'),
enableJavaScript: anyNamed('enableJavaScript'),
enableDomStorage: anyNamed('enableDomStorage'),
universalLinksOnly: anyNamed('universalLinksOnly'),
headers: anyNamed('headers'),
)).captured.single,
true,
);
});

test('force WebView enable javascript', () async {


await launch('http://flutter.dev/',
forceWebView: true, enableJavaScript: true);
expect(
verify(mock.launch(
any,
useSafariVC: anyNamed('useSafariVC'),
useWebView: captureAnyNamed('useWebView'),
enableJavaScript: captureAnyNamed('enableJavaScript'),
enableDomStorage: anyNamed('enableDomStorage'),
universalLinksOnly: anyNamed('universalLinksOnly'),
headers: anyNamed('headers'),
)).captured,
<bool>[true, true],
);
});

test('force WebView enable DOM storage', () async {


await launch('http://flutter.dev/',
forceWebView: true, enableDomStorage: true);
expect(
verify(mock.launch(
any,
useSafariVC: anyNamed('useSafariVC'),
useWebView: captureAnyNamed('useWebView'),
enableJavaScript: anyNamed('enableJavaScript'),
enableDomStorage: captureAnyNamed('enableDomStorage'),
universalLinksOnly: anyNamed('universalLinksOnly'),
headers: anyNamed('headers'),
)).captured,
<bool>[true, true],
);
});

test('force SafariVC to false', () async {


await launch('http://flutter.dev/', forceSafariVC: false);
expect(
// ignore: missing_required_param
verify(mock.launch(
any,
useSafariVC: captureAnyNamed('useSafariVC'),
useWebView: anyNamed('useWebView'),
enableJavaScript: anyNamed('enableJavaScript'),
enableDomStorage: anyNamed('enableDomStorage'),
universalLinksOnly: anyNamed('universalLinksOnly'),
headers: anyNamed('headers'),
)).captured.single,
false,
);
});

test('cannot launch a non-web in webview', () async {


expect(() async => await launch('tel:555-555-5555', forceWebView: true),
throwsA(isA<PlatformException>()));
});

test('controls system UI when changing statusBarBrightness', () async {


final TestWidgetsFlutterBinding binding =
TestWidgetsFlutterBinding.ensureInitialized();
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
binding.renderView.automaticSystemUiAdjustment = true;
final Future<bool> launchResult =
launch('http://flutter.dev/', statusBarBrightness: Brightness.dark);

// Should take over control of the automaticSystemUiAdjustment while it's


// pending, then restore it back to normal after the launch finishes.
expect(binding.renderView.automaticSystemUiAdjustment, isFalse);
await launchResult;
expect(binding.renderView.automaticSystemUiAdjustment, isTrue);
});

test('sets automaticSystemUiAdjustment to not be null', () async {


final TestWidgetsFlutterBinding binding =
TestWidgetsFlutterBinding.ensureInitialized();
debugDefaultTargetPlatformOverride = TargetPlatform.android;
expect(binding.renderView.automaticSystemUiAdjustment, true);
final Future<bool> launchResult =
launch('http://flutter.dev/', statusBarBrightness: Brightness.dark);

// The automaticSystemUiAdjustment should be set before the launch


// and equal to true after the launch result is complete.
expect(binding.renderView.automaticSystemUiAdjustment, true);
await launchResult;
expect(binding.renderView.automaticSystemUiAdjustment, true);
});
});
}

class MockUrlLauncher extends Mock


with MockPlatformInterfaceMixin
implements UrlLauncherPlatform {}

You might also like