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.Inject; import com.google.inject.Provider; import com.google.inject.name.Named; import com.google.inject.util.Providers; public class BindTest { private static final String STRING = "abc"; @Test public void binds_field() throws Exception { BindField test = new BindField(); injectTest(test); assertThat(test.inject).isSameAs(STRING); } private static class BindField { @Bind String bind = STRING; @Inject private String inject; } @Test public void binds_private_field() throws Exception { BindPrivateField test = new BindPrivateField(); injectTest(test); assertThat(test.inject).isSameAs(STRING); } private static class BindPrivateField { @Bind private final String bind = STRING; @Inject private String inject; } @Test public void binds_annotated_field() throws Exception { BindAnnotatedField test = new BindAnnotatedField(); injectTest(test); assertThat(test.inject).isSameAs(STRING); } private static class BindAnnotatedField { @Bind @Named("name") String bind = STRING; @Inject @Named("name") private String inject; } @Test(expected = RuntimeException.class) public void binding_null_field_fails() throws Exception { injectTest(new BindNullField()); } private static class BindNullField { @Bind String bind = null; } @Test public void binds_provider() throws Exception { ProviderField test = new ProviderField(); injectTest(test); assertThat(test.inject).isSameAs(STRING); } private static class ProviderField { @Bind Provider<String> bind = Providers.of(STRING); @Inject private String inject; } @Test public void binds_javax_provider() throws Exception { JavaxProviderField test = new JavaxProviderField(); injectTest(test); assertThat(test.inject).isSameAs(STRING); } private static class JavaxProviderField { @Bind javax.inject.Provider<String> bind = Providers.of(STRING); @Inject private String inject; } @Test(expected = RuntimeException.class) public void binding_raw_provider_fails() throws Exception { RawProviderField test = new RawProviderField(); injectTest(test); } private static class RawProviderField { @SuppressWarnings("rawtypes") @Bind Provider bind = Providers.of(STRING); } @Test(expected = RuntimeException.class) public void binding_wildcard_provider_fails() throws Exception { WildcardProviderField test = new WildcardProviderField(); injectTest(test); } private static class WildcardProviderField { @Bind Provider<?> bind = Providers.of(STRING); } }