summaryrefslogtreecommitdiff
path: root/plugins/testng
diff options
context:
space:
mode:
authorJean-Baptiste Queru <jbq@google.com>2013-04-01 14:41:51 -0700
committerJean-Baptiste Queru <jbq@google.com>2013-04-01 14:41:51 -0700
commit2bd2b7c2623d4266384e890271869efc044aabff (patch)
tree0b31f50e55975b6354ed458314e17b4441bb4e17 /plugins/testng
parent1d526b16d476792ca7ce47616d55833115e8d6ab (diff)
downloadidea-2bd2b7c2623d4266384e890271869efc044aabff.tar.gz
Snapshot ee98b298267d0e09d2cd2f0731b6480a56dd48e7 from master branch of git://git.jetbrains.org/idea/community.git
Change-Id: I4515f72af131fdea9fc6905a4dc0fe9532409a81
Diffstat (limited to 'plugins/testng')
-rw-r--r--plugins/testng/src/com/theoryinpractice/testng/TestNGReferenceContributor.java6
-rw-r--r--plugins/testng/src/com/theoryinpractice/testng/configuration/SearchingForTestsTask.java62
-rw-r--r--plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java22
-rw-r--r--plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java19
-rw-r--r--plugins/testng/src/com/theoryinpractice/testng/model/TestNGListenersTableModel.java2
-rw-r--r--plugins/testng/src/com/theoryinpractice/testng/model/TestProxy.java2
6 files changed, 81 insertions, 32 deletions
diff --git a/plugins/testng/src/com/theoryinpractice/testng/TestNGReferenceContributor.java b/plugins/testng/src/com/theoryinpractice/testng/TestNGReferenceContributor.java
index 6895ccd94f03..840dce8de9b6 100644
--- a/plugins/testng/src/com/theoryinpractice/testng/TestNGReferenceContributor.java
+++ b/plugins/testng/src/com/theoryinpractice/testng/TestNGReferenceContributor.java
@@ -26,8 +26,6 @@ import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInsight.completion.CompletionUtil;
import com.intellij.codeInsight.lookup.LookupValueFactory;
import com.intellij.codeInspection.InspectionProfile;
-import com.intellij.codeInspection.InspectionProfileEntry;
-import com.intellij.codeInspection.ex.LocalInspectionToolWrapper;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.text.StringUtil;
@@ -248,8 +246,8 @@ public class TestNGReferenceContributor extends PsiReferenceContributor {
List<Object> list = new ArrayList<Object>();
InspectionProfile inspectionProfile = InspectionProjectProfileManager.getInstance(myProject).getInspectionProfile();
- final InspectionProfileEntry inspectionTool = inspectionProfile.getInspectionTool(DependsOnGroupsInspection.SHORT_NAME, myElement);
- DependsOnGroupsInspection inspection = (DependsOnGroupsInspection)((LocalInspectionToolWrapper)inspectionTool).getTool();
+ DependsOnGroupsInspection inspection = (DependsOnGroupsInspection)inspectionProfile.getUnwrappedTool(
+ DependsOnGroupsInspection.SHORT_NAME, myElement);
for (String groupName : inspection.groups) {
list.add(LookupValueFactory.createLookupValue(groupName, null));
diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/SearchingForTestsTask.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/SearchingForTestsTask.java
index f850cb4ded69..9f4036f66584 100644
--- a/plugins/testng/src/com/theoryinpractice/testng/configuration/SearchingForTestsTask.java
+++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/SearchingForTestsTask.java
@@ -57,6 +57,8 @@ import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.*;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
public class SearchingForTestsTask extends Task.Backgroundable {
private static final Logger LOG = Logger.getInstance("#" + SearchingForTestsTask.class.getName());
@@ -373,23 +375,57 @@ public class SearchingForTestsTask extends Task.Backgroundable {
return ClassUtil.findPsiClass(psiManager, className.replace('/', '.'), null, true, getSearchScope());
}
});
- if (psiClass == null) {
- throw new CantRunException("Class " + className + " not found");
+ if (psiClass != null) {
+ final Boolean hasTest = ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
+ @Override
+ public Boolean compute() {
+ return TestNGUtil.hasTest(psiClass);
+ }
+ });
+ if (hasTest) {
+ if (StringUtil.isEmpty(methodName)) {
+ calculateDependencies(null, classes, psiClass);
+ }
+ else {
+ collectTestMethods(classes, psiClass, methodName);
+ }
+ } else {
+ throw new CantRunException("No tests found in class " + className);
+ }
}
- if (ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
- @Override
- public Boolean compute() {
- return TestNGUtil.hasTest(psiClass);
+ }
+ if (classes.size() != data.getPatterns().size()) {
+ TestSearchScope scope = myConfig.getPersistantData().getScope();
+ final List<Pattern> compilePatterns = new ArrayList<Pattern>();
+ for (String p : data.getPatterns()) {
+ final Pattern compilePattern;
+ try {
+ compilePattern = Pattern.compile(p);
}
- })) {
- if (StringUtil.isEmpty(methodName)) {
- calculateDependencies(null, classes, psiClass);
+ catch (PatternSyntaxException e) {
+ continue;
}
- else {
- collectTestMethods(classes, psiClass, methodName);
+ if (compilePattern != null) {
+ compilePatterns.add(compilePattern);
}
- } else {
- throw new CantRunException("No tests found in class " + className);
+ }
+ TestClassFilter projectFilter =
+ new TestClassFilter(scope.getSourceScope(myConfig).getGlobalSearchScope(), myProject, true, true){
+ @Override
+ public boolean isAccepted(PsiClass psiClass) {
+ if (super.isAccepted(psiClass)) {
+ final String qualifiedName = psiClass.getQualifiedName();
+ LOG.assertTrue(qualifiedName != null);
+ for (Pattern pattern : compilePatterns) {
+ if (pattern.matcher(qualifiedName).matches()) return true;
+ }
+ }
+ return false;
+ }
+ };
+ calculateDependencies(null, classes, TestNGUtil.getAllTestClasses(projectFilter, false));
+ if (classes.size() == 0) {
+ throw new CantRunException("No tests found in for patterns \"" + StringUtil.join(data.getPatterns(), " || ") + '\"');
}
}
}
diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java
index d2c33225f636..74edb5002935 100644
--- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java
+++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java
@@ -29,6 +29,7 @@ import com.intellij.execution.configurations.*;
import com.intellij.execution.junit.RefactoringListeners;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.testframework.SourceScope;
+import com.intellij.execution.testframework.TestSearchScope;
import com.intellij.execution.util.JavaParametersUtil;
import com.intellij.execution.util.ProgramParametersUtil;
import com.intellij.openapi.components.PathMacroManager;
@@ -39,7 +40,6 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.DefaultJDOMExternalizer;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
-import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.refactoring.listeners.RefactoringElementAdapter;
@@ -47,7 +47,6 @@ import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.refactoring.listeners.UndoRefactoringElementListener;
import com.theoryinpractice.testng.model.TestData;
import com.theoryinpractice.testng.model.TestType;
-import com.theoryinpractice.testng.util.TestNGUtil;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -275,6 +274,14 @@ public class TestNGConfiguration extends ModuleBasedConfiguration<JavaRunConfigu
patterns.add(JavaExecutionUtil.getRuntimeQualifiedName(pattern) + suffix);
}
data.setPatterns(patterns);
+ final Module module = TestNGPatternConfigurationProducer.findModule(this, getConfigurationModule().getModule(), patterns);
+ if (module == null) {
+ data.setScope(TestSearchScope.WHOLE_PROJECT);
+ setModule(null);
+ }
+ else {
+ setModule(module);
+ }
setGeneratedName();
}
@@ -335,17 +342,6 @@ public class TestNGConfiguration extends ModuleBasedConfiguration<JavaRunConfigu
if (patterns.isEmpty()) {
throw new RuntimeConfigurationWarning("No pattern selected");
}
- final GlobalSearchScope searchScope = GlobalSearchScope.allScope(getProject());
- for (String pattern : patterns) {
- final String className = pattern.contains(",") ? StringUtil.getPackageName(pattern, ',') : pattern;
- final PsiClass psiClass = JavaExecutionUtil.findMainClass(getProject(), className, searchScope);
- if (psiClass == null) {
- throw new RuntimeConfigurationWarning("Class " + className + " not found");
- }
- if (!TestNGUtil.hasTest(psiClass)) {
- throw new RuntimeConfigurationWarning("Class " + className + " not a test");
- }
- }
}
JavaRunConfigurationExtensionManager.checkConfigurationIsValid(this);
ProgramParametersUtil.checkWorkingDirectoryExist(this, getProject(), getConfigurationModule().getModule());
diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java
index 3f52715ee692..02caba250ac6 100644
--- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java
+++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java
@@ -20,15 +20,19 @@
*/
package com.theoryinpractice.testng.configuration;
+import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.JavaRunConfigurationExtensionManager;
import com.intellij.execution.Location;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.actions.ConfigurationContext;
+import com.intellij.execution.configurations.ModuleBasedConfiguration;
import com.intellij.execution.junit.JUnitUtil;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.LangDataKeys;
+import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
+import com.intellij.openapi.util.Condition;
import com.intellij.psi.*;
import com.theoryinpractice.testng.model.TestData;
import com.theoryinpractice.testng.model.TestType;
@@ -115,6 +119,21 @@ public class TestNGPatternConfigurationProducer extends TestNGConfigurationProdu
}
@Override
+ protected Module findModule(ModuleBasedConfiguration configuration, Module contextModule) {
+ final Set<String> patterns = ((TestNGConfiguration)configuration).data.getPatterns();
+ return findModule(configuration, contextModule, patterns);
+ }
+
+ public static Module findModule(ModuleBasedConfiguration configuration, Module contextModule, Set<String> patterns) {
+ return JavaExecutionUtil.findModule(contextModule, patterns, configuration.getProject(), new Condition<PsiClass>() {
+ @Override
+ public boolean value(PsiClass psiClass) {
+ return TestNGUtil.hasTest(psiClass);
+ }
+ });
+ }
+
+ @Override
protected RunnerAndConfigurationSettings findExistingByElement(@NotNull Location location,
@NotNull RunnerAndConfigurationSettings[] existingConfigurations,
ConfigurationContext context) {
diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/TestNGListenersTableModel.java b/plugins/testng/src/com/theoryinpractice/testng/model/TestNGListenersTableModel.java
index da14fb0ecd15..3bebe8566e95 100644
--- a/plugins/testng/src/com/theoryinpractice/testng/model/TestNGListenersTableModel.java
+++ b/plugins/testng/src/com/theoryinpractice/testng/model/TestNGListenersTableModel.java
@@ -22,9 +22,9 @@
*/
package com.theoryinpractice.testng.model;
+import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
-import javax.swing.*;
public class TestNGListenersTableModel extends AbstractListModel
{
diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/TestProxy.java b/plugins/testng/src/com/theoryinpractice/testng/model/TestProxy.java
index 424a85a7ef00..e799929a5e01 100644
--- a/plugins/testng/src/com/theoryinpractice/testng/model/TestProxy.java
+++ b/plugins/testng/src/com/theoryinpractice/testng/model/TestProxy.java
@@ -79,7 +79,7 @@ public class TestProxy extends AbstractTestProxy {
if (psiElement != null) {
final Project project = psiElement.getProject();
PsiDocumentManager.getInstance(project).commitAllDocuments();
- this.psiElement = SmartPointerManager.getInstance(project).createLazyPointer(psiElement);
+ this.psiElement = SmartPointerManager.getInstance(project).createSmartPsiElementPointer(psiElement);
} else {
this.psiElement = null;
}