test discovery: pass module through system property if applicable

This commit is contained in:
Anna Kozlova
2016-06-16 16:20:44 +03:00
parent a09b802d17
commit e5bb93fd7f
4 changed files with 31 additions and 19 deletions
@@ -35,14 +35,16 @@ import java.util.List;
*/
@SuppressWarnings("unused")
public class InternalTestDiscoveryListener implements TestListener, Closeable {
private final String myModuleName;
private final String myTracesDirectory;
private List<String> myCompletedMethodNames = new ArrayList<String>();
private String myTracesDirectory;
private final Alarm myProcessTracesAlarm;
private TestDiscoveryIndex myDiscoveryIndex;
public InternalTestDiscoveryListener() {
myProcessTracesAlarm = new Alarm(Alarm.ThreadToUse.POOLED_THREAD, null);
myTracesDirectory = System.getProperty("org.jetbrains.instrumentation.trace.dir");
myModuleName = System.getProperty("org.jetbrains.instrumentation.main.module");
}
private TestDiscoveryIndex getIndex() {
@@ -89,9 +91,7 @@ public class InternalTestDiscoveryListener implements TestListener, Closeable {
protected void flushCurrentTraces() {
final String[] fullTestNames = ArrayUtil.toStringArray(myCompletedMethodNames);
myCompletedMethodNames.clear();
myProcessTracesAlarm.addRequest(() -> {
TestDiscoveryExtension.processAvailableTraces(fullTestNames, myTracesDirectory, null, getIndex());
}, 100);
myProcessTracesAlarm.addRequest(() -> TestDiscoveryExtension.processAvailableTraces(fullTestNames, myTracesDirectory, myModuleName, "j", getIndex()), 100);
}
private static String getMethodName(Test test) {
@@ -35,13 +35,12 @@ import com.intellij.psi.PsiMethod;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.testIntegration.TestFramework;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.ContainerUtilRt;
import com.intellij.util.containers.HashSet;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.stream.Stream;
public abstract class TestDiscoveryConfigurationProducer extends JavaRunConfigurationProducerBase<JavaTestConfigurationBase> {
protected TestDiscoveryConfigurationProducer(ConfigurationType type) {
@@ -90,11 +89,18 @@ public abstract class TestDiscoveryConfigurationProducer extends JavaRunConfigur
configuration.getFrameworkPrefix());
if (modules.isEmpty()) return true;
final List<Module> survivedModules = new ArrayList<>();
final ModuleManager moduleManager = ModuleManager.getInstance(project);
for (String moduleName : modules) {
final Module moduleByName = moduleManager.findModuleByName(moduleName);
if (moduleByName != null) {
survivedModules.add(moduleByName);
}
}
if (survivedModules.isEmpty()) return true;
final Set<Module> allModules = new HashSet<>(Arrays.asList(moduleManager.getModules()));
modules.stream()
.map(moduleManager::findModuleByName)
.filter(module -> module != null)
survivedModules
.forEach(module -> {
final List<Module> dependentModules = ModuleUtilCore.getAllDependentModules(module);
dependentModules.add(module);
@@ -74,6 +74,9 @@ public class TestDiscoveryExtension extends RunConfigurationExtension {
@NotNull final ProcessHandler handler,
@Nullable RunnerSettings runnerSettings) {
if (runnerSettings == null && isApplicableFor(configuration)) {
final String frameworkPrefix = ((JavaTestConfigurationBase)configuration).getFrameworkPrefix();
final String moduleName = ((JavaTestConfigurationBase)configuration).getConfigurationModule().getModuleName();
final Alarm processTracesAlarm = new Alarm(Alarm.ThreadToUse.POOLED_THREAD, null);
final MessageBusConnection connection = configuration.getProject().getMessageBus().connect();
connection.subscribe(SMTRunnerEventsListener.TEST_STATUS, new SMTRunnerEventsAdapter() {
@@ -84,12 +87,12 @@ public class TestDiscoveryExtension extends RunConfigurationExtension {
if ((root == null || root.getHandler() == handler)) {
final String fullTestName = test.getLocationUrl();
if (fullTestName != null && fullTestName.startsWith(JavaTestLocator.TEST_PROTOCOL)) {
myCompletedMethodNames.add(((JavaTestConfigurationBase)configuration).getFrameworkPrefix() + fullTestName.substring(JavaTestLocator.TEST_PROTOCOL.length() + 3));
myCompletedMethodNames.add(frameworkPrefix + fullTestName.substring(JavaTestLocator.TEST_PROTOCOL.length() + 3));
if (myCompletedMethodNames.size() > 50) {
final String[] fullTestNames = ArrayUtil.toStringArray(myCompletedMethodNames);
myCompletedMethodNames.clear();
processTracesAlarm.addRequest(() -> processAvailableTraces(fullTestNames,
getTracesDirectory(configuration), configuration,
getTracesDirectory(configuration), moduleName, frameworkPrefix,
TestDiscoveryIndex.getInstance(configuration.getProject())
), 100);
}
@@ -162,7 +165,8 @@ public class TestDiscoveryExtension extends RunConfigurationExtension {
if (testMethodTraces != null) {
for (File testMethodTrace : testMethodTraces) {
try {
coverageIndex.updateFromTestTrace(testMethodTrace, (JavaTestConfigurationBase)configuration);
coverageIndex.updateFromTestTrace(testMethodTrace, ((JavaTestConfigurationBase)configuration).getConfigurationModule().getModuleName(),
((JavaTestConfigurationBase)configuration).getFrameworkPrefix());
FileUtil.delete(testMethodTrace);
}
catch (IOException e) {
@@ -180,7 +184,8 @@ public class TestDiscoveryExtension extends RunConfigurationExtension {
public static void processAvailableTraces(final String[] fullTestNames,
final String tracesDirectory,
RunConfigurationBase configuration,
final String moduleName,
final String frameworkPrefix,
final TestDiscoveryIndex discoveryIndex) {
synchronized (ourTracesLock) {
for (String fullTestName : fullTestNames) {
@@ -190,7 +195,7 @@ public class TestDiscoveryExtension extends RunConfigurationExtension {
final File testMethodTrace = new File(tracesDirectory, className + "-" + methodName + ".tr");
if (testMethodTrace.exists()) {
try {
discoveryIndex.updateFromTestTrace(testMethodTrace, (JavaTestConfigurationBase)configuration);
discoveryIndex.updateFromTestTrace(testMethodTrace, moduleName, frameworkPrefix);
FileUtil.delete(testMethodTrace);
}
catch (IOException e) {
@@ -296,11 +296,12 @@ public class TestDiscoveryIndex implements ProjectComponent {
public void projectClosed() {
}
public void updateFromTestTrace(@NotNull File file, @Nullable JavaTestConfigurationBase configurationBase) throws IOException {
public void updateFromTestTrace(@NotNull File file,
@Nullable final String moduleName,
@NotNull final String frameworkPrefix) throws IOException {
int fileNameDotIndex = file.getName().lastIndexOf('.');
final String testName = fileNameDotIndex != -1 ? file.getName().substring(0, fileNameDotIndex) : file.getName();
final Module module = configurationBase != null ? configurationBase.getConfigurationModule().getModule() : null;
doUpdateFromTestTrace(file, testName, module != null ? configurationBase.getFrameworkPrefix() + module.getName() : null);
doUpdateFromTestTrace(file, testName, moduleName != null ? frameworkPrefix + moduleName : null);
}
private void doUpdateFromTestTrace(File file, final String testName, @Nullable final String moduleName) throws IOException {