1c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinpackage org.hamcrest.collection;
2c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
3c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport org.hamcrest.AbstractMatcherTest;
4c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport org.hamcrest.Matcher;
5c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport org.hamcrest.MatcherAssert;
6c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
7c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport java.util.ArrayList;
8c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport java.util.Collection;
9c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport java.util.List;
10c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
11c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport static java.util.Arrays.asList;
12c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport static org.hamcrest.collection.IsCollectionWithSize.hasSize;
13c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport static org.hamcrest.core.IsEqual.equalTo;
14c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
15c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinpublic class IsCollectionWithSizeTest extends AbstractMatcherTest {
16c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
17c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Override
18c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    protected Matcher<?> createMatcher() {
19c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return hasSize(7);
20c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
21c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
22c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void testMatchesWhenSizeIsCorrect() {
23c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMatches("correct size", hasSize(equalTo(2)), asList(null, null));
24c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMismatchDescription("collection size was <3>", hasSize(equalTo(2)), asList(null, null, null));
25c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
26c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
27c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void testMatchesCollectionWhenSizeIsCorrectUsingObjectElementType() {
28c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        Collection<Object> list = asList(null, null);
29c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMatches("correct size", hasSize(equalTo(2)), list);
30c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMismatchDescription("collection size was <2>", hasSize(equalTo(3)), list);
31c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
32c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
33c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void testMatchesCollectionWhenSizeIsCorrectUsingStringElementType() {
34c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        Collection<String> list = asList("a", "b");
35c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMatches("correct size", hasSize(equalTo(2)), list);
36c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMismatchDescription("collection size was <2>", hasSize(equalTo(3)), list);
37c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
38c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
39c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void testMatchesCollectionWhenSizeIsCorrectUsingWildcardElementType() {
40c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        Collection<?> list = asList("a", "b");
41c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMatches("correct size", hasSize(equalTo(2)), list);
42c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMismatchDescription("collection size was <2>", hasSize(equalTo(3)), list);
43c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
44c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
45c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void testMatchesListWhenSizeIsCorrectUsingObjectElementType() {
46c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        List<Object> list = asList(null, null);
47c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMatches("correct size", hasSize(equalTo(2)), list);
48c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMismatchDescription("collection size was <2>", hasSize(equalTo(3)), list);
49c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
50c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
51c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void testMatchesListWhenSizeIsCorrectUsingStringElementType() {
52c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        List<String> list = asList("a", "b");
53c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMatches("correct size", hasSize(equalTo(2)), list);
54c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMismatchDescription("collection size was <2>", hasSize(equalTo(3)), list);
55c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
56c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
57c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void testMatchesListWhenSizeIsCorrectUsingWildcardElementType() {
58c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        List<?> list = asList("a", "b");
59c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMatches("correct size", hasSize(equalTo(2)), list);
60c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMismatchDescription("collection size was <2>", hasSize(equalTo(3)), list);
61c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
62c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
63c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void testProvidesConvenientShortcutForHasSizeEqualTo() {
64c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMatches("correct size", hasSize(2), asList(null, null));
65c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertMismatchDescription("collection size was <3>", hasSize(2), asList(null, null, null));
66c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
67c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
68c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void testHasAReadableDescription() {
69c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        assertDescription("a collection with size <3>", hasSize(equalTo(3)));
70c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
71c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
72c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public void testCompilesWithATypedCollection() {
73c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin      // To prove Issue 43
74c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin      ArrayList<String> arrayList = new ArrayList<String>();
75c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin      MatcherAssert.assertThat(arrayList, hasSize(0));
76c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
77c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin}
78