package jetbrains.mps.tool.gentest.plugin; /*Generated by MPS */ import org.jetbrains.mps.openapi.module.SModule; import java.util.List; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import org.apache.tools.ant.util.JavaEnvUtils; import org.junit.Test; import jetbrains.mps.tool.builder.unittest.UnitTestRunner; import jetbrains.mps.internal.collections.runtime.IterableUtils; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.util.PathManager; import java.util.Set; import jetbrains.mps.project.facets.JavaModuleOperations; import java.util.Collections; public class Tester implements ITestResource { private SModule module; private Iterable<String> testClasses; public Tester(SModule module, Iterable<String> testClasses) { this.module = module; this.testClasses = testClasses; } @Override public List<String> buildCommandLine() { List<String> cmdline = ListSequence.fromList(new ArrayList<String>()); ListSequence.fromList(cmdline).addElement(JavaEnvUtils.getJreExecutable("java")); List<String> prependClasspath = ListSequence.fromList(new ArrayList<String>()); ListSequence.fromList(prependClasspath).addElement(getResource(Test.class)); ListSequence.fromList(prependClasspath).addElement(getResource(UnitTestRunner.class)); ListSequence.fromList(cmdline).addElement("-classpath"); ListSequence.fromList(cmdline).addElement(IterableUtils.join(ListSequence.fromList(prependClasspath).concat(Sequence.fromIterable(getModuleClasspath())), System.getProperty("path.separator"))); ListSequence.fromList(cmdline).addElement(UnitTestRunner.class.getCanonicalName()); ListSequence.fromList(cmdline).addElement("-w"); for (String tc : testClasses) { ListSequence.fromList(cmdline).addElement("-c"); ListSequence.fromList(cmdline).addElement(tc); } return cmdline; } private String getResource(Class<?> cls) { return PathManager.getResourceRoot(cls, "/" + cls.getName().replace('.', '/') + ".class"); } private Iterable<String> getModuleClasspath() { return (Set<String>) JavaModuleOperations.collectExecuteClasspath(Collections.<SModule>singleton(module)); } @Override public String describe() { return "Testing " + module.getModuleName(); } @Override public SModule getModule() { return module; } }