findAffectedTests method

List<AffectedTestReason> findAffectedTests({
  1. required List<String> changedFiles,
  2. required List<String> testFiles,
})

Implementation

List<AffectedTestReason> findAffectedTests({
  required List<String> changedFiles,
  required List<String> testFiles,
}) {
  final testSet = testFiles.toSet();
  final Map<String, AffectedTestReason> affectedMap = {};

  for (final changedFile in changedFiles) {
    if (testSet.contains(changedFile)) {
      affectedMap[changedFile] = AffectedTestReason(
        testPath: changedFile,
        dependencyChain: [changedFile],
      );
    }

    final dependentsWithTrace = graph.getTransitiveDependents(changedFile);

    dependentsWithTrace.forEach((dependentPath, trace) {
      if (testSet.contains(dependentPath)) {
        if (!affectedMap.containsKey(dependentPath)) {
          affectedMap[dependentPath] = AffectedTestReason(
            testPath: dependentPath,
            dependencyChain: trace,
          );
        }
      }
    });
  }

  final result = affectedMap.values.toList();
  result.sort((a, b) => a.testPath.compareTo(b.testPath));
  return result;
}