001 /**
002 * Copyright (C) 2011 rwoo@gmx.de
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package com.googlecode.catchexception.throwable.apis.internal.hamcrest;
017
018 import org.hamcrest.BaseMatcher;
019 import org.hamcrest.CoreMatchers;
020 import org.hamcrest.Description;
021 import org.hamcrest.Matcher;
022
023 /**
024 *
025 * Creates a {@link Matcher matcher} that matches an throwable with a certain
026 * message.
027 *
028 * @author rwoo
029 *
030 * @param <T>
031 * an throwable subclass
032 */
033 public class ThrowableMessageMatcher<T extends Throwable> extends
034 BaseMatcher<T> {
035
036 /**
037 * The string matcher that shall match throwable message.
038 */
039 private Matcher<String> expectedMessageMatcher;
040
041 /**
042 * @param expectedMessage
043 * the expected throwable message
044 */
045 public ThrowableMessageMatcher(String expectedMessage) {
046 super();
047 this.expectedMessageMatcher = CoreMatchers.is(expectedMessage);
048 }
049
050 /**
051 * @param expectedMessageMatcher
052 * a string matcher that shall match the throwable message
053 */
054 public ThrowableMessageMatcher(Matcher<String> expectedMessageMatcher) {
055 super();
056
057 this.expectedMessageMatcher = expectedMessageMatcher;
058 }
059
060 /*
061 * (non-Javadoc)
062 *
063 * @see org.hamcrest.Matcher#matches(java.lang.Object)
064 */
065 public boolean matches(Object obj) {
066 if (!(obj instanceof Throwable))
067 return false;
068
069 Throwable throwable = (Throwable) obj;
070
071 String foundMessage = throwable.getMessage();
072
073 return expectedMessageMatcher.matches(foundMessage);
074 }
075
076 /*
077 * (non-Javadoc)
078 *
079 * @see org.hamcrest.SelfDescribing#describeTo(org.hamcrest.Description)
080 */
081 public void describeTo(Description description) {
082 description.appendText("has a message that ").appendDescriptionOf(
083 expectedMessageMatcher);
084 }
085
086 }