mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
testng, junit: do not accept existing configuration when created one differs by module or vm parameters (IDEA-110770)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-7
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user