public void testRegistrationByNameAndClassWithResolving() throws Exception { DefaultPicoContainer pico = new DefaultPicoContainer(); pico.addComponent(List.class, new ArrayList()); pico.addComponent("one", Webster.class); pico.addComponent("two", SimpleTouchable.class); assertEquals("Wrong number of comps in the internals", 3, pico.getComponents().size()); assertNotNull("Object one the same", pico.getComponent("one")); assertNotNull("Object two the same", pico.getComponent("two")); assertNull("Lookup of unknown key should return null", pico.getComponent("unknown")); }
public void testLazyInstantiationSideEffectWhenForceOfDelayedInstantiationOfDependantClass() { DefaultPicoContainer pico = new DefaultPicoContainer( new ImplementationHiding().wrap(new Caching().wrap(new ConstructorInjection()))); pico.addComponent(StringBuilder.class); pico.addComponent(NeedsStringBuilder.class, NeedsStringBuilderImpl.class); pico.addComponent(NeedsNeedsStringBuilder.class); NeedsNeedsStringBuilder nnsb = pico.getComponent(NeedsNeedsStringBuilder.class); assertNotNull(nnsb); StringBuilder sb = pico.getComponent(StringBuilder.class); assertEquals("", sb.toString()); // not instantiated yet nnsb.foo(); assertEquals("<init>foo()", sb.toString()); // instantiated }
public void testParameterCanBePrimitive() throws Exception { DefaultPicoContainer pico = new DefaultPicoContainer(); pico.addComponent(Animal.class, Dino2.class, new ConstantParameter(22)); Animal animal = pico.getComponent(Animal.class); assertNotNull("Component not null", animal); assertEquals("22", animal.getFood()); }
public void testParameterCanBePassedToConstructor() throws Exception { DefaultPicoContainer pico = new DefaultPicoContainer(); pico.addComponent(Animal.class, Dino.class, new ConstantParameter("bones")); Animal animal = pico.getComponent(Animal.class); assertNotNull("Component not null", animal); assertEquals("bones", animal.getFood()); }
public void testMultipleParametersCanBePassed() throws Exception { DefaultPicoContainer pico = new DefaultPicoContainer(); pico.addComponent( Animal.class, Dino3.class, new ConstantParameter("a"), new ConstantParameter("b")); Animal animal = pico.getComponent(Animal.class); assertNotNull("Component not null", animal); assertEquals("ab", animal.getFood()); }
// TODO - move public void testRegistrationByName() throws Exception { DefaultPicoContainer pico = new DefaultPicoContainer(); Webster one = new Webster(new ArrayList()); Touchable two = new SimpleTouchable(); pico.addComponent("one", one); pico.addComponent("two", two); assertEquals("Wrong number of comps in the internals", 2, pico.getComponents().size()); assertEquals("Looking up one Touchable", one, pico.getComponent("one")); assertEquals("Looking up two Touchable", two, pico.getComponent("two")); assertTrue("Object one the same", one == pico.getComponent("one")); assertTrue("Object two the same", two == pico.getComponent("two")); assertEquals("Lookup of unknown key should return null", null, pico.getComponent("unknown")); }
@Test public void testWithNonNullLifecycleStrategy() { DefaultPicoContainer dpc = new DefaultPicoContainer( new CompositeInjection(new ConstructorInjection(), new AnnotatedMethodInjection()), new NonNullLifecycleStrategy(), new EmptyPicoContainer()); dpc.addComponent(Bar.class); assertNotNull(dpc.getComponent(Bar.class)); }
@Test public void testAsParentContainer() { CommandLineArgumentsPicoContainer apc = new CommandLineArgumentsPicoContainer(new String[] {"a=aaa", "b=bbb", "d=22"}); assertEquals("aaa", apc.getComponent("a")); assertEquals("bbb", apc.getComponent("b")); assertEquals("22", apc.getComponent("d")); DefaultPicoContainer dpc = new DefaultPicoContainer(apc); dpc.addComponent(NeedsString.class); assertEquals("bbb", dpc.getComponent(NeedsString.class).val); }
@Test public void testAnnotatedFieldInjectionComponentCanDependOnConfig() { CommandLineArgumentsPicoContainer apc = new CommandLineArgumentsPicoContainer(new String[] {"a=a", "b=2", "c=true"}); DefaultPicoContainer pico = new DefaultPicoContainer(new AnnotatedFieldInjection(), apc); pico.addConfig("zzz", "zzz"); pico.as(Characteristics.USE_NAMES).addComponent(NeedsAFew3.class); NeedsAFew3 needsAFew = pico.getComponent(NeedsAFew3.class); assertNotNull(needsAFew); assertEquals("a", needsAFew.a); assertEquals(2, needsAFew.b); assertEquals(true, needsAFew.c); }
@Test public void testUnsatisfiableIfNoSuitableTyesForInjection() { CommandLineArgumentsPicoContainer apc = new CommandLineArgumentsPicoContainer(new String[] {"zz=zz"}); DefaultPicoContainer pico = new DefaultPicoContainer(apc); pico.as(Characteristics.USE_NAMES).addComponent(NeedsAFew.class); try { Object foo = pico.getComponent(NeedsAFew.class); fail(); } catch (AbstractInjector.UnsatisfiableDependenciesException e) { // expetced; } }
public void testParametersCanBeMixedWithComponentsCanBePassed() throws Exception { DefaultPicoContainer pico = new DefaultPicoContainer(); pico.addComponent(Touchable.class, SimpleTouchable.class); pico.addComponent( Animal.class, Dino4.class, new ConstantParameter("a"), new ConstantParameter(3), new ConstantParameter("b"), ComponentParameter.DEFAULT); Animal animal = pico.getComponent(Animal.class); assertNotNull("Component not null", animal); assertEquals("a3b org.picocontainer.testmodel.SimpleTouchable", animal.getFood()); }
// TODO move public void testMultipleImplementationsAccessedThroughKey() throws PicoCompositionException { SimpleTouchable Touchable1 = new SimpleTouchable(); SimpleTouchable Touchable2 = new SimpleTouchable(); DefaultPicoContainer pico = new DefaultPicoContainer(); pico.addComponent("Touchable1", Touchable1); pico.addComponent("Touchable2", Touchable2); pico.addComponent("fred1", DependsOnTouchable.class, new ComponentParameter("Touchable1")); pico.addComponent("fred2", DependsOnTouchable.class, new ComponentParameter("Touchable2")); DependsOnTouchable fred1 = (DependsOnTouchable) pico.getComponent("fred1"); DependsOnTouchable fred2 = (DependsOnTouchable) pico.getComponent("fred2"); assertFalse(fred1 == fred2); assertSame(Touchable1, fred1.getTouchable()); assertSame(Touchable2, fred2.getTouchable()); }
@Test public void testComponentWithCtorAndSetterDiCanHaveAllDepsSatisfiedWithANonSetInjectMethod() throws NoSuchMethodException { DefaultPicoContainer dpc = new DefaultPicoContainer( new CompositeInjection(new ConstructorInjection(), new SetterInjection("inject")), new NullLifecycleStrategy(), new EmptyPicoContainer()); dpc.addComponent(Bar.class); dpc.addComponent(Baz.class); dpc.addComponent(Foo2.class); Foo2 foo = dpc.getComponent(Foo2.class); assertNotNull(foo); assertNotNull(foo.bar); assertNotNull(foo.baz); }
@Test public void testComponentWithCtorAndNamedFieldWorkToegether() throws NoSuchMethodException { DefaultPicoContainer dpc = new DefaultPicoContainer( new CompositeInjection(new ConstructorInjection(), new NamedFieldInjection()), new NullLifecycleStrategy(), new EmptyPicoContainer()); dpc.addComponent(Bar.class); dpc.addConfig("one", "1"); dpc.addConfig("two", "2"); dpc.as(injectionFieldNames("one", "two")).addComponent(Foo4.class); Foo4 foo4 = dpc.getComponent(Foo4.class); assertNotNull(foo4); assertNotNull(foo4.bar); assertNotNull(foo4.one); assertEquals("1", foo4.one); assertNotNull(foo4.two); assertEquals("2", foo4.two); }