View Javadoc
1   package org.junit.internal.builders;
2   
3   import org.junit.Test;
4   import org.junit.runner.RunWith;
5   import org.junit.runner.Runner;
6   import org.junit.runner.RunnerSpy;
7   import org.junit.runners.model.RunnerBuilder;
8   import org.junit.runners.model.RunnerBuilderStub;
9   
10  import static org.hamcrest.core.Is.is;
11  import static org.hamcrest.core.IsEqual.equalTo;
12  import static org.hamcrest.core.IsInstanceOf.instanceOf;
13  import static org.hamcrest.core.IsNull.nullValue;
14  import static org.junit.Assert.assertThat;
15  
16  public class AnnotatedBuilderTest {
17      private AnnotatedBuilder builder = new AnnotatedBuilder(new RunnerBuilderStub());
18  
19      @Test
20      public void topLevelTestClassWithoutAnnotation_isRunWithDefaultRunner() throws Exception {
21          Runner runner = builder.runnerForClass(Object.class);
22          assertThat(runner, is(nullValue()));
23      }
24  
25      @Test
26      public void topLevelTestClassWithAnnotation_isRunWithAnnotatedRunner() throws Exception {
27          Runner runner = builder.runnerForClass(OuterClass.class);
28          assertThat(runner, is(instanceOf(RunnerSpy.class)));
29  
30          RunnerSpy runnerSpy = (RunnerSpy) runner;
31          assertThat(runnerSpy.getInvokedTestClass(), is(equalTo((Class) OuterClass.class)));
32      }
33  
34      @Test
35      public void memberClassInsideAnnotatedTopLevelClass_isRunWithTopLevelRunner() throws Exception {
36          Runner runner = builder.runnerForClass(OuterClass.InnerClassWithoutOwnRunWith.class);
37          assertThat(runner, is(instanceOf(RunnerSpy.class)));
38  
39          RunnerSpy runnerSpy = (RunnerSpy) runner;
40          assertThat(runnerSpy.getInvokedTestClass(), is(equalTo((Class) OuterClass.InnerClassWithoutOwnRunWith.class)));
41      }
42  
43      @Test
44      public void memberClassDeepInsideAnnotatedTopLevelClass_isRunWithTopLevelRunner() throws Exception {
45          Runner runner = builder.runnerForClass(OuterClass.InnerClassWithoutOwnRunWith.MostInnerClass.class);
46          assertThat(runner, is(instanceOf(RunnerSpy.class)));
47  
48          RunnerSpy runnerSpy = (RunnerSpy) runner;
49          assertThat(runnerSpy.getInvokedTestClass(), is(equalTo((Class) OuterClass.InnerClassWithoutOwnRunWith.MostInnerClass.class)));
50      }
51  
52      @Test
53      public void annotatedMemberClassInsideAnnotatedTopLevelClass_isRunWithOwnRunner() throws Exception {
54          Runner runner = builder.runnerForClass(OuterClass.InnerClassWithOwnRunWith.class);
55          assertThat(runner, is(instanceOf(InnerRunner.class)));
56  
57          RunnerSpy runnerSpy = (RunnerSpy) runner;
58          assertThat(runnerSpy.getInvokedTestClass(), is(equalTo((Class) OuterClass.InnerClassWithOwnRunWith.class)));
59      }
60  
61      @Test
62      public void memberClassDeepInsideAnnotatedMemberClass_isRunWithParentMemberClassRunner() throws Exception {
63          Runner runner = builder.runnerForClass(OuterClass.InnerClassWithOwnRunWith.MostInnerClass.class);
64          assertThat(runner, is(instanceOf(InnerRunner.class)));
65  
66          RunnerSpy runnerSpy = (RunnerSpy) runner;
67          assertThat(runnerSpy.getInvokedTestClass(), is(equalTo((Class) OuterClass.InnerClassWithOwnRunWith.MostInnerClass.class)));
68      }
69  
70      @RunWith(RunnerSpy.class)
71      public static class OuterClass {
72          public class InnerClassWithoutOwnRunWith {
73              @Test
74              public void test() {
75              }
76  
77              public class MostInnerClass {
78                  @Test
79                  public void test() {
80                  }
81              }
82          }
83  
84          @RunWith(InnerRunner.class)
85          public class InnerClassWithOwnRunWith {
86              @Test
87              public void test() {
88              }
89  
90              public class MostInnerClass {
91                  @Test
92                  public void test() {
93                  }
94              }
95          }
96      }
97  
98      public static class InnerRunner extends RunnerSpy {
99          public InnerRunner(Class testClass) {
100             super(testClass);
101         }
102 
103         public InnerRunner(Class testClass, RunnerBuilder runnerBuilder) {
104             super(testClass, runnerBuilder);
105         }
106     }
107 }