/** * Copyright 2011-2015 John Ericksen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.androidtransfuse.module; import org.androidtransfuse.adapter.ASTMethod; import org.androidtransfuse.adapter.ASTParameter; import org.androidtransfuse.adapter.ASTType; import org.androidtransfuse.adapter.classes.ASTClassFactory; import org.androidtransfuse.analysis.AnalysisContext; import org.androidtransfuse.analysis.InjectionPointFactory; import org.androidtransfuse.analysis.SimpleAnalysisContextFactory; import org.androidtransfuse.analysis.targets.MockAnalysisClass; import org.androidtransfuse.bootstrap.Bootstrap; import org.androidtransfuse.bootstrap.Bootstraps; import org.androidtransfuse.model.ConstructorInjectionPoint; import org.androidtransfuse.model.FieldInjectionPoint; import org.androidtransfuse.model.InjectionNode; import org.androidtransfuse.model.MethodInjectionPoint; import org.androidtransfuse.util.TransfuseInjectionException; import org.junit.Before; import org.junit.Test; import javax.inject.Inject; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.TypeVariable; import java.util.List; import static org.junit.Assert.assertEquals; /** * @author John Ericksen */ @Bootstrap public class InjectionPointFactoryTest { private AnalysisContext emptyContext; @Inject private ASTClassFactory astClassFactory; @Inject private SimpleAnalysisContextFactory contextFactory; @Inject private InjectionPointFactory injectionPointFactory; @Before public void setUp() { Bootstraps.inject(this); emptyContext = contextFactory.buildContext(); } @Test public void testConstructorInjectionPointBuild() { Constructor<?>[] constructors = MockAnalysisClass.class.getConstructors(); Constructor constructor = constructors[0]; ConstructorInjectionPoint constructorInjectionPoint = injectionPointFactory.buildInjectionPoint(astClassFactory.getType(MockAnalysisClass.class), astClassFactory.getConstructor(constructor, false, false), emptyContext); TypeVariable[] typeParameters = constructor.getTypeParameters(); List<InjectionNode> injectionNodes = constructorInjectionPoint.getInjectionNodes(); for (int i = 0; i < typeParameters.length; i++) { InjectionNode injectionNode = injectionNodes.get(i); TypeVariable typeParameter = typeParameters[i]; assertEquals(typeParameter.getName(), injectionNode.getClassName()); } assertEquals(1, constructorInjectionPoint.getThrowsTypes().size()); assertEquals(astClassFactory.getType(TransfuseInjectionException.class), constructorInjectionPoint.getThrowsTypes().get(0)); } @Test public void testMethodInjectionPointBuild() { Method[] methods = MockAnalysisClass.class.getDeclaredMethods(); Method method = methods[0]; List<ASTParameter> astParameters = astClassFactory.getParameters(method); ASTType containingType = astClassFactory.getType(MockAnalysisClass.class); ASTMethod astMethod = astClassFactory.getMethod(method); MethodInjectionPoint methodInjectionPoint = injectionPointFactory.buildInjectionPoint(containingType, containingType, astMethod, emptyContext); List<InjectionNode> injectionNodes = methodInjectionPoint.getInjectionNodes(); for (int i = 0; i < astParameters.size(); i++) { InjectionNode injectionNode = injectionNodes.get(i); ASTParameter typeParameter = astParameters.get(i); assertEquals(typeParameter.getASTType().getName(), injectionNode.getClassName()); } assertEquals(1, methodInjectionPoint.getThrowsTypes().size()); assertEquals(astClassFactory.getType(TransfuseInjectionException.class), methodInjectionPoint.getThrowsTypes().get(0)); } @Test public void testParameterInjectionPointBuild() { Field[] fields = MockAnalysisClass.class.getDeclaredFields(); Field field = fields[0]; ASTType containingType = astClassFactory.getType(MockAnalysisClass.class); FieldInjectionPoint fieldInjectionPoint = injectionPointFactory.buildInjectionPoint(containingType, containingType, astClassFactory.getField(field), emptyContext); InjectionNode injectionNode = fieldInjectionPoint.getInjectionNode(); assertEquals(field.getType().getName(), injectionNode.getClassName()); } }