package proton.inject.binding;
import javax.inject.Provider;
import proton.inject.ConfigurationException;
import proton.inject.binding.AndroidVersion;
import proton.inject.binding.BindingBuilderImpl;
import proton.inject.binding.Bindings;
import proton.inject.binding.DeviceModel;
import proton.inject.scope.ApplicationScoped;
import proton.inject.scope.Dependent;
import android.test.AndroidTestCase;
public class BindingBuilderImplTest extends AndroidTestCase {
private Bindings mBindings;
@Override
protected void setUp() throws Exception {
super.setUp();
mBindings = new Bindings();
}
public void testTo() {
new BindingBuilderImpl<Aaa>(Aaa.class, mBindings).to(AaaImpl.class);
assertEquals(AaaImpl.class, mBindings.get(Aaa.class).getToClass());
}
public void testToWithVersionAnnotation() {
new BindingBuilderImpl<Bbb>(Bbb.class, mBindings).to(BbbImpl.class);
assertNull(mBindings.get(Bbb.class));
}
public void testToWithModelAnnotation() {
new BindingBuilderImpl<Ccc>(Ccc.class, mBindings).to(CccImpl.class);
assertNull(mBindings.get(Ccc.class));
}
public void testToWithNull() {
try {
new BindingBuilderImpl<Aaa>(Aaa.class, mBindings).to(null);
fail();
} catch (ConfigurationException exp) {
}
}
public void testToWithScopeAnnotation() {
new BindingBuilderImpl<Aaa>(Aaa.class, mBindings).to(AaaImpl.class);
assertEquals(ApplicationScoped.class, mBindings.get(Aaa.class).getScope());
}
public void testToProviderClassOfQextendsProviderOfT() {
new BindingBuilderImpl<Aaa>(Aaa.class, mBindings).toProvider(AaaProvider.class);
assertEquals(Dependent.class, mBindings.get(Aaa.class).getScope());
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public void testToProviderClassWithNull() {
try {
new BindingBuilderImpl<Aaa>(Aaa.class, mBindings).toProvider((Class) null);
fail();
} catch (ConfigurationException exp) {
}
}
public void testToProviderProviderOfT() {
Provider<Aaa> p = new AaaProvider();
new BindingBuilderImpl<Aaa>(Aaa.class, mBindings).toProvider(p);
assertEquals(p, mBindings.get(Aaa.class).getProvider());
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public void testToProviderWithNull() {
try {
new BindingBuilderImpl<Aaa>(Aaa.class, mBindings).toProvider((Provider) null);
fail();
} catch (ConfigurationException exp) {
}
}
public void testIn() {
new BindingBuilderImpl<Aaa>(Aaa.class, mBindings).in(ApplicationScoped.class);
assertEquals(ApplicationScoped.class, mBindings.get(Aaa.class).getScope());
}
public void testInWithNull() {
try {
new BindingBuilderImpl<Aaa>(Aaa.class, mBindings).in(null);
fail();
} catch (ConfigurationException exp) {
}
}
public interface Aaa {
}
@ApplicationScoped
@AndroidVersion(0)
public static class AaaImpl implements Aaa {
}
@Dependent
@AndroidVersion(0)
public static class AaaProvider implements Provider<Aaa> {
@Override
public Aaa get() {
return new AaaImpl();
}
}
public interface Bbb {
}
@AndroidVersion(100)
public static class BbbImpl implements Bbb {
}
public interface Ccc {
}
@DeviceModel("aaa")
public static class CccImpl implements Ccc {
}
}