1c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinpackage org.hamcrest.collection;
2c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
3c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport org.hamcrest.Description;
4c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport org.hamcrest.Matcher;
5c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport org.hamcrest.TypeSafeMatcher;
6c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
7c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport java.util.Collection;
8c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
9c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin/**
10c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * Tests if collection is empty.
11c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin */
12c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinpublic class IsEmptyCollection<E> extends TypeSafeMatcher<Collection<? extends E>> {
13c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
14c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Override
15c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public boolean matchesSafely(Collection<? extends E> item) {
16c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return item.isEmpty();
17c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
18c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
19c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Override
20c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void describeMismatchSafely(Collection<? extends E> item, Description mismatchDescription) {
21c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin      mismatchDescription.appendValue(item);
22c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
23c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
24c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Override
25c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void describeTo(Description description) {
26c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        description.appendText("an empty collection");
27c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
28c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
29c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
30c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher for {@link java.util.Collection}s matching examined collections whose <code>isEmpty</code>
31c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * method returns <code>true</code>.
32c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
33c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat(new ArrayList&lt;String&gt;(), is(empty()))</pre>
34c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
35c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
36c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public static <E> Matcher<Collection<? extends E>> empty() {
37c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return new IsEmptyCollection<E>();
38c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
39c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
40c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
41c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher for {@link java.util.Collection}s matching examined collections whose <code>isEmpty</code>
42c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * method returns <code>true</code>.
43c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
44c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat(new ArrayList&lt;String&gt;(), is(emptyCollectionOf(String.class)))</pre>
45c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
46c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @param unusedToForceReturnType
47c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *     the type of the collection's content
48c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
49c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @SuppressWarnings({"unchecked", "UnusedParameters"})
50c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public static <E> Matcher<Collection<E>> emptyCollectionOf(Class<E> unusedToForceReturnType) {
51c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin      return (Matcher)empty();
52c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
53c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin}
54