| package org.junit.experimental.categories; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.junit.internal.Classes; |
| import org.junit.runner.FilterFactory; |
| import org.junit.runner.FilterFactoryParams; |
| import org.junit.runner.manipulation.Filter; |
| |
| /** |
| * Implementation of FilterFactory for Category filtering. |
| */ |
| abstract class CategoryFilterFactory implements FilterFactory { |
| /** |
| * Creates a {@link org.junit.experimental.categories.Categories.CategoryFilter} given a |
| * {@link FilterFactoryParams} argument. |
| * |
| * @param params Parameters needed to create the {@link Filter} |
| */ |
| public Filter createFilter(FilterFactoryParams params) throws FilterNotCreatedException { |
| try { |
| return createFilter(parseCategories(params.getArgs())); |
| } catch (ClassNotFoundException e) { |
| throw new FilterNotCreatedException(e); |
| } |
| } |
| |
| /** |
| * Creates a {@link org.junit.experimental.categories.Categories.CategoryFilter} given an array of classes. |
| * |
| * @param categories Category classes. |
| */ |
| protected abstract Filter createFilter(List<Class<?>> categories); |
| |
| private List<Class<?>> parseCategories(String categories) throws ClassNotFoundException { |
| List<Class<?>> categoryClasses = new ArrayList<Class<?>>(); |
| |
| for (String category : categories.split(",")) { |
| /* |
| * Load the category class using the context class loader. |
| * If there is no context class loader, use the class loader for this class. |
| */ |
| Class<?> categoryClass = Classes.getClass(category, getClass()); |
| |
| categoryClasses.add(categoryClass); |
| } |
| |
| return categoryClasses; |
| } |
| } |