001 /*****************************************************************************
002 * Copyright (C) NanoContainer Organization. All rights reserved. *
003 * ------------------------------------------------------------------------- *
004 * The software in this package is published under the terms of the BSD *
005 * style license a copy of which has been included with this distribution in *
006 * the LICENSE.txt file. *
007 * *
008 * Original code by Paul Hammant *
009 *****************************************************************************/
010
011 package org.nanocontainer.reflection;
012
013 import org.nanocontainer.NanoPicoContainer;
014 import org.picocontainer.MutablePicoContainer;
015 import org.picocontainer.PicoContainer;
016 import org.picocontainer.tck.AbstractPicoContainerTestCase;
017
018 /**
019 * @author Paul Hammant
020 * @version $Revision: 2962 $
021 */
022 public class DefaultNanoPicoContainerTestCase extends AbstractPicoContainerTestCase {
023
024 protected MutablePicoContainer createPicoContainer(PicoContainer parent) {
025 return new DefaultNanoPicoContainer(this.getClass().getClassLoader(), parent);
026 }
027
028 // TODO - go to a Nano TCK?
029 public void testNamedChildContainerIsAccessible() {
030 StringBuffer sb = new StringBuffer();
031 final NanoPicoContainer parent = (NanoPicoContainer) createPicoContainer(null);
032 parent.registerComponentInstance(sb);
033 final NanoPicoContainer child = (NanoPicoContainer) parent.makeChildContainer("foo");
034 child.registerComponentImplementation(LifeCycleMonitoring.class,LifeCycleMonitoring.class);
035 LifeCycleMonitoring o = (LifeCycleMonitoring) parent.getComponentInstance("foo/*" + LifeCycleMonitoring.class.getName());
036 assertNotNull(o);
037 }
038
039 // TODO - go to a Nano TCK?
040 public void testNamedChildContainerIsAccessibleForStringKeys() {
041 StringBuffer sb = new StringBuffer();
042 final NanoPicoContainer parent = (NanoPicoContainer) createPicoContainer(null);
043 parent.registerComponentInstance(sb);
044 final MutablePicoContainer child = parent.makeChildContainer("foo");
045 child.registerComponentImplementation("lcm",LifeCycleMonitoring.class);
046 Object o = parent.getComponentInstance("foo/lcm");
047 assertNotNull(o);
048 assertTrue(sb.toString().indexOf("-instantiated") != -1);
049 }
050
051 // TODO - go to a Nano TCK?
052 public void testNamedChildContainerIsAccessibleForClassKeys() {
053 StringBuffer sb = new StringBuffer();
054 final NanoPicoContainer parent = (NanoPicoContainer) createPicoContainer(null);
055 parent.registerComponentInstance(sb);
056 final MutablePicoContainer child = parent.makeChildContainer("foo");
057 child.registerComponentImplementation(LifeCycleMonitoring.class,LifeCycleMonitoring.class);
058 Object o = parent.getComponentInstance("foo/*" + LifeCycleMonitoring.class.getName());
059 assertNotNull(o);
060 assertTrue(sb.toString().indexOf("-instantiated") != -1);
061 }
062
063 public void testMakeRemoveChildContainer() {
064 final NanoPicoContainer parent = (NanoPicoContainer) createPicoContainer(null);
065 parent.registerComponentInstance("java.lang.String", "This is a test");
066 MutablePicoContainer pico = parent.makeChildContainer();
067 // Verify they are indeed wired together.
068 assertNotNull(pico.getComponentInstance("java.lang.String"));
069 boolean result = parent.removeChildContainer(pico);
070 assertTrue(result);
071 }
072
073 // test methods inherited. This container is otherwise fully compliant.
074
075
076 }