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