package org.junit.runner; import org.junit.internal.Classes; import org.junit.runner.FilterFactory.FilterNotCreatedException; import org.junit.runner.manipulation.Filter; /** * Utility class whose methods create a {@link FilterFactory}. */ class FilterFactories { /** * Creates a {@link Filter}. * * A filter specification is of the form "package.of.FilterFactory=args-to-filter-factory" or * "package.of.FilterFactory". * * @param request the request that will be filtered * @param filterSpec the filter specification * @throws org.junit.runner.FilterFactory.FilterNotCreatedException */ public static Filter createFilterFromFilterSpec(Request request, String filterSpec) throws FilterFactory.FilterNotCreatedException { Description topLevelDescription = request.getRunner().getDescription(); String[] tuple; if (filterSpec.contains("=")) { tuple = filterSpec.split("=", 2); } else { tuple = new String[]{ filterSpec, "" }; } return createFilter(tuple[0], new FilterFactoryParams(topLevelDescription, tuple[1])); } /** * Creates a {@link Filter}. * * @param filterFactoryFqcn The fully qualified class name of the {@link FilterFactory} * @param params The arguments to the {@link FilterFactory} */ public static Filter createFilter(String filterFactoryFqcn, FilterFactoryParams params) throws FilterFactory.FilterNotCreatedException { FilterFactory filterFactory = createFilterFactory(filterFactoryFqcn); return filterFactory.createFilter(params); } /** * Creates a {@link Filter}. * * @param filterFactoryClass The class of the {@link FilterFactory} * @param params The arguments to the {@link FilterFactory} * */ public static Filter createFilter(Class<? extends FilterFactory> filterFactoryClass, FilterFactoryParams params) throws FilterFactory.FilterNotCreatedException { FilterFactory filterFactory = createFilterFactory(filterFactoryClass); return filterFactory.createFilter(params); } static FilterFactory createFilterFactory(String filterFactoryFqcn) throws FilterNotCreatedException { Class<? extends FilterFactory> filterFactoryClass; try { filterFactoryClass = Classes.getClass(filterFactoryFqcn).asSubclass(FilterFactory.class); } catch (Exception e) { throw new FilterNotCreatedException(e); } return createFilterFactory(filterFactoryClass); } static FilterFactory createFilterFactory(Class<? extends FilterFactory> filterFactoryClass) throws FilterNotCreatedException { try { return filterFactoryClass.getConstructor().newInstance(); } catch (Exception e) { throw new FilterNotCreatedException(e); } } }