package proton.inject; import javax.inject.Inject; import javax.inject.Provider; import android.app.Application; import android.content.Context; import android.test.AndroidTestCase; import android.test.mock.MockApplication; public class ContextScopedInjectionTest extends AndroidTestCase { private Application mMockApplication; @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(ContextScopedClass.class); } }); } @Override protected void tearDown() throws Exception { Proton.destroy(); super.tearDown(); } public void testGetInstance() { Context context1 = new MockContext(mMockApplication); Client c = Proton.getInjector(context1).getInstance(Client.class); assertNotNull(c); assertEquals(c.contextScopedClass1, Proton.getInjector(context1).getInstance(ContextScopedClass.class)); assertNotSame(c.contextScopedClass1, Proton.getInjector(new MockContext(mMockApplication)).getInstance(ContextScopedClass.class)); } public void testInject() { Context context1 = new MockContext(mMockApplication); Client obj1 = Proton.getInjector(context1).inject(new Client()); assertNotNull(obj1.contextScopedClass1); assertEquals(obj1.contextScopedClass1, obj1.contextScopedClass2); assertNotNull(obj1.contextScopedClassProvider1); assertEquals(obj1.contextScopedClassProvider1, obj1.contextScopedClassProvider2); Client obj2 = Proton.getInjector(context1).inject(new Client()); assertEquals(obj1.contextScopedClass1, obj2.contextScopedClass2); assertEquals(obj1.contextScopedClassProvider1, obj2.contextScopedClassProvider2); Client obj3 = Proton.getInjector(new MockContext(mMockApplication)).inject(new Client()); assertNotSame(obj1.contextScopedClass1, obj3.contextScopedClass1); assertNotSame(obj1.contextScopedClassProvider1, obj3.contextScopedClassProvider1); } public static class Client { @Inject private ContextScopedClass contextScopedClass1; @Inject private ContextScopedClass contextScopedClass2; @Inject private Provider<ContextScopedClass> contextScopedClassProvider1; @Inject private Provider<ContextScopedClass> contextScopedClassProvider2; } public static class ContextScopedClass { } }