diff --git a/java/execution/impl/src/com/intellij/execution/junit/InheritorChooser.java b/java/execution/impl/src/com/intellij/execution/junit/InheritorChooser.java index db0f2b5bd4c9..ae7769f58b83 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/InheritorChooser.java +++ b/java/execution/impl/src/com/intellij/execution/junit/InheritorChooser.java @@ -102,7 +102,7 @@ public class InheritorChooser { } }); JBPopupFactory.getInstance().createListPopupBuilder(list) - .setTitle("Choose executable classes to run " + psiMethod.getName()) + .setTitle("Choose executable classes to run " + (psiMethod != null ? psiMethod.getName() : containingClass.getName())) .setMovable(false) .setResizable(false) .setRequestFocus(true) diff --git a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java index 6a537423dbb5..950c6610aff2 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java +++ b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java @@ -275,7 +275,7 @@ public class JUnitUtil { public static PsiClass getTestClass(final Location location) { for (Iterator> iterator = location.getAncestors(PsiClass.class, false); iterator.hasNext();) { final Location classLocation = iterator.next(); - if (isTestClass(classLocation)) return classLocation.getPsiElement(); + if (isTestClass(classLocation.getPsiElement(), false, true)) return classLocation.getPsiElement(); } PsiElement element = location.getPsiElement(); if (element instanceof PsiClassOwner) { diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java b/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java index 1665873b828b..cf0cdf8871da 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java @@ -365,9 +365,15 @@ public class JUnitConfiguration extends ModuleBasedConfiguration classes, PsiMethod method) { myData.TEST_OBJECT = TEST_PATTERN; final Set patterns = new HashSet(); - myData.METHOD_NAME = method.getName(); + final String methodSufiix; + if (method != null) { + myData.METHOD_NAME = method.getName(); + methodSufiix = "," + myData.METHOD_NAME; + } else { + methodSufiix = ""; + } for (PsiClass pattern : classes) { - patterns.add(JavaExecutionUtil.getRuntimeQualifiedName(pattern) + "," + myData.METHOD_NAME); + patterns.add(JavaExecutionUtil.getRuntimeQualifiedName(pattern) + methodSufiix); } myData.setPatterns(patterns); setGeneratedName(); diff --git a/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java index b82776997dcf..ca680504e283 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java @@ -26,6 +26,9 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiMethod; + +import java.util.List; public class TestClassConfigurationProducer extends JUnitConfigurationProducer { private PsiClass myTestClass; @@ -55,5 +58,26 @@ public class TestClassConfigurationProducer extends JUnitConfigurationProducer { return myTestClass; } + @Override + public void perform(final ConfigurationContext context, final Runnable performRunnable) { + final InheritorChooser inheritorChooser = new InheritorChooser() { + @Override + protected void runForClasses(List classes, PsiMethod method, ConfigurationContext context, Runnable performRunnable) { + ((JUnitConfiguration)context.getConfiguration().getConfiguration()).bePatternConfiguration(classes, method); + super.runForClasses(classes, method, context, performRunnable); + } + + @Override + protected void runForClass(PsiClass aClass, + PsiMethod psiMethod, + ConfigurationContext context, + Runnable performRunnable) { + ((JUnitConfiguration)context.getConfiguration().getConfiguration()).beClassConfiguration(aClass); + super.runForClass(aClass, psiMethod, context, performRunnable); + } + }; + if (inheritorChooser.runMethodInAbstractClass(context, performRunnable, null, myTestClass)) return; + super.perform(context, performRunnable); + } } diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java index 27054e0de657..2c26dda1d5e1 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java @@ -263,10 +263,16 @@ public class TestNGConfiguration extends ModuleBasedConfiguration classes, PsiMethod method) { data.TEST_OBJECT = TestType.PATTERN.getType(); - data.METHOD_NAME = method.getName(); + final String suffix; + if (method != null) { + data.METHOD_NAME = method.getName(); + suffix = "," + data.METHOD_NAME; + } else { + suffix = ""; + } Set patterns = new HashSet(); for (PsiClass pattern : classes) { - patterns.add(JavaExecutionUtil.getRuntimeQualifiedName(pattern) + "," + data.METHOD_NAME); + patterns.add(JavaExecutionUtil.getRuntimeQualifiedName(pattern) + suffix); } data.setPatterns(patterns); setGeneratedName(); diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGInClassConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGInClassConfigurationProducer.java index 723b3a31e226..75ba26c7727f 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGInClassConfigurationProducer.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGInClassConfigurationProducer.java @@ -100,9 +100,19 @@ public class TestNGInClassConfigurationProducer extends TestNGConfigurationProdu @Override public void perform(final ConfigurationContext context, final Runnable performRunnable) { - if (myPsiElement instanceof PsiMethod) { - final PsiMethod psiMethod = (PsiMethod)myPsiElement; - final PsiClass containingClass = psiMethod.getContainingClass(); + if (myPsiElement instanceof PsiMethod || myPsiElement instanceof PsiClass) { + + final PsiMethod psiMethod; + final PsiClass containingClass; + + if (myPsiElement instanceof PsiMethod) { + psiMethod = (PsiMethod)myPsiElement; + containingClass = psiMethod.getContainingClass(); + } else { + psiMethod = null; + containingClass = (PsiClass)myPsiElement; + } + final InheritorChooser inheritorChooser = new InheritorChooser() { @Override protected void runForClasses(List classes, PsiMethod method, ConfigurationContext context, Runnable performRunnable) { @@ -115,9 +125,13 @@ public class TestNGInClassConfigurationProducer extends TestNGConfigurationProdu PsiMethod psiMethod, ConfigurationContext context, Runnable performRunnable) { - final Project project = psiMethod.getProject(); - final MethodLocation methodLocation = new MethodLocation(project, psiMethod, PsiLocation.fromPsiElement(aClass)); - ((TestNGConfiguration)context.getConfiguration().getConfiguration()).setMethodConfiguration(methodLocation); + if (myPsiElement instanceof PsiMethod) { + final Project project = psiMethod.getProject(); + final MethodLocation methodLocation = new MethodLocation(project, psiMethod, PsiLocation.fromPsiElement(aClass)); + ((TestNGConfiguration)context.getConfiguration().getConfiguration()).setMethodConfiguration(methodLocation); + } else { + ((TestNGConfiguration)context.getConfiguration().getConfiguration()).setClassConfiguration(aClass); + } super.runForClass(aClass, psiMethod, context, performRunnable); } };