Skip to content

Commit 8083c8f

Browse files
authored
Make all package:coverage imports conditional (#2544)
The `package:coverage` library imports `dart:io` directly and cannot be a dependency of apps compiled to platforms without `dart:io`. All imports and uses of `package:coverage` must be through platform specific imports. Add extra indirection in the `coverage.dart` and `coverage_stub.dart` libraries so that `engine.dart` does not need to import `package:coverage` or refer to the `HitMap` type it exports. Add a forwarding implementation of the `merge` extension.
1 parent a16f149 commit 8083c8f

File tree

3 files changed

+20
-11
lines changed

3 files changed

+20
-11
lines changed

pkgs/test_core/lib/src/runner/coverage.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import '../util/package_config.dart';
1212
import 'live_suite_controller.dart';
1313

1414
/// Collects coverage and outputs to the [coveragePath] path.
15-
Future<Map<String, HitMap>> writeCoverage(
15+
Future<Coverage> writeCoverage(
1616
String? coveragePath,
1717
LiveSuiteController controller,
1818
) async {
@@ -35,7 +35,7 @@ Future<Map<String, HitMap>> writeCoverage(
3535

3636
Future<void> writeCoverageLcov(
3737
String coverageLcov,
38-
Map<String, HitMap> allCoverageData,
38+
Coverage allCoverageData,
3939
) async {
4040
final resolver = await Resolver.create(
4141
packagePath: (await currentPackage).root.toFilePath(),
@@ -51,3 +51,9 @@ Future<void> writeCoverageLcov(
5151
await out.flush();
5252
await out.close();
5353
}
54+
55+
typedef Coverage = Map<String, HitMap>;
56+
57+
extension Merge on Coverage {
58+
void merge(Coverage other) => FileHitMaps(this).merge(other);
59+
}

pkgs/test_core/lib/src/runner/coverage_stub.dart

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,26 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'package:coverage/coverage.dart';
6-
75
import 'live_suite_controller.dart';
86

9-
Future<Map<String, HitMap>> writeCoverage(
7+
Future<Coverage> writeCoverage(
108
String? coveragePath,
119
LiveSuiteController controller,
1210
) =>
1311
throw UnsupportedError(
1412
'Coverage is only supported through the test runner.',
1513
);
1614

17-
Future<void> writeCoverageLcov(
18-
String coverageLcov,
19-
Map<String, HitMap> allCoverageData,
20-
) =>
15+
Future<void> writeCoverageLcov(String coverageLcov, Coverage allCoverageData) =>
2116
throw UnsupportedError(
2217
'Coverage is only supported through the test runner.',
2318
);
19+
20+
typedef Coverage = Map<String, void>;
21+
22+
extension Merge on Coverage {
23+
void merge(Coverage other) =>
24+
throw UnsupportedError(
25+
'Coverage is only supported through the test runner.',
26+
);
27+
}

pkgs/test_core/lib/src/runner/engine.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import 'dart:math';
77

88
import 'package:async/async.dart' hide Result;
99
import 'package:collection/collection.dart';
10-
import 'package:coverage/coverage.dart';
1110
import 'package:pool/pool.dart';
1211
import 'package:test_api/src/backend/group.dart'; // ignore: implementation_imports
1312
import 'package:test_api/src/backend/invoker.dart'; // ignore: implementation_imports
@@ -68,7 +67,7 @@ class Engine {
6867
final String? _coverageLcov;
6968

7069
/// The merged coverage data from all tests.
71-
final Map<String, HitMap> _allCoverageData = {};
70+
final Coverage _allCoverageData = {};
7271

7372
/// The seed used to generate randomness for test case shuffling.
7473
///

0 commit comments

Comments
 (0)