junit/testng: append common listeners and command line modifiers

This commit is contained in:
Anna Kozlova
2015-04-07 11:26:01 +02:00
parent a466f556aa
commit 84e2ee4f20
3 changed files with 50 additions and 84 deletions
@@ -15,6 +15,7 @@
*/
package com.intellij.execution;
import com.intellij.ExtensionPoints;
import com.intellij.execution.configurations.*;
import com.intellij.execution.process.OSProcessHandler;
import com.intellij.execution.runners.ExecutionEnvironment;
@@ -25,7 +26,11 @@ import com.intellij.execution.testframework.sm.SMTestRunnerConnectionUtil;
import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties;
import com.intellij.execution.testframework.sm.runner.ui.SMTRunnerConsoleView;
import com.intellij.execution.ui.ConsoleView;
import com.intellij.execution.util.JavaParametersUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.projectRoots.ex.JavaSdkUtil;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Getter;
import com.intellij.openapi.util.io.FileUtil;
@@ -57,6 +62,45 @@ public abstract class JavaTestFrameworkRunnableState<T extends ModuleBasedConfig
@NotNull protected abstract T getConfiguration();
protected void collectListeners(JavaParameters javaParameters, StringBuilder buf, String epName, String delimiter) {
final T configuration = getConfiguration();
final Object[] listeners = Extensions.getExtensions(epName);
for (final Object listener : listeners) {
boolean enabled = true;
for (RunConfigurationExtension ext : Extensions.getExtensions(RunConfigurationExtension.EP_NAME)) {
if (ext.isListenerDisabled(configuration, listener, getRunnerSettings())) {
enabled = false;
break;
}
}
if (enabled) {
if (buf.length() > 0) buf.append(delimiter);
final Class classListener = listener.getClass();
buf.append(classListener.getName());
javaParameters.getClassPath().add(PathUtil.getJarPathForClass(classListener));
}
}
}
@Override
protected JavaParameters createJavaParameters() throws ExecutionException {
final JavaParameters javaParameters = new JavaParameters();
final Module module = getConfiguration().getConfigurationModule().getModule();
final Object[] patchers = Extensions.getExtensions(ExtensionPoints.JUNIT_PATCHER);
for (Object patcher : patchers) {
((JUnitPatcher)patcher).patchJavaParameters(module, javaParameters);
}
// Append coverage parameters if appropriate
for (RunConfigurationExtension ext : Extensions.getExtensions(RunConfigurationExtension.EP_NAME)) {
ext.updateJavaParameters(getConfiguration(), javaParameters, getRunnerSettings());
}
JavaParametersUtil.configureConfiguration(javaParameters, getConfiguration());
JavaSdkUtil.addRtJar(javaParameters.getClassPath());
return javaParameters;
}
protected ExecutionResult startSMRunner(Executor executor,
OSProcessHandler handler,
RunConfigurationBase configuration,
@@ -16,7 +16,6 @@
package com.intellij.execution.junit;
import com.intellij.ExtensionPoints;
import com.intellij.execution.*;
import com.intellij.execution.configurations.*;
import com.intellij.execution.junit2.TestProxy;
@@ -156,13 +155,6 @@ public abstract class TestObject extends JavaTestFrameworkRunnableState<JUnitCon
protected void initialize(JavaParameters javaParameters) throws ExecutionException {
String parameters = getConfiguration().getProgramParameters();
getConfiguration().getPersistentData().setProgramParameters(null);
try {
JavaParametersUtil.configureConfiguration(javaParameters, getConfiguration());
}
finally {
getConfiguration().getPersistentData().setProgramParameters(parameters);
}
javaParameters.setMainClass(JUnitConfiguration.JUNIT_START_CLASS);
final Module module = getConfiguration().getConfigurationModule().getModule();
if (javaParameters.getJdk() == null){
@@ -171,31 +163,14 @@ public abstract class TestObject extends JavaTestFrameworkRunnableState<JUnitCon
: ProjectRootManager.getInstance(getConfiguration().getProject()).getProjectSdk());
}
configureAdditionalClasspath(javaParameters);
javaParameters.getClassPath().add(PathUtil.getJarPathForClass(JUnitStarter.class));
javaParameters.getProgramParametersList().add(JUnitStarter.IDE_VERSION + JUnitStarter.VERSION);
if (!StringUtil.isEmptyOrSpaces(parameters)) {
javaParameters.getProgramParametersList().add("@name" + parameters);
}
for (RunConfigurationExtension ext : Extensions.getExtensions(RunConfigurationExtension.EP_NAME)) {
ext.updateJavaParameters(getConfiguration(), javaParameters, getRunnerSettings());
}
final Object[] listeners = Extensions.getExtensions(IDEAJUnitListener.EP_NAME);
final StringBuilder buf = new StringBuilder();
for (final Object listener : listeners) {
boolean enabled = true;
for (RunConfigurationExtension ext : Extensions.getExtensions(RunConfigurationExtension.EP_NAME)) {
if (ext.isListenerDisabled(getConfiguration(), listener, getRunnerSettings())) {
enabled = false;
break;
}
}
if (enabled) {
final Class classListener = listener.getClass();
buf.append(classListener.getName()).append("\n");
javaParameters.getClassPath().add(PathUtil.getJarPathForClass(classListener));
}
}
collectListeners(javaParameters, buf, IDEAJUnitListener.EP_NAME, "\n");
if (buf.length() > 0) {
try {
myListenersFile = FileUtil.createTempFile("junit_listeners_", "");
@@ -216,13 +191,8 @@ public abstract class TestObject extends JavaTestFrameworkRunnableState<JUnitCon
@Override
protected JavaParameters createJavaParameters() throws ExecutionException {
JavaParameters javaParameters = new JavaParameters();
JavaParameters javaParameters = super.createJavaParameters();
initialize(javaParameters);
final Module module = getConfiguration().getConfigurationModule().getModule();
final Object[] patchers = Extensions.getExtensions(ExtensionPoints.JUNIT_PATCHER);
for (Object patcher : patchers) {
((JUnitPatcher)patcher).patchJavaParameters(module, javaParameters);
}
return javaParameters;
}
@@ -196,10 +196,9 @@ public class TestNGRunnableState extends JavaTestFrameworkRunnableState<TestNGCo
@Override
protected JavaParameters createJavaParameters() throws ExecutionException {
final Project project = getConfiguration().getProject();
final JavaParameters javaParameters = new JavaParameters();
final JavaParameters javaParameters = super.createJavaParameters();
javaParameters.setupEnvs(getConfiguration().getPersistantData().getEnvs(), getConfiguration().getPersistantData().PASS_PARENT_ENVS);
javaParameters.setMainClass("org.testng.RemoteTestNGStarter");
javaParameters.setWorkingDirectory(getConfiguration().getWorkingDirectory());
javaParameters.getClassPath().add(PathUtil.getJarPathForClass(RemoteTestNGStarter.class));
//the next few lines are awkward for a reason, using compareTo for some reason causes a JVM class verification error!
@@ -214,19 +213,8 @@ public class TestNGRunnableState extends JavaTestFrameworkRunnableState<TestNGCo
final String pathToBundledJar = PathUtil.getJarPathForClass(AfterClass.class);
// Configure rest of jars
JavaParametersUtil.configureConfiguration(javaParameters, getConfiguration());
Sdk jdk = module == null ? ProjectRootManager.getInstance(project).getProjectSdk() : ModuleRootManager.getInstance(module).getSdk();
javaParameters.setJdk(jdk);
final Object[] patchers = Extensions.getExtensions(ExtensionPoints.JUNIT_PATCHER);
for (Object patcher : patchers) {
((JUnitPatcher)patcher).patchJavaParameters(module, javaParameters);
}
JavaSdkUtil.addRtJar(javaParameters.getClassPath());
// Append coverage parameters if appropriate
for (RunConfigurationExtension ext : Extensions.getExtensions(RunConfigurationExtension.EP_NAME)) {
ext.updateJavaParameters(getConfiguration(), javaParameters, getRunnerSettings());
}
LOG.info("Test scope is: " + getConfiguration().getPersistantData().getScope());
if (getConfiguration().getPersistantData().getScope() == TestSearchScope.WHOLE_PROJECT) {
@@ -264,45 +252,9 @@ public class TestNGRunnableState extends JavaTestFrameworkRunnableState<TestNGCo
buf.append(StringUtil.join(data.TEST_LISTENERS, ";"));
}
for (Object o : Extensions.getExtensions(IDEATestNGListener.EP_NAME)) {
boolean enabled = true;
for (RunConfigurationExtension extension : Extensions.getExtensions(RunConfigurationExtension.EP_NAME)) {
if (extension.isListenerDisabled(getConfiguration(), o, getRunnerSettings())) {
enabled = false;
break;
}
}
if (enabled) {
if (buf.length() > 0) buf.append(";");
buf.append(o.getClass().getName());
javaParameters.getClassPath().add(PathUtil.getJarPathForClass(o.getClass()));
}
}
collectListeners(javaParameters, buf, IDEATestNGListener.EP_NAME, ";");
if (buf.length() > 0) javaParameters.getProgramParametersList().add(CommandLineArgs.LISTENER, buf.toString());
/* // Always include the source paths - just makes things easier :)
VirtualFile[] sources;
if ((data.getScope() == TestSearchScope.WHOLE_PROJECT && TestType.PACKAGE.getType().equals(data.TEST_OBJECT)) || module == null) {
sources = ProjectRootManager.getInstance(project).getContentSourceRoots();
}
else {
sources = ModuleRootManager.getInstance(module).getSourceRoots();
}
if (sources.length > 0) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < sources.length; i++) {
VirtualFile source = sources[i];
sb.append(source.getPath());
if (i < sources.length - 1) {
sb.append(';');
}
}
javaParameters.getProgramParametersList().add(TestNGCommandLineArgs.SRC_COMMAND_OPT, sb.toString());
}*/
createServerSocket(javaParameters);
createTempFiles(javaParameters);
return javaParameters;