package com.lordofthejars.nosqlunit.core; import static org.hamcrest.core.IsNull.nullValue; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import javax.inject.Inject; import javax.inject.Named; import org.junit.Test; import com.lordofthejars.nosqlunit.annotation.ByContainer; import com.lordofthejars.nosqlunit.annotation.ConnectionManager; public class WhenFieldIsInjected { @Test public void named_object_should_Not_be_injected_if_is_named_with_not_current_identifier() { InjectAnnotationProcessor injectAnnotationProcessor = new InjectAnnotationProcessor("two"); TestWithNamedFieldInjection testInstance = new TestWithNamedFieldInjection(); injectAnnotationProcessor.processInjectAnnotation(TestWithNamedFieldInjection.class, testInstance, "Hello"); assertThat(testInstance.getMyInjection(), is("Hello")); assertThat(testInstance.getMySecondInjection(), nullValue()); } @Test public void named_object_should_be_injected_if_is_named_without_identifier() { InjectAnnotationProcessor injectAnnotationProcessor = new InjectAnnotationProcessor("one"); TestWithNamedFieldInjection testInstance = new TestWithNamedFieldInjection(); injectAnnotationProcessor.processInjectAnnotation(TestWithNamedFieldInjection.class, testInstance, "Hello"); assertThat(testInstance.getMyInjection(), is("Hello")); } @Test public void named_object_should_be_injected_if_is_named_with_current_identifier() { InjectAnnotationProcessor injectAnnotationProcessor = new InjectAnnotationProcessor("one"); TestWithNamedFieldInjection testInstance = new TestWithNamedFieldInjection(); injectAnnotationProcessor.processInjectAnnotation(TestWithNamedFieldInjection.class, testInstance, "Hello"); assertThat(testInstance.getMySecondInjection(), is("Hello")); } @Test public void object_should_be_injected_as_field_instance() { InjectAnnotationProcessor injectAnnotationProcessor = new InjectAnnotationProcessor("1"); TestWithFieldInjection testInstance = new TestWithFieldInjection(); injectAnnotationProcessor.processInjectAnnotation(TestWithFieldInjection.class, testInstance, "Hello"); assertThat(testInstance.getMyInjection(), is("Hello")); } @Test public void not_instanciable_objects_should_not_be_injected() { InjectAnnotationProcessor injectAnnotationProcessor = new InjectAnnotationProcessor("1"); TestWithFieldInjection testInstance = new TestWithFieldInjection(); injectAnnotationProcessor.processInjectAnnotation(TestWithFieldInjection.class, testInstance, new Integer(0)); assertThat(testInstance.getMyInjection(), nullValue()); } @Test public void by_container_object_should_Not_be_injected() { InjectAnnotationProcessor injectAnnotationProcessor = new InjectAnnotationProcessor("1"); TestWithInjectionByContainer testInstance = new TestWithInjectionByContainer(); injectAnnotationProcessor.processInjectAnnotation(TestWithInjectionByContainer.class, testInstance, "Hello"); assertThat(testInstance.getMyInjection(), is(nullValue())); } @Test public void object_should_be_injected_as_field_instance_with_connection_manager() { InjectAnnotationProcessor injectAnnotationProcessor = new InjectAnnotationProcessor("1"); TestWithFieldConnectionManager testInstance = new TestWithFieldConnectionManager(); injectAnnotationProcessor.processInjectAnnotation(TestWithFieldConnectionManager.class, testInstance, "Hello"); assertThat(testInstance.getMyInjection(), is("Hello")); } } class TestWithInjectionByContainer { @Inject @ByContainer private String myInjection; public String getMyInjection() { return myInjection; } } class TestWithNamedFieldInjection { @Named @Inject private String myInjection; @Named("one") @Inject private String mySecondInjection; public String getMySecondInjection() { return mySecondInjection; } public String getMyInjection() { return myInjection; } } class TestWithFieldConnectionManager { @ConnectionManager private String myInjection; public String getMyInjection() { return myInjection; } } class TestWithFieldInjection { @Inject private String myInjection; public String getMyInjection() { return myInjection; } }