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