1package org.hamcrest.object;
2
3import org.hamcrest.Description;
4import org.hamcrest.Matcher;
5import org.hamcrest.Factory;
6import org.hamcrest.BaseMatcher;
7
8public class HasToString<T> extends BaseMatcher<T> {
9
10    private final Matcher<String> toStringMatcher;
11
12    public HasToString(Matcher<String> toStringMatcher) {
13        this.toStringMatcher = toStringMatcher;
14    }
15
16    public boolean matches(Object item) {
17        return item != null && toStringMatcher.matches(item.toString());
18    }
19
20    public void describeTo(Description description) {
21        description
22	        .appendText("asString(")
23	        .appendDescriptionOf(toStringMatcher)
24	        .appendText(")");
25    }
26
27    @Factory
28    public static <T> Matcher<T> hasToString(Matcher<String> toStringMatcher) {
29        return new HasToString<T>(toStringMatcher);
30    }
31}
32