run method
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;
}