package org.hamcrest.collection; import java.util.HashMap; import java.util.Map; import org.hamcrest.AbstractMatcherTest; import org.hamcrest.Matcher; import org.hamcrest.MatcherAssert; import static org.hamcrest.collection.IsMapWithSize.aMapWithSize; import static org.hamcrest.core.IsEqual.equalTo; public final class IsMapWithSizeTest extends AbstractMatcherTest { @Override protected Matcher<?> createMatcher() { return aMapWithSize(7); } public void testMatchesWhenSizeIsCorrect() { assertMatches("correct size", aMapWithSize(equalTo(2)), mapWithKeys("a", "b")); assertMismatchDescription("map size was <3>", aMapWithSize(equalTo(2)), mapWithKeys("a", "b", "c")); } public void testMatchesMapWhenSizeIsCorrectUsingObjectElementType() { Map<Object, Object> map = mapWithKeys(new Object(), new Object()); assertMatches("correct size", aMapWithSize(equalTo(2)), map); assertMismatchDescription("map size was <2>", aMapWithSize(equalTo(3)), map); } public void testMatchesMapWhenSizeIsCorrectUsingStringElementType() { Map<String, Integer> map = mapWithKeys("a", "b"); assertMatches("correct size", aMapWithSize(equalTo(2)), map); assertMismatchDescription("map size was <2>", aMapWithSize(equalTo(3)), map); } public void testMatchesMapWhenSizeIsCorrectUsingWildcardElementType() { Map<?, ?> map = mapWithKeys("a", "b"); assertMatches("correct size", aMapWithSize(equalTo(2)), map); assertMismatchDescription("map size was <2>", aMapWithSize(equalTo(3)), map); } public void testMatchesListWhenSizeIsCorrectUsingObjectElementType() { Map<Object, Object> map = mapWithKeys(new Object(), new Object()); assertMatches("correct size", aMapWithSize(equalTo(2)), map); assertMismatchDescription("map size was <2>", aMapWithSize(equalTo(3)), map); } public void testMatchesListWhenSizeIsCorrectUsingStringElementType() { Map<String, Integer> list = mapWithKeys("a", "b"); assertMatches("correct size", aMapWithSize(equalTo(2)), list); assertMismatchDescription("map size was <2>", aMapWithSize(equalTo(3)), list); } public void testMatchesListWhenSizeIsCorrectUsingWildcardElementType() { Map<?, ?> list = mapWithKeys("a", "b"); assertMatches("correct size", aMapWithSize(equalTo(2)), list); assertMismatchDescription("map size was <2>", aMapWithSize(equalTo(3)), list); } public void testProvidesConvenientShortcutForHasSizeEqualTo() { assertMatches("correct size", aMapWithSize(2), mapWithKeys(new Object(), new Object())); assertMismatchDescription("map size was <3>", aMapWithSize(2), mapWithKeys(new Object(), new Object(), new Object())); } public void testHasAReadableDescription() { assertDescription("a map with size <3>", aMapWithSize(equalTo(3))); } public void testCompilesWithATypedMap() { Map<String, Integer> arrayList = new HashMap<String, Integer>(); MatcherAssert.assertThat(arrayList, aMapWithSize(0)); } private static final <K, V> Map<K, V> mapWithKeys(K... keys) { final Map<K, V> result = new HashMap<K, V>(); for (K key : keys) { result.put(key, null); } return result; } }