From 1190715024dce3585c3dc679faebac78da72aa84 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 3 Feb 2016 14:46:59 +0300 Subject: [PATCH] tests & multiple carets: run tests by all carets (IDEA-151100) --- ...ractPatternBasedConfigurationProducer.java | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/testframework/AbstractPatternBasedConfigurationProducer.java b/java/execution/impl/src/com/intellij/execution/testframework/AbstractPatternBasedConfigurationProducer.java index 1275cf8d5af8..96b38a73ed65 100644 --- a/java/execution/impl/src/com/intellij/execution/testframework/AbstractPatternBasedConfigurationProducer.java +++ b/java/execution/impl/src/com/intellij/execution/testframework/AbstractPatternBasedConfigurationProducer.java @@ -26,6 +26,8 @@ import com.intellij.execution.junit2.info.MethodLocation; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.LangDataKeys; +import com.intellij.openapi.editor.Caret; +import com.intellij.openapi.editor.Editor; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; @@ -35,6 +37,7 @@ import com.intellij.psi.*; import com.intellij.psi.search.PsiElementProcessor; import com.intellij.psi.util.ClassUtil; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.containers.ContainerUtil; import java.util.ArrayList; import java.util.LinkedHashSet; @@ -157,13 +160,25 @@ public abstract class AbstractPatternBasedConfigurationProducer processor) { PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); if (elements != null) { - collectTestMembers(elements, checkAbstract, checkIsTest, processor); - for (PsiElement psiClass : processor.getCollection()) { - classes.add(getQName(psiClass)); - } - return true; + return collectTestMembers(elements, checkAbstract, checkIsTest, processor, classes); } else { + final Editor editor = CommonDataKeys.EDITOR.getData(dataContext); + if (editor != null) { + final List allCarets = editor.getCaretModel().getAllCarets(); + if (allCarets.size() > 1) { + final PsiFile editorFile = CommonDataKeys.PSI_FILE.getData(dataContext); + if (editorFile != null) { + final Set methods = new LinkedHashSet(); + for (Caret caret : allCarets) { + ContainerUtil.addIfNotNull(methods, PsiTreeUtil.getParentOfType(editorFile.findElementAt(caret.getOffset()), PsiMethod.class)); + } + if (!methods.isEmpty()) { + return collectTestMembers(methods.toArray(new PsiElement[0]), checkAbstract, checkIsTest, processor, classes); + } + } + } + } final PsiElement element = CommonDataKeys.PSI_ELEMENT.getData(dataContext); final VirtualFile[] files = CommonDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext); if (files != null) { @@ -195,6 +210,17 @@ public abstract class AbstractPatternBasedConfigurationProducer processor, LinkedHashSet classes) { + collectTestMembers(elements, checkAbstract, checkIsTest, processor); + for (PsiElement psiClass : processor.getCollection()) { + classes.add(getQName(psiClass)); + } + return true; + } + private static PsiElement[] collectLocationElements(LinkedHashSet classes, DataContext dataContext) { final Location[] locations = Location.DATA_KEYS.getData(dataContext); if (locations != null) {