forked tests: fork per module for testng

This commit is contained in:
Anna Kozlova
2015-07-01 12:03:11 +03:00
parent 5d9feb9b0e
commit cb3cf31895
7 changed files with 366 additions and 147 deletions
@@ -61,17 +61,18 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.serialization.PathMacroUtil;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public abstract class JavaTestFrameworkRunnableState<T extends ModuleBasedConfiguration<JavaRunConfigurationModule> & CommonJavaRunConfigurationParameters & SMRunnerConsolePropertiesProvider> extends JavaCommandLineState {
private static final Logger LOG = Logger.getInstance("#" + JavaTestFrameworkRunnableState.class.getName());
protected ServerSocket myServerSocket;
protected File myTempFile;
protected File myWorkingDirsFile = null;
public JavaTestFrameworkRunnableState(ExecutionEnvironment environment) {
super(environment);
@@ -158,6 +159,8 @@ public abstract class JavaTestFrameworkRunnableState<T extends ModuleBasedConfig
return Registry.is(getFrameworkId() + "_sm");
}
protected abstract void configureRTClasspath(JavaParameters javaParameters);
@Override
protected JavaParameters createJavaParameters() throws ExecutionException {
final JavaParameters javaParameters = new JavaParameters();
@@ -239,40 +242,9 @@ public abstract class JavaTestFrameworkRunnableState<T extends ModuleBasedConfig
if (jdk == null) {
throw new ExecutionException(ExecutionBundle.message("run.configuration.error.no.jdk.specified"));
}
try {
final File tempFile = FileUtil.createTempFile("command.line", "", true);
final PrintWriter writer = new PrintWriter(tempFile, CharsetToolkit.UTF8);
try {
if (JdkUtil.useDynamicClasspath(getConfiguration().getProject())) {
String classpath = PathUtil.getJarPathForClass(CommandLineWrapper.class);
final String utilRtPath = PathUtil.getJarPathForClass(StringUtilRt.class);
if (!classpath.equals(utilRtPath)) {
classpath += File.pathSeparator + utilRtPath;
}
writer.println(classpath);
}
else {
writer.println("");
}
writer.println(((JavaSdkType)jdk.getSdkType()).getVMExecutablePath(jdk));
for (String vmParameter : javaParameters.getVMParametersList().getList()) {
writer.println(vmParameter);
}
}
finally {
writer.close();
}
passForkMode(forkMode, tempFile);
}
catch (Exception e) {
LOG.error(e);
}
}
protected abstract void passForkMode(String forkMode, File tempFile) throws ExecutionException;
protected abstract void passForkMode(String forkMode, File tempFile, JavaParameters parameters) throws ExecutionException;
protected void collectListeners(JavaParameters javaParameters, StringBuilder buf, String epName, String delimiter) {
final T configuration = getConfiguration();
@@ -295,6 +267,7 @@ public abstract class JavaTestFrameworkRunnableState<T extends ModuleBasedConfig
}
protected void configureClasspath(final JavaParameters javaParameters) throws CantRunException {
configureRTClasspath(javaParameters);
RunConfigurationModule module = getConfiguration().getConfigurationModule();
final String jreHome = getConfiguration().isAlternativeJrePathEnabled() ? getConfiguration().getAlternativeJrePath() : null;
final int pathType = JavaParameters.JDK_AND_CLASSES_AND_TESTS;
@@ -349,19 +322,96 @@ public abstract class JavaTestFrameworkRunnableState<T extends ModuleBasedConfig
protected void createTempFiles(JavaParameters javaParameters) {
try {
myWorkingDirsFile = FileUtil.createTempFile("idea_working_dirs_" + getFrameworkId(), ".tmp");
myWorkingDirsFile.deleteOnExit();
javaParameters.getProgramParametersList().add("@w@" + myWorkingDirsFile.getAbsolutePath());
final File tempFile = FileUtil.createTempFile("command.line", "", true);
final PrintWriter writer = new PrintWriter(tempFile, CharsetToolkit.UTF8);
try {
if (JdkUtil.useDynamicClasspath(getConfiguration().getProject())) {
String classpath = PathUtil.getJarPathForClass(CommandLineWrapper.class);
final String utilRtPath = PathUtil.getJarPathForClass(StringUtilRt.class);
if (!classpath.equals(utilRtPath)) {
classpath += File.pathSeparator + utilRtPath;
}
writer.println(classpath);
}
else {
writer.println("");
}
final Sdk jdk = javaParameters.getJdk();
if (jdk != null) {
writer.println(((JavaSdkType)jdk.getSdkType()).getVMExecutablePath(jdk));
for (String vmParameter : javaParameters.getVMParametersList().getList()) {
writer.println(vmParameter);
}
}
}
finally {
writer.close();
}
passForkMode(getForkMode(), tempFile, javaParameters);
myTempFile = FileUtil.createTempFile("idea_" + getFrameworkId(), ".tmp");
myTempFile.deleteOnExit();
passTempFile(javaParameters.getProgramParametersList(), myTempFile.getAbsolutePath());
}
catch (IOException e) {
catch (Exception e) {
LOG.error(e);
}
}
protected void writeClassesPerModule(String packageName, JavaParameters javaParameters, Map<Module, List<String>> perModule)
throws FileNotFoundException, UnsupportedEncodingException, CantRunException {
if (perModule != null && perModule.size() > 1) {
final String classpath = getScope() == TestSearchScope.WHOLE_PROJECT
? null : javaParameters.getClassPath().getPathsString();
final PrintWriter wWriter = new PrintWriter(myWorkingDirsFile, CharsetToolkit.UTF8);
try {
wWriter.println(packageName);
for (Module module : perModule.keySet()) {
final String moduleDir = PathMacroUtil.getModuleDir(module.getModuleFilePath());
wWriter.println(moduleDir);
if (classpath == null) {
final JavaParameters parameters = new JavaParameters();
parameters.getClassPath().add(JavaSdkUtil.getIdeaRtJarPath());
configureRTClasspath(parameters);
JavaParametersUtil.configureModule(module, parameters, JavaParameters.JDK_AND_CLASSES_AND_TESTS,
getConfiguration().isAlternativeJrePathEnabled() ? getConfiguration()
.getAlternativeJrePath() : null);
wWriter.println(parameters.getClassPath().getPathsString());
}
else {
wWriter.println(classpath);
}
final List<String> classNames = perModule.get(module);
wWriter.println(classNames.size());
for (String className : classNames) {
wWriter.println(className);
}
}
}
finally {
wWriter.close();
}
}
}
protected void deleteTempFiles() {
if (myTempFile != null) {
FileUtil.delete(myTempFile);
}
if (myWorkingDirsFile != null) {
FileUtil.delete(myWorkingDirsFile);
}
}
}