diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/SearchingForTestsTask.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/SearchingForTestsTask.java index d54df59967f5..8d40947c7286 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/SearchingForTestsTask.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/SearchingForTestsTask.java @@ -102,7 +102,7 @@ public class SearchingForTestsTask extends Task.Backgroundable { writeTempFile(); connect(); - myClient.startListening(); + myClient.startListening(myConfig); } @Override diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGRunnableState.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGRunnableState.java index 6baf0b0d4bc4..3571721636a3 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGRunnableState.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGRunnableState.java @@ -57,6 +57,9 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.ToolWindowId; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.pom.java.LanguageLevel; +import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiClass; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.PathUtil; import com.intellij.util.net.NetUtils; import com.theoryinpractice.testng.model.*; @@ -69,7 +72,9 @@ import org.testng.CommandLineArgs; import org.testng.IDEATestNGListener; import org.testng.RemoteTestNGStarter; import org.testng.annotations.AfterClass; +import org.testng.remote.RemoteArgs; import org.testng.remote.strprotocol.MessageHelper; +import org.testng.remote.strprotocol.SerializedMessageSender; import javax.swing.*; import java.io.File; @@ -278,7 +283,7 @@ public class TestNGRunnableState extends JavaCommandLineState { final TestData data = config.getPersistantData(); - javaParameters.getProgramParametersList().add(CommandLineArgs.PORT, String.valueOf(port)); + javaParameters.getProgramParametersList().add(supportSerializationProtocol(config) ? RemoteArgs.PORT : CommandLineArgs.PORT, String.valueOf(port)); if (data.getOutputDirectory() != null && !"".equals(data.getOutputDirectory())) { javaParameters.getProgramParametersList().add(CommandLineArgs.OUTPUT_DIRECTORY, data.getOutputDirectory()); @@ -363,4 +368,20 @@ public class TestNGRunnableState extends JavaCommandLineState { final File tempFile) { return new SearchingForTestsTask(serverSocket, config, tempFile, client); } + + public static boolean supportSerializationProtocol(TestNGConfiguration config) { + final Project project = config.getProject(); + final GlobalSearchScope scopeToDetermineTestngIn; + if (config.getPersistantData().getScope() == TestSearchScope.WHOLE_PROJECT) { + scopeToDetermineTestngIn = GlobalSearchScope.allScope(project); + } + else { + scopeToDetermineTestngIn = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(config.getConfigurationModule().getModule()); + } + + final TestData data = config.getPersistantData(); + + return JavaPsiFacade.getInstance(project) + .findClass(SerializedMessageSender.class.getName(), scopeToDetermineTestngIn) != null; + } } diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/IDEARemoteTestRunnerClient.java b/plugins/testng/src/com/theoryinpractice/testng/model/IDEARemoteTestRunnerClient.java index 0e513a126df2..f93ced8f8575 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/model/IDEARemoteTestRunnerClient.java +++ b/plugins/testng/src/com/theoryinpractice/testng/model/IDEARemoteTestRunnerClient.java @@ -17,6 +17,10 @@ package com.theoryinpractice.testng.model; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; +import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiClass; +import com.theoryinpractice.testng.configuration.TestNGConfiguration; +import com.theoryinpractice.testng.configuration.TestNGRunnableState; import org.testng.remote.strprotocol.*; import java.net.SocketTimeoutException; @@ -30,8 +34,10 @@ public class IDEARemoteTestRunnerClient extends AbstractRemoteTestRunnerClient private TestNGRemoteListener myListener; private int myPort; - public synchronized void startListening() { - final StringMessageSender messageSender = new StringMessageSender("localhost", myPort); + public synchronized void startListening(TestNGConfiguration config) { + final IMessageSender messageSender = TestNGRunnableState.supportSerializationProtocol(config) + ? new SerializedMessageSender("localhost", myPort) + : new StringMessageSender("localhost", myPort); final ServerConnection srvConnection = new ServerConnection(messageSender) { @Override protected void handleThrowable(Throwable cause) {