package jetbrains.mps.testbench; /*Generated by MPS */ import org.jetbrains.annotations.NotNull; import jetbrains.mps.tool.environment.Environment; import jetbrains.mps.tool.environment.EnvironmentContainer; import jetbrains.mps.project.Project; import java.io.File; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.smodel.ModuleRepositoryFacade; import jetbrains.mps.project.Solution; import jetbrains.mps.smodel.Language; import jetbrains.mps.smodel.Generator; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.persistence.PersistenceFacade; import jetbrains.mps.util.FileUtil; import jetbrains.mps.util.UnzipUtil; import java.io.IOException; public abstract class BaseMpsTest { @NotNull protected static Environment getEnvironment() { Environment env = EnvironmentContainer.get(); if (env == null) { throw new IllegalStateException("No initialized environment is available"); } return env; } protected static Project openProject(@NotNull File projectFile) { return getEnvironment().openProject(projectFile); } /** * IMPORTANT: requires model read access! * * @deprecated uses global repository, shall cease. */ @Deprecated protected static <T extends SModule> T getModule(String moduleFqName, Class<T> cls) { return ModuleRepositoryFacade.getInstance().getModule(moduleFqName, cls); } /** * * @deprecated use {@link jetbrains.mps.testbench.BaseMpsTest#getSolution(Project, String) } with context (project) instead */ @Deprecated protected static Solution getSolution(String moduleFqName) { return getModule(moduleFqName, Solution.class); } protected static Solution getSolution(Project project, String moduleFqName) { for (SModule m : project.getProjectModules()) { if (m instanceof Solution && moduleFqName.equals(m.getModuleName())) { return (Solution) m; } } return null; } /** * * @deprecated use {@link jetbrains.mps.testbench.BaseMpsTest#getLanguage(Project, String) } with context (project) instead */ @Deprecated protected static Language getLanguage(String moduleFqName) { return getModule(moduleFqName, Language.class); } protected static Language getLanguage(Project project, String moduleFqName) { for (SModule m : project.getProjectModules()) { if (m instanceof Language && moduleFqName.equals(m.getModuleName())) { return (Language) m; } } return null; } protected static Generator getGenerator(String moduleFqName) { return getModule(moduleFqName, Generator.class); } protected static SModel getModel(Project project, String modelName) { return project.getScope().resolve(PersistenceFacade.getInstance().createModelReference(modelName)); } /** * copies project to some [temporary] destination dir, after that opens it */ protected static Project openClonedProject(File source, final File destinationDir) { if (destinationDir.exists()) { FileUtil.delete(destinationDir); } if (source.isDirectory()) { FileUtil.copyDir(source, destinationDir); } else { // it is allowed to have zipped directory here try { boolean success = destinationDir.mkdir(); if (!(success)) { throw new IllegalStateException("Could not create dir at the provided destination"); } UnzipUtil.unzip(source, destinationDir); } catch (IOException e) { throw new RuntimeException("Got error while unzipping the project sources", e); } } return getEnvironment().openProject(destinationDir); } protected static void closeClonedProject(final Project project, final File destinationDir) { Environment env = getEnvironment(); env.flushAllEvents(); project.dispose(); FileUtil.delete(destinationDir); } }