testng, junit: do not accept existing configuration when created one differs by module or vm parameters (IDEA-110770)

This commit is contained in:
anna
2013-07-23 12:33:25 +02:00
parent 89d2642267
commit 98b03ef4f6
5 changed files with 34 additions and 26 deletions
@@ -23,8 +23,11 @@ import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* User: anna
@@ -67,4 +70,17 @@ public abstract class RunManager {
public abstract Map<String, List<RunnerAndConfigurationSettings>> getStructure(@NotNull ConfigurationType type);
public abstract void refreshUsagesList(RunProfile profile);
public static String suggestUniqueName(String str, ArrayList<String> currentNames) {
if (!currentNames.contains(str)) return str;
final Matcher matcher = Pattern.compile("(.*?)\\s*\\(\\d+\\)").matcher(str);
final String originalName = (matcher.matches()) ? matcher.group(1) : str;
int i = 1;
while (true) {
final String newName = String.format("%s (%d)", originalName, i);
if (!currentNames.contains(newName)) return newName;
i++;
}
}
}
@@ -31,7 +31,9 @@ import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
public abstract class RuntimeConfigurationProducer implements Comparable, Cloneable {
public static final ExtensionPointName<RuntimeConfigurationProducer> RUNTIME_CONFIGURATION_PRODUCER = ExtensionPointName.create("com.intellij.configurationProducer");
@@ -65,6 +67,12 @@ public abstract class RuntimeConfigurationProducer implements Comparable, Clonea
final RunnerAndConfigurationSettings configuration = result.findExistingByElement(_location, configurations, context);
if (configuration != null) {
result.myConfiguration = configuration;
} else {
final ArrayList<String> currentNames = new ArrayList<String>();
for (RunnerAndConfigurationSettings configurationSettings : configurations) {
currentNames.add(configurationSettings.getName());
}
result.myConfiguration.setName(RunManager.suggestUniqueName(result.myConfiguration.getName(), currentNames));
}
}
}
@@ -69,8 +69,6 @@ import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.*;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static com.intellij.execution.impl.RunConfigurable.NodeKind.*;
import static com.intellij.ui.RowsDnDSupport.RefinedDropSupport.Position.*;
@@ -1027,16 +1025,7 @@ class RunConfigurable extends BaseConfigurable {
currentNames.add((String)userObject);
}
}
if (!currentNames.contains(str)) return str;
final Matcher matcher = Pattern.compile("(.*?)\\s*\\(\\d+\\)").matcher(str);
final String originalName = (matcher.matches()) ? matcher.group(1) : str;
int i = 1;
while (true) {
final String newName = String.format("%s (%d)", originalName, i);
if (!currentNames.contains(newName)) return newName;
i++;
}
return RunManager.suggestUniqueName(str, currentNames);
}
private SingleConfigurationConfigurable<RunConfiguration> createNewConfiguration(final RunnerAndConfigurationSettings settings, final DefaultMutableTreeNode node) {
@@ -21,6 +21,8 @@ import com.intellij.execution.Location;
import com.intellij.execution.RunManagerEx;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.configurations.RuntimeConfiguration;
import com.intellij.execution.impl.RunManagerImpl;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.Comparing;
@@ -46,10 +48,7 @@ public abstract class JUnitConfigurationProducer extends JavaRuntimeConfiguratio
if (PatternConfigurationProducer.isMultipleElementsSelected(context)) {
return null;
}
final Module predefinedModule =
((JUnitConfiguration)((RunManagerImpl)RunManagerEx.getInstanceEx(location.getProject()))
.getConfigurationTemplate(getConfigurationFactory())
.getConfiguration()).getConfigurationModule().getModule();
final RuntimeConfiguration predefinedConfiguration = context.getOriginalConfiguration(JUnitConfigurationType.getInstance());
location = JavaExecutionUtil.stepIntoSingleClass(location);
final PsiElement element = location.getPsiElement();
final PsiClass testClass = JUnitUtil.getTestClass(element);
@@ -62,16 +61,15 @@ public abstract class JUnitConfigurationProducer extends JavaRuntimeConfiguratio
} else {
testPackage = null;
}
final String vmParameters = predefinedConfiguration instanceof JUnitConfiguration ? ((JUnitConfiguration)predefinedConfiguration).getVMParameters() : null;
for (RunnerAndConfigurationSettings existingConfiguration : existingConfigurations) {
final JUnitConfiguration unitConfiguration = (JUnitConfiguration)existingConfiguration.getConfiguration();
if (vmParameters != null && !Comparing.strEqual(vmParameters, unitConfiguration.getVMParameters())) continue;
final TestObject testobject = unitConfiguration.getTestObject();
if (testobject != null) {
if (testobject.isConfiguredByElement(unitConfiguration, testClass, testMethod, testPackage)) {
final Module configurationModule = unitConfiguration.getConfigurationModule().getModule();
if (Comparing.equal(location.getModule(), configurationModule)) return existingConfiguration;
if (Comparing.equal(predefinedModule, configurationModule)) {
return existingConfiguration;
}
}
}
}
@@ -42,21 +42,18 @@ public abstract class TestNGConfigurationProducer extends JavaRuntimeConfigurati
protected RunnerAndConfigurationSettings findExistingByElement(Location location,
@NotNull RunnerAndConfigurationSettings[] existingConfigurations,
ConfigurationContext context) {
final Module predefinedModule =
((TestNGConfiguration)((RunManagerImpl)RunManagerEx.getInstanceEx(location.getProject()))
.getConfigurationTemplate(getConfigurationFactory())
.getConfiguration()).getConfigurationModule().getModule();
final TestNGConfiguration testNGConfiguration =
(TestNGConfiguration)context.getOriginalConfiguration(TestNGConfigurationType.getInstance());
final String vmParameters = testNGConfiguration != null ? testNGConfiguration.getVMParameters() : null;
for (RunnerAndConfigurationSettings existingConfiguration : existingConfigurations) {
TestNGConfiguration config = (TestNGConfiguration)existingConfiguration.getConfiguration();
if (vmParameters != null && !Comparing.strEqual(config.getVMParameters(), vmParameters)) continue;
TestData testobject = config.getPersistantData();
if (testobject != null){
final PsiElement element = location.getPsiElement();
if (testobject.isConfiguredByElement(element)) {
final Module configurationModule = config.getConfigurationModule().getModule();
if (Comparing.equal(location.getModule(), configurationModule)) return existingConfiguration;
if(Comparing.equal(predefinedModule, configurationModule)) {
return existingConfiguration;
}
}
}
}