2
2
// Use of this source code is governed by a BSD-style license that can be
3
3
// found in the LICENSE file.
4
4
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' ;
7
7
import '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;
8
10
9
11
void main () {
10
- TestWidgetsFlutterBinding .ensureInitialized ();
12
+ final MockUrlLauncher mock = MockUrlLauncher ();
13
+ when (mock.isMock).thenReturn (true );
11
14
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;
22
16
23
17
test ('canLaunch' , () async {
24
18
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/' );
33
21
});
34
22
35
23
test ('launch default behavior' , () async {
36
24
await launch ('http://example.com/' );
37
25
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 > {},
49
43
],
50
44
);
51
45
});
@@ -56,142 +50,128 @@ void main() {
56
50
headers: < String , String > {'key' : 'value' },
57
51
);
58
52
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' },
71
63
);
72
64
});
73
65
74
66
test ('launch force SafariVC' , () async {
75
67
await launch ('http://example.com/' , forceSafariVC: true );
76
68
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 ,
89
79
);
90
80
});
91
81
92
82
test ('launch universal links only' , () async {
93
83
await launch ('http://example.com/' ,
94
84
forceSafariVC: false , universalLinksOnly: true );
95
85
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 ],
108
96
);
109
97
});
110
98
111
99
test ('launch force WebView' , () async {
112
100
await launch ('http://example.com/' , forceWebView: true );
113
101
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 ,
126
112
);
127
113
});
128
114
129
115
test ('launch force WebView enable javascript' , () async {
130
116
await launch ('http://example.com/' ,
131
117
forceWebView: true , enableJavaScript: true );
132
118
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 ],
145
129
);
146
130
});
147
131
148
132
test ('launch force WebView enable DOM storage' , () async {
149
133
await launch ('http://example.com/' ,
150
134
forceWebView: true , enableDomStorage: true );
151
135
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 ],
164
146
);
165
147
});
166
148
167
149
test ('launch force SafariVC to false' , () async {
168
150
await launch ('http://example.com/' , forceSafariVC: false );
169
151
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 ,
182
163
);
183
164
});
184
165
185
166
test ('cannot launch a non-web in webview' , () async {
186
167
expect (() async => await launch ('tel:555-555-5555' , forceWebView: true ),
187
- throwsA (isInstanceOf <PlatformException >()));
168
+ throwsA (isA <PlatformException >()));
188
169
});
189
170
190
171
test ('closeWebView default behavior' , () async {
191
172
await closeWebView ();
192
- expect (
193
- log,
194
- < Matcher > [isMethodCall ('closeWebView' , arguments: null )],
195
- );
173
+ verify (mock.closeWebView ());
196
174
});
197
175
}
176
+
177
+ class MockUrlLauncher extends Mock implements UrlLauncherPlatform {}
0 commit comments