package proton.inject; import javax.inject.Inject; import proton.inject.scope.ApplicationScoped; import proton.inject.scope.ContextScoped; import proton.inject.scope.Dependent; import android.app.Application; import android.test.AndroidTestCase; import android.test.mock.MockApplication; public class ScopedAnnotationInjectionTest 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(ApplicationScopedClass.class).to(ApplicationScopedClassImpl.class); bind(ContextScopedClass.class).to(ContextScopedClassImpl.class); bind(DependentScopedClass.class).to(DependentScopedClassImpl.class); } }); mInjector = Proton.getInjector(new MockContext(mMockApplication)); } @Override protected void tearDown() throws Exception { Proton.destroy(); super.tearDown(); } public void testGetInstanceWithContextScoped() { ContextScopedClass contextScopedClass = mInjector.getInstance(ContextScopedClass.class); assertEquals(contextScopedClass, mInjector.getInstance(ContextScopedClass.class)); assertNotSame(contextScopedClass, Proton.getInjector(new MockContext(mMockApplication)).getInstance(ContextScopedClass.class)); } public void testGetInstanceWithApplicationScoped() { ApplicationScopedClass applicationScopedClass = mInjector.getInstance(ApplicationScopedClass.class); assertEquals(applicationScopedClass, mInjector.getInstance(ApplicationScopedClass.class)); assertEquals(applicationScopedClass, Proton.getInjector(new MockContext(mMockApplication)).getInstance(ApplicationScopedClass.class)); } public void testGetInstanceWithDependentScoped() { DependentScopedClass dependentScopedClass = mInjector.getInstance(DependentScopedClass.class); assertNotSame(dependentScopedClass, mInjector.getInstance(DependentScopedClass.class)); assertNotSame(dependentScopedClass, Proton.getInjector(new MockContext(mMockApplication)).getInstance(DependentScopedClass.class)); } public void testInject() { Client c = mInjector.inject(new Client()); assertEquals(c.contextScopedClass, mInjector.getInstance(ContextScopedClass.class)); assertEquals(c.applicationScopedClass, Proton.getInjector(new MockContext(mMockApplication)).getInstance(ApplicationScopedClass.class)); assertNotSame(c.dependentScopedClass, mInjector.getInstance(DependentScopedClass.class)); } public static class Client { @Inject private ContextScopedClass contextScopedClass; @Inject private ApplicationScopedClass applicationScopedClass; @Inject private DependentScopedClass dependentScopedClass; } public interface ContextScopedClass { } @ContextScoped public static class ContextScopedClassImpl implements ContextScopedClass { } public interface ApplicationScopedClass { } @ApplicationScoped public static class ApplicationScopedClassImpl implements ApplicationScopedClass { } public interface DependentScopedClass { } @Dependent public static class DependentScopedClassImpl implements DependentScopedClass { } }