KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > picocontainer > doc > advanced > MapsTestCase


1 package org.picocontainer.doc.advanced;
2
3 import java.util.Collection JavaDoc;
4 import java.util.Map JavaDoc;
5 import java.util.TreeMap JavaDoc;
6
7 import junit.framework.TestCase;
8
9 import org.picocontainer.ComponentAdapter;
10 import org.picocontainer.MutablePicoContainer;
11 import org.picocontainer.Parameter;
12 import org.picocontainer.defaults.CollectionComponentParameter;
13 import org.picocontainer.defaults.ComponentParameter;
14 import org.picocontainer.defaults.DefaultPicoContainer;
15
16
17 /**
18  * @author Jörg Schaible
19  * @version $Revision: 2024 $
20  */

21 public class MapsTestCase
22         extends TestCase
23         implements CollectionDemoClasses {
24     private MutablePicoContainer pico;
25
26     protected void setUp() throws Exception JavaDoc {
27         pico = new DefaultPicoContainer();
28     }
29
30     // START SNIPPET: bowl
31

32     public static class Bowl {
33         private final TreeMap JavaDoc fishes;
34         private final Map JavaDoc cods;
35
36         public Bowl(TreeMap JavaDoc fishes, Map JavaDoc cods) {
37             this.fishes = fishes;
38             this.cods = cods;
39         }
40
41         public Map JavaDoc getFishes() {
42             return fishes;
43         }
44
45         public Map JavaDoc getCods() {
46             return cods;
47         }
48     }
49
50     // END SNIPPET: bowl
51

52     public void testShouldCreateBowlWithFishCollection() {
53
54         // START SNIPPET: usage
55

56         pico.registerComponentImplementation("Shark", Shark.class);
57         pico.registerComponentImplementation("Cod", Cod.class);
58         pico.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{
59             new ComponentParameter(Fish.class, false),
60             new ComponentParameter(Cod.class, false)
61         });
62         // END SNIPPET: usage
63

64         Shark shark = (Shark) pico.getComponentInstanceOfType(Shark.class);
65         Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class);
66         Bowl bowl = (Bowl) pico.getComponentInstanceOfType(Bowl.class);
67         
68         Map JavaDoc fishMap = bowl.getFishes();
69         assertEquals(2, fishMap.size());
70         Collection JavaDoc fishes = fishMap.values();
71         assertTrue(fishes.contains(shark));
72         assertTrue(fishes.contains(cod));
73
74         Map JavaDoc codMap = bowl.getCods();
75         assertEquals(1, codMap.size());
76         Collection JavaDoc cods = fishMap.values();
77         assertTrue(cods.contains(cod));
78     }
79     
80     public void testShouldCreateBowlWithNamedFishesOnly() {
81
82         // START SNIPPET: useKeyType
83

84         pico.registerComponentImplementation(Shark.class);
85         pico.registerComponentImplementation("Nemo", Cod.class);
86         pico.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{
87             new ComponentParameter(String JavaDoc.class, Fish.class, false),
88             new ComponentParameter(Cod.class, false)
89         });
90         
91         Bowl bowl = (Bowl) pico.getComponentInstanceOfType(Bowl.class);
92         // END SNIPPET: useKeyType
93

94         // START SNIPPET: ensureKeyType
95

96         Cod cod = (Cod) pico.getComponentInstanceOfType(Cod.class);
97         Map JavaDoc fishMap = bowl.getFishes();
98         Map JavaDoc codMap = bowl.getCods();
99         assertEquals(1, fishMap.size());
100         assertEquals(1, codMap.size());
101         assertEquals(fishMap, codMap);
102         assertSame(cod,fishMap.get("Nemo"));
103         // END SNIPPET: ensureKeyType
104
}
105     
106     public void testShouldCreateBowlWithFishesFromParent() {
107
108         // START SNIPPET: scope
109

110         MutablePicoContainer parent = new DefaultPicoContainer();
111         parent.registerComponentImplementation("Tom", Cod.class);
112         parent.registerComponentImplementation("Harry", Cod.class);
113         MutablePicoContainer child = new DefaultPicoContainer(parent);
114         child.registerComponentImplementation("Dick", Cod.class);
115         child.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{
116             new ComponentParameter(Fish.class, false),
117             new ComponentParameter(Cod.class, false)
118         });
119         Bowl bowl = (Bowl) child.getComponentInstance(Bowl.class);
120         assertEquals(3, bowl.fishes.size());
121         assertEquals(3, bowl.cods.size());
122
123         // END SNIPPET: scope
124
}
125     
126     public void testShouldCreateBowlWith2CodsOnly() {
127
128         // START SNIPPET: scopeOverlay
129

130         MutablePicoContainer parent = new DefaultPicoContainer();
131         parent.registerComponentImplementation("Tom", Cod.class);
132         parent.registerComponentImplementation("Dick", Cod.class);
133         parent.registerComponentImplementation("Harry", Cod.class);
134         MutablePicoContainer child = new DefaultPicoContainer(parent);
135         child.registerComponentImplementation("Dick", Shark.class);
136         child.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{
137             new ComponentParameter(Fish.class, false),
138             new ComponentParameter(Cod.class, false)
139         });
140         Bowl bowl = (Bowl) child.getComponentInstance(Bowl.class);
141         assertEquals(3, bowl.fishes.size());
142         assertEquals(2, bowl.cods.size());
143
144         // END SNIPPET: scopeOverlay
145
}
146     
147     public void testShouldCreateBowlWithoutTom() {
148
149         // START SNIPPET: individualSelection
150

151         MutablePicoContainer mpc = new DefaultPicoContainer();
152         mpc.registerComponentImplementation("Tom", Cod.class);
153         mpc.registerComponentImplementation("Dick", Cod.class);
154         mpc.registerComponentImplementation("Harry", Cod.class);
155         mpc.registerComponentImplementation("Sharky", Shark.class);
156         mpc.registerComponentImplementation(Bowl.class, Bowl.class, new Parameter[]{
157             new CollectionComponentParameter(Fish.class, false),
158             new CollectionComponentParameter(Cod.class, false) {
159                 protected boolean evaluate(ComponentAdapter adapter) {
160                     return !"Tom".equals(adapter.getComponentKey());
161                 }
162             }
163         });
164         Cod tom = (Cod) mpc.getComponentInstance("Tom");
165         Bowl bowl = (Bowl) mpc.getComponentInstance(Bowl.class);
166         assertTrue(bowl.fishes.values().contains(tom));
167         assertFalse(bowl.cods.values().contains(tom));
168
169         // END SNIPPET: individualSelection
170
}
171 }
Popular Tags