KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > tests > jfun > yan > ChildContainerTestCase


1 /*****************************************************************************
2  * Copyright (C) PicoContainer Organization. All rights reserved. *
3  * ------------------------------------------------------------------------- *
4  * The software in this package is published under the terms of the BSD *
5  * style license a copy of which has been included with this distribution in *
6  * the LICENSE.txt file. *
7  * *
8  * Original code by *
9  *****************************************************************************/

10 package tests.jfun.yan;
11
12 import java.util.HashMap JavaDoc;
13 import java.util.Map JavaDoc;
14
15 import junit.framework.TestCase;
16 import junit.framework.TestSuite;
17 import jfun.yan.*;
18 import jfun.yan.containers.DefaultContainer;
19
20 import tests.jfun.yan.tck.BaseContainerTestCase;
21 import tests.jfun.yan.testmodel.AlternativeTouchable;
22 import tests.jfun.yan.testmodel.DependsOnTouchable;
23 import tests.jfun.yan.testmodel.SimpleTouchable;
24 import tests.jfun.yan.testmodel.Touchable;
25
26 /**
27  * @author Paul Hammant
28  * @author Aslak Hellesøy
29  * @author Rafal Krzewski
30  * @version $Revision: 1.2 $
31  */

32 public class ChildContainerTestCase extends BaseNonSingletonContainerTestCase {
33   public static void main(String JavaDoc[] args){
34     Utils.runTest(suite());
35   }
36   private static TestSuite suite(){
37     return new TestSuite(ChildContainerTestCase.class);
38   }
39   protected Container getContainerImpl(){
40     return new DefaultContainer().inherit(new jfun.yan.containers.SingletonProxyContainer());
41   }
42     public void testParentContainerWithComponentWithEqualKeyShouldBeShadowedByChild() throws Exception JavaDoc {
43         DefaultContainer parent = new DefaultContainer();
44         Container child = new DefaultContainer().inherit(parent);
45
46         parent.registerConstructor("key", AlternativeTouchable.class);
47         child.registerConstructor("key", SimpleTouchable.class);
48         child.registerConstructor(DependsOnTouchable.class);
49
50         DependsOnTouchable dot = (DependsOnTouchable) child.getInstanceOfType(DependsOnTouchable.class);
51         assertEquals(SimpleTouchable.class, dot.getTouchable().getClass());
52     }
53     /*
54     public void testChildComponentRegisteredAsClassShouldBePreffered() throws Exception {
55       DefaultContainer parent = new DefaultContainer();
56       Container child = new DefaultContainer().inherit(parent);
57
58       parent.registerConstructor(Touchable.class, AlternativeTouchable.class);
59       child.registerConstructor("key", SimpleTouchable.class);
60       child.registerConstructor(DependsOnTouchable.class);
61
62       DependsOnTouchable dot = (DependsOnTouchable) child.getInstanceOfType(DependsOnTouchable.class);
63       assertEquals(SimpleTouchable.class, dot.getTouchable().getClass());
64   }*/

65
66     public void testParentComponentRegisteredAsClassShouldBePreffered() throws Exception JavaDoc {
67         DefaultContainer parent = new DefaultContainer();
68         Container child = new DefaultContainer().inherit(parent);
69
70         parent.registerConstructor(Touchable.class, AlternativeTouchable.class);
71         child.registerConstructor("key", SimpleTouchable.class);
72         child.registerConstructor(DependsOnTouchable.class);
73
74         DependsOnTouchable dot = (DependsOnTouchable) child.getInstanceOfType(DependsOnTouchable.class);
75         assertEquals(AlternativeTouchable.class, dot.getTouchable().getClass());
76     }
77
78     public void testResolveFromParentByType() {
79         Container parent = new DefaultContainer();
80         parent.registerConstructor(Touchable.class, SimpleTouchable.class);
81
82         Container child = new DefaultContainer().inherit(parent);
83         child.registerConstructor(DependsOnTouchable.class);
84
85         assertNotNull(child.getInstance(DependsOnTouchable.class));
86     }
87
88     public void testResolveFromParentByKey() {
89         Container parent = new DefaultContainer();
90         parent.registerConstructor(Touchable.class, SimpleTouchable.class);
91
92         Container child = new DefaultContainer().inherit(parent);
93         child.registerComponent(Components.ctor(DependsOnTouchable.class).
94             withArguments(new Creator[]{Components.useType(Touchable.class)}));
95         /*
96         child.registerConstructor(DependsOnTouchable.class, DependsOnTouchable.class,
97                 new Parameter[]{new ComponentParameter((Object) Touchable.class)});
98 */

99         assertNotNull(child.getInstance(DependsOnTouchable.class));
100     }
101
102     public void testResolveFromGrandParentByType() {
103         Container grandParent = new DefaultContainer();
104         grandParent.registerConstructor(Touchable.class, SimpleTouchable.class);
105
106         Container parent = new DefaultContainer().inherit(grandParent);
107
108         Container child = new DefaultContainer().inherit(parent);
109         child.registerConstructor(DependsOnTouchable.class);
110
111         assertNotNull(child.getInstance(DependsOnTouchable.class));
112     }
113
114     public void testResolveFromGrandParentByKey() {
115         Container grandParent = new DefaultContainer();
116         grandParent.registerConstructor(Touchable.class, SimpleTouchable.class);
117
118         Container parent = new DefaultContainer().inherit(grandParent);
119
120         Container child = new DefaultContainer().inherit(parent);
121         child.registerComponent(Components.ctor(DependsOnTouchable.class)
122             .withArguments(new Creator[]{Components.useType(Touchable.class)}));
123         child.verify();
124         parent.verify();
125         /*
126         child.registerConstructor(DependsOnTouchable.class, DependsOnTouchable.class,
127                 new Parameter[]{new ComponentParameter((Object) Touchable.class)});
128                 */

129         assertNotNull(child.getInstance(DependsOnTouchable.class));
130     }
131     public static final class Y{
132       private static final Y singleton = new Y();
133       private Y(){};
134       public static Y instance(){return singleton;}
135     }
136     public static final class X{
137       private final Y y;
138       public X(Y y){
139         this.y = y;
140       }
141       public boolean equals(Object JavaDoc obj){
142         if(obj instanceof X){
143           final X other = (X)obj;
144           return y.equals(other.y);
145         }
146         else return false;
147       }
148     }
149     
150     public void testUnregisterOnlyAffectsChild()
151     throws Exception JavaDoc{
152       final Container parent = new DefaultContainer();
153       final Container child = new DefaultContainer();
154       final Container cc = child.inherit(parent);
155       cc.registerConstructor(HashMap JavaDoc.class, (Class JavaDoc[])null);
156       assertNull(parent.getComponent(HashMap JavaDoc.class));
157       cc.verify();
158       parent.registerValue(new Character JavaDoc('a'));
159       assertTrue(cc.getComponent(Character JavaDoc.class)!=null);
160       cc.verify();
161       parent.registerValue("parent");
162       child.registerValue("child");
163       cc.verify();
164       assertEquals("child", cc.getInstance(String JavaDoc.class));
165       assertEquals("child", child.getInstance(String JavaDoc.class));
166       cc.unregisterComponent(String JavaDoc.class);
167       cc.verify();
168       assertEquals("parent", cc.getInstance(String JavaDoc.class));
169       assertEquals("parent", cc.getInstanceOfType(String JavaDoc.class));
170       assertEquals(1, cc.getInstancesOfType(String JavaDoc.class).size());
171       child.registerComponent(Components.ctor(X.class)
172           .withArgument(0, Components.static_method(Y.class, "instance")));
173       assertEquals(4, cc.getInstances().size());
174       cc.verify();
175       final Object JavaDoc[] expecting = new Object JavaDoc[]{
176           "child", "parent", new Character JavaDoc('a'), new HashMap JavaDoc(),
177           Y.instance(), new X(Y.instance())};
178       /*
179       final InstanceListener cb = new InstanceListener(){
180         private int seq = 0;
181         public void onInstance(Object obj, Component c){
182           assertEquals(expecting[seq++], obj);
183         }
184       };
185       cc.fifo(cb);
186       final InstanceListener cb2 = new InstanceListener(){
187         private int seq = expecting.length;
188         public void onInstance(Object obj, Component c){
189           assertEquals(expecting[--seq], obj);
190         }
191       };
192       cc.filo(cb2);
193       */

194       cc.verify();
195       cc.registerComponent(Components.value("proxy").proxy().proxy(CharSequence JavaDoc.class));
196       cc.verify();
197       assertEquals("proxy", ""+cc.getInstanceOfType(CharSequence JavaDoc.class));
198       assertEquals("proxy", ""+child.getInstanceOfType(CharSequence JavaDoc.class));
199       /*
200       cc.clearHistory();
201       assertEquals(0, InstanceCounter.countInstance(child));
202       assertEquals(0, InstanceCounter.countInstance(parent));
203       */

204       cc.registerComponent("target", Components.method(this, "f1"));
205       cc.verify();
206       assertEquals(new Integer JavaDoc(1), cc.getInstance("target"));
207       final Map JavaDoc props = new HashMap JavaDoc();
208       props.put("map", Components.useType(Map JavaDoc.class));
209       cc.registerComponent("target2",
210           Components.bean(F1.class)
211           .withProperties(props));
212       final F1 f = (F1)cc.getInstanceOfType(F1.class);
213       assertEquals("parent", f.getName());
214       assertEquals(new HashMap JavaDoc(), f.getMap());
215     }
216     public int f1(String JavaDoc name, Map JavaDoc map){
217       return 1;
218     }
219     public static class F1{
220       private String JavaDoc name;
221       private Map JavaDoc map;
222       
223       public Map JavaDoc getMap() {
224         return map;
225       }
226       public void setMap(Map JavaDoc map) {
227         this.map = map;
228       }
229       public String JavaDoc getName() {
230         return name;
231       }
232       public void setName(String JavaDoc name) {
233         this.name = name;
234       }
235     }
236 }
237
Popular Tags