private static Set<Class<?>> getExcludedCategories(final Class<?> suiteClass) { Set<Class<?>> resultSet = Sets.newHashSet(); Set<Class<?>> excludedCategory = getClassesInExcludeCategoryAnnotation(suiteClass); if (excludedCategory != null) { resultSet.addAll(excludedCategory); } resultSet.addAll(getClassesInExcludeCategoriesAnnotation(suiteClass)); return resultSet; }
public PackageSuite(final Class<?> suiteClass, final RunnerBuilder builder) throws InitializationError { super(builder, suiteClass, getSuiteClasses(suiteClass)); }
public static Class<?>[] getSuiteClasses(final Class<?> suiteClass) throws InitializationError { SuitePackages suitePackages = suiteClass.getAnnotation(SuitePackages.class); if (suitePackages == null) { throw new InitializationError( "PackageSuite class '" + suiteClass.getName() + "' must declare @SuitePackages!"); } String[] packages = suitePackages.value(); if (packages == null || packages.length == 0) { throw new InitializationError("PackageSuite class '" + suiteClass.getName() + "' must declare at least one package in its @SuitePackages annotation!"); } Set<Class<?>> allTestClasses = getClassesInPackages(packages); allTestClasses.addAll(getExplicitSuiteClasses(suiteClass)); allTestClasses.addAll(getClassesFromIncludedSuiteClasses(suiteClass)); applySuiteClassesExcludeFilter(suiteClass, allTestClasses); List<Class<?>> testClasses = Lists.newArrayList(allTestClasses); Collections.sort(testClasses, (classA, classB) -> classA.getName().compareTo(classB.getName())); return testClasses.toArray(new Class<?>[testClasses.size()]); }
private static void applySuiteClassesExcludeFilter(final Class<?> suiteClass, final Set<Class<?>> testClasses) { // remove all abstract classes and interfaces testClasses.removeIf(clazz -> clazz.isInterface() || Modifier.isAbstract(clazz.getModifiers())); // remove all classes that have no test methods testClasses.removeIf(clazz -> hasTestMethod(clazz) == false); // apply the categories filter Set<Class<?>> excludedCategories = getExcludedCategories(suiteClass); if (excludedCategories.isEmpty()) { // no classes excluded return; } Map<Class<?>, Set<Class<?>>> testClassesByCategory = getTestClassesByCategory(testClasses); for (Class<?> excludedCategory : excludedCategories) { Set<Class<?>> categoryTestClasses = testClassesByCategory.get(excludedCategory); if (categoryTestClasses != null && categoryTestClasses.isEmpty() == false) { testClasses.removeAll(categoryTestClasses); } } }
private static Set<Class<?>> getClassesFromIncludedSuiteClasses(final Class<?> suiteClass) throws InitializationError { Set<Class<?>> resultSet = Sets.newHashSet(); SuiteIncludes suiteIncludes = suiteClass.getAnnotation(SuiteIncludes.class); if (suiteIncludes == null) { // annotation not present, abort return resultSet; } Class<?>[] includedSuiteClasses = suiteIncludes.value(); if (includedSuiteClasses == null || includedSuiteClasses.length < 1) { // no value present, abort return resultSet; } for (Class<?> includedSuiteClass : includedSuiteClasses) { Class<?>[] suiteClasses = getSuiteClasses(includedSuiteClass); Set<Class<?>> suiteClassesSet = Sets.newHashSet(suiteClasses); resultSet.addAll(suiteClassesSet); } return resultSet; }