package jetbrains.mps.testbench.junit.suites;
/*Generated by MPS */
import org.junit.runner.RunWith;
import jetbrains.mps.testbench.junit.runners.TeamCityParameterizedRunner;
import jetbrains.mps.project.Project;
import org.jetbrains.mps.openapi.module.SModule;
import org.junit.runners.Parameterized;
import java.util.List;
import java.lang.reflect.InvocationTargetException;
import jetbrains.mps.smodel.ModelAccessHelper;
import jetbrains.mps.util.Computable;
import jetbrains.mps.tool.environment.Environment;
import jetbrains.mps.tool.environment.MpsEnvironment;
import jetbrains.mps.tool.environment.EnvironmentConfig;
import jetbrains.mps.tool.environment.ProjectStrategy;
import jetbrains.mps.testbench.junit.runners.MPSCompositeProjectStrategy;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Set;
import java.util.HashSet;
@RunWith(value = TeamCityParameterizedRunner.class)
public class BaseCheckModulesTest {
private static Project ourContextProject;
protected final SModule myModule;
public BaseCheckModulesTest(SModule module) {
this.myModule = module;
}
@Parameterized.Parameters
public static List<Object[]> testParameters() throws InvocationTargetException, InterruptedException {
// load excluded modules from system property, can be specified by MpsTestConfiguration annotation?
initEnvironment();
Iterable<SModule> modules = new ModelAccessHelper(ourContextProject.getModelAccess()).runReadAction(new Computable<List<SModule>>() {
public List<SModule> compute() {
return ourContextProject.getProjectModulesWithGenerators();
}
});
return createTestParametersFromModules(modules);
}
protected static void initEnvironment() throws InvocationTargetException, InterruptedException {
Environment env = MpsEnvironment.getOrCreate(EnvironmentConfig.defaultConfig());
ProjectStrategy strategy = new MPSCompositeProjectStrategy();
ourContextProject = env.createProject(strategy);
}
protected static List<Object[]> createTestParametersFromModules(Iterable<? extends SModule> modules) {
ArrayList<Object[]> res = new ArrayList<Object[]>();
for (SModule module : modules) {
res.add(new Object[]{module});
}
Collections.sort(res, new Comparator<Object[]>() {
@Override
public int compare(Object[] o1, Object[] o2) {
return String.valueOf(o1[0]).compareTo(String.valueOf(o2[0]));
}
});
return res;
}
protected static Set<SModule> excludeModules(Iterable<? extends SModule> modules, Set<String> excludedModules) {
Set<SModule> result = new HashSet<SModule>();
for (SModule module : modules) {
if (!(excludedModules.contains(module.getModuleName()))) {
result.add(module);
}
}
return result;
}
public static Project getContextProject() {
return ourContextProject;
}
}