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 }