diff --git a/platform/testRunner/src/com/intellij/execution/testframework/TestsUIUtil.java b/platform/testRunner/src/com/intellij/execution/testframework/TestsUIUtil.java index 72df63470354..01a6921a8949 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/TestsUIUtil.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/TestsUIUtil.java @@ -20,6 +20,7 @@ import com.intellij.execution.Location; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.notification.NotificationGroup; import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.fileEditor.OpenFileDescriptor; @@ -36,6 +37,8 @@ import com.intellij.ui.SystemNotifications; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; +import javax.swing.tree.TreePath; import java.awt.*; import java.util.List; @@ -74,6 +77,17 @@ public class TestsUIUtil { return null; } + public static boolean isMultipleSelectionImpossible(DataContext dataContext) { + final Component component = PlatformDataKeys.CONTEXT_COMPONENT.getData(dataContext); + if (component instanceof JTree) { + final TreePath[] selectionPaths = ((JTree)component).getSelectionPaths(); + if (selectionPaths == null || selectionPaths.length <= 1) { + return true; + } + } + return false; + } + public static Navigatable getOpenFileDescriptor(final AbstractTestProxy testProxy, final TestFrameworkRunningModel model) { final TestConsoleProperties testConsoleProperties = model.getProperties(); return getOpenFileDescriptor(testProxy, testConsoleProperties, diff --git a/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java index ef81f5281cdd..b0f8424316ce 100644 --- a/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/PatternConfigurationProducer.java @@ -22,16 +22,23 @@ import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.configurations.ModuleBasedConfiguration; import com.intellij.execution.junit2.info.MethodLocation; import com.intellij.execution.testframework.AbstractTestProxy; +import com.intellij.execution.testframework.TestTreeView; +import com.intellij.execution.testframework.TestsUIUtil; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.LangDataKeys; +import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Ref; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; +import com.intellij.util.ui.Tree; +import javax.swing.*; +import javax.swing.tree.TreePath; +import java.awt.*; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; @@ -98,7 +105,7 @@ public class PatternConfigurationProducer extends JUnitConfigurationProducer { } public static boolean isMultipleElementsSelected(ConfigurationContext context) { - if (AbstractTestProxy.DATA_KEY.getData(context.getDataContext()) != null) return false; + if (TestsUIUtil.isMultipleSelectionImpossible(context.getDataContext())) return false; final LinkedHashSet classes = new LinkedHashSet(); final PsiElement[] elements = collectPatternElements(context, classes); if (elements != null && collectTestMembers(elements, false).size() > 1) { diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java index 9869e9ccf52e..67f3eb17db8f 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGPatternConfigurationProducer.java @@ -27,6 +27,7 @@ import com.intellij.execution.configurations.ModuleBasedConfiguration; import com.intellij.execution.junit.JUnitUtil; import com.intellij.execution.junit2.info.MethodLocation; import com.intellij.execution.testframework.AbstractTestProxy; +import com.intellij.execution.testframework.TestsUIUtil; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.LangDataKeys; @@ -86,7 +87,7 @@ public class TestNGPatternConfigurationProducer extends TestNGConfigurationProdu } public static boolean isMultipleElementsSelected(ConfigurationContext context) { - if (AbstractTestProxy.DATA_KEY.getData(context.getDataContext()) != null) return false; + if (TestsUIUtil.isMultipleSelectionImpossible(context.getDataContext())) return false; final LinkedHashSet classes = new LinkedHashSet(); final PsiElement[] elements = collectPatternElements(context, classes); if (elements != null && collectTestMembers(elements).size() > 1) {