package proton.inject;
import javax.inject.Inject;
import proton.inject.scope.ApplicationScoped;
import android.app.Application;
import android.test.AndroidTestCase;
import android.test.mock.MockApplication;
public class InjectorInjectionTest 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(ApplicationClient.class).in(ApplicationScoped.class);
bind(Client.class);
}
});
mInjector = Proton.getInjector(new MockContext(mMockApplication));
}
@Override
protected void tearDown() throws Exception {
Proton.destroy();
super.tearDown();
}
public void testGetInstance() {
Client c = mInjector.getInstance(Client.class);
assertEquals(mInjector, c.injector);
assertNotSame(mInjector, Proton.getInjector(new MockContext(mMockApplication)).getInstance(Client.class));
ApplicationClient ac = Proton.getInjector(new MockContext(mMockApplication)).getApplicationInjector()
.getInstance(ApplicationClient.class);
assertEquals(mInjector.getApplicationInjector(), ac.injector);
}
public void testInject() {
Client c = mInjector.inject(new Client());
assertEquals(mInjector, c.injector);
assertNotSame(mInjector, c.applicationClient.injector);
assertEquals(mInjector.getApplicationInjector(), c.applicationClient.injector);
ApplicationClient ac = mInjector.inject(new ApplicationClient());
assertEquals(mInjector, ac.injector);
}
public static class Client {
@Inject
private Injector injector;
@Inject
private ApplicationClient applicationClient;
}
public static class ApplicationClient {
@Inject
private Injector injector;
}
}