}
}
- public void invokeInAlarm(Runnable runnable) {
+ public static void invokeInAlarm(Runnable runnable) {
invokeInAlarm(runnable, !ApplicationManager.getApplication().isDispatchThread() ||
ApplicationManager.getApplication().isUnitTestMode());
}
- public void invokeInAlarm(Runnable runnable, final boolean sync) {
+ public static void invokeInAlarm(Runnable runnable, final boolean sync) {
if (sync) {
runnable.run();
} else {
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.ide.CopyPasteManager;
import com.intellij.openapi.util.Disposer;
-import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiNamedElement;
import com.intellij.ui.PopupHandler;
import com.intellij.ui.TreeSpeedSearch;
import com.intellij.ui.treeStructure.Tree;
import com.intellij.util.EditSourceOnDoubleClickHandler;
-import com.intellij.util.Function;
import com.intellij.util.containers.Convertor;
import com.intellij.util.ui.tree.TreeUtil;
+import org.intellij.lang.annotations.JdkConstants;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@Nullable
public AbstractTestProxy getSelectedTest() {
+ TreePath[] paths = getSelectionPaths();
+ if (paths != null && paths.length > 1) return null;
final TreePath selectionPath = getSelectionPath();
return selectionPath != null ? getSelectedTest(selectionPath) : null;
}
public void attachToModel(final TestFrameworkRunningModel model) {
setModel(new DefaultTreeModel(new DefaultMutableTreeNode(model.getRoot())));
- getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+ getSelectionModel().setSelectionMode(getSelectionMode());
myModel = model;
Disposer.register(myModel, myModel.getRoot());
Disposer.register(myModel, new Disposable() {
if (PlatformDataKeys.COPY_PROVIDER.is(dataId)) {
return this;
}
+
+ if (LangDataKeys.PSI_ELEMENT_ARRAY.is(dataId)) {
+ TreePath[] paths = getSelectionPaths();
+ if (paths != null && paths.length > 1) {
+ final PsiElement[] els = new PsiElement[paths.length];
+ int i = 0;
+ for (TreePath path : paths) {
+ AbstractTestProxy test = getSelectedTest(path);
+ els[i++] = test != null ? (PsiElement)TestsUIUtil.getData(test, LangDataKeys.PSI_ELEMENT.getName(), myModel) : null;
+ }
+ return els;
+ }
+ }
+
final TreePath selectionPath = getSelectionPath();
if (selectionPath == null) return null;
final AbstractTestProxy testProxy = getSelectedTest(selectionPath);
PopupHandler.installPopupHandler(this, IdeActions.GROUP_TESTTREE_POPUP, ActionPlaces.TESTTREE_VIEW_POPUP);
ViewAssertEqualsDiffAction.registerShortcut(this);
}
+
+ @JdkConstants.TreeSelectionMode
+ protected int getSelectionMode() {
+ return TreeSelectionModel.SINGLE_TREE_SELECTION;
+ }
}
\ No newline at end of file
myCurrentTest.setPrinter(null);
}
myMarkOffset = 0;
+ final Runnable clearRunnable = new Runnable() {
+ public void run() {
+ myConsole.clear();
+ }
+ };
if (test == null) {
myCurrentTest = null;
+ CompositePrintable.invokeInAlarm(clearRunnable);
return;
}
myCurrentTest = test;
myCurrentTest.setPrinter(this);
- final Runnable clearRunnable = new Runnable() {
- public void run() {
- myConsole.clear();
- }
- };
final Runnable scrollRunnable = new Runnable() {
@Override
public void run() {
}
};
final AbstractTestProxy currentProxyOrRoot = getCurrentProxyOrRoot();
- currentProxyOrRoot.invokeInAlarm(clearRunnable);
+ CompositePrintable.invokeInAlarm(clearRunnable);
currentProxyOrRoot.printOn(this);
- currentProxyOrRoot.invokeInAlarm(scrollRunnable);
+ CompositePrintable.invokeInAlarm(scrollRunnable);
}
private AbstractTestProxy getCurrentProxyOrRoot() {
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.PopupStep;
import com.intellij.openapi.ui.popup.util.BaseListPopupStep;
-import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiMember;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public void actionPerformed(AnActionEvent e) {
final DataContext dataContext = e.getDataContext();
final PsiElement[] psiElements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext);
- final Set<PsiClass> classes = PatternConfigurationProducer.collectTestClasses(psiElements);
+ final Set<PsiMember> classes = PatternConfigurationProducer.collectTestMembers(psiElements);
final Project project = PlatformDataKeys.PROJECT.getData(dataContext);
final List<JUnitConfiguration> patternConfigurations = collectPatternConfigurations(classes, project);
if (patternConfigurations.size() == 1) {
final JUnitConfiguration configuration = patternConfigurations.get(0);
- for (PsiClass aClass : classes) {
- configuration.getPersistentData().getPatterns().add(aClass.getQualifiedName());
+ for (PsiMember aClass : classes) {
+ configuration.getPersistentData().getPatterns().add(PatternConfigurationProducer.getQName(aClass));
}
} else {
JBPopupFactory.getInstance().createListPopup(new BaseListPopupStep<JUnitConfiguration>("Choose suite to add", patternConfigurations) {
@Override
public PopupStep onChosen(JUnitConfiguration configuration, boolean finalChoice) {
- for (PsiClass aClass : classes) {
- configuration.getPersistentData().getPatterns().add(aClass.getQualifiedName());
+ for (PsiMember aClass : classes) {
+ configuration.getPersistentData().getPatterns().add(PatternConfigurationProducer.getQName(aClass));
}
return FINAL_CHOICE;
}
final DataContext dataContext = e.getDataContext();
final PsiElement[] psiElements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext);
if (psiElements != null) {
- final Set<PsiClass> foundClasses = PatternConfigurationProducer.collectTestClasses(psiElements);
- if (foundClasses.isEmpty()) return;
+ final Set<PsiMember> foundMembers = PatternConfigurationProducer.collectTestMembers(psiElements);
+ if (foundMembers.isEmpty()) return;
final Project project = PlatformDataKeys.PROJECT.getData(dataContext);
if (project != null) {
- final List<JUnitConfiguration> foundConfigurations = collectPatternConfigurations(foundClasses, project);
+ final List<JUnitConfiguration> foundConfigurations = collectPatternConfigurations(foundMembers, project);
if (!foundConfigurations.isEmpty()) {
presentation.setVisible(true);
if (foundConfigurations.size() == 1) {
}
}
- private static List<JUnitConfiguration> collectPatternConfigurations(Set<PsiClass> foundClasses, Project project) {
+ private static List<JUnitConfiguration> collectPatternConfigurations(Set<PsiMember> foundClasses, Project project) {
final RunConfiguration[] configurations = RunManager.getInstance(project).getConfigurations(JUnitConfigurationType.getInstance());
final List<JUnitConfiguration> foundConfigurations = new ArrayList<JUnitConfiguration>();
for (RunConfiguration configuration : configurations) {
final JUnitConfiguration.Data data = ((JUnitConfiguration)configuration).getPersistentData();
if (data.TEST_OBJECT == JUnitConfiguration.TEST_PATTERN) {
- if (foundClasses.size() > 1 || !data.getPatterns().contains(foundClasses.iterator().next().getQualifiedName()) ) {
+ if (foundClasses.size() > 1 || !data.getPatterns().contains(PatternConfigurationProducer.getQName(foundClasses.iterator().next())) ) {
foundConfigurations.add((JUnitConfiguration)configuration);
}
}
@NotNull RunnerAndConfigurationSettings[] existingConfigurations,
ConfigurationContext context) {
final PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(context.getDataContext());
- if (elements != null && PatternConfigurationProducer.collectTestClasses(elements).size() > 1) {
+ if (elements != null && PatternConfigurationProducer.collectTestMembers(elements).size() > 1) {
return null;
}
final Module predefinedModule =
return settings;
}
- static Set<PsiClass> collectTestClasses(PsiElement[] psiElements) {
- final Set<PsiClass> foundClasses = new LinkedHashSet<PsiClass>();
+ static Set<PsiMember> collectTestMembers(PsiElement[] psiElements) {
+ final Set<PsiMember> foundMembers = new LinkedHashSet<PsiMember>();
for (PsiElement psiElement : psiElements) {
if (psiElement instanceof PsiClassOwner) {
final PsiClass[] classes = ((PsiClassOwner)psiElement).getClasses();
for (PsiClass aClass : classes) {
if (JUnitUtil.isTestClass(aClass)) {
- foundClasses.add(aClass);
+ foundMembers.add(aClass);
}
}
} else if (psiElement instanceof PsiClass) {
if (JUnitUtil.isTestClass((PsiClass)psiElement)) {
- foundClasses.add((PsiClass)psiElement);
+ foundMembers.add((PsiClass)psiElement);
+ }
+ } else if (psiElement instanceof PsiMethod) {
+ if (JUnitUtil.getTestMethod(psiElement) != null) {
+ foundMembers.add((PsiMethod)psiElement);
}
}
}
- return foundClasses;
+ return foundMembers;
}
private static PsiElement[] collectPatternElements(ConfigurationContext context, LinkedHashSet<String> classes) {
final DataContext dataContext = context.getDataContext();
PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext);
if (elements != null) {
- for (PsiClass psiClass : collectTestClasses(elements)) {
- classes.add(psiClass.getQualifiedName());
+ for (PsiMember psiClass : collectTestMembers(elements)) {
+ classes.add(getQName(psiClass));
}
return elements;
} else {
final PsiFile file = LangDataKeys.PSI_FILE.getData(dataContext);
if (file instanceof PsiClassOwner) {
- for (PsiClass psiClass : collectTestClasses(((PsiClassOwner)file).getClasses())) {
- classes.add(psiClass.getQualifiedName());
+ for (PsiMember psiMember : collectTestMembers(((PsiClassOwner)file).getClasses())) {
+ classes.add(((PsiClass)psiMember).getQualifiedName());
}
return new PsiElement[]{file};
}
return null;
}
+ public static String getQName(PsiMember psiMember) {
+ if (psiMember instanceof PsiClass) {
+ return ((PsiClass)psiMember).getQualifiedName();
+ }
+ else {
+ return psiMember.getContainingClass().getQualifiedName() + "," + psiMember.getName();
+ }
+ }
+
public PsiElement getSourceElement() {
return myElements[0];
}
package com.intellij.execution.junit;
-import com.intellij.execution.*;
+import com.intellij.execution.JavaExecutionUtil;
+import com.intellij.execution.JavaRunConfigurationExtensionManager;
+import com.intellij.execution.Location;
+import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.module.Module;
final Project project = location.getProject();
final PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(context.getDataContext());
- if (elements != null && PatternConfigurationProducer.collectTestClasses(elements).size() > 1) {
+ if (elements != null && PatternConfigurationProducer.collectTestMembers(elements).size() > 1) {
return null;
}
myTestClass = JUnitUtil.getTestClass(location);
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.junit2.info.MethodLocation;
+import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiClass;
protected RunnerAndConfigurationSettings createConfigurationByElement(final Location location, final ConfigurationContext context) {
final Project project = location.getProject();
-
+ final PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(context.getDataContext());
+ if (elements != null && PatternConfigurationProducer.collectTestMembers(elements).size() > 1) {
+ return null;
+ }
myMethodLocation = getTestMethod(location);
if (myMethodLocation == null) return null;
RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(project, context);
final ArrayList<String> classNames = new ArrayList<String>();
final Set<Module> modules = new HashSet<Module>();
for (String className : data.getPatterns()) {
- final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, className, GlobalSearchScope.allScope(project));
+ final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, className.contains(",") ? className.substring(0, className.indexOf(',')) : className, GlobalSearchScope.allScope(project));
if (psiClass != null && JUnitUtil.isTestClass(psiClass)) {
classNames.add(className);
modules.add(ModuleUtil.findModuleForPsiElement(psiClass));
addClassesListToJavaParameters(classNames, StringUtil.isEmpty(data.METHOD_NAME) ? FunctionUtil.<String>id() : new Function<String, String>() {
@Override
public String fun(String className) {
- return className + "," + data.METHOD_NAME;
+ return className;
}
}, "", true, isJUnit4);
}
import org.jetbrains.annotations.NotNull;
import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
public class JUnitTestTreeView extends TestTreeView {
final boolean hasFocus) {
return Formatters.printTest(TestProxyClient.from(value));
}
+
+ @Override
+ protected int getSelectionMode() {
+ return TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION;
+ }
}
}
}
else if (data.TEST_OBJECT.equals(TestType.PATTERN.getType())) {
- final String methodName = data.getMethodName();
- for (final String className : data.getPatterns()) {
+ for (final String pattern : data.getPatterns()) {
+ final String className;
+ final String methodName;
+ if (pattern.contains(",")) {
+ methodName = StringUtil.getShortName(pattern, ',');
+ className = StringUtil.getPackageName(pattern, ',');
+ } else {
+ className = pattern;
+ methodName = null;
+ }
+
final PsiClass psiClass = ApplicationManager.getApplication().runReadAction(new Computable<PsiClass>() {
@Nullable
@Override
*/
package com.theoryinpractice.testng.configuration;
-import com.intellij.execution.*;
+import com.intellij.execution.JavaRunConfigurationExtensionManager;
+import com.intellij.execution.Location;
+import com.intellij.execution.PsiLocation;
+import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.junit.InheritorChooser;
import com.intellij.execution.junit2.info.MethodLocation;
@Nullable
protected RunnerAndConfigurationSettings createConfigurationByElement(Location location, ConfigurationContext context) {
final PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(context.getDataContext());
- if (elements != null && TestNGPatternConfigurationProducer.collectTestClasses(elements).size() > 1) {
+ if (elements != null && TestNGPatternConfigurationProducer.collectTestMembers(elements).size() > 1) {
return null;
}
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
-import com.intellij.psi.PsiClass;
-import com.intellij.psi.PsiClassOwner;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
+import com.intellij.psi.*;
import com.theoryinpractice.testng.model.TestData;
import com.theoryinpractice.testng.model.TestType;
import com.theoryinpractice.testng.util.TestNGUtil;
return settings;
}
- static Set<PsiClass> collectTestClasses(PsiElement[] psiElements) {
- final Set<PsiClass> foundClasses = new LinkedHashSet<PsiClass>();
+ static Set<PsiMember> collectTestMembers(PsiElement[] psiElements) {
+ final Set<PsiMember> foundMembers = new LinkedHashSet<PsiMember>();
for (PsiElement psiElement : psiElements) {
if (psiElement instanceof PsiClassOwner) {
final PsiClass[] classes = ((PsiClassOwner)psiElement).getClasses();
for (PsiClass aClass : classes) {
if (JUnitUtil.isTestClass(aClass)) {
- foundClasses.add(aClass);
+ foundMembers.add(aClass);
}
}
} else if (psiElement instanceof PsiClass) {
if (TestNGUtil.hasTest((PsiClass)psiElement)) {
- foundClasses.add((PsiClass)psiElement);
+ foundMembers.add((PsiClass)psiElement);
+ }
+ } else if (psiElement instanceof PsiMethod) {
+ if (TestNGUtil.hasTest((PsiModifierListOwner)psiElement)) {
+ foundMembers.add((PsiMember)psiElement);
}
}
}
- return foundClasses;
+ return foundMembers;
}
private static PsiElement[] collectPatternElements(ConfigurationContext context, LinkedHashSet<String> classes) {
final DataContext dataContext = context.getDataContext();
PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext);
if (elements != null) {
- for (PsiClass psiClass : collectTestClasses(elements)) {
- classes.add(psiClass.getQualifiedName());
+ for (PsiMember psiMember : collectTestMembers(elements)) {
+ if (psiMember instanceof PsiClass) {
+ classes.add(((PsiClass)psiMember).getQualifiedName());
+ } else {
+ classes.add(psiMember.getContainingClass().getQualifiedName() + "," + psiMember.getName());
+ }
}
return elements;
} else {
final PsiFile file = LangDataKeys.PSI_FILE.getData(dataContext);
if (file instanceof PsiClassOwner) {
- for (PsiClass psiClass : collectTestClasses(((PsiClassOwner)file).getClasses())) {
- classes.add(psiClass.getQualifiedName());
+ for (PsiMember psiMember : collectTestMembers(((PsiClassOwner)file).getClasses())) {
+ classes.add(((PsiClass)psiMember).getQualifiedName());
}
return new PsiElement[]{file};
}
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
/**
* @author Hani Suleiman Date: Aug 1, 2005 Time: 11:33:12 AM
}
return "";
}
+
+ @Override
+ protected int getSelectionMode() {
+ return TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION;
+ }
}
\ No newline at end of file