summaryrefslogtreecommitdiffstats
path: root/junit4/src/test/java/org/junit/tests/experimental/rules/ExpectedExceptionRuleTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'junit4/src/test/java/org/junit/tests/experimental/rules/ExpectedExceptionRuleTest.java')
-rw-r--r--junit4/src/test/java/org/junit/tests/experimental/rules/ExpectedExceptionRuleTest.java232
1 files changed, 232 insertions, 0 deletions
diff --git a/junit4/src/test/java/org/junit/tests/experimental/rules/ExpectedExceptionRuleTest.java b/junit4/src/test/java/org/junit/tests/experimental/rules/ExpectedExceptionRuleTest.java
new file mode 100644
index 0000000..b5119cd
--- /dev/null
+++ b/junit4/src/test/java/org/junit/tests/experimental/rules/ExpectedExceptionRuleTest.java
@@ -0,0 +1,232 @@
+package org.junit.tests.experimental.rules;
+
+import static org.hamcrest.CoreMatchers.any;
+import static org.junit.Assert.assertThat;
+import static org.junit.experimental.results.PrintableResult.testResult;
+import static org.junit.experimental.results.ResultMatchers.hasSingleFailureContaining;
+import static org.junit.experimental.results.ResultMatchers.isSuccessful;
+import static org.junit.matchers.JUnitMatchers.both;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.internal.matchers.TypeSafeMatcher;
+import org.junit.rules.ExpectedException;
+
+public class ExpectedExceptionRuleTest {
+ public static class HasExpectedException {
+ @Rule
+ public ExpectedException thrown= ExpectedException.none();
+
+ @Test
+ public void throwsNothing() {
+
+ }
+
+ @Test
+ public void throwsNullPointerException() {
+ thrown.expect(NullPointerException.class);
+ throw new NullPointerException();
+ }
+
+ @Test
+ public void throwsNullPointerExceptionWithMessage() {
+ thrown.expect(NullPointerException.class);
+ thrown.expectMessage("happened?");
+ throw new NullPointerException("What happened?");
+ }
+ }
+
+ @Test
+ public void expectedExceptionPasses() {
+ assertThat(testResult(HasExpectedException.class), isSuccessful());
+ }
+
+ public static class HasWrongExpectedException {
+ @Rule
+ public ExpectedException thrown= ExpectedException.none();
+
+ @Test
+ public void throwsNullPointerException() {
+ thrown.expect(NullPointerException.class);
+ throw new IllegalArgumentException();
+ }
+ }
+
+ @Test
+ public void unExpectedExceptionFails() {
+ assertThat(
+ testResult(HasWrongExpectedException.class),
+ hasSingleFailureContaining("Expected: an instance of java.lang.NullPointerException"));
+ }
+
+ public static class HasWrongMessage {
+ @Rule
+ public ExpectedException thrown= ExpectedException.none();
+
+ @Test
+ public void throwsNullPointerException() {
+ thrown.expectMessage("expectedMessage");
+ throw new IllegalArgumentException("actualMessage");
+ }
+ }
+
+ @Test
+ public void wrongMessageFails() {
+ assertThat(
+ testResult(HasWrongMessage.class), both(
+ hasSingleFailureContaining("expectedMessage")).and(
+ hasSingleFailureContaining("actualMessage")));
+ }
+
+ public static class WronglyExpectsException {
+ @Rule
+ public ExpectedException thrown= ExpectedException.none();
+
+ @Test
+ public void doesntThrowNullPointerException() {
+ thrown.expect(NullPointerException.class);
+ }
+ }
+
+ @Test
+ public void failsIfExceptionNeverComes() {
+ assertThat(
+ testResult(WronglyExpectsException.class),
+ hasSingleFailureContaining("Expected test to throw an instance of java.lang.NullPointerException"));
+ }
+
+ public static class WronglyExpectsExceptionMessage {
+ @Rule
+ public ExpectedException thrown= ExpectedException.none();
+
+ @Test
+ public void doesntThrowAnything() {
+ thrown.expectMessage("anything!");
+ }
+ }
+
+ @Test
+ public void failsIfExceptionMessageNeverComes() {
+ assertThat(
+ testResult(WronglyExpectsExceptionMessage.class),
+ hasSingleFailureContaining("Expected test to throw exception with message a string containing \"anything!\""));
+ }
+
+ public static class ExpectsSubstring {
+ @Rule
+ public ExpectedException thrown= ExpectedException.none();
+
+ @Test
+ public void throwsMore() {
+ thrown.expectMessage("anything!");
+ throw new NullPointerException(
+ "This could throw anything! (as long as it has the right substring)");
+ }
+ }
+
+ @Test
+ public void passesWithSubstringMethod() {
+ assertThat(testResult(ExpectsSubstring.class), isSuccessful());
+ }
+
+ public static class ExpectsSubstringNullMessage {
+ @Rule
+ public ExpectedException thrown= ExpectedException.none();
+
+ @Test
+ public void throwsMore() {
+ thrown.expectMessage("anything!");
+ throw new NullPointerException();
+ }
+ }
+
+ @Test
+ public void failsWithNullExceptionMessage() {
+ assertThat(testResult(ExpectsSubstringNullMessage.class),
+ hasSingleFailureContaining("NullPointerException"));
+ }
+
+ public static class ExpectsMessageMatcher {
+ @Rule
+ public ExpectedException thrown= ExpectedException.none();
+
+ @Test
+ public void throwsMore() {
+ thrown.expectMessage(startsWith("Ack"));
+ throw new NullPointerException("Ack!");
+ }
+ }
+
+ @Test
+ public void succeedsWithMessageMatcher() {
+ assertThat(testResult(ExpectsMessageMatcher.class), isSuccessful());
+ }
+
+ public static class ExpectedMessageMatcherFails {
+ @Rule
+ public ExpectedException thrown= ExpectedException.none();
+
+ @Test
+ public void throwsMore() {
+ thrown.expectMessage(startsWith("Wrong start"));
+ throw new NullPointerException("Back!");
+ }
+ }
+
+
+
+ private static Matcher<String> startsWith(final String prefix) {
+ return new TypeSafeMatcher<String>() {
+ public void describeTo(Description description) {
+ description.appendText("starts with ");
+ description.appendText(prefix);
+ }
+
+ @Override
+ public boolean matchesSafely(String item) {
+ return item.startsWith(prefix);
+ }
+ };
+ }
+
+ @Test
+ public void failsWithMatcher() {
+ assertThat(testResult(ExpectedMessageMatcherFails.class),
+ hasSingleFailureContaining("Wrong start"));
+ }
+
+ public static class ExpectsMatcher {
+ @Rule
+ public ExpectedException thrown= ExpectedException.none();
+
+ @Test
+ public void throwsMore() {
+ thrown.expect(any(Throwable.class));
+ throw new NullPointerException("Ack!");
+ }
+ }
+
+ @Test
+ public void succeedsWithMatcher() {
+ assertThat(testResult(ExpectsMatcher.class), isSuccessful());
+ }
+
+ public static class ExpectsMultipleMatchers {
+ @Rule
+ public ExpectedException thrown= ExpectedException.none();
+
+ @Test
+ public void throwsMore() {
+ thrown.expect(IllegalArgumentException.class);
+ thrown.expectMessage("Ack!");
+ throw new NullPointerException("Ack!");
+ }
+ }
+
+ @Test
+ public void failsWithMultipleMatchers() {
+ assertThat(testResult(ExpectsMultipleMatchers.class),
+ hasSingleFailureContaining("IllegalArgumentException"));
+ }
+}