View Javadoc
1   package org.junit.runner;
2   
3   import static org.hamcrest.CoreMatchers.instanceOf;
4   import static org.hamcrest.CoreMatchers.is;
5   import static org.hamcrest.CoreMatchers.startsWith;
6   import static org.hamcrest.MatcherAssert.assertThat;
7   import static org.junit.Assume.assumeThat;
8   import org.junit.Rule;
9   import org.junit.Test;
10  import org.junit.experimental.categories.ExcludeCategories;
11  import org.junit.rules.ExpectedException;
12  import org.junit.rules.TestName;
13  import org.junit.runner.manipulation.Filter;
14  import org.junit.runners.Suite;
15  import org.junit.runners.Suite.SuiteClasses;
16  
17  public class FilterFactoriesTest {
18      @Rule
19      public ExpectedException expectedException = ExpectedException.none();
20  
21      @Rule
22      public TestName testName = new TestName();
23  
24      private Request createSuiteRequest() {
25          return Request.aClass(DummySuite.class);
26      }
27  
28      @Test
29      public void shouldCreateFilterWithArguments() throws Exception {
30          Filter filter = FilterFactories.createFilterFromFilterSpec(
31                  createSuiteRequest(),
32                  ExcludeCategories.class.getName() + "=" + DummyCategory.class.getName());
33  
34          assertThat(filter.describe(), startsWith("excludes "));
35      }
36  
37      @Test
38      public void shouldCreateFilterWithNoArguments() throws Exception {
39          Filter filter = FilterFactories.createFilterFromFilterSpec(
40                  createSuiteRequest(), FilterFactoryStub.class.getName());
41  
42          assertThat(filter, instanceOf(DummyFilter.class));
43      }
44  
45      @Test
46      public void shouldPassOnDescriptionToFilterFactory() throws Exception {
47          Request request = createSuiteRequest();
48          Description description = request.getRunner().getDescription();
49          Filter filter = FilterFactories.createFilterFromFilterSpec(
50                  request, FilterFactoryStub.class.getName());
51  
52          // This assumption tested in shouldCreateFilterWithNoArguments()
53          assumeThat(filter, instanceOf(DummyFilter.class));
54  
55          DummyFilter dummyFilter = (DummyFilter) filter;
56          assertThat(dummyFilter.getTopLevelDescription(), is(description));
57      }
58  
59      @Test
60      public void shouldCreateFilter() throws Exception {
61          Filter filter = FilterFactories.createFilter(
62                  FilterFactoryStub.class,
63                  new FilterFactoryParams(
64                          Description.createSuiteDescription(testName.getMethodName()),
65                          ""));
66  
67          assertThat(filter, instanceOf(DummyFilter.class));
68      }
69  
70      @Test
71      public void shouldThrowExceptionIfNotFilterFactory() throws Exception {
72          expectedException.expect(FilterFactory.FilterNotCreatedException.class);
73  
74          FilterFactories.createFilterFactory(NonFilterFactory.class.getName());
75      }
76  
77      @Test
78      public void shouldThrowExceptionIfNotInstantiable() throws Exception {
79          expectedException.expect(FilterFactory.FilterNotCreatedException.class);
80  
81          FilterFactories.createFilterFactory(NonInstantiableFilterFactory.class);
82      }
83  
84      public static class NonFilterFactory {
85      }
86  
87      public static class NonInstantiableFilterFactory implements FilterFactory {
88          private NonInstantiableFilterFactory() {
89          }
90  
91          public Filter createFilter(FilterFactoryParams params) throws FilterNotCreatedException {
92              throw new FilterNotCreatedException(new Exception("not implemented"));
93          }
94      }
95  
96      public static class FilterFactoryStub implements FilterFactory {
97          public Filter createFilter(FilterFactoryParams params) {
98              return new DummyFilter(params.getTopLevelDescription());
99          }
100     }
101 
102     private static class DummyFilter extends Filter {
103         private final Description fTopLevelDescription;
104 
105         public DummyFilter(Description topLevelDescription) {
106             fTopLevelDescription = topLevelDescription;
107         }
108 
109         public Description getTopLevelDescription() {
110             return fTopLevelDescription;
111         }
112 
113         @Override
114         public boolean shouldRun(Description description) {
115             return false;
116         }
117 
118         @Override
119         public String describe() {
120             return null;
121         }
122     }
123 
124     public static class DummyCategory {
125     }
126 
127     @RunWith(Suite.class)
128     @SuiteClasses(DummyTest.class)
129     public static class DummySuite {
130     }
131 
132     public static class DummyTest {
133         @Test
134         public void passes() {
135         }
136     }
137 }