package proton.inject; import javax.inject.Inject; import javax.inject.Provider; import proton.inject.scope.ApplicationScoped; import android.app.Application; import android.content.Context; import android.test.AndroidTestCase; import android.test.mock.MockApplication; public class ApplicationScopedInjectionTest 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(ApplicationScopedClass.class).in(ApplicationScoped.class); bind(IllegalApplicationScopedClass.class).in(ApplicationScoped.class); bind(ContextScopedClass.class); } }); } @Override protected void tearDown() throws Exception { Proton.destroy(); super.tearDown(); } public void testGetInstanceWithApplicationScoped() { Context context1 = new MockContext(mMockApplication); Client c = Proton.getInjector(context1).getInstance(Client.class); assertNotNull(c.applicationScopedClass); assertEquals(c.applicationScopedClass, Proton.getInjector(context1).getInstance(ApplicationScopedClass.class)); assertEquals(c.applicationScopedClass, Proton.getInjector(new MockContext(mMockApplication)).getInstance(ApplicationScopedClass.class)); } public void testInjectWithApplicationScoped() { Client obj1 = Proton.getInjector(new MockContext(mMockApplication)).inject(new Client()); Client obj2 = Proton.getInjector(new MockContext(mMockApplication)).inject(new Client()); assertEquals(obj1.applicationScopedClass, obj2.applicationScopedClass); assertEquals(obj1.applicationScopedClass, obj2.applicationScopedClassProvider.get()); } public void testGetInstanceWithIllegalApplicationScoped() { try { Context context = new MockContext(mMockApplication); Proton.getInjector(context).getInstance(IllegalApplicationScopedClass.class); fail(); } catch (ProvisionException exp) { } } public static class Client { @Inject private ApplicationScopedClass applicationScopedClass; @Inject private Provider<ApplicationScopedClass> applicationScopedClassProvider; } public static class ApplicationScopedClass { } public static class ContextScopedClass { } public static class IllegalApplicationScopedClass { @SuppressWarnings("unused") @Inject private ContextScopedClass contextScopedClass; } }