package proton.inject; import javax.inject.Inject; import javax.inject.Provider; import proton.inject.scope.ApplicationScoped; import android.app.Application; import android.test.AndroidTestCase; import android.test.mock.MockApplication; public class ProviderInjectionTest extends AndroidTestCase { 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(); bind(Aaa.class).toProvider(new AaaProvider()); bind(Bbb.class).in(ApplicationScoped.class); } }); mInjector = Proton.getInjector(new MockContext(mMockApplication)); } @Override protected void tearDown() throws Exception { Proton.destroy(); super.tearDown(); } public void testGetInstance() { Aaa a = mInjector.getInstance(Aaa.class); assertNotNull(a); assertEquals(a, Proton.getInjector(new MockContext(mMockApplication)).getInstance(Aaa.class)); } public void testGetProvider() { Provider<Aaa> p = mInjector.getProvider(Aaa.class); assertNotNull(p); assertEquals(p, Proton.getInjector(new MockContext(mMockApplication)).getProvider(Aaa.class)); } public void testInject() { Client c1 = mInjector.inject(new Client()); assertNotNull(c1.aaaProvider1); assertEquals(c1.aaaProvider1, c1.aaaProvider2); assertNotNull(((AaaProvider) c1.aaaProvider1).bbb); } public static class Client { @Inject private Provider<Aaa> aaaProvider1; @Inject private Provider<Aaa> aaaProvider2; } public static class Aaa { } public static class Bbb { } public static class AaaProvider implements Provider<Aaa> { private Aaa mAaa; @Inject private Bbb bbb; @Override public Aaa get() { if (mAaa == null) mAaa = new Aaa(); return mAaa; } } }