package org.jboss.resteasy.test.util; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jboss.resteasy.test.util.resource.TypesGenericBar; import org.jboss.resteasy.test.util.resource.TypesGenericFooBar; import org.jboss.resteasy.test.util.resource.TypesGenericSubClass; import org.jboss.resteasy.test.util.resource.TypesGenericSub; import org.jboss.resteasy.test.util.resource.TypesGenericAnotherFooBar; import org.jboss.resteasy.test.util.resource.TypesGenericAnotherBar; import org.jboss.resteasy.test.util.resource.TypesGenericClassFooBar; import org.jboss.resteasy.test.util.resource.TypesGenericClassBar; import org.jboss.resteasy.test.util.resource.TypesGenericClassSub; import org.jboss.resteasy.util.Types; import org.junit.Assert; import org.junit.Test; import java.lang.reflect.Method; import java.lang.reflect.Type; /** * @tpSubChapter Util tests * @tpChapter Unit tests * @tpTestCaseDetails Test for Types class for generic types. * @tpSince RESTEasy 3.0.16 */ public class TypesGenericTest { protected final Logger logger = LogManager.getLogger(TypesGenericTest.class.getName()); /** * @tpTestDetails Check findParameterizedTypes method of Types class for corrected parametrized type. * @tpSince RESTEasy 3.0.16 */ @Test public void testInterfaceGenericTypeDiscovery() throws Exception { Type[] types = Types.findParameterizedTypes(TypesGenericFooBar.class, TypesGenericBar.class); for (Type t : types) { logger.debug(t); } Assert.assertEquals("Expected type for the class doesn't match", types[0], Float.class); types = Types.findParameterizedTypes(TypesGenericSubClass.class, TypesGenericBar.class); for (Type t : types) { logger.debug(t); } Assert.assertEquals("Expected type for the class doesn't match", types[0], Float.class); types = Types.findParameterizedTypes(TypesGenericSub.class, TypesGenericBar.class); for (Type t : types) { logger.debug(t); } Assert.assertEquals("Expected type for the class doesn't match", types[0], Float.class); types = Types.findParameterizedTypes(TypesGenericAnotherFooBar.class, TypesGenericAnotherBar.class); Assert.assertEquals("No parametrized type expected", 0, types.length); } /** * @tpTestDetails Check getImplementingMethod method of Types class for implemented methods. * @tpSince RESTEasy 3.0.16 */ @Test public void testFindImplementedMethod() throws Exception { Class bar = TypesGenericFooBar.class.getInterfaces()[0].getInterfaces()[0]; Method barMethod = null; for (Method m : bar.getMethods()) { if (!m.isSynthetic() && m.getName().equals("bar")) { barMethod = m; } } Method implented = Types.getImplementingMethod(TypesGenericFooBar.class, barMethod); Method actual = null; for (Method m : TypesGenericFooBar.class.getMethods()) { if (!m.isSynthetic() && m.getName().equals("bar")) { if (m.getParameterTypes()[0].equals(Float.class)) { actual = m; } } } Assert.assertEquals("The method implemented by the class an returned by getImplementingMethod() is not the expected one", implented, actual); } /** * @tpTestDetails Check findParameterizedTypes method of Types class for generic type discovery. * @tpSince RESTEasy 3.0.16 */ @Test public void testClassGenericTypeDiscovery() throws Exception { Type[] types = Types.findParameterizedTypes(TypesGenericClassFooBar.class, TypesGenericClassBar.class); for (Type t : types) { logger.debug(t); } Assert.assertEquals("Expected type for the class doesn't match", types[0], Float.class); types = Types.findParameterizedTypes(TypesGenericClassSub.class, TypesGenericClassBar.class); for (Type t : types) { logger.debug(t); } Assert.assertEquals("Expected type for the class doesn't match", types[0], Float.class); } }