package jetbrains.mps.testbench; /*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.tool.environment.Environment; import jetbrains.mps.tool.environment.MpsEnvironment; import jetbrains.mps.tool.environment.EnvironmentConfig; import jetbrains.mps.testbench.junit.runners.FromProjectPathProjectStrategy; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import org.junit.Test; import jetbrains.mps.testbench.junit.Order; import org.junit.Assert; import jetbrains.mps.internal.collections.runtime.IterableUtils; /** * todo: extract common part from ProjectTest and BaseCheckModulesTest */ @RunWith(TeamCityParameterizedRunner.class) public class ProjectTest { private static Project ourContextProject; private final ModuleGenerationHolder generationHolder; public ProjectTest(SModule module, ModuleGenerationHolder generationHolder) { // module argument only for test name this.generationHolder = generationHolder; } @Parameterized.Parameters public static List<Object[]> testParameters() throws InvocationTargetException, InterruptedException { initTestEnvironment(); return createTestParametersFromModules(ourContextProject.getModules()); } public static void initTestEnvironment() throws InvocationTargetException, InterruptedException { Environment env = MpsEnvironment.getOrCreate(EnvironmentConfig.defaultConfig()); ourContextProject = env.createProject(new FromProjectPathProjectStrategy()); } public static List<Object[]> createTestParametersFromModules(Iterable<? extends SModule> modules) { ArrayList<Object[]> res = new ArrayList<Object[]>(); for (SModule module : modules) { res.add(new Object[]{module, new ModuleGenerationHolder(module, ourContextProject)}); } 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; } @Test @Order(value = 1) public void buildModule() throws Exception { generationHolder.build(); if (!(generationHolder.isBuildSuccessful())) { List<String> errors = generationHolder.buildErrors(); Assert.assertTrue("Build errors:\n" + IterableUtils.join(errors, "\n"), errors.isEmpty()); List<String> warns = generationHolder.buildWarns(); Assert.assertTrue("Build warnings:\n" + IterableUtils.join(warns, "\n"), warns.isEmpty()); // sanity, if build fails without messages Assert.fail(String.format("Make failed with %d errors and %d warnings", errors.size(), warns.size())); } } @Test @Order(value = 2) public void diffModule() throws Exception { if (generationHolder.needsGeneration()) { Assert.assertTrue("Can't diff a module that needs generation but didn't get any file generated", generationHolder.hasFilesGenerated()); } List<String> diffReport = generationHolder.diff(); Assert.assertTrue("Difference:\n" + IterableUtils.join(diffReport, "\n"), diffReport.isEmpty()); generationHolder.cleanUp(); } }