diff --git a/plugins/junit/src/com/intellij/execution/junit/AbstractAllInDirectoryConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/AbstractAllInDirectoryConfigurationProducer.java new file mode 100644 index 000000000000..a4967379a675 --- /dev/null +++ b/plugins/junit/src/com/intellij/execution/junit/AbstractAllInDirectoryConfigurationProducer.java @@ -0,0 +1,63 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.intellij.execution.junit; + +import com.intellij.execution.actions.ConfigurationContext; +import com.intellij.execution.configurations.ConfigurationType; +import com.intellij.execution.junit2.info.LocationUtil; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleUtilCore; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.util.Ref; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiPackage; +import org.jetbrains.jps.model.java.JavaSourceRootType; + + +public abstract class AbstractAllInDirectoryConfigurationProducer extends JUnitConfigurationProducer { + + protected AbstractAllInDirectoryConfigurationProducer(ConfigurationType configurationType) { + super(configurationType); + } + + @Override + protected boolean setupConfigurationFromContext(JUnitConfiguration configuration, + ConfigurationContext context, + Ref sourceElement) { + final Project project = configuration.getProject(); + final PsiElement element = context.getPsiLocation(); + if (!(element instanceof PsiDirectory)) return false; + final PsiPackage aPackage = JavaRuntimeConfigurationProducerBase.checkPackage(element); + if (aPackage == null) return false; + final VirtualFile virtualFile = ((PsiDirectory)element).getVirtualFile(); + final Module module = ModuleUtilCore.findModuleForFile(virtualFile, project); + if (module == null) return false; + if (!ModuleRootManager.getInstance(module).getFileIndex().isInTestSourceContent(virtualFile)) return false; + int testRootCount = ModuleRootManager.getInstance(module).getSourceRoots(JavaSourceRootType.TEST_SOURCE).size(); + if (testRootCount < 2) return false; + if (!LocationUtil.isJarAttached(context.getLocation(), aPackage, JUnitUtil.TESTCASE_CLASS)) return false; + setupConfigurationModule(context, configuration); + final JUnitConfiguration.Data data = configuration.getPersistentData(); + data.setDirName(virtualFile.getPath()); + data.TEST_OBJECT = JUnitConfiguration.TEST_DIRECTORY; + configuration.setGeneratedName(); + return true; + } +} diff --git a/plugins/junit/src/com/intellij/execution/junit/AbstractAllInPackageConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/AbstractAllInPackageConfigurationProducer.java new file mode 100644 index 000000000000..f5be39e648d1 --- /dev/null +++ b/plugins/junit/src/com/intellij/execution/junit/AbstractAllInPackageConfigurationProducer.java @@ -0,0 +1,54 @@ +/* + * Copyright 2000-2009 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.intellij.execution.junit; + +import com.intellij.execution.actions.ConfigurationContext; +import com.intellij.execution.actions.ConfigurationFromContext; +import com.intellij.execution.configurations.ConfigurationType; +import com.intellij.execution.junit2.info.LocationUtil; +import com.intellij.openapi.util.Ref; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiPackage; + + +public abstract class AbstractAllInPackageConfigurationProducer extends JUnitConfigurationProducer { + + protected AbstractAllInPackageConfigurationProducer(ConfigurationType configurationType) { + super(configurationType); + } + + @Override + protected boolean setupConfigurationFromContext(JUnitConfiguration configuration, + ConfigurationContext context, + Ref sourceElement) { + PsiPackage psiPackage = JavaRuntimeConfigurationProducerBase.checkPackage(context.getPsiLocation()); + if (psiPackage == null) return false; + sourceElement.set(psiPackage); + if (!LocationUtil.isJarAttached(context.getLocation(), psiPackage, JUnitUtil.TESTCASE_CLASS)) return false; + final JUnitConfiguration.Data data = configuration.getPersistentData(); + data.PACKAGE_NAME = psiPackage.getQualifiedName(); + data.TEST_OBJECT = JUnitConfiguration.TEST_PACKAGE; + data.setScope(setupPackageConfiguration(context, configuration, data.getScope())); + configuration.setGeneratedName(); + return true; + } + + @Override + public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) { + return !other.isProducedBy(AbstractAllInDirectoryConfigurationProducer.class) && !other.isProducedBy(PatternConfigurationProducer.class); + } +} diff --git a/plugins/junit/src/com/intellij/execution/junit/AbstractTestClassConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/AbstractTestClassConfigurationProducer.java new file mode 100644 index 000000000000..036154fee3ef --- /dev/null +++ b/plugins/junit/src/com/intellij/execution/junit/AbstractTestClassConfigurationProducer.java @@ -0,0 +1,94 @@ +/* + * Copyright 2000-2009 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.intellij.execution.junit; + +import com.intellij.execution.JavaExecutionUtil; +import com.intellij.execution.Location; +import com.intellij.execution.actions.ConfigurationContext; +import com.intellij.execution.actions.ConfigurationFromContext; +import com.intellij.execution.actions.RunConfigurationProducer; +import com.intellij.execution.configurations.ConfigurationType; +import com.intellij.execution.junit2.PsiMemberParameterizedLocation; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.util.Ref; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiMethod; + +import java.util.List; + +public abstract class AbstractTestClassConfigurationProducer extends JUnitConfigurationProducer { + protected AbstractTestClassConfigurationProducer(ConfigurationType configurationType) { + super(configurationType); + } + + @Override + protected boolean setupConfigurationFromContext(JUnitConfiguration configuration, + ConfigurationContext context, + Ref sourceElement) { + final Location contextLocation = context.getLocation(); + assert contextLocation != null; + final Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation); + if (location == null) return false; + + if (contextLocation instanceof PsiMemberParameterizedLocation) { + final String paramSetName = ((PsiMemberParameterizedLocation)contextLocation).getParamSetName(); + if (paramSetName != null) { + configuration.setProgramParameters(paramSetName); + } + } + + if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) { + return false; + } + PsiClass testClass = JUnitUtil.getTestClass(location); + if (testClass == null) return false; + sourceElement.set(testClass); + setupConfigurationModule(context, configuration); + final Module originalModule = configuration.getConfigurationModule().getModule(); + configuration.beClassConfiguration(testClass); + configuration.restoreOriginalModule(originalModule); + final String forkMode = configuration.getForkMode(); + if (JUnitConfiguration.FORK_KLASS.equals(forkMode)) { + configuration.setForkMode(JUnitConfiguration.FORK_NONE); + } + return true; + } + + @Override + public void onFirstRun(final ConfigurationFromContext fromContext, final ConfigurationContext context, final Runnable performRunnable) { + + final InheritorChooser inheritorChooser = new InheritorChooser() { + @Override + protected void runForClasses(List classes, PsiMethod method, ConfigurationContext context, Runnable performRunnable) { + ((JUnitConfiguration)fromContext.getConfiguration()).bePatternConfiguration(classes, method); + super.runForClasses(classes, method, context, performRunnable); + } + + @Override + protected void runForClass(PsiClass aClass, + PsiMethod psiMethod, + ConfigurationContext context, + Runnable performRunnable) { + ((JUnitConfiguration)fromContext.getConfiguration()).beClassConfiguration(aClass); + super.runForClass(aClass, psiMethod, context, performRunnable); + } + }; + if (inheritorChooser.runMethodInAbstractClass(context, performRunnable, null, (PsiClass)fromContext.getSourceElement(), getConditionToSearchForInheritors())) return; + super.onFirstRun(fromContext, context, performRunnable); + } +} diff --git a/plugins/junit/src/com/intellij/execution/junit/AbstractTestMethodConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/AbstractTestMethodConfigurationProducer.java new file mode 100644 index 000000000000..53b5ca0339e3 --- /dev/null +++ b/plugins/junit/src/com/intellij/execution/junit/AbstractTestMethodConfigurationProducer.java @@ -0,0 +1,110 @@ +/* + * Copyright 2000-2009 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.intellij.execution.junit; + +import com.intellij.execution.JavaRunConfigurationExtensionManager; +import com.intellij.execution.Location; +import com.intellij.execution.PsiLocation; +import com.intellij.execution.actions.ConfigurationContext; +import com.intellij.execution.actions.ConfigurationFromContext; +import com.intellij.execution.actions.RunConfigurationProducer; +import com.intellij.execution.configurations.ConfigurationType; +import com.intellij.execution.junit2.PsiMemberParameterizedLocation; +import com.intellij.execution.junit2.info.MethodLocation; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Ref; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiMethod; + +import java.util.Iterator; +import java.util.List; + +public abstract class AbstractTestMethodConfigurationProducer extends JUnitConfigurationProducer { + + protected AbstractTestMethodConfigurationProducer(ConfigurationType configurationType) { + super(configurationType); + } + + @Override + protected boolean setupConfigurationFromContext(JUnitConfiguration configuration, + ConfigurationContext context, + Ref sourceElement) { + if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) { + return false; + } + final Location contextLocation = context.getLocation(); + assert contextLocation != null; + Location methodLocation = getTestMethod(contextLocation); + if (methodLocation == null) return false; + + if (contextLocation instanceof PsiMemberParameterizedLocation) { + final String paramSetName = ((PsiMemberParameterizedLocation)contextLocation).getParamSetName(); + if (paramSetName != null) { + configuration.setProgramParameters(paramSetName); + } + PsiClass containingClass = ((PsiMemberParameterizedLocation)contextLocation).getContainingClass(); + if (containingClass != null) { + methodLocation = MethodLocation.elementInClass(methodLocation.getPsiElement(), containingClass); + } + } + sourceElement.set(methodLocation.getPsiElement()); + setupConfigurationModule(context, configuration); + final Module originalModule = configuration.getConfigurationModule().getModule(); + configuration.beMethodConfiguration(methodLocation); + configuration.restoreOriginalModule(originalModule); + JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, contextLocation); + configuration.setForkMode(JUnitConfiguration.FORK_NONE); + return true; + } + + private static Location getTestMethod(final Location location) { + for (Iterator> iterator = location.getAncestors(PsiMethod.class, false); iterator.hasNext();) { + final Location methodLocation = iterator.next(); + if (JUnitUtil.isTestMethod(methodLocation, false)) return methodLocation; + } + return null; + } + + @Override + public void onFirstRun(final ConfigurationFromContext fromContext, final ConfigurationContext context, final Runnable performRunnable) { + final PsiMethod psiMethod = (PsiMethod)fromContext.getSourceElement(); + final PsiClass containingClass = psiMethod.getContainingClass(); + final InheritorChooser inheritorChooser = new InheritorChooser() { + @Override + protected void runForClasses(List classes, PsiMethod method, ConfigurationContext context, Runnable performRunnable) { + ((JUnitConfiguration)fromContext.getConfiguration()).bePatternConfiguration(classes, method); + super.runForClasses(classes, method, context, performRunnable); + } + + @Override + protected void runForClass(PsiClass aClass, + PsiMethod psiMethod, + ConfigurationContext context, + Runnable performRunnable) { + final Project project = psiMethod.getProject(); + final MethodLocation methodLocation = new MethodLocation(project, psiMethod, PsiLocation.fromPsiElement(aClass)); + ((JUnitConfiguration)fromContext.getConfiguration()).beMethodConfiguration(methodLocation); + super.runForClass(aClass, psiMethod, context, performRunnable); + } + }; + if (inheritorChooser.runMethodInAbstractClass(context, performRunnable, psiMethod, containingClass, getConditionToSearchForInheritors())) return; + super.onFirstRun(fromContext, context, performRunnable); + } +} + diff --git a/plugins/junit/src/com/intellij/execution/junit/AllInDirectoryConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/AllInDirectoryConfigurationProducer.java index 334f71bae46e..e32b3f9f26ae 100644 --- a/plugins/junit/src/com/intellij/execution/junit/AllInDirectoryConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/AllInDirectoryConfigurationProducer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,54 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.execution.junit; -import com.intellij.execution.actions.ConfigurationContext; -import com.intellij.execution.configurations.ConfigurationType; -import com.intellij.execution.junit2.info.LocationUtil; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtilCore; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ModuleRootManager; -import com.intellij.openapi.util.Ref; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiDirectory; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiPackage; -import org.jetbrains.jps.model.java.JavaSourceRootType; - - -public class AllInDirectoryConfigurationProducer extends JUnitConfigurationProducer { - - protected AllInDirectoryConfigurationProducer(ConfigurationType configurationType) { - super(configurationType); - } - - public AllInDirectoryConfigurationProducer() { - } - - @Override - protected boolean setupConfigurationFromContext(JUnitConfiguration configuration, - ConfigurationContext context, - Ref sourceElement) { - final Project project = configuration.getProject(); - final PsiElement element = context.getPsiLocation(); - if (!(element instanceof PsiDirectory)) return false; - final PsiPackage aPackage = JavaRuntimeConfigurationProducerBase.checkPackage(element); - if (aPackage == null) return false; - final VirtualFile virtualFile = ((PsiDirectory)element).getVirtualFile(); - final Module module = ModuleUtilCore.findModuleForFile(virtualFile, project); - if (module == null) return false; - if (!ModuleRootManager.getInstance(module).getFileIndex().isInTestSourceContent(virtualFile)) return false; - int testRootCount = ModuleRootManager.getInstance(module).getSourceRoots(JavaSourceRootType.TEST_SOURCE).size(); - if (testRootCount < 2) return false; - if (!LocationUtil.isJarAttached(context.getLocation(), aPackage, JUnitUtil.TESTCASE_CLASS)) return false; - setupConfigurationModule(context, configuration); - final JUnitConfiguration.Data data = configuration.getPersistentData(); - data.setDirName(virtualFile.getPath()); - data.TEST_OBJECT = JUnitConfiguration.TEST_DIRECTORY; - configuration.setGeneratedName(); - return true; +public class AllInDirectoryConfigurationProducer extends AbstractAllInDirectoryConfigurationProducer { + protected AllInDirectoryConfigurationProducer() { + super(JUnitConfigurationType.getInstance()); } } diff --git a/plugins/junit/src/com/intellij/execution/junit/AllInPackageConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/AllInPackageConfigurationProducer.java index 80af0736c961..31679acd10ed 100644 --- a/plugins/junit/src/com/intellij/execution/junit/AllInPackageConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/AllInPackageConfigurationProducer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,45 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.execution.junit; -import com.intellij.execution.actions.ConfigurationContext; -import com.intellij.execution.actions.ConfigurationFromContext; -import com.intellij.execution.configurations.ConfigurationType; -import com.intellij.execution.junit2.info.LocationUtil; -import com.intellij.openapi.util.Ref; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiPackage; - - -public class AllInPackageConfigurationProducer extends JUnitConfigurationProducer { - +public class AllInPackageConfigurationProducer extends AbstractAllInPackageConfigurationProducer { public AllInPackageConfigurationProducer() { - } - - protected AllInPackageConfigurationProducer(ConfigurationType configurationType) { - super(configurationType); - } - - @Override - protected boolean setupConfigurationFromContext(JUnitConfiguration configuration, - ConfigurationContext context, - Ref sourceElement) { - PsiPackage psiPackage = JavaRuntimeConfigurationProducerBase.checkPackage(context.getPsiLocation()); - if (psiPackage == null) return false; - sourceElement.set(psiPackage); - if (!LocationUtil.isJarAttached(context.getLocation(), psiPackage, JUnitUtil.TESTCASE_CLASS)) return false; - final JUnitConfiguration.Data data = configuration.getPersistentData(); - data.PACKAGE_NAME = psiPackage.getQualifiedName(); - data.TEST_OBJECT = JUnitConfiguration.TEST_PACKAGE; - data.setScope(setupPackageConfiguration(context, configuration, data.getScope())); - configuration.setGeneratedName(); - return true; - } - - @Override - public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) { - return !other.isProducedBy(AllInDirectoryConfigurationProducer.class) && !other.isProducedBy(PatternConfigurationProducer.class); + super(JUnitConfigurationType.getInstance()); } } diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationProducer.java index 7ea6a5927fc8..795e3ded0b9c 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationProducer.java @@ -43,7 +43,7 @@ public abstract class JUnitConfigurationProducer extends JavaRunConfigurationPro @Override public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) { - return !other.isProducedBy(TestMethodConfigurationProducer.class); + return !other.isProducedBy(AbstractTestMethodConfigurationProducer.class); } @Override diff --git a/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java index b9fd05a5787b..86af619ccbfd 100644 --- a/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java @@ -17,14 +17,14 @@ package com.intellij.execution.junit; import com.intellij.execution.Location; -import com.intellij.execution.junit2.PsiMemberParameterizedLocation; -import com.intellij.execution.junit2.info.MethodLocation; -import com.intellij.execution.testframework.AbstractPatternBasedConfigurationProducer; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.actions.ConfigurationFromContext; +import com.intellij.execution.junit2.PsiMemberParameterizedLocation; +import com.intellij.execution.testframework.AbstractPatternBasedConfigurationProducer; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.Ref; -import com.intellij.psi.*; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; import java.util.LinkedHashSet; import java.util.Set; diff --git a/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java index 43633a89a9e3..29eec8b69a98 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,85 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.execution.junit; -import com.intellij.execution.JavaExecutionUtil; -import com.intellij.execution.Location; -import com.intellij.execution.actions.ConfigurationContext; -import com.intellij.execution.actions.ConfigurationFromContext; -import com.intellij.execution.actions.RunConfigurationProducer; -import com.intellij.execution.configurations.ConfigurationType; -import com.intellij.execution.junit2.PsiMemberParameterizedLocation; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.util.Ref; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiMethod; - -import java.util.List; - -public class TestClassConfigurationProducer extends JUnitConfigurationProducer { - public TestClassConfigurationProducer() { - } - - protected TestClassConfigurationProducer(ConfigurationType configurationType) { - super(configurationType); - } - - @Override - protected boolean setupConfigurationFromContext(JUnitConfiguration configuration, - ConfigurationContext context, - Ref sourceElement) { - final Location contextLocation = context.getLocation(); - assert contextLocation != null; - final Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation); - if (location == null) return false; - - if (contextLocation instanceof PsiMemberParameterizedLocation) { - final String paramSetName = ((PsiMemberParameterizedLocation)contextLocation).getParamSetName(); - if (paramSetName != null) { - configuration.setProgramParameters(paramSetName); - } - } - - if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) { - return false; - } - PsiClass testClass = JUnitUtil.getTestClass(location); - if (testClass == null) return false; - sourceElement.set(testClass); - setupConfigurationModule(context, configuration); - final Module originalModule = configuration.getConfigurationModule().getModule(); - configuration.beClassConfiguration(testClass); - configuration.restoreOriginalModule(originalModule); - final String forkMode = configuration.getForkMode(); - if (JUnitConfiguration.FORK_KLASS.equals(forkMode)) { - configuration.setForkMode(JUnitConfiguration.FORK_NONE); - } - return true; - } - - @Override - public void onFirstRun(final ConfigurationFromContext fromContext, final ConfigurationContext context, final Runnable performRunnable) { - - final InheritorChooser inheritorChooser = new InheritorChooser() { - @Override - protected void runForClasses(List classes, PsiMethod method, ConfigurationContext context, Runnable performRunnable) { - ((JUnitConfiguration)fromContext.getConfiguration()).bePatternConfiguration(classes, method); - super.runForClasses(classes, method, context, performRunnable); - } - - @Override - protected void runForClass(PsiClass aClass, - PsiMethod psiMethod, - ConfigurationContext context, - Runnable performRunnable) { - ((JUnitConfiguration)fromContext.getConfiguration()).beClassConfiguration(aClass); - super.runForClass(aClass, psiMethod, context, performRunnable); - } - }; - if (inheritorChooser.runMethodInAbstractClass(context, performRunnable, null, (PsiClass)fromContext.getSourceElement(), getConditionToSearchForInheritors())) return; - super.onFirstRun(fromContext, context, performRunnable); +public class TestClassConfigurationProducer extends AbstractTestClassConfigurationProducer { + protected TestClassConfigurationProducer() { + super(JUnitConfigurationType.getInstance()); } } diff --git a/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java index c3dd9654fc33..9382e9701fc4 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,100 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.execution.junit; -import com.intellij.execution.JavaRunConfigurationExtensionManager; -import com.intellij.execution.Location; -import com.intellij.execution.PsiLocation; -import com.intellij.execution.actions.ConfigurationContext; -import com.intellij.execution.actions.ConfigurationFromContext; -import com.intellij.execution.actions.RunConfigurationProducer; -import com.intellij.execution.configurations.ConfigurationType; -import com.intellij.execution.junit2.PsiMemberParameterizedLocation; -import com.intellij.execution.junit2.info.MethodLocation; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Ref; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiMethod; - -import java.util.Iterator; -import java.util.List; - -public class TestMethodConfigurationProducer extends JUnitConfigurationProducer { - public TestMethodConfigurationProducer() { - } - - protected TestMethodConfigurationProducer(ConfigurationType configurationType) { - super(configurationType); - } - - @Override - protected boolean setupConfigurationFromContext(JUnitConfiguration configuration, - ConfigurationContext context, - Ref sourceElement) { - if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) { - return false; - } - final Location contextLocation = context.getLocation(); - assert contextLocation != null; - Location methodLocation = getTestMethod(contextLocation); - if (methodLocation == null) return false; - - if (contextLocation instanceof PsiMemberParameterizedLocation) { - final String paramSetName = ((PsiMemberParameterizedLocation)contextLocation).getParamSetName(); - if (paramSetName != null) { - configuration.setProgramParameters(paramSetName); - } - PsiClass containingClass = ((PsiMemberParameterizedLocation)contextLocation).getContainingClass(); - if (containingClass != null) { - methodLocation = MethodLocation.elementInClass(methodLocation.getPsiElement(), containingClass); - } - } - sourceElement.set(methodLocation.getPsiElement()); - setupConfigurationModule(context, configuration); - final Module originalModule = configuration.getConfigurationModule().getModule(); - configuration.beMethodConfiguration(methodLocation); - configuration.restoreOriginalModule(originalModule); - JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, contextLocation); - configuration.setForkMode(JUnitConfiguration.FORK_NONE); - return true; - } - - private static Location getTestMethod(final Location location) { - for (Iterator> iterator = location.getAncestors(PsiMethod.class, false); iterator.hasNext();) { - final Location methodLocation = iterator.next(); - if (JUnitUtil.isTestMethod(methodLocation, false)) return methodLocation; - } - return null; - } - - @Override - public void onFirstRun(final ConfigurationFromContext fromContext, final ConfigurationContext context, final Runnable performRunnable) { - final PsiMethod psiMethod = (PsiMethod)fromContext.getSourceElement(); - final PsiClass containingClass = psiMethod.getContainingClass(); - final InheritorChooser inheritorChooser = new InheritorChooser() { - @Override - protected void runForClasses(List classes, PsiMethod method, ConfigurationContext context, Runnable performRunnable) { - ((JUnitConfiguration)fromContext.getConfiguration()).bePatternConfiguration(classes, method); - super.runForClasses(classes, method, context, performRunnable); - } - - @Override - protected void runForClass(PsiClass aClass, - PsiMethod psiMethod, - ConfigurationContext context, - Runnable performRunnable) { - final Project project = psiMethod.getProject(); - final MethodLocation methodLocation = new MethodLocation(project, psiMethod, PsiLocation.fromPsiElement(aClass)); - ((JUnitConfiguration)fromContext.getConfiguration()).beMethodConfiguration(methodLocation); - super.runForClass(aClass, psiMethod, context, performRunnable); - } - }; - if (inheritorChooser.runMethodInAbstractClass(context, performRunnable, psiMethod, containingClass, getConditionToSearchForInheritors())) return; - super.onFirstRun(fromContext, context, performRunnable); +public class TestMethodConfigurationProducer extends AbstractTestMethodConfigurationProducer { + protected TestMethodConfigurationProducer() { + super(JUnitConfigurationType.getInstance()); } } -