1c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
2c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinpackage org.hamcrest.text;
3c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
4c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport org.hamcrest.Description;
5c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport org.hamcrest.Matcher;
6c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport org.hamcrest.TypeSafeMatcher;
7c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
8c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport static org.hamcrest.core.AnyOf.anyOf;
9c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport static org.hamcrest.core.IsNull.nullValue;
10c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
11c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin/**
12c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * Matches empty Strings (and null).
13c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin */
14c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinpublic final class IsEmptyString extends TypeSafeMatcher<String> {
15c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    private static final IsEmptyString INSTANCE = new IsEmptyString();
16c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @SuppressWarnings("unchecked")
17c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    private static final Matcher<String> NULL_OR_EMPTY_INSTANCE = anyOf(nullValue(), INSTANCE);
18c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
19c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    private IsEmptyString() { }
20c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
21c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Override
22c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public boolean matchesSafely(String item) {
23c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return item.equals("");
24c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
25c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
26c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Override
27c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void describeTo(Description description) {
28c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        description.appendText("an empty string");
29c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
30c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
31c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
32c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher of {@link String} that matches when the examined string has zero length.
33c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
34c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat("", isEmptyString())</pre>
35c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
36c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @deprecated use is(emptyString()) instead
37c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
38c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Deprecated
39c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public static Matcher<String> isEmptyString() {
40c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return emptyString();
41c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
42c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
43c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
44c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher of {@link String} that matches when the examined string has zero length.
45c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
46c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat("", is(emptyString()))</pre>
47c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
48c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
49c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public static Matcher<String> emptyString() {
50c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return INSTANCE;
51c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
52c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
53c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
54c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher of {@link String} that matches when the examined string is <code>null</code>, or
55c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * has zero length.
56c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
57c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat(((String)null), isEmptyOrNullString())</pre>
58c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
59c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @deprecated use is(emptyOrNullString()) instead
60c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
61c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
62c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Deprecated
63c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public static Matcher<String> isEmptyOrNullString() {
64c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return emptyOrNullString();
65c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
66c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
67c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
68c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher of {@link String} that matches when the examined string is <code>null</code>, or
69c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * has zero length.
70c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
71c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat(((String)null), is(emptyOrNullString()))</pre>
72c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
73c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
74c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public static Matcher<String> emptyOrNullString() {
75c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return NULL_OR_EMPTY_INSTANCE;
76c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
77c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin}
78