package net.bytebuddy.pool;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.description.method.MethodList;
import net.bytebuddy.description.type.TypeDescription;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class TypePoolDefaultLazyTypeContainmentTest {
private static final String FOO = "baz.foo", FOO_INTERNAL = "baz/foo", BAR = "bar", QUX = "qux";
@Test
public void testSelfDeclared() throws Exception {
assertThat(TypePool.Default.LazyTypeDescription.TypeContainment.SelfContained.INSTANCE
.isLocalType(), is(false));
assertThat(TypePool.Default.LazyTypeDescription.TypeContainment.SelfContained.INSTANCE
.isMemberClass(), is(false));
assertThat(TypePool.Default.LazyTypeDescription.TypeContainment.SelfContained.INSTANCE
.isSelfContained(), is(true));
}
@Test
public void testSelfDeclaredGetTypeIsNull() throws Exception {
assertThat(TypePool.Default.LazyTypeDescription.TypeContainment.SelfContained.INSTANCE
.getEnclosingType(mock(TypePool.class)), nullValue(TypeDescription.class));
}
@Test
public void testSelfDeclaredGetMethodIsNull() throws Exception {
assertThat(TypePool.Default.LazyTypeDescription.TypeContainment.SelfContained.INSTANCE
.getEnclosingMethod(mock(TypePool.class)), nullValue(MethodDescription.class));
}
@Test
public void testDeclaredInType() throws Exception {
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinType(FOO_INTERNAL, false)
.isLocalType(), is(false));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinType(FOO_INTERNAL, false)
.isMemberClass(), is(true));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinType(FOO_INTERNAL, false)
.isSelfContained(), is(false));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinType(FOO_INTERNAL, true)
.isLocalType(), is(true));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinType(FOO_INTERNAL, true)
.isMemberClass(), is(false));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinType(FOO_INTERNAL, true)
.isSelfContained(), is(false));
}
@Test
public void testDeclaredInTypeGetTypeIsNotNull() throws Exception {
TypePool typePool = mock(TypePool.class);
TypeDescription typeDescription = mock(TypeDescription.class);
when(typePool.describe(FOO)).thenReturn(new TypePool.Resolution.Simple(typeDescription));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinType(FOO_INTERNAL, false).getEnclosingType(typePool), is(typeDescription));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinType(FOO_INTERNAL, true).getEnclosingType(typePool), is(typeDescription));
}
@Test
public void testDeclaredInTypeGetMethodIsNull() throws Exception {
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinType(FOO_INTERNAL, false)
.getEnclosingMethod(mock(TypePool.class)), nullValue(MethodDescription.class));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinType(FOO_INTERNAL, false)
.getEnclosingMethod(mock(TypePool.class)), nullValue(MethodDescription.class));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinType(FOO_INTERNAL, true)
.getEnclosingMethod(mock(TypePool.class)), nullValue(MethodDescription.class));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinType(FOO_INTERNAL, true)
.getEnclosingMethod(mock(TypePool.class)), nullValue(MethodDescription.class));
}
@Test
public void testDeclaredInMethod() throws Exception {
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinMethod(FOO_INTERNAL, BAR, QUX)
.isLocalType(), is(true));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinMethod(FOO_INTERNAL, BAR, QUX)
.isMemberClass(), is(false));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinMethod(FOO_INTERNAL, BAR, QUX)
.isSelfContained(), is(false));
}
@Test
public void testDeclaredInMethodGetTypeIsNotNull() throws Exception {
TypeDescription typeDescription = mock(TypeDescription.class);
TypePool typePool = mock(TypePool.class);
when(typePool.describe(FOO)).thenReturn(new TypePool.Resolution.Simple(typeDescription));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinMethod(FOO_INTERNAL, BAR, QUX)
.getEnclosingType(typePool), is(typeDescription));
}
@Test
@SuppressWarnings("unchecked")
public void testDeclaredInMethodGetMethodIsNull() throws Exception {
MethodDescription methodDescription = mock(MethodDescription.class);
when(methodDescription.getActualName()).thenReturn(BAR);
when(methodDescription.getDescriptor()).thenReturn(QUX);
TypeDescription typeDescription = mock(TypeDescription.class);
TypePool typePool = mock(TypePool.class);
when(typePool.describe(FOO)).thenReturn(new TypePool.Resolution.Simple(typeDescription));
when(typeDescription.getDeclaredMethods()).thenReturn((MethodList) new MethodList.Explicit<MethodDescription>(methodDescription));
assertThat(new TypePool.Default.LazyTypeDescription.TypeContainment.WithinMethod(FOO_INTERNAL, BAR, QUX).getEnclosingMethod(typePool),
is(methodDescription));
}
}