package net.bytebuddy.matcher; import net.bytebuddy.description.method.MethodList; import net.bytebuddy.description.type.TypeDefinition; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeList; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import java.util.Arrays; import java.util.Collections; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.*; public class HasSuperTypeMatcherTest extends AbstractElementMatcherTest<HasSuperTypeMatcher<?>> { @Mock private ElementMatcher<? super TypeDescription.Generic> typeMatcher; @Mock private TypeDescription typeDescription; @Mock private TypeDescription.Generic superType, interfaceType, implicitInterfaceType; @Before public void setUp() throws Exception { when(superType.asGenericType()).thenReturn(superType); when(interfaceType.asGenericType()).thenReturn(interfaceType); when(interfaceType.asErasure()).thenReturn(mock(TypeDescription.class)); when(implicitInterfaceType.asGenericType()).thenReturn(implicitInterfaceType); when(implicitInterfaceType.asErasure()).thenReturn(mock(TypeDescription.class)); when(typeDescription.iterator()).thenReturn(Collections.<TypeDefinition>singletonList(superType).iterator()); when(superType.getInterfaces()).thenReturn(new TypeList.Generic.Explicit(interfaceType)); when(interfaceType.getInterfaces()).thenReturn(new TypeList.Generic.Explicit(implicitInterfaceType)); when(implicitInterfaceType.getInterfaces()).thenReturn(new TypeList.Generic.Empty()); } @SuppressWarnings("unchecked") public HasSuperTypeMatcherTest() { super((Class<HasSuperTypeMatcher<?>>) (Object) HasSuperTypeMatcher.class, "hasSuperType"); } @Test public void testMatchSuperClass() throws Exception { when(typeMatcher.matches(superType)).thenReturn(true); assertThat(new HasSuperTypeMatcher<TypeDescription>(typeMatcher).matches(typeDescription), is(true)); } @Test public void testMatchSuperInterface() throws Exception { when(typeMatcher.matches(interfaceType)).thenReturn(true); assertThat(new HasSuperTypeMatcher<TypeDescription>(typeMatcher).matches(typeDescription), is(true)); } @Test public void testMatchSuperInterfaceImplicit() throws Exception { when(typeMatcher.matches(implicitInterfaceType)).thenReturn(true); assertThat(new HasSuperTypeMatcher<TypeDescription>(typeMatcher).matches(typeDescription), is(true)); } @Test public void testNoMatch() throws Exception { assertThat(new HasSuperTypeMatcher<TypeDescription>(typeMatcher).matches(typeDescription), is(false)); } }