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 'dart:io' as io;
6
+
5
7
import 'package:args/command_runner.dart' ;
6
8
import 'package:file/file.dart' ;
7
9
import 'package:file/memory.dart' ;
@@ -33,9 +35,6 @@ void main() {
33
35
final Directory plugin1Dir = createFakePlugin ('a' , packagesDir);
34
36
final Directory plugin2Dir = createFakePlugin ('b' , packagesDir);
35
37
36
- final MockProcess mockProcess = MockProcess ();
37
- mockProcess.exitCodeCompleter.complete (0 );
38
- processRunner.processToReturn = mockProcess;
39
38
await runCapturingPrint (runner, < String > ['analyze' ]);
40
39
41
40
expect (
@@ -55,9 +54,6 @@ void main() {
55
54
test ('skips flutter pub get for examples' , () async {
56
55
final Directory plugin1Dir = createFakePlugin ('a' , packagesDir);
57
56
58
- final MockProcess mockProcess = MockProcess ();
59
- mockProcess.exitCodeCompleter.complete (0 );
60
- processRunner.processToReturn = mockProcess;
61
57
await runCapturingPrint (runner, < String > ['analyze' ]);
62
58
63
59
expect (
@@ -74,9 +70,6 @@ void main() {
74
70
final Directory plugin1Dir = createFakePlugin ('a' , packagesDir);
75
71
final Directory plugin2Dir = createFakePlugin ('example' , packagesDir);
76
72
77
- final MockProcess mockProcess = MockProcess ();
78
- mockProcess.exitCodeCompleter.complete (0 );
79
- processRunner.processToReturn = mockProcess;
80
73
await runCapturingPrint (runner, < String > ['analyze' ]);
81
74
82
75
expect (
@@ -96,9 +89,6 @@ void main() {
96
89
test ('uses a separate analysis sdk' , () async {
97
90
final Directory pluginDir = createFakePlugin ('a' , packagesDir);
98
91
99
- final MockProcess mockProcess = MockProcess ();
100
- mockProcess.exitCodeCompleter.complete (0 );
101
- processRunner.processToReturn = mockProcess;
102
92
await runCapturingPrint (
103
93
runner, < String > ['analyze' , '--analysis-sdk' , 'foo/bar/baz' ]);
104
94
@@ -124,25 +114,46 @@ void main() {
124
114
createFakePlugin ('foo' , packagesDir,
125
115
extraFiles: < String > ['analysis_options.yaml' ]);
126
116
127
- await expectLater (() => runCapturingPrint (runner, < String > ['analyze' ]),
128
- throwsA (isA <ToolExit >()));
117
+ Error ? commandError;
118
+ final List <String > output = await runCapturingPrint (
119
+ runner, < String > ['analyze' ], errorHandler: (Error e) {
120
+ commandError = e;
121
+ });
122
+
123
+ expect (commandError, isA <ToolExit >());
124
+ expect (
125
+ output,
126
+ containsAllInOrder (< Matcher > [
127
+ contains (
128
+ 'Found an extra analysis_options.yaml at /packages/foo/analysis_options.yaml' ),
129
+ ]),
130
+ );
129
131
});
130
132
131
133
test ('fails .analysis_options' , () async {
132
134
createFakePlugin ('foo' , packagesDir,
133
135
extraFiles: < String > ['.analysis_options' ]);
134
136
135
- await expectLater (() => runCapturingPrint (runner, < String > ['analyze' ]),
136
- throwsA (isA <ToolExit >()));
137
+ Error ? commandError;
138
+ final List <String > output = await runCapturingPrint (
139
+ runner, < String > ['analyze' ], errorHandler: (Error e) {
140
+ commandError = e;
141
+ });
142
+
143
+ expect (commandError, isA <ToolExit >());
144
+ expect (
145
+ output,
146
+ containsAllInOrder (< Matcher > [
147
+ contains (
148
+ 'Found an extra analysis_options.yaml at /packages/foo/.analysis_options' ),
149
+ ]),
150
+ );
137
151
});
138
152
139
153
test ('takes an allow list' , () async {
140
154
final Directory pluginDir = createFakePlugin ('foo' , packagesDir,
141
155
extraFiles: < String > ['analysis_options.yaml' ]);
142
156
143
- final MockProcess mockProcess = MockProcess ();
144
- mockProcess.exitCodeCompleter.complete (0 );
145
- processRunner.processToReturn = mockProcess;
146
157
await runCapturingPrint (
147
158
runner, < String > ['analyze' , '--custom-analysis' , 'foo' ]);
148
159
@@ -161,14 +172,55 @@ void main() {
161
172
createFakePlugin ('foo' , packagesDir,
162
173
extraFiles: < String > ['analysis_options.yaml' ]);
163
174
164
- final MockProcess mockProcess = MockProcess ();
165
- mockProcess.exitCodeCompleter.complete (0 );
166
- processRunner.processToReturn = mockProcess;
167
-
168
175
await expectLater (
169
176
() => runCapturingPrint (
170
177
runner, < String > ['analyze' , '--custom-analysis' , '' ]),
171
178
throwsA (isA <ToolExit >()));
172
179
});
173
180
});
181
+
182
+ test ('fails if "packages get" fails' , () async {
183
+ createFakePlugin ('foo' , packagesDir);
184
+
185
+ processRunner.mockProcessesForExecutable['flutter' ] = < io.Process > [
186
+ MockProcess .failing () // flutter packages get
187
+ ];
188
+
189
+ Error ? commandError;
190
+ final List <String > output = await runCapturingPrint (
191
+ runner, < String > ['analyze' ], errorHandler: (Error e) {
192
+ commandError = e;
193
+ });
194
+
195
+ expect (commandError, isA <ToolExit >());
196
+ expect (
197
+ output,
198
+ containsAllInOrder (< Matcher > [
199
+ contains ('Unable to get dependencies' ),
200
+ ]),
201
+ );
202
+ });
203
+
204
+ test ('fails if "analyze" fails' , () async {
205
+ createFakePlugin ('foo' , packagesDir);
206
+
207
+ processRunner.mockProcessesForExecutable['dart' ] = < io.Process > [
208
+ MockProcess .failing () // dart analyze
209
+ ];
210
+
211
+ Error ? commandError;
212
+ final List <String > output = await runCapturingPrint (
213
+ runner, < String > ['analyze' ], errorHandler: (Error e) {
214
+ commandError = e;
215
+ });
216
+
217
+ expect (commandError, isA <ToolExit >());
218
+ expect (
219
+ output,
220
+ containsAllInOrder (< Matcher > [
221
+ contains ('The following packages had errors:' ),
222
+ contains (' foo' ),
223
+ ]),
224
+ );
225
+ });
174
226
}
0 commit comments