View Javadoc
1   package org.junit.tests.manipulation;
2   
3   import static org.junit.Assert.assertEquals;
4   
5   import java.util.Comparator;
6   
7   import junit.framework.JUnit4TestAdapter;
8   import org.junit.Before;
9   import org.junit.Test;
10  import org.junit.experimental.runners.Enclosed;
11  import org.junit.runner.Description;
12  import org.junit.runner.JUnitCore;
13  import org.junit.runner.Request;
14  import org.junit.runner.RunWith;
15  import org.junit.runner.Runner;
16  import org.junit.runner.notification.RunNotifier;
17  
18  @RunWith(Enclosed.class)
19  public class SortableTest {
20      private static Comparator<Description> forward() {
21          return new Comparator<Description>() {
22              public int compare(Description o1, Description o2) {
23                  return o1.getDisplayName().compareTo(o2.getDisplayName());
24              }
25          };
26      }
27  
28      private static Comparator<Description> backward() {
29          return new Comparator<Description>() {
30              public int compare(Description o1, Description o2) {
31                  return o2.getDisplayName().compareTo(o1.getDisplayName());
32              }
33          };
34      }
35  
36      public static class TestClassRunnerIsSortable {
37          private static String log = "";
38  
39          public static class SortMe {
40              @Test
41              public void a() {
42                  log += "a";
43              }
44  
45              @Test
46              public void b() {
47                  log += "b";
48              }
49  
50              @Test
51              public void c() {
52                  log += "c";
53              }
54          }
55  
56          @Before
57          public void resetLog() {
58              log = "";
59          }
60  
61          @Test
62          public void sortingForwardWorksOnTestClassRunner() {
63              Request forward = Request.aClass(SortMe.class).sortWith(forward());
64  
65              new JUnitCore().run(forward);
66              assertEquals("abc", log);
67          }
68  
69          @Test
70          public void sortingBackwardWorksOnTestClassRunner() {
71              Request backward = Request.aClass(SortMe.class).sortWith(backward());
72  
73              new JUnitCore().run(backward);
74              assertEquals("cba", log);
75          }
76  
77          @RunWith(Enclosed.class)
78          public static class Enclosing {
79              public static class A {
80                  @Test
81                  public void a() {
82                      log += "Aa";
83                  }
84  
85                  @Test
86                  public void b() {
87                      log += "Ab";
88                  }
89  
90                  @Test
91                  public void c() {
92                      log += "Ac";
93                  }
94              }
95  
96              public static class B {
97                  @Test
98                  public void a() {
99                      log += "Ba";
100                 }
101 
102                 @Test
103                 public void b() {
104                     log += "Bb";
105                 }
106 
107                 @Test
108                 public void c() {
109                     log += "Bc";
110                 }
111             }
112         }
113 
114         @Test
115         public void sortingForwardWorksOnSuite() {
116             Request forward = Request.aClass(Enclosing.class).sortWith(forward());
117 
118             new JUnitCore().run(forward);
119             assertEquals("AaAbAcBaBbBc", log);
120         }
121 
122         @Test
123         public void sortingBackwardWorksOnSuite() {
124             Request backward = Request.aClass(Enclosing.class).sortWith(backward());
125 
126             new JUnitCore().run(backward);
127             assertEquals("BcBbBaAcAbAa", log);
128         }
129     }
130 
131     public static class TestClassRunnerIsSortableWithSuiteMethod {
132         private static String log = "";
133 
134         public static class SortMe {
135             @Test
136             public void a() {
137                 log += "a";
138             }
139 
140             @Test
141             public void b() {
142                 log += "b";
143             }
144 
145             @Test
146             public void c() {
147                 log += "c";
148             }
149 
150             public static junit.framework.Test suite() {
151                 return new JUnit4TestAdapter(SortMe.class);
152             }
153         }
154 
155         @Before
156         public void resetLog() {
157             log = "";
158         }
159 
160         @Test
161         public void sortingForwardWorksOnTestClassRunner() {
162             Request forward = Request.aClass(SortMe.class).sortWith(forward());
163 
164             new JUnitCore().run(forward);
165             assertEquals("abc", log);
166         }
167 
168         @Test
169         public void sortingBackwardWorksOnTestClassRunner() {
170             Request backward = Request.aClass(SortMe.class).sortWith(backward());
171 
172             new JUnitCore().run(backward);
173             assertEquals("cba", log);
174         }
175     }
176 
177     public static class UnsortableRunnersAreHandledWithoutCrashing {
178         public static class UnsortableRunner extends Runner {
179             public UnsortableRunner(Class<?> klass) {
180             }
181 
182             @Override
183             public Description getDescription() {
184                 return Description.EMPTY;
185             }
186 
187             @Override
188             public void run(RunNotifier notifier) {
189             }
190         }
191 
192         @RunWith(UnsortableRunner.class)
193         public static class Unsortable {
194             @Test
195             public void a() {
196             }
197         }
198 
199         @Test
200         public void unsortablesAreHandledWithoutCrashing() {
201             Request unsorted = Request.aClass(Unsortable.class).sortWith(forward());
202             new JUnitCore().run(unsorted);
203         }
204     }
205 }