Skip to content

Commit 032f8cd

Browse files
Gary Miguelcbracken
authored andcommitted
Use runTests in fuchsia tester. (flutter#19178)
This allows us to collect code coverage for Fuchsia tests.
1 parent 7dd265f commit 032f8cd

File tree

1 file changed

+42
-12
lines changed

1 file changed

+42
-12
lines changed

packages/flutter_tools/bin/fuchsia_tester.dart

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ import 'package:flutter_tools/src/base/io.dart';
1111
import 'package:flutter_tools/src/cache.dart';
1212
import 'package:flutter_tools/src/context_runner.dart';
1313
import 'package:flutter_tools/src/dart/package_map.dart';
14+
import 'package:flutter_tools/src/artifacts.dart';
1415
import 'package:flutter_tools/src/disabled_usage.dart';
1516
import 'package:flutter_tools/src/globals.dart';
16-
import 'package:flutter_tools/src/test/flutter_platform.dart' as loader;
17+
import 'package:flutter_tools/src/test/coverage_collector.dart';
18+
import 'package:flutter_tools/src/test/runner.dart';
1719
import 'package:flutter_tools/src/usage.dart';
18-
import 'package:test/src/executable.dart'
19-
as test; // ignore: implementation_imports
2020

2121
// Note: this was largely inspired by lib/src/commands/test.dart.
2222

@@ -28,6 +28,8 @@ const List<String> _kRequiredOptions = const <String>[
2828
_kOptionShell,
2929
_kOptionTestDirectory,
3030
];
31+
const String _kOptionCoverage = 'coverage';
32+
const String _kOptionCoveragePath = 'coverage-path';
3133

3234
Future<Null> main(List<String> args) {
3335
return runInContext<Null>(() => run(args), overrides: <Type, dynamic>{
@@ -47,12 +49,20 @@ Future<Null> run(List<String> args) async {
4749
final ArgParser parser = new ArgParser()
4850
..addOption(_kOptionPackages, help: 'The .packages file')
4951
..addOption(_kOptionShell, help: 'The Flutter shell binary')
50-
..addOption(_kOptionTestDirectory, help: 'Directory containing the tests');
52+
..addOption(_kOptionTestDirectory, help: 'Directory containing the tests')
53+
..addFlag(_kOptionCoverage,
54+
defaultsTo: false,
55+
negatable: false,
56+
help: 'Whether to collect coverage information.',
57+
)
58+
..addOption(_kOptionCoveragePath,
59+
defaultsTo: 'coverage/lcov.info',
60+
help: 'Where to store coverage information (if coverage is enabled).',
61+
);
5162
final ArgResults argResults = parser.parse(args);
5263
if (_kRequiredOptions
5364
.any((String option) => !argResults.options.contains(option))) {
54-
printError('Missing option! All options must be specified.');
55-
exit(1);
65+
throwToolExit('Missing option! All options must be specified.');
5666
}
5767
final Directory tempDirectory =
5868
fs.systemTempDirectory.createTempSync('fuchsia_tester');
@@ -70,16 +80,36 @@ Future<Null> run(List<String> args) async {
7080
if (!fs.isFileSync(shellPath)) {
7181
throwToolExit('Cannot find Flutter shell at $shellPath');
7282
}
73-
loader.installHook(
74-
shellPath: shellPath,
75-
);
83+
// Put the tester shell where runTests expects it.
84+
// TODO(tvolkert,garymm): Switch to a Fuchsia-specific Artifacts impl.
85+
final Link testerDestLink =
86+
fs.link(artifacts.getArtifactPath(Artifact.flutterTester));
87+
testerDestLink.parent.createSync(recursive: true);
88+
testerDestLink.createSync(shellPath);
7689

7790
PackageMap.globalPackagesPath =
7891
fs.path.normalize(fs.path.absolute(argResults[_kOptionPackages]));
79-
fs.currentDirectory = testDirectory;
8092

81-
await test.main(testArgs);
82-
exit(exitCode);
93+
CoverageCollector collector;
94+
if (argResults['coverage']) {
95+
collector = new CoverageCollector();
96+
}
97+
98+
exitCode = await runTests(
99+
tests,
100+
workDir: testDirectory,
101+
watcher: collector,
102+
enableObservatory: collector != null,
103+
);
104+
105+
if (collector != null) {
106+
// collector expects currentDirectory to be the root of the dart
107+
// package (i.e. contains lib/ and test/ sub-dirs).
108+
fs.currentDirectory = testDirectory.parent;
109+
if (!await
110+
collector.collectCoverageData(argResults[_kOptionCoveragePath]))
111+
throwToolExit('Failed to collect coverage data');
112+
}
83113
} finally {
84114
tempDirectory.deleteSync(recursive: true);
85115
}

0 commit comments

Comments
 (0)