diff options
author | Jean-Baptiste Queru <jbq@google.com> | 2013-04-01 14:41:51 -0700 |
---|---|---|
committer | Jean-Baptiste Queru <jbq@google.com> | 2013-04-01 14:41:51 -0700 |
commit | 2bd2b7c2623d4266384e890271869efc044aabff (patch) | |
tree | 0b31f50e55975b6354ed458314e17b4441bb4e17 /plugins/testng | |
parent | 1d526b16d476792ca7ce47616d55833115e8d6ab (diff) | |
download | idea-2bd2b7c2623d4266384e890271869efc044aabff.tar.gz |
Snapshot ee98b298267d0e09d2cd2f0731b6480a56dd48e7 from master branch of git://git.jetbrains.org/idea/community.git
Change-Id: I4515f72af131fdea9fc6905a4dc0fe9532409a81
Diffstat (limited to 'plugins/testng')
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; } |