package bvira.bvira.util; import bvira.util.Container; import bvira.util.DefaultContainer; import org.junit.Test; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; public class DefaultContainerUnitTests { @Test public void canInstantiateContainer() { new DefaultContainer(); } @Test public void canRetrieveClassInstancesFromContainer() { Container container = new DefaultContainer(); container.register(TestClass1.class); TestClass1 instance = container.getInstance(TestClass1.class); assertThat("Valid instance instance retrieved from container", instance, is(notNullValue())); container.dispose(); } @Test(expected = IllegalArgumentException.class) public void ThrowsExceptionWhenClassOrInstanceNotRegistered() { Container container = new DefaultContainer(); container.getInstance(TestClass1.class); container.dispose(); } @Test public void returnsSpecificRegisteredInstanceIfRegistered() { Container container = new DefaultContainer(); TestClass1 testInstance = new TestClass1(); container.register(testInstance); TestClass1 instance = container.getInstance(TestClass1.class); assertThat("Valid instance instance retrieved from container", instance, is(testInstance)); container.dispose(); } @Test public void transientContainerDefaultsToParent(){ Container container = new DefaultContainer(); TestClass1 testInstance = new TestClass1(); container.register(testInstance); TestClass1 instance = container.transientContainer().getInstance(TestClass1.class); assertThat("Valid instance instance retrieved from container", instance, is(testInstance)); container.dispose(); } @Test public void transientContainerOverridesParent(){ Container container = new DefaultContainer(); container.register(new TestClass1()); Container transientContainer = container.transientContainer(); TestClass1 testInstance = new TestClass1(); container.register(testInstance); TestClass1 instance = transientContainer.getInstance(TestClass1.class); assertThat("Valid instance instance retrieved from container", instance, is(testInstance)); container.dispose(); } @Test public void canTestForInstanceAvailability() { DefaultContainer container = new DefaultContainer(); TestClass1 testInstance = new TestClass1(); container.register(testInstance); assertThat("Valid instance instance retrieved from container", container.containsInstance(TestClass1.class), is(true)); container.dispose(); } }