diff --git a/java/execution/impl/src/com/intellij/execution/util/JavaParametersUtil.java b/java/execution/impl/src/com/intellij/execution/util/JavaParametersUtil.java index 87461cf49d86..32139d5cb299 100644 --- a/java/execution/impl/src/com/intellij/execution/util/JavaParametersUtil.java +++ b/java/execution/impl/src/com/intellij/execution/util/JavaParametersUtil.java @@ -88,6 +88,10 @@ public class JavaParametersUtil { if (module == null) { throw CantRunException.noModuleConfigured(runConfigurationModule.getModuleName()); } + configureModule(module, parameters, classPathType, jreHome); + } + + public static void configureModule(Module module, JavaParameters parameters, int classPathType, String jreHome) throws CantRunException { parameters.configureByModule(module, classPathType, createModuleJdk(module, jreHome)); } diff --git a/platform/platform-resources-en/src/messages/ExecutionBundle.properties b/platform/platform-resources-en/src/messages/ExecutionBundle.properties index 261f1cfcc40d..7537fbd31bd7 100644 --- a/platform/platform-resources-en/src/messages/ExecutionBundle.properties +++ b/platform/platform-resources-en/src/messages/ExecutionBundle.properties @@ -75,7 +75,7 @@ copy.configuration.action.name=Copy Configuration junit.configuration.display.name=JUnit junit.configuration.description=JUnit test configuration no.junit.error.message=No junit.jar -no.junit.in.scope.error.message=No junit.jar: {0} +no.junit.in.scope.error.message=No junit.jar in {0} junit.not.found.in.module.error.message=JUnit not found in module ''{0}'' cannot.browse.test.inheritors.dialog.title=Can't Browse TestCase Inheritors seaching.test.progress.title=Searching For Tests... diff --git a/plugins/junit/src/com/intellij/execution/junit/TestsPattern.java b/plugins/junit/src/com/intellij/execution/junit/TestsPattern.java index 47fe6f47d091..344be431e834 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestsPattern.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestsPattern.java @@ -24,6 +24,8 @@ import com.intellij.execution.ExecutionException; import com.intellij.execution.JavaExecutionUtil; import com.intellij.execution.configurations.*; import com.intellij.execution.util.JavaParametersUtil; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleUtil; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; @@ -35,6 +37,7 @@ import com.intellij.util.Function; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.HashSet; import java.util.Set; public class TestsPattern extends TestObject { @@ -49,22 +52,32 @@ public class TestsPattern extends TestObject { protected void initialize() throws ExecutionException { super.initialize(); final JUnitConfiguration.Data data = myConfiguration.getPersistentData(); - RunConfigurationModule module = myConfiguration.getConfigurationModule(); - JavaParametersUtil.configureModule(module, myJavaParameters, JavaParameters.JDK_AND_CLASSES_AND_TESTS, - myConfiguration.isAlternativeJrePathEnabled() ? myConfiguration.getAlternativeJrePath() : null); - - final Project project = module.getProject(); + final Project project = myConfiguration.getProject(); boolean isJUnit4 = false; final ArrayList classNames = new ArrayList(); + final Set modules = new HashSet(); for (String className : data.getPatterns()) { final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, className, GlobalSearchScope.allScope(project)); if (psiClass != null && JUnitUtil.isTestClass(psiClass)) { classNames.add(className); + modules.add(ModuleUtil.findModuleForPsiElement(psiClass)); if (JUnitUtil.isJUnit4TestClass(psiClass)) { isJUnit4 = true; } } } + final String jreHome = myConfiguration.isAlternativeJrePathEnabled() ? myConfiguration.getAlternativeJrePath() : null; + + Module module = myConfiguration.getConfigurationModule().getModule(); + if (module == null && modules.size() == 1 && modules.iterator().next() != null) { + module = modules.iterator().next(); + } + + if (module != null) { + JavaParametersUtil.configureModule(module, myJavaParameters, JavaParameters.JDK_AND_CLASSES_AND_TESTS, jreHome); + } else { + JavaParametersUtil.configureProject(project, myJavaParameters, JavaParameters.JDK_AND_CLASSES_AND_TESTS, jreHome); + } addClassesListToJavaParameters(classNames, new Function.Self(), "", true, isJUnit4); } diff --git a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java index 75c9f6348d6b..1771bab5bfc7 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java +++ b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java @@ -22,6 +22,7 @@ import com.intellij.execution.junit.JUnitConfiguration; import com.intellij.execution.junit.JUnitConfigurationType; import com.intellij.execution.junit.JUnitUtil; import com.intellij.execution.junit.TestClassFilter; +import com.intellij.execution.testframework.SourceScope; import com.intellij.execution.testframework.TestSearchScope; import com.intellij.execution.ui.AlternativeJREPanel; import com.intellij.execution.ui.ClassBrowser; @@ -36,10 +37,12 @@ import com.intellij.openapi.ui.FixedSizeButton; import com.intellij.openapi.ui.LabeledComponent; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.TextFieldWithBrowseButton; +import com.intellij.openapi.ui.ex.MessagesEx; import com.intellij.openapi.util.IconLoader; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiPackage; +import com.intellij.psi.search.SearchScope; import com.intellij.util.Icons; import gnu.trove.TIntArrayList; import org.jetbrains.annotations.NotNull; @@ -260,8 +263,14 @@ public class JUnitConfigurable extends SettingsEditor { final TIntArrayList enabledFields = ourEnabledFields.get(newType); for (int i = 0; i < myTestLocations.length; i++) getTestLocation(i).setEnabled(enabledFields.contains(i)); - if (newType != JUnitConfigurationModel.ALL_IN_PACKAGE) myModule.setEnabled(true); - else onScopeChanged(); + if (newType == JUnitConfigurationModel.PATTERN) { + myModule.setEnabled(false); + } else if (newType != JUnitConfigurationModel.ALL_IN_PACKAGE) { + myModule.setEnabled(true); + } + else { + onScopeChanged(); + } } private static class PackageChooserActionListener extends BrowseModuleValueActionListener { @@ -287,6 +296,18 @@ public class JUnitConfigurable extends SettingsEditor { textField.setText(text + (text.length() > 0 ? "||" : "") + psiClass.getQualifiedName()); } + @Override + protected ClassFilter.ClassFilterWithScope getFilter() throws NoFilterException { + try { + return TestClassFilter.create(SourceScope.wholeProject(getProject()), null); + } + catch (JUnitUtil.NoJUnitException ignore) { + throw new NoFilterException(new MessagesEx.MessageInfo(getProject(), + ignore.getMessage(), + ExecutionBundle.message("cannot.browse.test.inheritors.dialog.title"))); + } + } + @Override public void actionPerformed(ActionEvent e) { showDialog();