package com.perunlabs.testinjector;
import static com.perunlabs.testinjector.inject.TestInjector.injectTest;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
import com.google.inject.Binder;
import com.google.inject.ConfigurationException;
import com.google.inject.Inject;
import com.google.inject.Module;
import com.google.inject.Provider;
public class InjectTest {
@Test
public void injects_field() throws Exception {
InjectField test = new InjectField();
injectTest(test);
assertThat(test.field).isInstanceOf(String.class);
}
private static class InjectField {
@Inject
public String field;
}
@Test
public void injects_private_field() throws Exception {
InjectPrivateField test = new InjectPrivateField();
injectTest(test);
assertThat(test.field).isInstanceOf(String.class);
}
private static class InjectPrivateField {
@Inject
private String field;
}
@Test
public void injects_provider() throws Exception {
InjectProviderField test = new InjectProviderField();
injectTest(test);
assertThat(test.field.get()).isInstanceOf(String.class);
}
private static class InjectProviderField {
@Inject
Provider<String> field;
}
@Test(expected = ConfigurationException.class)
public void does_not_inject_raw_provider() throws Exception {
InjectRawProviderField test = new InjectRawProviderField();
injectTest(test);
}
@SuppressWarnings("rawtypes")
private static class InjectRawProviderField {
@SuppressWarnings("unused")
@Inject
Provider field;
}
@Test(expected = RuntimeException.class)
public void does_not_inject_wildcard_provider() throws Exception {
InjectWildcardProviderField test = new InjectWildcardProviderField();
injectTest(test);
}
private static class InjectWildcardProviderField {
@SuppressWarnings("unused")
@Inject
Provider<?> field;
}
@Test
public void injects_bindings_from_configure_method() throws Exception {
InjectModuleBinding test = new InjectModuleBinding();
injectTest(test);
assertThat(test.integer).isEqualTo(Integer.valueOf(77));
}
@SuppressWarnings("boxing")
private static class InjectModuleBinding implements Module {
@Inject
public Integer integer;
@Override
public void configure(Binder binder) {
binder.bind(Integer.class).toInstance(77);
}
}
}