package jetbrains.mps.baseLanguage.unitTest.execution.settings;
/*Generated by MPS */
import org.jetbrains.mps.openapi.module.SModule;
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.model.SModel;
import jetbrains.mps.util.IterableUtil;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.smodel.SModelStereotype;
public class ModuleTestCollector extends TestCollector {
private final SModule myModule;
public ModuleTestCollector(@NotNull SModule module, @Nullable ProgressMonitor monitor, boolean breakOnFirstFound) {
super(monitor, breakOnFirstFound);
myModule = module;
}
@NotNull
@Override
public List<ITestNodeWrapper> collect() {
List<ITestNodeWrapper> result = ListSequence.fromList(new ArrayList<ITestNodeWrapper>());
Iterable<SModel> models = myModule.getModels();
myMonitor.start("Fetching tests from module " + myModule.getModuleName(), IterableUtil.asCollection(models).size());
try {
for (SModel model : Sequence.fromIterable(models)) {
if (SModelStereotype.isUserModel(model)) {
if (myMonitor.isCanceled()) {
return ListSequence.fromList(new ArrayList<ITestNodeWrapper>());
}
List<ITestNodeWrapper> modelTests = new ModelTestCollector(model, myMonitor.subTask(1), myBreakOnFirstFound).collect();
ListSequence.fromList(result).addSequence(ListSequence.fromList(modelTests));
if (myBreakOnFirstFound && ListSequence.fromList(modelTests).isNotEmpty()) {
return result;
}
}
myMonitor.advance(1);
}
} finally {
myMonitor.done();
}
return result;
}
}