001    package org.picocontainer.containers;
002    
003    import static org.junit.Assert.assertEquals;
004    import static org.junit.Assert.assertSame;
005    
006    import java.util.Properties;
007    import org.junit.Test;
008    import org.picocontainer.DefaultPicoContainer;
009    import org.picocontainer.Characteristics;
010    
011    /**
012     * test that properties container works properly
013     * @author k.pribluda
014     */
015    public class PropertiesPicoContainerTestCase {
016            /**
017             * all properties specified in constructor shall be
018             * placed into container as strings
019             *
020             */
021            @Test public void testThatAllPropertiesAreAdded() {
022                    Properties properties = new Properties();
023                    
024                    properties.put("foo","bar");
025                    properties.put("blurge","bang");
026                    
027                    
028                    PropertiesPicoContainer container = new PropertiesPicoContainer(properties);
029                    assertEquals("bar",container.getComponent("foo"));
030                    assertEquals("bang",container.getComponent("blurge"));
031            }
032            
033            /**
034             * inquiry shall be delegated to parent container
035             */
036            @Test public void testThatParentDelegationWorks() {
037                    DefaultPicoContainer parent = new DefaultPicoContainer();
038                    String stored = new String("glam");
039                    parent.addComponent("glam",stored);
040                    
041                    PropertiesPicoContainer contaienr = new PropertiesPicoContainer(new Properties(),parent);
042                    
043                    assertSame(stored,contaienr.getComponent("glam"));
044            }
045    
046    
047        @Test public void thatParanamerBehavesForASpecialCase() {
048    
049           Properties properties = new Properties();
050           properties.put("portNumber", 1);
051           properties.put("hostName", "string");
052           properties.put("agentName", "agent0");
053           DefaultPicoContainer container = new DefaultPicoContainer(new PropertiesPicoContainer(properties));
054           container.as(Characteristics.USE_NAMES).addComponent(Dependant.class);
055           container.as(Characteristics.USE_NAMES).addComponent(Dependency.class);
056           Dependant dependant = (Dependant) container.getComponent(Dependant.class);
057           System.out.println(dependant);
058       }
059    
060        public static class Dependency {
061               private final String name;
062               public Dependency(final String agentName) {
063                   this.name = agentName;
064               }
065               public String toString() {
066                   return name;
067               }
068           }
069    
070           public static class Dependant /*  */ {
071               private final int number;
072               private final String string;
073               private final Dependency dependency;
074    
075               public Dependant(final String hostName, final int portNumber, final Dependency dependency) {
076                   this.number = portNumber;
077                   this.string = hostName;
078                   this.dependency = dependency;
079               }
080    
081               public String toString() {
082                   return "Number: " + number + " String: " + string + " Dependency: " + dependency;
083               }
084           }
085    
086        @Test public void testRepresentationOfContainerTree() {
087            Properties properties = new Properties();
088            properties.put("portNumber", 1);
089            properties.put("hostName", "string");
090            properties.put("agentName", "agent0");
091    
092            PropertiesPicoContainer parent = new PropertiesPicoContainer(properties);
093            parent.setName("parent");
094            DefaultPicoContainer child = new DefaultPicoContainer(parent);
095            child.setName("child");
096                    child.addComponent("hello", "goodbye");
097            child.addComponent("bonjour", "aurevior");
098            assertEquals("child:2<I<D<parent:3<|", child.toString());
099        }
100    
101    
102    }