junit/testng: common attach searching for tests task

This commit is contained in:
Anna Kozlova
2015-04-07 11:26:04 +02:00
parent 227bdd8aa8
commit 3f0e21e75d
5 changed files with 35 additions and 58 deletions
@@ -19,6 +19,7 @@ import com.intellij.ExtensionPoints;
import com.intellij.execution.configurations.*;
import com.intellij.execution.process.OSProcessHandler;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.testframework.SearchForTestsTask;
import com.intellij.execution.testframework.TestConsoleProperties;
import com.intellij.execution.testframework.TestFrameworkRunningModel;
import com.intellij.execution.testframework.TestSearchScope;
@@ -99,6 +100,10 @@ public abstract class JavaTestFrameworkRunnableState<T extends ModuleBasedConfig
}
}
public SearchForTestsTask createSearchingForTestsTask() {
return null;
}
protected boolean configureByModule(Module module) {
return module != null;
}
@@ -15,9 +15,11 @@
*/
package com.intellij.execution.testframework;
import com.intellij.execution.CantRunException;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.process.OSProcessHandler;
import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProcessCanceledException;
@@ -74,6 +76,21 @@ public abstract class SearchForTestsTask extends Task.Backgroundable {
}
}
public void attachTaskToProcess(final OSProcessHandler handler) {
handler.addProcessListener(new ProcessAdapter() {
@Override
public void processTerminated(final ProcessEvent event) {
handler.removeProcessListener(this);
ensureFinished();
}
@Override
public void startNotified(final ProcessEvent event) {
startSearch();
}
});
}
@Override
public void run(@NotNull ProgressIndicator indicator) {
try {
@@ -22,11 +22,8 @@ import com.intellij.execution.configurations.RuntimeConfigurationException;
import com.intellij.execution.configurations.RuntimeConfigurationWarning;
import com.intellij.execution.junit2.ui.model.JUnitRunningModel;
import com.intellij.execution.junit2.ui.properties.JUnitConsoleProperties;
import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.testframework.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
@@ -54,23 +51,11 @@ public class TestPackage extends TestObject {
@Override
protected JUnitProcessHandler createHandler(Executor executor) throws ExecutionException {
final JUnitProcessHandler handler = super.createHandler(executor);
final SearchForTestsTask task = createSearchingForTestsTask();
handler.addProcessListener(new ProcessAdapter() {
@Override
public void startNotified(ProcessEvent event) {
super.startNotified(event);
task.startSearch();
}
@Override
public void processTerminated(ProcessEvent event) {
handler.removeProcessListener(this);
task.ensureFinished();
}
});
createSearchingForTestsTask().attachTaskToProcess(handler);
return handler;
}
@Override
public SearchForTestsTask createSearchingForTestsTask() {
final JUnitConfiguration.Data data = getConfiguration().getPersistentData();
@@ -16,7 +16,6 @@
package com.theoryinpractice.testng.configuration;
import com.intellij.ExtensionPoints;
import com.intellij.execution.*;
import com.intellij.execution.configurations.*;
import com.intellij.execution.process.OSProcessHandler;
@@ -28,23 +27,14 @@ import com.intellij.execution.testframework.*;
import com.intellij.execution.testframework.actions.AbstractRerunFailedTestsAction;
import com.intellij.execution.ui.ConsoleView;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.execution.util.JavaParametersUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.module.EffectiveLanguageLevelUtil;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.ex.JavaSdkUtil;
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Getter;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.search.GlobalSearchScope;
@@ -64,9 +54,7 @@ import org.testng.remote.RemoteArgs;
import org.testng.remote.RemoteTestNG;
import org.testng.remote.strprotocol.SerializedMessageSender;
import java.io.File;
import java.io.IOException;
import java.net.ServerSocket;
public class TestNGRunnableState extends JavaTestFrameworkRunnableState<TestNGConfiguration> {
private static final Logger LOG = Logger.getInstance("TestNG Runner");
@@ -87,18 +75,7 @@ public class TestNGRunnableState extends JavaTestFrameworkRunnableState<TestNGCo
@Override
protected OSProcessHandler startProcess() throws ExecutionException {
final OSProcessHandler handler = super.startProcess();
final SearchingForTestsTask task = createSearchingForTestsTask(myServerSocket, getConfiguration(), myTempFile);
handler.addProcessListener(new ProcessAdapter() {
@Override
public void processTerminated(final ProcessEvent event) {
task.ensureFinished();
}
@Override
public void startNotified(final ProcessEvent event) {
task.startSearch();
}
});
createSearchingForTestsTask().attachTaskToProcess(handler);
return handler;
}
@@ -203,12 +180,9 @@ public class TestNGRunnableState extends JavaTestFrameworkRunnableState<TestNGCo
final JavaParameters javaParameters = super.createJavaParameters();
javaParameters.setupEnvs(getConfiguration().getPersistantData().getEnvs(), getConfiguration().getPersistantData().PASS_PARENT_ENVS);
javaParameters.setMainClass("org.testng.RemoteTestNGStarter");
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!
final String pathToBundledJar = PathUtil.getJarPathForClass(AfterClass.class);
javaParameters.getClassPath().add(pathToBundledJar);
javaParameters.getClassPath().add(PathUtil.getJarPathForClass(AfterClass.class));
try {
port = NetUtils.findAvailableSocketPort();
@@ -231,19 +205,16 @@ public class TestNGRunnableState extends JavaTestFrameworkRunnableState<TestNGCo
if (data.TEST_LISTENERS != null && !data.TEST_LISTENERS.isEmpty()) {
buf.append(StringUtil.join(data.TEST_LISTENERS, ";"));
}
collectListeners(javaParameters, buf, IDEATestNGListener.EP_NAME, ";");
if (buf.length() > 0) javaParameters.getProgramParametersList().add(CommandLineArgs.LISTENER, buf.toString());
createServerSocket(javaParameters);
createTempFiles(javaParameters);
return javaParameters;
}
protected SearchingForTestsTask createSearchingForTestsTask(ServerSocket serverSocket,
final TestNGConfiguration config,
final File tempFile) {
return new SearchingForTestsTask(serverSocket, config, tempFile, client);
public SearchingForTestsTask createSearchingForTestsTask() {
return new SearchingForTestsTask(myServerSocket, config, myTempFile, client);
}
public static boolean supportSerializationProtocol(TestNGConfiguration config) {
@@ -50,9 +50,8 @@ public class RerunFailedTestsAction extends JavaRerunFailedTestsAction {
public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment env) {
return new TestNGRunnableState(env, configuration) {
@Override
protected SearchingForTestsTask createSearchingForTestsTask(ServerSocket serverSocket,
final TestNGConfiguration config, final File tempFile) {
return new SearchingForTestsTask(serverSocket, config, tempFile, client) {
public SearchingForTestsTask createSearchingForTestsTask() {
return new SearchingForTestsTask(myServerSocket, getConfiguration(), myTempFile, client) {
@Override
protected void fillTestObjects(final Map<PsiClass, Collection<PsiMethod>> classes) throws CantRunException {
final HashMap<PsiClass, Collection<PsiMethod>> fullClassList = ContainerUtil.newHashMap();
@@ -68,8 +67,8 @@ public class RerunFailedTestsAction extends JavaRerunFailedTestsAction {
}
}
final GlobalSearchScope scope = config.getConfigurationModule().getSearchScope();
final Project project = config.getProject();
final GlobalSearchScope scope = getConfiguration().getConfigurationModule().getSearchScope();
final Project project = getConfiguration().getProject();
for (final AbstractTestProxy proxy : failedTests) {
ApplicationManager.getApplication().runReadAction(new Runnable() {
public void run() {