1 package org.junit.tests.running.classes;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertThat;
5 import static org.junit.Assert.assertTrue;
6 import static org.junit.experimental.results.PrintableResult.testResult;
7 import static org.junit.experimental.results.ResultMatchers.hasSingleFailureContaining;
8
9 import java.util.List;
10
11 import junit.framework.JUnit4TestAdapter;
12 import junit.framework.TestResult;
13 import org.junit.AfterClass;
14 import org.junit.Assert;
15 import org.junit.BeforeClass;
16 import org.junit.Test;
17 import org.junit.runner.JUnitCore;
18 import org.junit.runner.Request;
19 import org.junit.runner.Result;
20 import org.junit.runner.RunWith;
21 import org.junit.runner.Runner;
22 import org.junit.runners.Suite;
23 import org.junit.runners.Suite.SuiteClasses;
24
25 public class SuiteTest {
26 public static class TestA {
27 @Test
28 public void pass() {
29 }
30 }
31
32 public static class TestB {
33 @Test
34 public void fail() {
35 Assert.fail();
36 }
37 }
38
39 @RunWith(Suite.class)
40 @SuiteClasses({TestA.class, TestB.class})
41 public static class All {
42 }
43
44 public static class InheritsAll extends All {
45 }
46
47 @Test
48 public void ensureTestIsRun() {
49 JUnitCore core = new JUnitCore();
50 Result result = core.run(All.class);
51 assertEquals(2, result.getRunCount());
52 assertEquals(1, result.getFailureCount());
53 }
54
55 @Test
56 public void ensureInheritedTestIsRun() {
57 JUnitCore core = new JUnitCore();
58 Result result = core.run(InheritsAll.class);
59 assertEquals(2, result.getRunCount());
60 assertEquals(1, result.getFailureCount());
61 }
62
63 @Test
64 public void suiteTestCountIsCorrect() throws Exception {
65 Runner runner = Request.aClass(All.class).getRunner();
66 assertEquals(2, runner.testCount());
67 }
68
69 @Test
70 public void ensureSuitesWorkWithForwardCompatibility() {
71 junit.framework.Test test = new JUnit4TestAdapter(All.class);
72 TestResult result = new TestResult();
73 test.run(result);
74 assertEquals(2, result.runCount());
75 }
76
77 @Test
78 public void forwardCompatibilityWorksWithGetTests() {
79 JUnit4TestAdapter adapter = new JUnit4TestAdapter(All.class);
80 List<? extends junit.framework.Test> tests = adapter.getTests();
81 assertEquals(2, tests.size());
82 }
83
84 @Test
85 public void forwardCompatibilityWorksWithTestCount() {
86 JUnit4TestAdapter adapter = new JUnit4TestAdapter(All.class);
87 assertEquals(2, adapter.countTestCases());
88 }
89
90
91 private static String log = "";
92
93 @RunWith(Suite.class)
94 @SuiteClasses({TestA.class, TestB.class})
95 public static class AllWithBeforeAndAfterClass {
96 @BeforeClass
97 public static void before() {
98 log += "before ";
99 }
100
101 @AfterClass
102 public static void after() {
103 log += "after ";
104 }
105 }
106
107 @Test
108 public void beforeAndAfterClassRunOnSuite() {
109 log = "";
110 JUnitCore.runClasses(AllWithBeforeAndAfterClass.class);
111 assertEquals("before after ", log);
112 }
113
114 @RunWith(Suite.class)
115 public static class AllWithOutAnnotation {
116 }
117
118 @Test
119 public void withoutSuiteClassAnnotationProducesFailure() {
120 Result result = JUnitCore.runClasses(AllWithOutAnnotation.class);
121 assertEquals(1, result.getFailureCount());
122 String expected = String.format(
123 "class '%s' must have a SuiteClasses annotation",
124 AllWithOutAnnotation.class.getName());
125 assertEquals(expected, result.getFailures().get(0).getMessage());
126 }
127
128 @RunWith(Suite.class)
129 @SuiteClasses(InfiniteLoop.class)
130 static public class InfiniteLoop {
131 }
132
133 @Test
134 public void whatHappensWhenASuiteHasACycle() {
135 Result result = JUnitCore.runClasses(InfiniteLoop.class);
136 assertEquals(1, result.getFailureCount());
137 }
138
139 @RunWith(Suite.class)
140 @SuiteClasses({BiInfiniteLoop.class, BiInfiniteLoop.class})
141 static public class BiInfiniteLoop {
142 }
143
144 @Test
145 public void whatHappensWhenASuiteHasAForkingCycle() {
146 Result result = JUnitCore.runClasses(BiInfiniteLoop.class);
147 assertEquals(2, result.getFailureCount());
148 }
149
150
151
152
153
154 @RunWith(Suite.class)
155 @SuiteClasses({Hercules.class})
156 static public class Hydra {
157 }
158
159 @RunWith(Suite.class)
160 @SuiteClasses({Hydra.class, Hydra.class})
161 static public class Hercules {
162 }
163
164 @Test
165 public void whatHappensWhenASuiteContainsItselfIndirectly() {
166 Result result = JUnitCore.runClasses(Hydra.class);
167 assertEquals(2, result.getFailureCount());
168 }
169
170 @RunWith(Suite.class)
171 @SuiteClasses({})
172 public class WithoutDefaultConstructor {
173 public WithoutDefaultConstructor(int i) {
174
175 }
176 }
177
178 @Test
179 public void suiteShouldBeOKwithNonDefaultConstructor() throws Exception {
180 Result result = JUnitCore.runClasses(WithoutDefaultConstructor.class);
181 assertTrue(result.wasSuccessful());
182 }
183
184 @RunWith(Suite.class)
185 public class NoSuiteClassesAnnotation {
186 }
187
188 @Test
189 public void suiteShouldComplainAboutNoSuiteClassesAnnotation() {
190 assertThat(testResult(NoSuiteClassesAnnotation.class), hasSingleFailureContaining("SuiteClasses"));
191 }
192 }