run method

Future<List<TestResult>> run({
  1. required int shardCount,
  2. required String testPath,
  3. int? shardIndex,
  4. int? seed,
  5. String? resultPath,
  6. bool? isCoverageEnabled,
  7. String? coveragePath,
  8. bool? keepGeneratedTestGroups,
})

Implementation

Future<List<TestResult>> run({
  required int shardCount,
  required String testPath,
  int? shardIndex,
  int? seed,
  String? resultPath,
  bool? isCoverageEnabled,
  String? coveragePath,
  bool? keepGeneratedTestGroups,
}) async {
  final progress = CliLogger.logProgress('Generating files');
  final results = <TestResult>[];
  final files = <String>[];
  try {
    final testGroupsFiles = _generateTestGroups(
      shardCount: shardCount,
      seed: seed,
      testPath: testPath,
      shardIndex: shardIndex,
    );
    files.addAll(testGroupsFiles);

    if (files.isEmpty) {
      progress.fail(
          'Failed to generate test files. Tests will be not run for current shard.');
      return results;
    }

    progress.complete('Files generated. Running tests.');

    for (var fileIndex = 0; fileIndex < files.length; fileIndex++) {
      results.add(
        await _runTests(
          shardIndex: fileIndex,
          totalShardCount: files.length,
          filePath: files[fileIndex],
          resultsFilePath: resultPath,
          isCoverageEnabled: isCoverageEnabled,
          coveragePath: coveragePath,
          keepGeneratedTestGroups: keepGeneratedTestGroups,
        ),
      );
    }

    final totalTime = _calculateTotalTestTime(results);

    CliLogger.logSuccess(' ');
    CliLogger.logSuccess(
      'Running tests completed in ${_formatDuration(totalTime)}',
    );

    _printTestsSummary(results);
  } catch (error, stackTrace) {
    progress.fail('Running tests failed');
    CliLogger.logError(
      'Running tests failed',
      error: error,
      stackTrace: stackTrace,
    );
  } finally {
    if (keepGeneratedTestGroups != true) {
      _deleteTestGroups(files);
    }
  }
  return results;
}