1 package org.junit.tests.experimental;
2
3 import static org.hamcrest.CoreMatchers.containsString;
4 import static org.hamcrest.CoreMatchers.is;
5 import static org.junit.Assert.assertEquals;
6 import static org.junit.Assert.assertSame;
7 import static org.junit.Assert.assertThat;
8 import static org.junit.Assert.assertTrue;
9 import static org.junit.Assert.fail;
10 import static org.junit.Assume.assumeNoException;
11 import static org.junit.Assume.assumeNotNull;
12 import static org.junit.Assume.assumeThat;
13 import static org.junit.Assume.assumeTrue;
14 import static org.junit.experimental.results.PrintableResult.testResult;
15 import static org.junit.experimental.results.ResultMatchers.isSuccessful;
16
17 import java.util.ArrayList;
18 import java.util.List;
19
20 import org.junit.Assume;
21 import org.junit.AssumptionViolatedException;
22 import org.junit.Before;
23 import org.junit.BeforeClass;
24 import org.junit.Test;
25 import org.junit.runner.JUnitCore;
26 import org.junit.runner.Result;
27 import org.junit.runner.notification.Failure;
28 import org.junit.runner.notification.RunListener;
29
30 public class AssumptionTest {
31 public static class HasFailingAssumption {
32 @Test
33 public void assumptionsFail() {
34 assumeThat(3, is(4));
35 fail();
36 }
37 }
38
39 @Test
40 public void failedAssumptionsMeanPassing() {
41 Result result = JUnitCore.runClasses(HasFailingAssumption.class);
42 assertThat(result.getRunCount(), is(1));
43 assertThat(result.getIgnoreCount(), is(0));
44 assertThat(result.getFailureCount(), is(0));
45 }
46
47 private static int assumptionFailures = 0;
48
49 @Test
50 public void failedAssumptionsCanBeDetectedByListeners() {
51 assumptionFailures = 0;
52 JUnitCore core = new JUnitCore();
53 core.addListener(new RunListener() {
54 @Override
55 public void testAssumptionFailure(Failure failure) {
56 assumptionFailures++;
57 }
58 });
59 core.run(HasFailingAssumption.class);
60
61 assertThat(assumptionFailures, is(1));
62 }
63
64 public static class HasPassingAssumption {
65 @Test
66 public void assumptionsFail() {
67 assumeThat(3, is(3));
68 fail();
69 }
70 }
71
72 @Test
73 public void passingAssumptionsScootThrough() {
74 Result result = JUnitCore.runClasses(HasPassingAssumption.class);
75 assertThat(result.getRunCount(), is(1));
76 assertThat(result.getIgnoreCount(), is(0));
77 assertThat(result.getFailureCount(), is(1));
78 }
79
80 @Test(expected = AssumptionViolatedException.class)
81 public void assumeThatWorks() {
82 assumeThat(1, is(2));
83 }
84
85 @Test
86 public void assumeThatPasses() {
87 assumeThat(1, is(1));
88 assertCompletesNormally();
89 }
90
91 @Test
92 public void assumeThatPassesOnStrings() {
93 assumeThat("x", is("x"));
94 assertCompletesNormally();
95 }
96
97 @Test(expected = AssumptionViolatedException.class)
98 public void assumeNotNullThrowsException() {
99 Object[] objects = {1, 2, null};
100 assumeNotNull(objects);
101 }
102
103 @Test
104 public void assumeNotNullPasses() {
105 Object[] objects = {1, 2};
106 assumeNotNull(objects);
107 assertCompletesNormally();
108 }
109
110 @Test
111 public void assumeNotNullIncludesParameterList() {
112 try {
113 Object[] objects = {1, 2, null};
114 assumeNotNull(objects);
115 } catch (AssumptionViolatedException e) {
116 assertThat(e.getMessage(), containsString("1, 2, null"));
117 } catch (Exception e) {
118 fail("Should have thrown AssumptionViolatedException");
119 }
120 }
121
122 @Test
123 public void assumeNoExceptionThrows() {
124 final Throwable exception = new NullPointerException();
125 try {
126 assumeNoException(exception);
127 fail("Should have thrown exception");
128 } catch (AssumptionViolatedException e) {
129 assertThat(e.getCause(), is(exception));
130 }
131 }
132
133 private void assertCompletesNormally() {
134 }
135
136 @Test(expected = AssumptionViolatedException.class)
137 public void assumeTrueWorks() {
138 Assume.assumeTrue(false);
139 }
140
141 public static class HasFailingAssumeInBefore {
142 @Before
143 public void checkForSomethingThatIsntThere() {
144 assumeTrue(false);
145 }
146
147 @Test
148 public void failing() {
149 fail();
150 }
151 }
152
153 @Test
154 public void failingAssumptionInBeforePreventsTestRun() {
155 assertThat(testResult(HasFailingAssumeInBefore.class), isSuccessful());
156 }
157
158 public static class HasFailingAssumeInBeforeClass {
159 @BeforeClass
160 public static void checkForSomethingThatIsntThere() {
161 assumeTrue(false);
162 }
163
164 @Test
165 public void failing() {
166 fail();
167 }
168 }
169
170 @Test
171 public void failingAssumptionInBeforeClassIgnoresClass() {
172 assertThat(testResult(HasFailingAssumeInBeforeClass.class), isSuccessful());
173 }
174
175 public static class AssumptionFailureInConstructor {
176 public AssumptionFailureInConstructor() {
177 assumeTrue(false);
178 }
179
180 @Test
181 public void shouldFail() {
182 fail();
183 }
184 }
185
186 @Test
187 public void failingAssumptionInConstructorIgnoresClass() {
188 assertThat(testResult(AssumptionFailureInConstructor.class), isSuccessful());
189 }
190
191 @Test(expected = IllegalArgumentException.class)
192 public void assumeWithExpectedException() {
193 assumeTrue(false);
194 }
195
196 final static String message = "Some random message string.";
197 final static Throwable e = new Throwable();
198
199
200
201
202 public static class HasAssumeWithMessage {
203 @Test
204 public void testMethod() {
205 assumeTrue(message, false);
206 }
207 }
208
209 @Test
210 public void assumptionsWithMessage() {
211 final List<Failure> failures =
212 runAndGetAssumptionFailures(HasAssumeWithMessage.class);
213
214 assertTrue(failures.get(0).getMessage().contains(message));
215 }
216
217
218
219
220 public static class HasAssumeWithMessageAndCause {
221 @Test
222 public void testMethod() {
223 assumeNoException(message, e);
224 }
225 }
226
227 @Test
228 public void assumptionsWithMessageAndCause() {
229 final List<Failure> failures =
230 runAndGetAssumptionFailures(HasAssumeWithMessageAndCause.class);
231 assertTrue(failures.get(0).getMessage().contains(message));
232 assertSame(failures.get(0).getException().getCause(), e);
233 }
234
235 public static class HasFailingAssumptionWithMessage {
236 @Test
237 public void assumptionsFail() {
238 assumeThat(message, 3, is(4));
239 fail();
240 }
241 }
242
243 @Test
244 public void failedAssumptionsWithMessage() {
245 final List<Failure> failures =
246 runAndGetAssumptionFailures(HasFailingAssumptionWithMessage.class);
247
248 assertEquals(failures.size(), 1);
249 assertTrue(failures.get(0).getMessage().contains(message));
250 }
251
252
253
254
255
256 private static List<Failure> runAndGetAssumptionFailures(Class<?> clazz) {
257 final List<Failure> failures = new ArrayList<Failure>();
258 final JUnitCore core = new JUnitCore();
259 core.addListener(new RunListener() {
260 @Override
261 public void testAssumptionFailure(Failure failure) {
262 failures.add(failure);
263 }
264 });
265 core.run(clazz);
266 return failures;
267 }
268 }