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 ContextInjectionTest 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);
}
});
}
@Override
protected void tearDown() throws Exception {
Proton.destroy();
super.tearDown();
}
public void testGetInstance() {
Context context = new MockContext(mMockApplication);
assertEquals(context, Proton.getInjector(context).getInstance(Client.class).context1);
assertEquals(context, Proton.getInjector(context).getInstance(Client.class).context2);
assertEquals(context, Proton.getInjector(context).getInstance(Client.class).context2);
assertNotSame(context, Proton.getInjector(new MockContext(mMockApplication)).getInstance(Client.class).context2);
}
public void testGetInstanceWithApplicationScoped() {
try {
Proton.getInjector(new MockContext(mMockApplication)).getInstance(ApplicationScopedClass.class);
fail();
} catch (ProvisionException exp) {
}
}
public void testGetProvider() {
Context context = new MockContext(mMockApplication);
Provider<Context> provider1 = Proton.getInjector(context).getProvider(Context.class);
Provider<Context> provider2 = Proton.getInjector(context).getProvider(Context.class);
assertEquals(context, provider1.get());
assertEquals(provider1, provider2);
}
public void testInject() {
Context context = new MockContext(mMockApplication);
Client c = Proton.getInjector(context).inject(new Client());
assertEquals(context, c.context1);
assertEquals(context, c.context2);
}
public static class Client {
@Inject
private Context context1;
@Inject
private Context context2;
}
@ApplicationScoped
public static class ApplicationScopedClass {
@SuppressWarnings("unused")
@Inject
private Context context;
}
}