package org.simpleflatmapper.reflect.test.asm; import org.junit.Test; import org.simpleflatmapper.reflect.asm.AsmInstantiatorDefinitionFactory; import org.simpleflatmapper.reflect.instantiator.ExecutableInstantiatorDefinition; import org.simpleflatmapper.reflect.InstantiatorDefinition; import org.simpleflatmapper.tuple.Tuple2; import org.simpleflatmapper.tuple.Tuples; import org.simpleflatmapper.test.beans.DbFinalObject; import org.simpleflatmapper.test.beans.DbObject; import org.simpleflatmapper.test.beans.DbObject.Type; import java.io.IOException; import java.util.Date; import java.util.List; import static org.junit.Assert.assertEquals; public class AsmInstantiatorDefinitionFactoryTest { @Test public void testExtractConstructorsDbObject() throws IOException, NoSuchMethodException, SecurityException { List<InstantiatorDefinition> dbObjectConstructors = AsmInstantiatorDefinitionFactory.extractDefinitions(DbObject.class); assertEquals(3, dbObjectConstructors.size()); assertEquals(0, dbObjectConstructors.get(0).getParameters().length); assertEquals(DbObject.class.getConstructor(), ((ExecutableInstantiatorDefinition)dbObjectConstructors.get(0)).getExecutable()); } @Test public void testExtractConstructorsFinalDbObject() throws IOException, NoSuchMethodException, SecurityException { List<InstantiatorDefinition> finalDbObjectConstructors = AsmInstantiatorDefinitionFactory.extractDefinitions(DbFinalObject.class); assertEquals(2, finalDbObjectConstructors.size()); assertEquals(6, finalDbObjectConstructors.get(0).getParameters().length); assertEquals(long.class, finalDbObjectConstructors.get(0).getParameters()[0].getType()); assertEquals(String.class, finalDbObjectConstructors.get(0).getParameters()[1].getType()); assertEquals(String.class, finalDbObjectConstructors.get(0).getParameters()[2].getType()); assertEquals(Date.class, finalDbObjectConstructors.get(0).getParameters()[3].getType()); assertEquals(Type.class, finalDbObjectConstructors.get(0).getParameters()[4].getType()); assertEquals(Type.class, finalDbObjectConstructors.get(0).getParameters()[5].getType()); assertEquals("id", finalDbObjectConstructors.get(0).getParameters()[0].getName()); assertEquals("name", finalDbObjectConstructors.get(0).getParameters()[1].getName()); assertEquals("email", finalDbObjectConstructors.get(0).getParameters()[2].getName()); assertEquals("creationTime", finalDbObjectConstructors.get(0).getParameters()[3].getName()); assertEquals("typeOrdinal", finalDbObjectConstructors.get(0).getParameters()[4].getName()); assertEquals("typeName", finalDbObjectConstructors.get(0).getParameters()[5].getName()); assertEquals(DbFinalObject.class.getConstructor(long.class, String.class, String.class, Date.class, Type.class, Type.class), ((ExecutableInstantiatorDefinition)finalDbObjectConstructors.get(0)).getExecutable()); } @Test public void testExtractConstructorsTuple2() throws IOException, NoSuchMethodException, SecurityException { List<InstantiatorDefinition> finalDbObjectConstructors = AsmInstantiatorDefinitionFactory.extractDefinitions(Tuples.typeDef(String.class, DbObject.class)); assertEquals(1, finalDbObjectConstructors.size()); assertEquals(2, finalDbObjectConstructors.get(0).getParameters().length); assertEquals(Object.class, finalDbObjectConstructors.get(0).getParameters()[0].getType()); assertEquals(Object.class, finalDbObjectConstructors.get(0).getParameters()[1].getType()); assertEquals(String.class, finalDbObjectConstructors.get(0).getParameters()[0].getGenericType()); assertEquals(DbObject.class, finalDbObjectConstructors.get(0).getParameters()[1].getGenericType()); assertEquals("element0", finalDbObjectConstructors.get(0).getParameters()[0].getName()); assertEquals("element1", finalDbObjectConstructors.get(0).getParameters()[1].getName()); assertEquals(Tuple2.class.getConstructor(Object.class, Object.class), ((ExecutableInstantiatorDefinition)finalDbObjectConstructors.get(0)).getExecutable()); } }