package org.projectusus.matchers; import static org.hamcrest.CoreMatchers.is; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.hamcrest.Factory; import org.hamcrest.Matcher; public class IsSetOfMatcher<T> extends BaseMatcher<Set<? extends T>> { private Matcher<?> matcher; public IsSetOfMatcher( T... items ) { this( asSet( items ) ); } public IsSetOfMatcher( Set<? extends T> set ) { matcher = is( set ); } @SuppressWarnings( "unchecked" ) public boolean matches( Object object ) { return matchesSafely( (Set<? extends T>)object ); } protected boolean matchesSafely( Set<? extends T> set ) { return matcher.matches( set ); } public void describeTo( Description description ) { matcher.describeTo( description ); } @Factory public static <T> org.hamcrest.Matcher<Set<? extends T>> setOf( T... items ) { return new IsSetOfMatcher<T>( items ); } @Factory public static <T> org.hamcrest.Matcher<Set<? extends T>> emptySet() { return new IsSetOfMatcher<T>( Collections.<T> emptySet() ); } private static <T> Set<T> asSet( T... items ) { return new HashSet<T>( Arrays.asList( items ) ); } }