runTestsAndCollect function

Future<void> runTestsAndCollect(
  1. String packageRoot,
  2. List<String> arguments
)

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".');
}