@@ -16,13 +16,6 @@ class MinCoverageNotMet implements Exception {
16
16
final double coverage;
17
17
}
18
18
19
- /// Thrown when `flutter test ---coverage --min-coverage value`
20
- /// does not generate the coverage file within the timeout threshold.
21
- class GenerateCoverageTimeout implements Exception {
22
- @override
23
- String toString () => 'Timed out waiting for coverage to be generated.' ;
24
- }
25
-
26
19
class _CoverageMetrics {
27
20
const _CoverageMetrics ._({this .totalHits = 0 , this .totalFound = 0 });
28
21
@@ -191,7 +184,9 @@ class Flutter {
191
184
recursive: recursive,
192
185
);
193
186
194
- if (collectCoverage) await lcovFile.ensureCreated ();
187
+ if (collectCoverage) {
188
+ assert (lcovFile.existsSync (), 'coverage/lcov.info must exist' );
189
+ }
195
190
if (minCoverage != null ) {
196
191
final records = await Parser .parse (lcovPath);
197
192
final coverageMetrics = _CoverageMetrics .fromLcovRecords (
@@ -269,7 +264,7 @@ Future<int> _flutterTest({
269
264
},
270
265
);
271
266
272
- final StreamSubscription <TestEvent > subscription;
267
+ late final StreamSubscription <TestEvent > subscription;
273
268
subscription = flutterTest (
274
269
workingDirectory: cwd,
275
270
arguments: [
@@ -335,18 +330,25 @@ Future<int> _flutterTest({
335
330
: lightRed.wrap ('Some tests failed.' )! ;
336
331
337
332
stdout ('$clearLine ${darkGray .wrap (timeElapsed )} $stats : $summary \n ' );
333
+ }
334
+
335
+ if (event is ExitTestEvent ) {
338
336
if (completer.isCompleted) return ;
337
+ subscription.cancel ();
339
338
completer.complete (
340
- event.success == true
339
+ event.exitCode == ExitCode .success.code
341
340
? ExitCode .success.code
342
341
: ExitCode .unavailable.code,
343
342
);
344
343
}
345
344
},
346
- onError: completer.completeError,
345
+ onError: (Object error, StackTrace stackTrace) {
346
+ subscription.cancel ();
347
+ completer.completeError (error, stackTrace);
348
+ },
347
349
);
348
350
349
- return completer.future. whenComplete (subscription.cancel) ;
351
+ return completer.future;
350
352
}
351
353
352
354
final int _lineLength = () {
@@ -357,20 +359,6 @@ final int _lineLength = () {
357
359
}
358
360
}();
359
361
360
- extension on File {
361
- Future <void > ensureCreated ({
362
- Duration timeout = const Duration (seconds: 10 ),
363
- Duration interval = const Duration (milliseconds: 50 ),
364
- }) async {
365
- var elapsedTime = Duration .zero;
366
- while (! existsSync ()) {
367
- await Future <void >.delayed (interval);
368
- elapsedTime += interval;
369
- if (elapsedTime >= timeout) throw GenerateCoverageTimeout ();
370
- }
371
- }
372
- }
373
-
374
362
extension on TestEvent {
375
363
bool shouldCancelTimer () {
376
364
final event = this ;
0 commit comments