runTestsAndCollect function
Implementation
Future<void> runTestsAndCollect(
String packageRoot,
List<String> arguments,
) async {
final script = path.join(packageRoot, 'test', '.test_cov.dart');
final dartArgs = [
'--pause-isolates-on-exit',
'--enable-vm-service',
...arguments,
script,
];
final process = await Process.start('dart', dartArgs);
final serviceUriCompleter = Completer<Uri>();
process.stdout
.transform(utf8.decoder)
.transform(const LineSplitter())
.listen((line) {
print(line);
final uri = _extractObservatoryUri(line);
if (uri != null) serviceUriCompleter.complete(uri);
});
final serviceUri = await serviceUriCompleter.future;
Map<String, Map<int, int>> hitmap;
try {
final data = await coverage.collect(serviceUri, true, true, false, {});
hitmap = await coverage.createHitmap(data['coverage']);
} finally {
await process.stderr.drain<List<int>?>();
}
final exitStatus = await process.exitCode;
if (exitStatus != 0) throw 'Tests failed with exit code $exitStatus';
final resolver = coverage.Resolver(
packagesPath: path.join(packageRoot, '.packages'),
);
final lcov = coverage.LcovFormatter(
resolver,
reportOn: ['lib${path.separator}'],
basePath: packageRoot,
);
final coverageData = await lcov.format(hitmap);
final coveragePath = path.join(packageRoot, 'coverage');
final coverageDir = Directory(coveragePath);
if (!coverageDir.existsSync()) coverageDir.createSync();
final coverageFile = File(path.join(coveragePath, 'lcov.info'));
coverageFile.writeAsStringSync(coverageData);
print('Coverage report saved to "coverage/lcov.info".');
}