package proton.inject; import javax.inject.Inject; import javax.inject.Provider; import android.app.Application; import android.test.mock.MockApplication; import junit.framework.TestCase; public class ConstructorInjectionTest extends TestCase { 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(Client.class); bind(Aaa.class).to(AaaImp.class); bind(Bbb.class).to(BbbImp.class); bind(Ccc.class).to(CccImp.class); } }); mInjector = Proton.getInjector(new MockContext(mMockApplication)); } @Override protected void tearDown() throws Exception { Proton.destroy(); super.tearDown(); } public void testGetInstance() { Client obj = mInjector.getInstance(Client.class); assertNotNull(obj.aaa1); assertEquals(obj.aaa1, obj.aaa2); assertNotNull(((BbbImp) obj.bbb).ccc); assertNotNull(obj.aaaProvider1); assertEquals(obj.aaa1, obj.aaaProvider1.get()); assertEquals(obj.aaaProvider1, obj.aaaProvider2); } public static class Client { private Aaa aaa1; private Aaa aaa2; private Bbb bbb; private Provider<Aaa> aaaProvider1; private Provider<Aaa> aaaProvider2; @Inject public Client(Aaa aaa1, Aaa aaa2, Bbb bbb, Provider<Aaa> provider1, Provider<Aaa> provider2) { this.aaa1 = aaa1; this.aaa2 = aaa2; this.bbb = bbb; this.aaaProvider1 = provider1; this.aaaProvider2 = provider2; } } public interface Aaa { } public static class AaaImp implements Aaa { } public interface Bbb { } public static class BbbImp implements Bbb { private Ccc ccc; @Inject public BbbImp(Ccc ccc) { this.ccc = ccc; } } public interface Ccc { } public static class CccImp implements Ccc { } }