diff --git a/plugins/android/src/org/jetbrains/android/run/testing/AndroidTestConfigurationProducer.java b/plugins/android/src/org/jetbrains/android/run/testing/AndroidTestConfigurationProducer.java index 25beed5eab18..4e3911fbe43d 100644 --- a/plugins/android/src/org/jetbrains/android/run/testing/AndroidTestConfigurationProducer.java +++ b/plugins/android/src/org/jetbrains/android/run/testing/AndroidTestConfigurationProducer.java @@ -71,11 +71,15 @@ public class AndroidTestConfigurationProducer extends JavaRuntimeConfigurationPr private RunnerAndConfigurationSettings createAllInPackageConfiguration(PsiElement element, ConfigurationContext context) { PsiPackage p = checkPackage(element); if (p != null) { + final String packageName = p.getQualifiedName(); RunnerAndConfigurationSettings settings = - checkFacetAndCreateConfiguration(p, context, AndroidTestRunConfiguration.TEST_ALL_IN_PACKAGE, p.getQualifiedName()); + checkFacetAndCreateConfiguration(p, context, packageName.length() > 0 + ? AndroidTestRunConfiguration.TEST_ALL_IN_PACKAGE + : AndroidTestRunConfiguration.TEST_ALL_IN_MODULE); if (settings == null) return null; AndroidTestRunConfiguration configuration = (AndroidTestRunConfiguration)settings.getConfiguration(); - configuration.PACKAGE_NAME = p.getQualifiedName(); + configuration.PACKAGE_NAME = packageName; + setGeneratedName(configuration); return settings; } return null; @@ -87,10 +91,11 @@ public class AndroidTestConfigurationProducer extends JavaRuntimeConfigurationPr while (elementClass != null) { if (JUnitUtil.isTestClass(elementClass)) { RunnerAndConfigurationSettings settings = - checkFacetAndCreateConfiguration(elementClass, context, AndroidTestRunConfiguration.TEST_CLASS, elementClass.getQualifiedName()); + checkFacetAndCreateConfiguration(elementClass, context, AndroidTestRunConfiguration.TEST_CLASS); if (settings == null) return null; AndroidTestRunConfiguration configuration = (AndroidTestRunConfiguration)settings.getConfiguration(); configuration.CLASS_NAME = elementClass.getQualifiedName(); + setGeneratedName(configuration); return settings; } elementClass = PsiTreeUtil.getParentOfType(elementClass, PsiClass.class); @@ -105,13 +110,13 @@ public class AndroidTestConfigurationProducer extends JavaRuntimeConfigurationPr if (isTestMethod(elementMethod)) { PsiClass c = elementMethod.getContainingClass(); assert c != null; - String name = c.getQualifiedName() + '.' + elementMethod.getName() + "()"; RunnerAndConfigurationSettings settings = - checkFacetAndCreateConfiguration(elementMethod, context, AndroidTestRunConfiguration.TEST_METHOD, name); + checkFacetAndCreateConfiguration(elementMethod, context, AndroidTestRunConfiguration.TEST_METHOD); if (settings == null) return null; AndroidTestRunConfiguration configuration = (AndroidTestRunConfiguration)settings.getConfiguration(); configuration.CLASS_NAME = c.getQualifiedName(); configuration.METHOD_NAME = elementMethod.getName(); + setGeneratedName(configuration); return settings; } elementMethod = PsiTreeUtil.getParentOfType(elementMethod, PsiMethod.class); @@ -119,11 +124,14 @@ public class AndroidTestConfigurationProducer extends JavaRuntimeConfigurationPr return null; } + private static void setGeneratedName(AndroidTestRunConfiguration configuration) { + configuration.setName(configuration.getGeneratedName()); + } + @Nullable private RunnerAndConfigurationSettings checkFacetAndCreateConfiguration(PsiElement element, ConfigurationContext context, - int testingType, - String configurationName) { + int testingType) { Module module = context.getModule(); if (module == null || AndroidFacet.getInstance(module) == null) { return null; @@ -132,7 +140,6 @@ public class AndroidTestConfigurationProducer extends JavaRuntimeConfigurationPr RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(element.getProject(), context); AndroidTestRunConfiguration configuration = (AndroidTestRunConfiguration)settings.getConfiguration(); configuration.TESTING_TYPE = testingType; - configuration.setName(JavaExecutionUtil.getPresentableClassName(configurationName, configuration.getConfigurationModule())); setupConfigurationModule(context, configuration); final TargetSelectionMode targetSelectionMode = AndroidUtils diff --git a/plugins/android/src/org/jetbrains/android/run/testing/AndroidTestRunConfiguration.java b/plugins/android/src/org/jetbrains/android/run/testing/AndroidTestRunConfiguration.java index 210a3984fc4d..da2509f9b2e2 100644 --- a/plugins/android/src/org/jetbrains/android/run/testing/AndroidTestRunConfiguration.java +++ b/plugins/android/src/org/jetbrains/android/run/testing/AndroidTestRunConfiguration.java @@ -22,9 +22,7 @@ import com.android.ddmlib.ShellCommandUnresponsiveException; import com.android.ddmlib.TimeoutException; import com.android.ddmlib.testrunner.RemoteAndroidTestRunner; import com.intellij.codeInsight.AnnotationUtil; -import com.intellij.execution.ExecutionBundle; -import com.intellij.execution.ExecutionException; -import com.intellij.execution.Executor; +import com.intellij.execution.*; import com.intellij.execution.configurations.*; import com.intellij.execution.junit.JUnitUtil; import com.intellij.execution.process.ProcessOutputTypes; @@ -38,6 +36,7 @@ import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Disposer; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; @@ -83,6 +82,61 @@ public class AndroidTestRunConfiguration extends AndroidRunConfigurationBase { super(name, project, factory); } + @Override + public boolean isGeneratedName() { + final String name = getName(); + + if ((TESTING_TYPE == TEST_CLASS || TESTING_TYPE == TEST_METHOD) && + (CLASS_NAME == null || CLASS_NAME.length() == 0)) { + return JavaExecutionUtil.isNewName(name); + } + if (TESTING_TYPE == TEST_METHOD && + (METHOD_NAME == null || METHOD_NAME.length() == 0)) { + return JavaExecutionUtil.isNewName(name); + } + return Comparing.equal(name, getGeneratedName()); + } + + @Nullable + @Override + public String getGeneratedName() { + final JavaRunConfigurationModule confModule = getConfigurationModule(); + final String moduleName = confModule.getModuleName(); + + if (TESTING_TYPE == TEST_ALL_IN_PACKAGE) { + if (PACKAGE_NAME.length() == 0) { + return ExecutionBundle.message("default.junit.config.name.all.in.module", moduleName); + } + if (moduleName.length() > 0) { + return ExecutionBundle.message("default.junit.config.name.all.in.package.in.module", PACKAGE_NAME, moduleName); + } + return PACKAGE_NAME + " in " + moduleName; + } + else if (TESTING_TYPE == TEST_CLASS) { + return JavaExecutionUtil.getPresentableClassName(CLASS_NAME, confModule); + } + else if (TESTING_TYPE == TEST_METHOD) { + return JavaExecutionUtil.getPresentableClassName(CLASS_NAME, confModule) + "." + METHOD_NAME; + } + return moduleName; + } + + @Override + public String suggestedName() { + if (TESTING_TYPE == TEST_ALL_IN_PACKAGE) { + return isGeneratedName() + ? ExecutionBundle.message("test.in.scope.presentable.text", PACKAGE_NAME) + : "'" + getName() + "'"; + } + else if (TESTING_TYPE == TEST_CLASS) { + return ProgramRunnerUtil.shortenName(JavaExecutionUtil.getShortClassName(CLASS_NAME), 0); + } + else if (TESTING_TYPE == TEST_METHOD) { + return ProgramRunnerUtil.shortenName(METHOD_NAME, 2) + "()"; + } + return ExecutionBundle.message("all.tests.scope.presentable.text"); + } + @Override public void checkConfiguration(@NotNull AndroidFacet facet) throws RuntimeConfigurationException { Module module = facet.getModule();