package denominator;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import dagger.ObjectGraph;
import denominator.mock.MockProvider;
import static org.assertj.core.api.Assertions.assertThat;
public class DenominatorTest {
@Rule
public final ExpectedException thrown = ExpectedException.none();
@Test
public void niceMessageWhenProviderNotFound() {
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("provider foo not in set of configured providers: [mock]");
Denominator.create("foo");
}
@Test
public void illegalArgumentWhenMissingModule() {
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("NoModuleProvider should have a static inner class named Module");
Denominator.create(new NoModuleProvider());
}
@Test
public void illegalArgumentWhenCtorHasArgs() {
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("Module has a no-args constructor");
Denominator.create(new WrongCtorModuleProvider());
}
@Test
public void providerBindsProperly() {
Provider provider = Denominator.create(new FooProvider()).provider();
assertThat(provider).isEqualTo(new FooProvider());
}
@Test
@Deprecated
public void providerReturnsSameInstance() {
FooProvider provider = new FooProvider();
DNSApiManager
mgr =
ObjectGraph.create(Denominator.provider(provider), new FooProvider.Module()).get(
DNSApiManager.class);
assertThat(mgr.provider()).isSameAs(provider);
}
@Test
public void anonymousProviderPermitted() {
Provider provider = Denominator.create(new FooProvider() {
@Override
public String name() {
return "bar";
}
@Override
public String url() {
return "http://bar";
}
}).provider();
assertThat(provider.name()).isEqualTo("bar");
assertThat(provider.url()).isEqualTo("http://bar");
}
static class NoModuleProvider extends BasicProvider {
}
static class WrongCtorModuleProvider extends BasicProvider {
@dagger.Module(injects = DNSApiManager.class, includes = MockProvider.Module.class, complete = false)
static class Module {
Module(String name) {
}
}
}
static class FooProvider extends BasicProvider {
@dagger.Module(injects = DNSApiManager.class, includes = MockProvider.Module.class, complete = false)
static class Module {
}
}
}