package proton.inject.listener; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import proton.inject.DefaultModule; import proton.inject.Injector; import proton.inject.MockContext; import proton.inject.Proton; import proton.inject.scope.ApplicationScoped; import android.app.Application; import android.test.AndroidTestCase; import android.test.mock.MockApplication; public class FieldListenerTest extends AndroidTestCase implements FieldListener { private Application mMockApplication; private Injector mInjector; @Override protected void setUp() throws Exception { super.setUp(); mMockApplication = new MockApplication(); Proton.initialize(mMockApplication, new DefaultModule() { @Override protected void configure() { super.configure(); bindFieldListener(TestAnnotation.class, FieldListenerTest.this); } }); mInjector = Proton.getInjector(new MockContext(mMockApplication)); } @Override protected void tearDown() throws Exception { Proton.destroy(); super.tearDown(); } public void testInject() throws Exception { Client c = mInjector.inject(new Client()); assertEquals(mInjector, mHandleInjector); assertEquals(c, mHandleReceiver); assertEquals(ApplicationScoped.class, mHandleScoep); Field field = c.getClass().getDeclaredField("aaa"); assertEquals(field, mHandleField); assertEquals(field.getAnnotation(TestAnnotation.class), mHandleAnnotation); } private Injector mHandleInjector; private Object mHandleReceiver; private Object mHandleScoep; private Field mHandleField; private Annotation mHandleAnnotation; @Override public void hear(Injector injector, Object receiver, Class<? extends Annotation> scope, Field field, Annotation ann) { mHandleInjector = injector; mHandleReceiver = receiver; mHandleScoep = scope; mHandleField = field; mHandleAnnotation = ann; } @ApplicationScoped public static class Client { @SuppressWarnings("unused") @TestAnnotation private int aaa; } }