1c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinpackage org.hamcrest.collection; 2c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin 3c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport org.hamcrest.FeatureMatcher; 4c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport org.hamcrest.Matcher; 5c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin 6c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport static org.hamcrest.core.DescribedAs.describedAs; 7c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport static org.hamcrest.core.IsEqual.equalTo; 8c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin 9c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin/** 10c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * Matches if array size satisfies a nested matcher. 11c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin */ 12c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinpublic class IsArrayWithSize<E> extends FeatureMatcher<E[], Integer> { 13c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin public IsArrayWithSize(Matcher<? super Integer> sizeMatcher) { 14c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin super(sizeMatcher, "an array with size","array size"); 15c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin } 16c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin 17c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin @Override 18c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin protected Integer featureValueOf(E[] actual) { 19c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin return actual.length; 20c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin } 21c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin 22c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin /** 23c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * Creates a matcher for arrays that matches when the <code>length</code> of the array 24c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * satisfies the specified matcher. 25c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * For example: 26c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * <pre>assertThat(new String[]{"foo", "bar"}, arrayWithSize(equalTo(2)))</pre> 27c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * 28c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * @param sizeMatcher 29c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * a matcher for the length of an examined array 30c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin */ 31c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin public static <E> Matcher<E[]> arrayWithSize(Matcher<? super Integer> sizeMatcher) { 32c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin return new IsArrayWithSize<E>(sizeMatcher); 33c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin } 34c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin 35c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin /** 36c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * Creates a matcher for arrays that matches when the <code>length</code> of the array 37c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * equals the specified <code>size</code>. 38c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * For example: 39c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * <pre>assertThat(new String[]{"foo", "bar"}, arrayWithSize(2))</pre> 40c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * 41c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * @param size 42c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * the length that an examined array must have for a positive match 43c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin */ 44c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin public static <E> Matcher<E[]> arrayWithSize(int size) { 45c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin return arrayWithSize(equalTo(size)); 46c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin } 47c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin 48c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin /** 49c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * Creates a matcher for arrays that matches when the <code>length</code> of the array 50c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * is zero. 51c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * For example: 52c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * <pre>assertThat(new String[0], emptyArray())</pre> 53c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * 54c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin */ 55c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin public static <E> Matcher<E[]> emptyArray() { 56c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin Matcher<E[]> isEmpty = arrayWithSize(0); 57c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin return describedAs("an empty array", isEmpty); 58c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin } 59c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin} 60