junit 5 tags support (IDEA-163481)
[idea/community.git] / plugins / junit / src / com / intellij / execution / junit / TestObject.java
index cebc83bae4c75e0969b39ea27f59267a1f1accbd..c6bcdbd930272c5a683e83b9e286c78fcfdbb9aa 100644 (file)
@@ -84,38 +84,86 @@ public abstract class TestObject extends JavaTestFrameworkRunnableState<JUnitCon
 
   private final JUnitConfiguration myConfiguration;
   protected File myListenersFile;
-  public static TestObject fromString(final String id,
-                                      final JUnitConfiguration configuration,
-                                      @NotNull ExecutionEnvironment environment) {
-    if (JUnitConfiguration.TEST_METHOD.equals(id)) {
-      return new TestMethod(configuration, environment);
-    }
-    if (JUnitConfiguration.TEST_CLASS.equals(id)) {
-      return new TestClass(configuration, environment);
-    }
-    if (JUnitConfiguration.TEST_PACKAGE.equals(id)){
-      return new TestPackage(configuration, environment);
-    }
-    if (JUnitConfiguration.TEST_DIRECTORY.equals(id)) {
-      return new TestDirectory(configuration, environment);
-    }
-    if (JUnitConfiguration.TEST_CATEGORY.equals(id)) {
-      return new TestCategory(configuration, environment);
-    }
-    if (JUnitConfiguration.TEST_PATTERN.equals(id)) {
-      return new TestsPattern(configuration, environment);
-    }
-    if (JUnitConfiguration.TEST_UNIQUE_ID.equals(id)) {
-      return new TestUniqueId(configuration, environment);
-    }
-    if (JUnitConfiguration.BY_SOURCE_POSITION.equals(id)) {
-      return new TestBySource(configuration, environment);
+  protected <T> void addClassesListToJavaParameters(Collection<? extends T> elements,
+                                                    Function<T, String> nameFunction,
+                                                    String packageName,
+                                                    boolean createTempFile, JavaParameters javaParameters) throws CantRunException {
+    try {
+      if (createTempFile) {
+        createTempFiles(javaParameters);
+      }
+
+      final Map<Module, List<String>> perModule = forkPerModule() ? new TreeMap<>(
+        (o1, o2) -> StringUtil.compare(o1.getName(), o2.getName(), true)) : null;
+
+      final List<String> testNames = new ArrayList<>();
+
+      if (elements.isEmpty() && perModule != null) {
+        final SourceScope sourceScope = getSourceScope();
+        Project project = getConfiguration().getProject();
+        if (sourceScope != null && packageName != null
+            && JUnitStarter.JUNIT5_PARAMETER.equals(getRunner())) {
+          final PsiPackage aPackage = JavaPsiFacade.getInstance(getConfiguration().getProject()).findPackage(packageName);
+          if (aPackage != null) {
+            final TestSearchScope scope = getScope();
+            if (scope != null) {
+              final GlobalSearchScope configurationSearchScope = GlobalSearchScopesCore.projectTestScope(project)
+                .intersectWith(sourceScope.getGlobalSearchScope());
+              final PsiDirectory[] directories = aPackage.getDirectories(configurationSearchScope);
+              for (PsiDirectory directory : directories) {
+                Module module = ModuleUtilCore.findModuleForFile(directory.getVirtualFile(), project);
+                if (module != null) {
+                  perModule.put(module, Collections.emptyList());
+                }
+              }
+            }
+          }
+        }
+      }
+
+      for (final T element : elements) {
+        final String name = nameFunction.fun(element);
+        if (name == null) {
+          continue;
+        }
+
+        final PsiElement psiElement = retrievePsiElement(element);
+        if (perModule != null && psiElement != null) {
+          final Module module = ModuleUtilCore.findModuleForPsiElement(psiElement);
+          if (module != null) {
+            List<String> list = perModule.get(module);
+            if (list == null) {
+              list = new ArrayList<>();
+              perModule.put(module, list);
+            }
+            list.add(name);
+          }
+        }
+        else {
+          testNames.add(name);
+        }
+      }
+      final JUnitConfiguration.Data data = getConfiguration().getPersistentData();
+      if (perModule != null) {
+        for (List<String> perModuleClasses : perModule.values()) {
+          Collections.sort(perModuleClasses);
+          testNames.addAll(perModuleClasses);
+        }
+      }
+      else if (JUnitConfiguration.TEST_PACKAGE.equals(data.TEST_OBJECT)) {
+        Collections.sort(testNames); //sort tests in FQN order
+      }
+
+      final String category = JUnitConfiguration.TEST_CATEGORY.equals(data.TEST_OBJECT) ? data.getCategory()
+                                                                                        : JUnitConfiguration.TEST_TAGS.equals(data.TEST_OBJECT) ? StringUtil.join(data.getTags(), " ") : "";
+      final String filters = JUnitConfiguration.TEST_PATTERN.equals(data.TEST_OBJECT) ? data.getPatternPresentation() : "";
+      JUnitStarter.printClassesList(testNames, packageName, category, filters, myTempFile);
+
+      writeClassesPerModule(packageName, javaParameters, perModule);
     }
-    if (JUnitConfiguration.BY_SOURCE_CHANGES.equals(id)) {
-      return new TestsByChanges(configuration, environment);
+    catch (IOException e) {
+      LOG.error(e);
     }
-    LOG.info(MESSAGE + id);
-    return null;
   }
 
   public Module[] getModulesToCompile() {
@@ -319,85 +367,41 @@ public abstract class TestObject extends JavaTestFrameworkRunnableState<JUnitCon
     return getConfiguration().getForkMode();
   }
 
-  protected <T> void addClassesListToJavaParameters(Collection<? extends T> elements,
-                                                    Function<T, String> nameFunction,
-                                                    String packageName,
-                                                    boolean createTempFile, JavaParameters javaParameters) throws CantRunException {
-    try {
-      if (createTempFile) {
-        createTempFiles(javaParameters);
-      }
-
-      final Map<Module, List<String>> perModule = forkPerModule() ? new TreeMap<>(
-        (o1, o2) -> StringUtil.compare(o1.getName(), o2.getName(), true)) : null;
-
-      final List<String> testNames = new ArrayList<>();
-
-      if (elements.isEmpty() && perModule != null) {
-        final SourceScope sourceScope = getSourceScope();
-        Project project = getConfiguration().getProject();
-        if (sourceScope != null && packageName != null 
-            && JUnitStarter.JUNIT5_PARAMETER.equals(getRunner())) {
-          final PsiPackage aPackage = JavaPsiFacade.getInstance(getConfiguration().getProject()).findPackage(packageName);
-          if (aPackage != null) {
-            final TestSearchScope scope = getScope();
-            if (scope != null) {
-              final GlobalSearchScope configurationSearchScope = GlobalSearchScopesCore.projectTestScope(project)
-                .intersectWith(sourceScope.getGlobalSearchScope());
-              final PsiDirectory[] directories = aPackage.getDirectories(configurationSearchScope);
-              for (PsiDirectory directory : directories) {
-                Module module = ModuleUtilCore.findModuleForFile(directory.getVirtualFile(), project);
-                if (module != null) {
-                  perModule.put(module, Collections.emptyList());
-                }
-              }
-            }
-          }
-        }
-      }
-      
-      for (final T element : elements) {
-        final String name = nameFunction.fun(element);
-        if (name == null) {
-          continue;
-        }
-
-        final PsiElement psiElement = retrievePsiElement(element);
-        if (perModule != null && psiElement != null) {
-          final Module module = ModuleUtilCore.findModuleForPsiElement(psiElement);
-          if (module != null) {
-            List<String> list = perModule.get(module);
-            if (list == null) {
-              list = new ArrayList<>();
-              perModule.put(module, list);
-            }
-            list.add(name);
-          }
-        }
-        else {
-          testNames.add(name);
-        }
-      }
-      final JUnitConfiguration.Data data = getConfiguration().getPersistentData();
-      if (perModule != null) {
-        for (List<String> perModuleClasses : perModule.values()) {
-          Collections.sort(perModuleClasses);
-          testNames.addAll(perModuleClasses);
-        }
-      }
-      else if (JUnitConfiguration.TEST_PACKAGE.equals(data.TEST_OBJECT)) {
-        Collections.sort(testNames); //sort tests in FQN order
-      }
-
-      final String category = JUnitConfiguration.TEST_CATEGORY.equals(data.TEST_OBJECT) ? data.getCategory() : "";
-      final String filters = JUnitConfiguration.TEST_PATTERN.equals(data.TEST_OBJECT) ? data.getPatternPresentation() : "";
-      JUnitStarter.printClassesList(testNames, packageName, category, filters, myTempFile);
-
-      writeClassesPerModule(packageName, javaParameters, perModule);
+  public static TestObject fromString(final String id,
+                                      final JUnitConfiguration configuration,
+                                      @NotNull ExecutionEnvironment environment) {
+    if (JUnitConfiguration.TEST_METHOD.equals(id)) {
+      return new TestMethod(configuration, environment);
     }
-    catch (IOException e) {
-      LOG.error(e);
+    if (JUnitConfiguration.TEST_CLASS.equals(id)) {
+      return new TestClass(configuration, environment);
+    }
+    if (JUnitConfiguration.TEST_PACKAGE.equals(id)){
+      return new TestPackage(configuration, environment);
+    }
+    if (JUnitConfiguration.TEST_DIRECTORY.equals(id)) {
+      return new TestDirectory(configuration, environment);
+    }
+    if (JUnitConfiguration.TEST_CATEGORY.equals(id)) {
+      return new TestCategory(configuration, environment);
+    }
+    if (JUnitConfiguration.TEST_PATTERN.equals(id)) {
+      return new TestsPattern(configuration, environment);
+    }
+    if (JUnitConfiguration.TEST_UNIQUE_ID.equals(id)) {
+      return new TestUniqueId(configuration, environment);
     }
+    if (JUnitConfiguration.TEST_TAGS.equals(id)) {
+      return new TestTags(configuration, environment);
+    }
+    if (JUnitConfiguration.BY_SOURCE_POSITION.equals(id)) {
+      return new TestBySource(configuration, environment);
+    }
+    if (JUnitConfiguration.BY_SOURCE_CHANGES.equals(id)) {
+      return new TestsByChanges(configuration, environment);
+    }
+    LOG.info(MESSAGE + id);
+    return null;
   }
 
   protected PsiElement retrievePsiElement(Object element) {