package jetbrains.mps.baseLanguage.unitTest.execution.settings;
/*Generated by MPS */
import jetbrains.mps.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import java.util.List;
import jetbrains.mps.baseLanguage.unitTest.execution.client.ITestNodeWrapper;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import org.jetbrains.mps.openapi.module.SModule;
import org.jetbrains.mps.openapi.util.SubProgressKind;
public class ProjectTestCollector extends TestCollector {
private final Project myProject;
public ProjectTestCollector(@NotNull Project project, @Nullable ProgressMonitor monitor, boolean breakOnFirstFound) {
super(monitor, breakOnFirstFound);
myProject = project;
}
@NotNull
@Override
public List<ITestNodeWrapper> collect() {
List<ITestNodeWrapper> result = ListSequence.fromList(new ArrayList<ITestNodeWrapper>());
List<SModule> projectModules = myProject.getProjectModules();
myMonitor.start("Fetching tests from modules", 2 * projectModules.size());
try {
for (SModule module : ListSequence.fromList(projectModules)) {
if (myMonitor.isCanceled()) {
return ListSequence.fromList(new ArrayList<ITestNodeWrapper>());
}
List<ITestNodeWrapper> moduleTests = new ModuleTestCollector(module, myMonitor.subTask(1, SubProgressKind.REPLACING), myBreakOnFirstFound).collect();
ListSequence.fromList(result).addSequence(ListSequence.fromList(moduleTests));
myMonitor.advance(1);
if (myBreakOnFirstFound && ListSequence.fromList(moduleTests).isNotEmpty()) {
return result;
}
}
} finally {
myMonitor.done();
}
return result;
}
}