22// Use of this source code is governed by a BSD-style license that can be
33// found in the LICENSE file.
44
5- import 'package:flutter/services .dart' ;
6- import 'package:flutter_test/flutter_test .dart' ;
5+ import 'package:mockito/mockito .dart' ;
6+ import 'package:test/test .dart' ;
77import 'package:url_launcher/url_launcher.dart' ;
8+ import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart' ;
9+ import 'package:flutter/services.dart' show PlatformException;
810
911void main () {
10- TestWidgetsFlutterBinding .ensureInitialized ();
12+ final MockUrlLauncher mock = MockUrlLauncher ();
13+ when (mock.isMock).thenReturn (true );
1114
12- const MethodChannel channel =
13- MethodChannel ('plugins.flutter.io/url_launcher' );
14- final List <MethodCall > log = < MethodCall > [];
15- channel.setMockMethodCallHandler ((MethodCall methodCall) async {
16- log.add (methodCall);
17- });
18-
19- tearDown (() {
20- log.clear ();
21- });
15+ UrlLauncherPlatform .instance = mock;
2216
2317 test ('canLaunch' , () async {
2418 await canLaunch ('http://example.com/' );
25- expect (
26- log,
27- < Matcher > [
28- isMethodCall ('canLaunch' , arguments: < String , Object > {
29- 'url' : 'http://example.com/' ,
30- })
31- ],
32- );
19+ expect (verify (mock.canLaunch (captureAny)).captured.single,
20+ 'http://example.com/' );
3321 });
3422
3523 test ('launch default behavior' , () async {
3624 await launch ('http://example.com/' );
3725 expect (
38- log,
39- < Matcher > [
40- isMethodCall ('launch' , arguments: < String , Object > {
41- 'url' : 'http://example.com/' ,
42- 'useSafariVC' : true ,
43- 'useWebView' : false ,
44- 'enableJavaScript' : false ,
45- 'enableDomStorage' : false ,
46- 'universalLinksOnly' : false ,
47- 'headers' : < String , String > {},
48- })
26+ verify (mock.launch (
27+ captureAny,
28+ useSafariVC: captureAnyNamed ('useSafariVC' ),
29+ useWebView: captureAnyNamed ('useWebView' ),
30+ enableJavaScript: captureAnyNamed ('enableJavaScript' ),
31+ enableDomStorage: captureAnyNamed ('enableDomStorage' ),
32+ universalLinksOnly: captureAnyNamed ('universalLinksOnly' ),
33+ headers: captureAnyNamed ('headers' ),
34+ )).captured,
35+ < dynamic > [
36+ 'http://example.com/' ,
37+ true ,
38+ false ,
39+ false ,
40+ false ,
41+ false ,
42+ < String , String > {},
4943 ],
5044 );
5145 });
@@ -56,142 +50,128 @@ void main() {
5650 headers: < String , String > {'key' : 'value' },
5751 );
5852 expect (
59- log,
60- < Matcher > [
61- isMethodCall ('launch' , arguments: < String , Object > {
62- 'url' : 'http://example.com/' ,
63- 'useSafariVC' : true ,
64- 'useWebView' : false ,
65- 'enableJavaScript' : false ,
66- 'enableDomStorage' : false ,
67- 'universalLinksOnly' : false ,
68- 'headers' : < String , String > {'key' : 'value' },
69- })
70- ],
53+ verify (mock.launch (
54+ any,
55+ useSafariVC: anyNamed ('useSafariVC' ),
56+ useWebView: anyNamed ('useWebView' ),
57+ enableJavaScript: anyNamed ('enableJavaScript' ),
58+ enableDomStorage: anyNamed ('enableDomStorage' ),
59+ universalLinksOnly: anyNamed ('universalLinksOnly' ),
60+ headers: captureAnyNamed ('headers' ),
61+ )).captured.single,
62+ < String , String > {'key' : 'value' },
7163 );
7264 });
7365
7466 test ('launch force SafariVC' , () async {
7567 await launch ('http://example.com/' , forceSafariVC: true );
7668 expect (
77- log,
78- < Matcher > [
79- isMethodCall ('launch' , arguments: < String , Object > {
80- 'url' : 'http://example.com/' ,
81- 'useSafariVC' : true ,
82- 'useWebView' : false ,
83- 'enableJavaScript' : false ,
84- 'enableDomStorage' : false ,
85- 'universalLinksOnly' : false ,
86- 'headers' : < String , String > {},
87- })
88- ],
69+ verify (mock.launch (
70+ any,
71+ useSafariVC: captureAnyNamed ('useSafariVC' ),
72+ useWebView: anyNamed ('useWebView' ),
73+ enableJavaScript: anyNamed ('enableJavaScript' ),
74+ enableDomStorage: anyNamed ('enableDomStorage' ),
75+ universalLinksOnly: anyNamed ('universalLinksOnly' ),
76+ headers: anyNamed ('headers' ),
77+ )).captured.single,
78+ true ,
8979 );
9080 });
9181
9282 test ('launch universal links only' , () async {
9383 await launch ('http://example.com/' ,
9484 forceSafariVC: false , universalLinksOnly: true );
9585 expect (
96- log,
97- < Matcher > [
98- isMethodCall ('launch' , arguments: < String , Object > {
99- 'url' : 'http://example.com/' ,
100- 'useSafariVC' : false ,
101- 'useWebView' : false ,
102- 'enableJavaScript' : false ,
103- 'enableDomStorage' : false ,
104- 'universalLinksOnly' : true ,
105- 'headers' : < String , String > {},
106- })
107- ],
86+ verify (mock.launch (
87+ any,
88+ useSafariVC: captureAnyNamed ('useSafariVC' ),
89+ useWebView: anyNamed ('useWebView' ),
90+ enableJavaScript: anyNamed ('enableJavaScript' ),
91+ enableDomStorage: anyNamed ('enableDomStorage' ),
92+ universalLinksOnly: captureAnyNamed ('universalLinksOnly' ),
93+ headers: anyNamed ('headers' ),
94+ )).captured,
95+ < bool > [false , true ],
10896 );
10997 });
11098
11199 test ('launch force WebView' , () async {
112100 await launch ('http://example.com/' , forceWebView: true );
113101 expect (
114- log,
115- < Matcher > [
116- isMethodCall ('launch' , arguments: < String , Object > {
117- 'url' : 'http://example.com/' ,
118- 'useSafariVC' : true ,
119- 'useWebView' : true ,
120- 'enableJavaScript' : false ,
121- 'enableDomStorage' : false ,
122- 'universalLinksOnly' : false ,
123- 'headers' : < String , String > {},
124- })
125- ],
102+ verify (mock.launch (
103+ any,
104+ useSafariVC: anyNamed ('useSafariVC' ),
105+ useWebView: captureAnyNamed ('useWebView' ),
106+ enableJavaScript: anyNamed ('enableJavaScript' ),
107+ enableDomStorage: anyNamed ('enableDomStorage' ),
108+ universalLinksOnly: anyNamed ('universalLinksOnly' ),
109+ headers: anyNamed ('headers' ),
110+ )).captured.single,
111+ true ,
126112 );
127113 });
128114
129115 test ('launch force WebView enable javascript' , () async {
130116 await launch ('http://example.com/' ,
131117 forceWebView: true , enableJavaScript: true );
132118 expect (
133- log,
134- < Matcher > [
135- isMethodCall ('launch' , arguments: < String , Object > {
136- 'url' : 'http://example.com/' ,
137- 'useSafariVC' : true ,
138- 'useWebView' : true ,
139- 'enableJavaScript' : true ,
140- 'enableDomStorage' : false ,
141- 'universalLinksOnly' : false ,
142- 'headers' : < String , String > {},
143- })
144- ],
119+ verify (mock.launch (
120+ any,
121+ useSafariVC: anyNamed ('useSafariVC' ),
122+ useWebView: captureAnyNamed ('useWebView' ),
123+ enableJavaScript: captureAnyNamed ('enableJavaScript' ),
124+ enableDomStorage: anyNamed ('enableDomStorage' ),
125+ universalLinksOnly: anyNamed ('universalLinksOnly' ),
126+ headers: anyNamed ('headers' ),
127+ )).captured,
128+ < bool > [true , true ],
145129 );
146130 });
147131
148132 test ('launch force WebView enable DOM storage' , () async {
149133 await launch ('http://example.com/' ,
150134 forceWebView: true , enableDomStorage: true );
151135 expect (
152- log,
153- < Matcher > [
154- isMethodCall ('launch' , arguments: < String , Object > {
155- 'url' : 'http://example.com/' ,
156- 'useSafariVC' : true ,
157- 'useWebView' : true ,
158- 'enableJavaScript' : false ,
159- 'enableDomStorage' : true ,
160- 'universalLinksOnly' : false ,
161- 'headers' : < String , String > {},
162- })
163- ],
136+ verify (mock.launch (
137+ any,
138+ useSafariVC: anyNamed ('useSafariVC' ),
139+ useWebView: captureAnyNamed ('useWebView' ),
140+ enableJavaScript: anyNamed ('enableJavaScript' ),
141+ enableDomStorage: captureAnyNamed ('enableDomStorage' ),
142+ universalLinksOnly: anyNamed ('universalLinksOnly' ),
143+ headers: anyNamed ('headers' ),
144+ )).captured,
145+ < bool > [true , true ],
164146 );
165147 });
166148
167149 test ('launch force SafariVC to false' , () async {
168150 await launch ('http://example.com/' , forceSafariVC: false );
169151 expect (
170- log,
171- < Matcher > [
172- isMethodCall ('launch' , arguments: < String , Object > {
173- 'url' : 'http://example.com/' ,
174- 'useSafariVC' : false ,
175- 'useWebView' : false ,
176- 'enableJavaScript' : false ,
177- 'enableDomStorage' : false ,
178- 'universalLinksOnly' : false ,
179- 'headers' : < String , String > {},
180- })
181- ],
152+ // ignore: missing_required_param
153+ verify (mock.launch (
154+ any,
155+ useSafariVC: captureAnyNamed ('useSafariVC' ),
156+ useWebView: anyNamed ('useWebView' ),
157+ enableJavaScript: anyNamed ('enableJavaScript' ),
158+ enableDomStorage: anyNamed ('enableDomStorage' ),
159+ universalLinksOnly: anyNamed ('universalLinksOnly' ),
160+ headers: anyNamed ('headers' ),
161+ )).captured.single,
162+ false ,
182163 );
183164 });
184165
185166 test ('cannot launch a non-web in webview' , () async {
186167 expect (() async => await launch ('tel:555-555-5555' , forceWebView: true ),
187- throwsA (isInstanceOf <PlatformException >()));
168+ throwsA (isA <PlatformException >()));
188169 });
189170
190171 test ('closeWebView default behavior' , () async {
191172 await closeWebView ();
192- expect (
193- log,
194- < Matcher > [isMethodCall ('closeWebView' , arguments: null )],
195- );
173+ verify (mock.closeWebView ());
196174 });
197175}
176+
177+ class MockUrlLauncher extends Mock implements UrlLauncherPlatform {}
0 commit comments