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 import javax.inject.Named;
012
013 /**
014 * test that properties container works properly
015 * @author Konstantin Pribluda
016 */
017 public class PropertiesPicoContainerTestCase {
018 /**
019 * all properties specified in constructor shall be
020 * placed into container as strings
021 *
022 */
023 @Test public void testThatAllPropertiesAreAdded() {
024 Properties properties = new Properties();
025
026 properties.put("foo","bar");
027 properties.put("blurge","bang");
028
029
030 PropertiesPicoContainer container = new PropertiesPicoContainer(properties);
031 assertEquals("bar",container.getComponent("foo"));
032 assertEquals("bang",container.getComponent("blurge"));
033 }
034
035 /**
036 * inquiry shall be delegated to parent container
037 */
038 @Test public void testThatParentDelegationWorks() {
039 DefaultPicoContainer parent = new DefaultPicoContainer();
040 String stored = new String("glam");
041 parent.addComponent("glam",stored);
042
043 PropertiesPicoContainer contaienr = new PropertiesPicoContainer(new Properties(),parent);
044
045 assertSame(stored,contaienr.getComponent("glam"));
046 }
047
048
049 @Test public void thatParanamerBehavesForASpecialCase() {
050
051 Properties properties = new Properties();
052 properties.put("portNumber", 1);
053 properties.put("hostName", "string");
054 properties.put("agentName", "agent0");
055 DefaultPicoContainer container = new DefaultPicoContainer(new PropertiesPicoContainer(properties));
056 container.as(Characteristics.USE_NAMES).addComponent(Dependant.class);
057 container.as(Characteristics.USE_NAMES).addComponent(Dependency.class);
058 Dependant dependant = (Dependant) container.getComponent(Dependant.class);
059 assertEquals(1, dependant.pn);
060 assertEquals("string", dependant.hn);
061
062 }
063
064 public static class Dependency {
065 private final String name;
066
067 public Dependency(final String agentName) {
068 this.name = agentName;
069 }
070
071 public String toString() {
072 return name;
073 }
074 }
075
076 public static class Dependant {
077 final int pn;
078 final String hn;
079 final Dependency dependency;
080
081 public Dependant(final String hostName, final int portNumber, final Dependency dependency) {
082 this.pn = portNumber;
083 this.hn = hostName;
084 this.dependency = dependency;
085 }
086
087 public String toString() {
088 return "Number: " + pn + " String: " + hn + " Dependency: " + dependency;
089 }
090 }
091
092 @Test
093 public void thatParanamerHonorsNamedAnnotationFromJSR330() {
094
095 Properties properties = new Properties();
096 properties.put("portNumber", "1");
097 properties.put("hostName", "string");
098 properties.put("agentName", "agent0");
099 DefaultPicoContainer container = new DefaultPicoContainer(new PropertiesPicoContainer(properties));
100 container.as(Characteristics.USE_NAMES).addComponent(Dependant2.class);
101 container.as(Characteristics.USE_NAMES).addComponent(Dependency.class);
102 Dependant2 dependant = (Dependant2) container.getComponent(Dependant2.class);
103 assertEquals(1, dependant.pn);
104 assertEquals("string", dependant.hn);
105 }
106
107
108 public static class Dependant2 extends Dependant {
109 public Dependant2(@Named("hostName") String hn, @Named("portNumber") String pn, Dependency d) {
110 super(hn, Integer.parseInt(pn), d);
111 }
112 }
113
114 @Test public void testRepresentationOfContainerTree() {
115 Properties properties = new Properties();
116 properties.put("portNumber", 1);
117 properties.put("hostName", "string");
118 properties.put("agentName", "agent0");
119
120 PropertiesPicoContainer parent = new PropertiesPicoContainer(properties);
121 parent.setName("parent");
122 DefaultPicoContainer child = new DefaultPicoContainer(parent);
123 child.setName("child");
124 child.addComponent("hello", "goodbye");
125 child.addComponent("bonjour", "aurevior");
126 assertEquals("child:2<I<D<parent:3<|", child.toString());
127 }
128
129
130 }