package org.powermock.reflect.internal.proxy; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.InvocationHandler; import org.junit.Before; import org.junit.Test; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import static org.assertj.core.api.Assertions.assertThat; /** * */ public class ProxyFrameworksTest { private ProxyFrameworks proxyFrameworks; @Before public void setUp() throws Exception { proxyFrameworks = new ProxyFrameworks(); } @Test public void should_throw_illegal_argument_exception_if_class_is_null() throws Exception { assertThat(proxyFrameworks.getUnproxiedType(null)).isNull(); } @Test(expected = IllegalArgumentException.class) public void should_return_null_if_object_is_null() throws Exception { assertThat(proxyFrameworks.getUnproxiedType((Object) null)).isNull(); } @Test public void should_return_original_class_if_object_not_proxy() throws Exception { SomeClass someClass = new SomeClass(); assertThat(proxyFrameworks.getUnproxiedType(someClass)).isEqualTo(SomeClass.class); } @Test public void should_return_original_class_if_proxy_created_with_java() { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); SomeInterface someInterface = (SomeInterface) Proxy.newProxyInstance(classLoader, new Class[]{SomeInterface.class}, new java.lang.reflect.InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { return method.invoke(proxy, args); } }); assertThat(proxyFrameworks.getUnproxiedType(someInterface)).isEqualTo(SomeInterface.class); } @Test public void should_return_original_class_if_proxy_created_with_cglib() { SomeClass someClass = (SomeClass) Enhancer.create(SomeClass.class, new InvocationHandler() { @Override public Object invoke(Object o, Method method, Object[] objects) throws Throwable { return method.invoke(o, objects); } }); assertThat(proxyFrameworks.getUnproxiedType(someClass)).isEqualTo(SomeClass.class); } }