KickJava   Java API By Example, From Geeks To Geeks.

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


1 package tests.jfun.yan;
2
3 import tests.jfun.yan.tck.BaseContainerTestCase;
4 import jfun.yan.*;
5 import jfun.yan.containers.DefaultContainer;
6 import jfun.yan.containers.ProxyContainer;
7 import junit.framework.TestSuite;
8
9 import java.util.Map JavaDoc;
10 import java.util.HashMap JavaDoc;
11 import java.io.IOException JavaDoc;
12 import java.awt.event.ActionListener JavaDoc;
13 import java.awt.event.ActionEvent JavaDoc;
14
15 /**
16  * @author Paul Hammant
17  * @version $Revision: 1.2 $
18  */

19 public class BaseProxyContainerTestCase
20 extends BaseContainerTestCase {
21
22   public static void main(String JavaDoc[] args){
23     Utils.runTest(suite());
24   }
25   private static TestSuite suite(){
26     return new TestSuite(BaseProxyContainerTestCase.class);
27   }
28
29     public void testInstanceIsNotAutomaticallyHidden() {
30         Container pc = createImplementationHidingPicoContainer();
31         pc.registerValue(Map JavaDoc.class, new HashMap JavaDoc());
32         final String JavaDoc s1 = "unused component just for coverage";
33         pc.registerValue(s1);
34         final String JavaDoc s2 = "hello";
35         pc.registerComponent("mark",
36             Components.value(s2).singleton().guard().subsume(String JavaDoc.class)
37             .subsume(CharSequence JavaDoc.class));
38         Map JavaDoc map = (Map JavaDoc) pc.getInstance(Map JavaDoc.class);
39         pc.verify();
40         assertNotNull(map);
41         assertTrue(map instanceof HashMap JavaDoc);
42         assertSame(s1, pc.getInstance(String JavaDoc.class));
43         assertSame(s2, pc.getInstance("mark"));
44         assertSame(s1, pc.getInstance(String JavaDoc.class));
45         assertSame(s2, pc.getInstance("mark"));
46     }
47
48     protected Container createImplementationHidingPicoContainer(){
49       return new ProxyContainer();
50     }
51
52
53     public void testImplementaionIsAutomaticallyHidden() {
54         Container pc = createImplementationHidingPicoContainer();
55         pc.registerConstructor(Map JavaDoc.class, HashMap JavaDoc.class, null);
56         Map JavaDoc map = (Map JavaDoc) pc.getInstance(Map JavaDoc.class);
57         assertNotNull(map);
58         assertFalse(map instanceof HashMap JavaDoc);
59     }
60
61     public void testNonInterfaceImplementaionIsAutomaticallyHidden() {
62         Container pc = createImplementationHidingPicoContainer();
63         pc.registerConstructor(HashMap JavaDoc.class, HashMap JavaDoc.class, null);
64         Map JavaDoc map = (Map JavaDoc) pc.getInstance(HashMap JavaDoc.class);
65         assertNotNull(map);
66         assertTrue(map instanceof HashMap JavaDoc);
67     }
68
69     public void testNonInterfaceImplementaionWithParametersIsAutomaticallyHidden() {
70         Container pc = createImplementationHidingPicoContainer();
71         pc.registerConstructor(HashMap JavaDoc.class, HashMap JavaDoc.class,
72             null);
73         Map JavaDoc map = (Map JavaDoc) pc.getInstance(HashMap JavaDoc.class);
74         assertNotNull(map);
75         assertTrue(map instanceof HashMap JavaDoc);
76     }
77
78
79     public void testImplementaionWithParametersIsAutomaticallyHidden() {
80         Container pc = createImplementationHidingPicoContainer();
81         pc.registerConstructor(Map JavaDoc.class, HashMap JavaDoc.class,
82             null);
83         Map JavaDoc map = (Map JavaDoc) pc.getInstance(Map JavaDoc.class);
84         assertNotNull(map);
85         assertFalse(map instanceof HashMap JavaDoc);
86     }
87 /*
88     public void testSerializedContainerCanRetrieveImplementation() throws PicoException, PicoInitializationException,
89             IOException, ClassNotFoundException {
90         try {
91             super.testSerializedContainerCanRetrieveImplementation();
92             fail("The ImplementationHidingPicoContainer should not be able to retrieve the component impl");
93         } catch (ClassCastException cce) {
94             // expected.
95         }
96     }
97 */

98     public void testExceptionThrowingFromHiddenComponent() {
99         Container pc = createImplementationHidingPicoContainer();
100         pc.registerConstructor(ActionListener JavaDoc.class, Burp.class);
101         try {
102             ActionListener JavaDoc ac = (ActionListener JavaDoc) pc.getInstance(ActionListener JavaDoc.class);
103             ac.actionPerformed(null);
104             fail("Oh no.");
105         } catch (RuntimeException JavaDoc e) {
106             assertEquals("woohoo", e.getMessage());
107         }
108     }
109     public void testProxyAsObject(){
110       final Container yan = createYanContainer();
111       yan.registerConstructor(String JavaDoc.class, (Class JavaDoc[])null);
112       final Component c = yan.getComponentOfType(CharSequence JavaDoc.class);
113       assertEquals(c, c);
114       final Object JavaDoc s1 = yan.getInstanceOfType(CharSequence JavaDoc.class);
115       final Object JavaDoc s2 = yan.getInstanceOfType(CharSequence JavaDoc.class);
116       assertEquals(s1, s2);
117       final HashMap JavaDoc map = new HashMap JavaDoc();
118       map.put(s1, s2);
119       assertEquals(s2, map.get(s1));
120     }
121     public static class Burp implements ActionListener JavaDoc {
122
123         public void actionPerformed(ActionEvent JavaDoc e) {
124             throw new RuntimeException JavaDoc("woohoo");
125         }
126     }
127     protected Container getContainerImpl(){
128       return new ProxyContainer();
129     }
130     public interface Man {
131       int getEndurance();
132     }
133     public interface Woman {
134       Man getMan();
135     }
136     public static class Husband implements Man {
137       public final Woman woman;
138
139       public Husband(Woman woman) {
140           this.woman = woman;
141       }
142
143       public int getEndurance() {
144           return 10;
145       }
146     }
147     public static class Wife implements Woman {
148       public final Man man;
149
150       public Wife(Man man) {
151           this.man = man;
152       }
153
154       public Man getMan() {
155           return man;
156       }
157     }
158     public class Superman implements Man {
159       public int getEndurance() {
160           return 1000;
161       }
162     }
163     public void testCircularDependency(){
164       final Container yan = createYanContainer();
165       yan.registerConstructor(Woman.class, Wife.class);
166       yan.registerConstructor(Man.class, Husband.class);
167       Woman woman = (Woman) yan.getInstance(Woman.class);
168       assertEquals(10, woman.getMan().getEndurance());
169       Man superman = new Superman();
170       //((Swappable)woman.getMan()).hotswap(superman);
171
assertTrue(Proxies.setProxyImplementation(woman.getMan(), superman));
172       assertEquals(1000, woman.getMan().getEndurance());
173       try{
174         Proxies.setProxyImplementation(woman, "abc");
175         fail("should have failed");
176       }
177       catch(IllegalArgumentException JavaDoc e){
178         assertEquals("object of type java.lang.String is not an instance of tests.jfun.yan.BaseProxyContainerTestCase$Woman",
179             e.getMessage());
180       }
181       assertFalse(Proxies.setProxyImplementation(superman, superman));
182     }
183 }
184
Popular Tags