2 * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
5 package com.intellij.execution.junit;
7 import com.intellij.codeInsight.MetaAnnotationUtil;
8 import com.intellij.diagnostic.logging.LogConfigurationPanel;
9 import com.intellij.execution.*;
10 import com.intellij.execution.actions.RunConfigurationProducer;
11 import com.intellij.execution.configuration.EnvironmentVariablesComponent;
12 import com.intellij.execution.configurations.*;
13 import com.intellij.execution.executors.DefaultRunExecutor;
14 import com.intellij.execution.junit2.configuration.JUnitConfigurable;
15 import com.intellij.execution.junit2.info.MethodLocation;
16 import com.intellij.execution.junit2.ui.properties.JUnitConsoleProperties;
17 import com.intellij.execution.runners.ExecutionEnvironment;
18 import com.intellij.execution.runners.ExecutionEnvironmentBuilder;
19 import com.intellij.execution.testframework.TestSearchScope;
20 import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties;
21 import com.intellij.openapi.module.Module;
22 import com.intellij.openapi.module.ModuleManager;
23 import com.intellij.openapi.options.SettingsEditor;
24 import com.intellij.openapi.options.SettingsEditorGroup;
25 import com.intellij.openapi.project.Project;
26 import com.intellij.openapi.util.Comparing;
27 import com.intellij.openapi.util.DefaultJDOMExternalizer;
28 import com.intellij.openapi.util.InvalidDataException;
29 import com.intellij.openapi.util.WriteExternalException;
30 import com.intellij.openapi.util.io.FileUtil;
31 import com.intellij.openapi.util.text.StringUtil;
32 import com.intellij.psi.*;
33 import com.intellij.psi.util.ClassUtil;
34 import com.intellij.refactoring.listeners.RefactoringElementListener;
35 import com.intellij.rt.execution.junit.RepeatCount;
36 import com.intellij.util.ArrayUtil;
37 import org.jdom.Element;
38 import org.jetbrains.annotations.NonNls;
39 import org.jetbrains.annotations.NotNull;
40 import org.jetbrains.annotations.Nullable;
44 public class JUnitConfiguration extends JavaTestConfigurationBase {
45 public static final String DEFAULT_PACKAGE_NAME = ExecutionBundle.message("default.package.presentable.name");
47 @NonNls public static final String TEST_CLASS = "class";
48 @NonNls public static final String TEST_PACKAGE = "package";
49 @NonNls public static final String TEST_DIRECTORY = "directory";
50 @NonNls public static final String TEST_CATEGORY = "category";
51 @NonNls public static final String TEST_METHOD = "method";
52 @NonNls public static final String TEST_UNIQUE_ID = "uniqueId";
53 @NonNls public static final String TEST_TAGS = "tags";
54 @NonNls public static final String BY_SOURCE_POSITION = "source location";
55 @NonNls public static final String BY_SOURCE_CHANGES = "changes";
58 @NonNls public static final String FORK_NONE = "none";
59 @NonNls public static final String FORK_METHOD = "method";
60 @NonNls public static final String FORK_KLASS = "class";
61 @NonNls public static final String FORK_REPEAT = "repeat";
63 @NonNls public static final String JUNIT_START_CLASS = "com.intellij.rt.execution.junit.JUnitStarter";
64 @NonNls private static final String PATTERN_EL_NAME = "pattern";
65 @NonNls public static final String TEST_PATTERN = PATTERN_EL_NAME;
66 @NonNls private static final String TEST_CLASS_ATT_NAME = "testClass";
67 @NonNls private static final String PATTERNS_EL_NAME = "patterns";
68 private final Data myData;
69 final RefactoringListeners.Accessor<PsiPackage> myPackage = new RefactoringListeners.Accessor<PsiPackage>() {
71 public void setName(final String qualifiedName) {
72 final boolean generatedName = isGeneratedName();
73 myData.PACKAGE_NAME = qualifiedName;
74 if (generatedName) setGeneratedName();
78 public PsiPackage getPsiElement() {
79 final String qualifiedName = myData.getPackageName();
80 return qualifiedName != null ? JavaPsiFacade.getInstance(getProject()).findPackage(qualifiedName)
85 public void setPsiElement(final PsiPackage psiPackage) {
86 setName(psiPackage.getQualifiedName());
89 final RefactoringListeners.Accessor<PsiClass> myClass = new RefactoringListeners.Accessor<PsiClass>() {
91 public void setName(@NotNull final String qualifiedName) {
92 final boolean generatedName = isGeneratedName();
93 myData.MAIN_CLASS_NAME = qualifiedName;
94 if (generatedName) setGeneratedName();
98 public PsiClass getPsiElement() {
99 return getConfigurationModule().findClass(myData.getMainClassName());
103 public void setPsiElement(final PsiClass psiClass) {
104 final Module originalModule = getConfigurationModule().getModule();
105 setMainClass(psiClass);
106 restoreOriginalModule(originalModule);
110 final RefactoringListeners.Accessor<PsiClass> myCategory = new RefactoringListeners.Accessor<PsiClass>() {
112 public void setName(@NotNull final String qualifiedName) {
113 setCategory(qualifiedName);
117 public PsiClass getPsiElement() {
118 return getConfigurationModule().findClass(myData.getCategory());
122 public void setPsiElement(final PsiClass psiClass) {
123 setCategory(JavaExecutionUtil.getRuntimeQualifiedName(psiClass));
126 public boolean ALTERNATIVE_JRE_PATH_ENABLED;
127 public String ALTERNATIVE_JRE_PATH;
129 public JUnitConfiguration(final String name, final Project project, ConfigurationFactory configurationFactory) {
130 this(name, project, new Data(), configurationFactory);
133 protected JUnitConfiguration(final String name, final Project project, final Data data, ConfigurationFactory configurationFactory) {
134 super(name, new JavaRunConfigurationModule(project, false), configurationFactory);
139 public TestObject getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) throws ExecutionException {
140 return TestObject.fromString(myData.TEST_OBJECT, this, env);
145 public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() {
146 SettingsEditorGroup<JUnitConfiguration> group = new SettingsEditorGroup<>();
147 group.addEditor(ExecutionBundle.message("run.configuration.configuration.tab.title"), new JUnitConfigurable(getProject()));
148 JavaRunConfigurationExtensionManager.getInstance().appendEditors(this, group);
149 group.addEditor(ExecutionBundle.message("logs.tab.title"), new LogConfigurationPanel<>());
153 public Data getPersistentData() {
158 public RefactoringElementListener getRefactoringElementListener(final PsiElement element) {
159 final RefactoringElementListener listener = getTestObject().getListener(element, this);
160 return RunConfigurationExtension.wrapRefactoringElementListener(element, this, listener);
164 public void checkConfiguration() throws RuntimeConfigurationException {
165 getTestObject().checkConfiguration();
166 JavaRunConfigurationExtensionManager.checkConfigurationIsValid(this);
170 public Collection<Module> getValidModules() {
171 if (TEST_PACKAGE.equals(myData.TEST_OBJECT) || TEST_PATTERN.equals(myData.TEST_OBJECT)) {
172 return Arrays.asList(ModuleManager.getInstance(getProject()).getModules());
175 getTestObject().checkConfiguration();
177 catch (RuntimeConfigurationError e) {
178 return Arrays.asList(ModuleManager.getInstance(getProject()).getModules());
180 catch (RuntimeConfigurationException e) {
184 return JavaRunConfigurationModule.getModulesForClass(getProject(), myData.getMainClassName());
188 public String suggestedName() {
190 switch (getRepeatMode()) {
191 case RepeatCount.UNLIMITED :
192 case RepeatCount.UNTIL_FAILURE :
196 repeat = " [" + getRepeatCount() + "]";
201 return myData.getGeneratedName(getConfigurationModule()) + repeat;
205 public String getActionName() {
206 return getTestObject().suggestActionName();
210 public String getVMParameters() {
211 return myData.getVMParameters();
215 public void setVMParameters(@Nullable String value) {
216 myData.setVMParameters(value);
220 public String getProgramParameters() {
221 return myData.getProgramParameters();
225 public void setProgramParameters(String value) {
226 myData.setProgramParameters(value);
230 public String getWorkingDirectory() {
231 return myData.getWorkingDirectory();
235 public void setWorkingDirectory(String value) {
236 myData.setWorkingDirectory(value);
241 public Map<String, String> getEnvs() {
242 return myData.getEnvs();
246 public void setEnvs(@NotNull Map<String, String> envs) {
247 myData.setEnvs(envs);
251 public boolean isPassParentEnvs() {
252 return myData.PASS_PARENT_ENVS;
256 public void setPassParentEnvs(boolean passParentEnvs) {
257 myData.PASS_PARENT_ENVS = passParentEnvs;
261 public boolean isAlternativeJrePathEnabled() {
262 return ALTERNATIVE_JRE_PATH_ENABLED;
266 public void setAlternativeJrePathEnabled(boolean enabled) {
267 ALTERNATIVE_JRE_PATH_ENABLED = enabled;
271 public String getAlternativeJrePath() {
272 return ALTERNATIVE_JRE_PATH;
276 public void setAlternativeJrePath(String path) {
277 ALTERNATIVE_JRE_PATH = path;
281 public String getRunClass() {
282 final Data data = getPersistentData();
283 return !Comparing.strEqual(data.TEST_OBJECT, TEST_CLASS) &&
284 !Comparing.strEqual(data.TEST_OBJECT, TEST_METHOD) ? null : data.getMainClassName();
288 public String getPackage() {
289 final Data data = getPersistentData();
290 return !Comparing.strEqual(data.TEST_OBJECT, TEST_PACKAGE) ? null : data.getPackageName();
293 public void beClassConfiguration(final PsiClass testClass) {
294 if (FORK_KLASS.equals(getForkMode())) {
295 setForkMode(FORK_NONE);
297 setMainClass(testClass);
298 myData.TEST_OBJECT = TEST_CLASS;
303 public boolean isConfiguredByElement(PsiElement element) {
304 final PsiClass testClass = JUnitUtil.getTestClass(element);
305 final PsiMethod testMethod = JUnitUtil.getTestMethod(element, false);
306 final PsiPackage testPackage;
307 if (element instanceof PsiPackage) {
308 testPackage = (PsiPackage)element;
309 } else if (element instanceof PsiDirectory){
310 testPackage = JavaDirectoryService.getInstance().getPackage(((PsiDirectory)element));
314 PsiDirectory testDir = element instanceof PsiDirectory ? (PsiDirectory)element : null;
316 return getTestObject().isConfiguredByElement(this, testClass, testMethod, testPackage, testDir);
320 public TestSearchScope getTestSearchScope() {
321 return getPersistentData().getScope();
324 public void beFromSourcePosition(PsiLocation<PsiMethod> sourceLocation) {
325 myData.setTestMethod(sourceLocation);
326 myData.TEST_OBJECT = BY_SOURCE_POSITION;
329 public void setMainClass(final PsiClass testClass) {
330 final boolean shouldUpdateName = isGeneratedName();
331 setModule(myData.setMainClass(testClass));
332 if (shouldUpdateName) setGeneratedName();
335 public void setCategory(String categoryName) {
336 final boolean shouldUpdateName = isGeneratedName();
337 myData.setCategoryName(categoryName);
338 if (shouldUpdateName) setGeneratedName();
341 public void beMethodConfiguration(final Location<PsiMethod> methodLocation) {
342 setForkMode(FORK_NONE);
343 setModule(myData.setTestMethod(methodLocation));
349 public Module[] getModules() {
350 if (TEST_PACKAGE.equals(myData.TEST_OBJECT) &&
351 getPersistentData().getScope() == TestSearchScope.WHOLE_PROJECT) {
352 return Module.EMPTY_ARRAY;
354 return super.getModules();
357 public TestObject getTestObject() {
358 return myData.getTestObject(this);
362 public void readExternal(@NotNull final Element element) throws InvalidDataException {
363 super.readExternal(element);
364 JavaRunConfigurationExtensionManager.getInstance().readExternal(this, element);
365 DefaultJDOMExternalizer.readExternal(this, element);
366 DefaultJDOMExternalizer.readExternal(getPersistentData(), element);
367 EnvironmentVariablesComponent.readExternal(element, getPersistentData().getEnvs());
368 final Element patternsElement = element.getChild(PATTERNS_EL_NAME);
369 if (patternsElement != null) {
370 final LinkedHashSet<String> tests = new LinkedHashSet<>();
371 for (Element patternElement : patternsElement.getChildren(PATTERN_EL_NAME)) {
372 tests.add(patternElement.getAttributeValue(TEST_CLASS_ATT_NAME));
374 myData.setPatterns(tests);
376 final Element forkModeElement = element.getChild("fork_mode");
377 if (forkModeElement != null) {
378 final String mode = forkModeElement.getAttributeValue("value");
383 final String count = element.getAttributeValue("repeat_count");
386 setRepeatCount(Integer.parseInt(count));
388 catch (NumberFormatException e) {
392 final String repeatMode = element.getAttributeValue("repeat_mode");
393 if (repeatMode != null) {
394 setRepeatMode(repeatMode);
396 final Element dirNameElement = element.getChild("dir");
397 if (dirNameElement != null) {
398 final String dirName = dirNameElement.getAttributeValue("value");
399 getPersistentData().setDirName(FileUtil.toSystemDependentName(dirName));
402 final Element categoryNameElement = element.getChild("category");
403 if (categoryNameElement != null) {
404 final String categoryName = categoryNameElement.getAttributeValue("value");
405 getPersistentData().setCategoryName(categoryName);
408 Element idsElement = element.getChild("uniqueIds");
409 if (idsElement != null) {
410 List<String> ids = new ArrayList<>();
411 idsElement.getChildren("uniqueId").forEach(uniqueIdElement -> ids.add(uniqueIdElement.getAttributeValue("value")));
412 getPersistentData().setUniqueIds(ArrayUtil.toStringArray(ids));
417 public void writeExternal(@NotNull final Element element) throws WriteExternalException {
418 super.writeExternal(element);
419 JavaRunConfigurationExtensionManager.getInstance().writeExternal(this, element);
420 DefaultJDOMExternalizer.writeExternal(this, element);
421 final Data persistentData = getPersistentData();
422 DefaultJDOMExternalizer.writeExternal(persistentData, element);
424 if (!persistentData.getEnvs().isEmpty()) {
425 EnvironmentVariablesComponent.writeExternal(element, persistentData.getEnvs());
428 final String dirName = persistentData.getDirName();
429 if (!dirName.isEmpty()) {
430 final Element dirNameElement = new Element("dir");
431 dirNameElement.setAttribute("value", FileUtil.toSystemIndependentName(dirName));
432 element.addContent(dirNameElement);
435 final String categoryName = persistentData.getCategory();
436 if (!categoryName.isEmpty()) {
437 final Element categoryNameElement = new Element("category");
438 categoryNameElement.setAttribute("value", categoryName);
439 element.addContent(categoryNameElement);
442 final Element patternsElement = new Element(PATTERNS_EL_NAME);
443 for (String o : persistentData.getPatterns()) {
444 final Element patternElement = new Element(PATTERN_EL_NAME);
445 patternElement.setAttribute(TEST_CLASS_ATT_NAME, o);
446 patternsElement.addContent(patternElement);
448 element.addContent(patternsElement);
449 final String forkMode = getForkMode();
450 if (!forkMode.equals("none")) {
451 final Element forkModeElement = new Element("fork_mode");
452 forkModeElement.setAttribute("value", forkMode);
453 element.addContent(forkModeElement);
455 if (getRepeatCount() != 1) {
456 element.setAttribute("repeat_count", String.valueOf(getRepeatCount()));
458 final String repeatMode = getRepeatMode();
459 if (!RepeatCount.ONCE.equals(repeatMode)) {
460 element.setAttribute("repeat_mode", repeatMode);
462 String[] ids = persistentData.getUniqueIds();
464 Element uniqueIds = new Element("uniqueIds");
465 Arrays.stream(ids).forEach(id -> uniqueIds.addContent(new Element("uniqueId").setAttribute("value", id)));
466 element.addContent(uniqueIds);
470 public String getForkMode() {
471 return myData.FORK_MODE;
474 public void setForkMode(@NotNull String forkMode) {
475 myData.FORK_MODE = forkMode;
479 public boolean collectOutputFromProcessHandler() {
483 public void bePatternConfiguration(List<PsiClass> classes, PsiMethod method) {
484 myData.TEST_OBJECT = TEST_PATTERN;
485 final LinkedHashSet<String> patterns = new LinkedHashSet<>();
486 final String methodSufiix;
487 if (method != null) {
488 myData.METHOD_NAME = Data.getMethodPresentation(method);
489 methodSufiix = "," + myData.METHOD_NAME;
493 for (PsiClass pattern : classes) {
494 patterns.add(JavaExecutionUtil.getRuntimeQualifiedName(pattern) + methodSufiix);
496 myData.setPatterns(patterns);
497 final Module module = RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).findModule(this, getConfigurationModule()
498 .getModule(), patterns);
499 if (module == null) {
500 myData.setScope(TestSearchScope.WHOLE_PROJECT);
508 public int getRepeatCount() {
509 return myData.REPEAT_COUNT;
512 public void setRepeatCount(int repeatCount) {
513 myData.REPEAT_COUNT = repeatCount;
516 public String getRepeatMode() {
517 return myData.REPEAT_MODE;
520 public void setRepeatMode(String repeatMode) {
521 myData.REPEAT_MODE = repeatMode;
525 public SMTRunnerConsoleProperties createTestConsoleProperties(Executor executor) {
526 return new JUnitConsoleProperties(this, executor);
531 public String getFrameworkPrefix() {
535 public static class Data implements Cloneable {
536 public String PACKAGE_NAME;
537 public String MAIN_CLASS_NAME;
538 public String METHOD_NAME;
539 private String[] UNIQUE_ID;
540 private String[] TAGS;
541 public String TEST_OBJECT = TEST_CLASS;
542 public String VM_PARAMETERS;
543 public String PARAMETERS;
544 public String WORKING_DIRECTORY;
545 public boolean PASS_PARENT_ENVS = true;
546 public TestSearchScope.Wrapper TEST_SEARCH_SCOPE = new TestSearchScope.Wrapper();
547 private String DIR_NAME;
548 private String CATEGORY_NAME;
549 private String FORK_MODE = FORK_NONE;
550 private int REPEAT_COUNT = 1;
551 private String REPEAT_MODE = RepeatCount.ONCE;
552 private LinkedHashSet<String> myPattern = new LinkedHashSet<>();
553 private Map<String, String> myEnvs = new LinkedHashMap<>();
554 private String myChangeList = "All";
556 public boolean equals(final Object object) {
557 if (!(object instanceof Data)) return false;
558 final Data second = (Data)object;
559 return Comparing.equal(TEST_OBJECT, second.TEST_OBJECT) &&
560 Comparing.equal(getMainClassName(), second.getMainClassName()) &&
561 Comparing.equal(getPackageName(), second.getPackageName()) &&
562 Comparing.equal(getMethodNameWithSignature(), second.getMethodNameWithSignature()) &&
563 Comparing.equal(getWorkingDirectory(), second.getWorkingDirectory()) &&
564 Comparing.equal(VM_PARAMETERS, second.VM_PARAMETERS) &&
565 Comparing.equal(PARAMETERS, second.PARAMETERS) &&
566 Comparing.equal(myPattern, second.myPattern) &&
567 Comparing.equal(FORK_MODE, second.FORK_MODE) &&
568 Comparing.equal(DIR_NAME, second.DIR_NAME) &&
569 Comparing.equal(CATEGORY_NAME, second.CATEGORY_NAME) &&
570 Comparing.equal(UNIQUE_ID, second.UNIQUE_ID) &&
571 Comparing.equal(TAGS, second.TAGS) &&
572 Comparing.equal(REPEAT_MODE, second.REPEAT_MODE) &&
573 REPEAT_COUNT == second.REPEAT_COUNT;
576 public int hashCode() {
577 return Comparing.hashcode(TEST_OBJECT) ^
578 Comparing.hashcode(getMainClassName()) ^
579 Comparing.hashcode(getPackageName()) ^
580 Comparing.hashcode(getMethodNameWithSignature()) ^
581 Comparing.hashcode(getWorkingDirectory()) ^
582 Comparing.hashcode(VM_PARAMETERS) ^
583 Comparing.hashcode(PARAMETERS) ^
584 Comparing.hashcode(myPattern) ^
585 Comparing.hashcode(FORK_MODE) ^
586 Comparing.hashcode(DIR_NAME) ^
587 Comparing.hashcode(CATEGORY_NAME) ^
588 Comparing.hashcode(UNIQUE_ID) ^
589 Comparing.hashcode(TAGS) ^
590 Comparing.hashcode(REPEAT_MODE) ^
591 Comparing.hashcode(REPEAT_COUNT);
594 public TestSearchScope getScope() {
595 return TEST_SEARCH_SCOPE.getScope();
598 public void setScope(final TestSearchScope scope) {
599 TEST_SEARCH_SCOPE.setScope(scope);
603 public Data clone() {
605 Data data = (Data)super.clone();
606 data.TEST_SEARCH_SCOPE = new TestSearchScope.Wrapper();
607 data.setScope(getScope());
608 data.myEnvs = new LinkedHashMap<>(myEnvs);
611 catch (CloneNotSupportedException e) {
612 throw new RuntimeException(e);
616 public String getVMParameters() {
617 return VM_PARAMETERS;
620 public void setVMParameters(String value) {
621 VM_PARAMETERS = value;
624 public String getProgramParameters() {
628 public void setProgramParameters(String value) {
632 public String getWorkingDirectory() {
633 return ExternalizablePath.localPathValue(WORKING_DIRECTORY);
636 public void setWorkingDirectory(String value) {
637 WORKING_DIRECTORY = ExternalizablePath.urlValue(value);
640 public void setUniqueIds(String... uniqueId) {
641 UNIQUE_ID = uniqueId;
644 public String[] getUniqueIds() {
648 public Module setTestMethod(final Location<PsiMethod> methodLocation) {
649 final PsiMethod method = methodLocation.getPsiElement();
650 METHOD_NAME = getMethodPresentation(method);
651 TEST_OBJECT = TEST_METHOD;
652 return setMainClass(methodLocation instanceof MethodLocation ? ((MethodLocation)methodLocation).getContainingClass() : method.getContainingClass());
655 public String[] getTags() {
659 public void setTags(String[] tags) {
663 public static String getMethodPresentation(PsiMethod method) {
664 if (method.getParameterList().getParametersCount() > 0 && MetaAnnotationUtil.isMetaAnnotated(method, JUnitUtil.TEST5_ANNOTATIONS)) {
665 return method.getName() + "(" + ClassUtil.getVMParametersMethodSignature(method) + ")";
668 return method.getName();
672 public String getGeneratedName(final JavaRunConfigurationModule configurationModule) {
673 if (TEST_PACKAGE.equals(TEST_OBJECT) || TEST_DIRECTORY.equals(TEST_OBJECT)) {
674 if (TEST_SEARCH_SCOPE.getScope() == TestSearchScope.WHOLE_PROJECT) {
675 return ExecutionBundle.message("default.junit.config.name.whole.project");
677 final String moduleName = TEST_SEARCH_SCOPE.getScope() == TestSearchScope.WHOLE_PROJECT ? "" : configurationModule.getModuleName();
678 final String packageName = TEST_PACKAGE.equals(TEST_OBJECT) ? getPackageName() : StringUtil.getShortName(getDirName(), '/');
679 if (packageName.length() == 0) {
680 if (moduleName.length() > 0) {
681 return ExecutionBundle.message("default.junit.config.name.all.in.module", moduleName);
683 return DEFAULT_PACKAGE_NAME;
685 if (moduleName.length() > 0) {
686 return ExecutionBundle.message("default.junit.config.name.all.in.package.in.module", packageName, moduleName);
690 if (TEST_PATTERN.equals(TEST_OBJECT)) {
691 final int size = myPattern.size();
692 if (size == 0) return "Temp suite";
693 String fqName = myPattern.iterator().next();
695 fqName.contains("*") ? fqName
696 : StringUtil.getShortName(fqName.contains("(") ? StringUtil.getPackageName(fqName, '(') : fqName);
697 return firstName + (size > 1 ? " and " + (size - 1) + " more" : "");
699 if (TEST_CATEGORY.equals(TEST_OBJECT)) {
700 return "@Category(" + (StringUtil.isEmpty(CATEGORY_NAME) ? "Invalid" : CATEGORY_NAME) + ")";
702 if (TEST_UNIQUE_ID.equals(TEST_OBJECT)) {
703 return UNIQUE_ID != null ? StringUtil.join(UNIQUE_ID, " ") : "Temp suite";
705 if (TEST_TAGS.equals(TEST_OBJECT)) {
706 return TAGS != null ? "Tags (" + StringUtil.join(TAGS, " ") + ")" : "Temp suite";
708 final String className = JavaExecutionUtil.getPresentableClassName(getMainClassName());
709 if (TEST_METHOD.equals(TEST_OBJECT)) {
710 return className + '.' + getMethodName();
716 public String getMainClassName() {
717 return MAIN_CLASS_NAME != null ? MAIN_CLASS_NAME : "";
720 public String getPackageName() {
721 return PACKAGE_NAME != null ? PACKAGE_NAME : "";
724 public String getMethodName() {
725 String signature = getMethodNameWithSignature();
726 int paramsIdx = signature.lastIndexOf("(");
727 return paramsIdx > -1 ? signature.substring(0, paramsIdx) : signature;
730 public String getMethodNameWithSignature() {
731 return METHOD_NAME != null ? METHOD_NAME : "";
734 public String getDirName() {
735 return DIR_NAME != null ? DIR_NAME : "";
738 public void setDirName(String dirName) {
742 public Set<String> getPatterns() {
746 public void setPatterns(LinkedHashSet<String> pattern) {
750 public String getPatternPresentation() {
751 final List<String> enabledTests = new ArrayList<>();
752 for (String pattern : myPattern) {
753 enabledTests.add(pattern);
755 return StringUtil.join(enabledTests, "||");
758 public TestObject getTestObject(@NotNull JUnitConfiguration configuration) {
759 final ExecutionEnvironment environment = ExecutionEnvironmentBuilder.create(DefaultRunExecutor.getRunExecutorInstance(), configuration).build();
760 final TestObject testObject = TestObject.fromString(TEST_OBJECT, configuration, environment);
761 return testObject == null ? new UnknownTestTarget(configuration, environment) : testObject;
764 public Module setMainClass(final PsiClass testClass) {
765 MAIN_CLASS_NAME = JavaExecutionUtil.getRuntimeQualifiedName(testClass);
766 PsiPackage containingPackage = JUnitUtil.getContainingPackage(testClass);
767 PACKAGE_NAME = containingPackage != null ? containingPackage.getQualifiedName() : "";
768 return JavaExecutionUtil.findModule(testClass);
771 public Map<String, String> getEnvs() {
775 public void setEnvs(final Map<String, String> envs) {
779 public String getCategory() {
780 return CATEGORY_NAME != null ? CATEGORY_NAME : "";
783 public void setCategoryName(String categoryName) {
784 CATEGORY_NAME = categoryName;
787 public String getChangeList() {
791 public void setChangeList(String changeList) {
792 myChangeList = changeList;