package net.bytebuddy.utility; import net.bytebuddy.test.utility.ObjectPropertyAssertion; import org.junit.Test; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.Arrays; import java.util.Iterator; import static org.mockito.Mockito.mock; public class JavaConstantMethodHandleDispatcherTest { @Test(expected = IllegalStateException.class) public void testLegacyVmInitialization() throws Exception { JavaConstant.MethodHandle.Dispatcher.ForLegacyVm.INSTANCE.initialize(); } @Test(expected = IllegalStateException.class) public void testLegacyVmPunlicLookup() throws Exception { JavaConstant.MethodHandle.Dispatcher.ForLegacyVm.INSTANCE.publicLookup(); } @Test(expected = IllegalStateException.class) public void testLegacyVmLookupType() throws Exception { JavaConstant.MethodHandle.Dispatcher.ForLegacyVm.INSTANCE.lookupType(mock(Object.class)); } @Test public void testObjectProperties() throws Exception { final Iterator<Method> methods1 = Arrays.asList(Foo.class.getDeclaredMethods()).iterator(); ObjectPropertyAssertion.of(JavaConstant.MethodHandle.Dispatcher.ForJava8CapableVm.class).create(new ObjectPropertyAssertion.Creator<Method>() { @Override public Method create() { return methods1.next(); } }).apply(); final Iterator<Method> methods2 = Arrays.asList(Foo.class.getDeclaredMethods()).iterator(); final Iterator<Constructor<?>> constructors2 = Arrays.<Constructor<?>>asList(Foo.class.getDeclaredConstructors()).iterator(); ObjectPropertyAssertion.of(JavaConstant.MethodHandle.Dispatcher.ForJava7CapableVm.class).create(new ObjectPropertyAssertion.Creator<Method>() { @Override public Method create() { return methods2.next(); } }).create(new ObjectPropertyAssertion.Creator<Constructor<?>>() { @Override public Constructor<?> create() { return constructors2.next(); } }).apply(); ObjectPropertyAssertion.of(JavaConstant.MethodHandle.Dispatcher.ForLegacyVm.class).apply(); } @SuppressWarnings("unused") private abstract class Foo { private Foo(Void v) { /* empty */ } private Foo(String s) { /* empty */ } abstract void a1(); abstract void a2(); abstract void a3(); abstract void a4(); abstract void a5(); abstract void a6(); abstract void a7(); abstract void a8(); abstract void a9(); abstract void a10(); abstract void a11(); abstract void a12(); abstract void a13(); abstract void a14(); abstract void a15(); abstract void a16(); abstract void a17(); abstract void a18(); abstract void a19(); abstract void a20(); abstract void a21(); abstract void a22(); abstract void a23(); } }