package jetbrains.mps.testbench.junit.suites;
/*Generated by MPS */
import org.junit.runner.RunWith;
import jetbrains.mps.testbench.junit.runners.TeamCityParameterizedRunner;
import jetbrains.mps.tool.environment.Environment;
import jetbrains.mps.project.Project;
import org.junit.runners.Parameterized;
import java.util.List;
import java.lang.reflect.InvocationTargetException;
import jetbrains.mps.tool.environment.EnvironmentConfig;
import jetbrains.mps.tool.environment.IdeaEnvironment;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.LocalFileSystem;
import java.util.ArrayList;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.util.Processor;
import org.junit.Before;
import java.io.File;
import org.junit.After;
@RunWith(value = TeamCityParameterizedRunner.class)
public class BaseProjectsTest {
public static final String MIGRATION_PLUGIN = "migrationAssistant";
public static final String MIGRATION_PLUGIN_ID = "jetbrains.mps.ide.migration.assistant";
private static Environment ourEnv;
private String myProjectDir;
private Project myProject;
public BaseProjectsTest(String projectDir) {
myProjectDir = projectDir;
}
@Parameterized.Parameters
public static List<Object[]> testParameters() throws InvocationTargetException, InterruptedException {
EnvironmentConfig defaultConfig = EnvironmentConfig.defaultConfig().withJavaPlugin();
// todo generalize it when there are more tests
defaultConfig.addPlugin(MIGRATION_PLUGIN, MIGRATION_PLUGIN_ID);
ourEnv = IdeaEnvironment.getOrCreate(defaultConfig);
String projectsDir = System.getProperty("projects_dir");
VirtualFile projectsRoot = LocalFileSystem.getInstance().findFileByPath(projectsDir);
final List<Object[]> projects = new ArrayList<Object[]>();
VfsUtil.processFilesRecursively(projectsRoot, new Processor<VirtualFile>() {
public boolean process(VirtualFile file) {
if (!(file.isValid()) || !(file.isDirectory())) {
return true;
}
// is a project dir?
if (!(file.getName().equals(com.intellij.openapi.project.Project.DIRECTORY_STORE_FOLDER))) {
return true;
}
projects.add(new String[]{file.getParent().getPath()});
return true;
}
});
return projects;
}
@Before
public void openProject() {
myProject = ourEnv.openProject(new File(myProjectDir));
TestMakeUtil.make(myProject);
}
@After
public void closeProject() {
myProject.dispose();
}
public Project getContextProject() {
return myProject;
}
public String getProjectDir() {
return myProjectDir;
}
}