KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nanocontainer > aop > dynaop > DynaopAspectablePicoContainerFactoryTestCase


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  * Idea by Rachel Davies, Original code by various *
9  *****************************************************************************/

10 package org.nanocontainer.aop.dynaop;
11
12 import org.nanocontainer.aop.AbstractAopTestCase;
13 import org.nanocontainer.aop.AspectablePicoContainer;
14 import org.nanocontainer.aop.AspectablePicoContainerFactory;
15 import org.nanocontainer.aop.LoggingInterceptor;
16 import org.nanocontainer.aop.PointcutsFactory;
17 import org.nanocontainer.testmodel.AnotherInterface;
18 import org.nanocontainer.testmodel.Dao;
19 import org.nanocontainer.testmodel.DaoImpl;
20 import org.nanocontainer.testmodel.IdGenerator;
21 import org.nanocontainer.testmodel.IdGeneratorImpl;
22 import org.nanocontainer.testmodel.Identifiable;
23 import org.nanocontainer.testmodel.IdentifiableMixin;
24 import org.nanocontainer.testmodel.OrderEntity;
25 import org.nanocontainer.testmodel.OrderEntityImpl;
26 import org.picocontainer.MutablePicoContainer;
27 import org.picocontainer.PicoContainer;
28 import org.picocontainer.defaults.DefaultPicoContainer;
29 import org.picocontainer.testmodel.SimpleTouchable;
30
31 /**
32  * @author Stephen Molitor
33  */

34 public class DynaopAspectablePicoContainerFactoryTestCase extends AbstractAopTestCase {
35
36     private AspectablePicoContainerFactory containerFactory = new DynaopAspectablePicoContainerFactory();
37     private AspectablePicoContainer pico = containerFactory.createContainer();
38     private PointcutsFactory cuts = pico.getPointcutsFactory();
39
40     public void testInterceptor() {
41         StringBuffer JavaDoc log = new StringBuffer JavaDoc();
42         pico.registerInterceptor(cuts.instancesOf(Dao.class), cuts.allMethods(), new LoggingInterceptor(log));
43         pico.registerComponentImplementation(Dao.class, DaoImpl.class);
44         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
45         verifyIntercepted(dao, log);
46     }
47
48     public void testContainerSuppliedInterceptor() {
49         pico.registerInterceptor(cuts.instancesOf(Dao.class), cuts.allMethods(), LoggingInterceptor.class);
50
51         pico.registerComponentImplementation("log", StringBuffer JavaDoc.class);
52         pico.registerComponentImplementation(LoggingInterceptor.class);
53         pico.registerComponentImplementation(Dao.class, DaoImpl.class);
54
55         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
56         StringBuffer JavaDoc log = (StringBuffer JavaDoc) pico.getComponentInstance("log");
57         verifyIntercepted(dao, log);
58     }
59
60     public void testComponentInterceptor() {
61         StringBuffer JavaDoc log = new StringBuffer JavaDoc();
62
63         pico.registerInterceptor(cuts.component("intercepted"), cuts.allMethods(), new LoggingInterceptor(log));
64         pico.registerComponentImplementation("intercepted", DaoImpl.class);
65         pico.registerComponentImplementation("notIntercepted", DaoImpl.class);
66
67         Dao intercepted = (Dao) pico.getComponentInstance("intercepted");
68         Dao notIntercepted = (Dao) pico.getComponentInstance("notIntercepted");
69
70         verifyIntercepted(intercepted, log);
71         verifyNotIntercepted(notIntercepted, log);
72     }
73
74     public void testContainerSuppliedComponentInterceptor() {
75         pico.registerInterceptor(cuts.component("intercepted"), cuts.allMethods(), LoggingInterceptor.class);
76
77         pico.registerComponentImplementation("log", StringBuffer JavaDoc.class);
78         pico.registerComponentImplementation(LoggingInterceptor.class);
79         pico.registerComponentImplementation("intercepted", DaoImpl.class);
80         pico.registerComponentImplementation("notIntercepted", DaoImpl.class);
81
82         StringBuffer JavaDoc log = (StringBuffer JavaDoc) pico.getComponentInstance("log");
83         Dao intercepted = (Dao) pico.getComponentInstance("intercepted");
84         Dao notIntercepted = (Dao) pico.getComponentInstance("notIntercepted");
85
86         verifyIntercepted(intercepted, log);
87         verifyNotIntercepted(notIntercepted, log);
88     }
89
90     public void testMixin() {
91         pico.registerMixin(cuts.instancesOf(Dao.class), IdentifiableMixin.class);
92         pico.registerComponentImplementation(Dao.class, DaoImpl.class);
93         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
94         verifyMixin(dao);
95         assertTrue(dao instanceof AnotherInterface);
96     }
97
98     public void testContainerSuppliedMixin() {
99         pico.registerComponentImplementation(IdGenerator.class, IdGeneratorImpl.class);
100         pico.registerComponentImplementation("order1", OrderEntityImpl.class);
101         pico.registerComponentImplementation("order2", OrderEntityImpl.class);
102         pico.registerMixin(cuts.instancesOf(OrderEntity.class), new Class JavaDoc[]{Identifiable.class},
103                 IdentifiableMixin.class);
104
105         Identifiable i1 = (Identifiable) pico.getComponentInstance("order1");
106         Identifiable i2 = (Identifiable) pico.getComponentInstance("order2");
107
108         assertEquals(new Integer JavaDoc(1), i1.getId());
109         assertEquals(new Integer JavaDoc(2), i2.getId());
110
111         i1.setId(new Integer JavaDoc(3));
112         assertEquals(new Integer JavaDoc(3), i1.getId());
113         assertEquals(new Integer JavaDoc(2), i2.getId());
114     }
115
116     public void testComponentMixin() {
117         pico.registerComponentImplementation("hasMixin", DaoImpl.class);
118         pico.registerComponentImplementation("noMixin", DaoImpl.class);
119
120         pico.registerMixin(cuts.component("hasMixin"), IdentifiableMixin.class);
121
122         Dao hasMixin = (Dao) pico.getComponentInstance("hasMixin");
123         Dao noMixin = (Dao) pico.getComponentInstance("noMixin");
124
125         verifyMixin(hasMixin);
126         verifyNoMixin(noMixin);
127         assertTrue(hasMixin instanceof AnotherInterface);
128     }
129
130     public void testContainerSuppliedComponentMixin() {
131         pico.registerComponentImplementation(IdGenerator.class, IdGeneratorImpl.class);
132         pico.registerMixin(cuts.componentName("hasMixin*"), new Class JavaDoc[]{Identifiable.class}, IdentifiableMixin.class);
133         pico.registerComponentImplementation("hasMixin1", OrderEntityImpl.class);
134         pico.registerComponentImplementation("hasMixin2", OrderEntityImpl.class);
135         pico.registerComponentImplementation("noMixin", OrderEntityImpl.class);
136
137         OrderEntity hasMixin1 = (OrderEntity) pico.getComponentInstance("hasMixin1");
138         OrderEntity hasMixin2 = (OrderEntity) pico.getComponentInstance("hasMixin2");
139         OrderEntity noMixin = (OrderEntity) pico.getComponentInstance("noMixin");
140
141         assertTrue(hasMixin1 instanceof Identifiable);
142         assertTrue(hasMixin2 instanceof Identifiable);
143         assertFalse(noMixin instanceof Identifiable);
144
145         assertEquals(new Integer JavaDoc(1), ((Identifiable) hasMixin1).getId());
146         assertEquals(new Integer JavaDoc(2), ((Identifiable) hasMixin2).getId());
147     }
148
149     public void testMixinExplicitInterfaces() {
150         pico.registerMixin(cuts.instancesOf(Dao.class), new Class JavaDoc[]{Identifiable.class}, IdentifiableMixin.class);
151         pico.registerComponentImplementation(Dao.class, DaoImpl.class);
152         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
153         verifyMixin(dao);
154         assertFalse(dao instanceof AnotherInterface);
155     }
156
157     public void testComponentMixinExplicitInterfaces() {
158         pico.registerComponentImplementation("hasMixin", DaoImpl.class);
159         pico.registerComponentImplementation("noMixin", DaoImpl.class);
160
161         pico.registerMixin(cuts.component("hasMixin"), new Class JavaDoc[]{Identifiable.class}, IdentifiableMixin.class);
162
163         Dao hasMixin = (Dao) pico.getComponentInstance("hasMixin");
164         Dao noMixin = (Dao) pico.getComponentInstance("noMixin");
165
166         verifyMixin(hasMixin);
167         verifyNoMixin(noMixin);
168
169         assertFalse(hasMixin instanceof AnotherInterface);
170     }
171
172     public void testCreateWithParentContainer() {
173         MutablePicoContainer parent = new DefaultPicoContainer();
174         parent.registerComponentInstance("key", "value");
175         AspectablePicoContainerFactory containerFactory = new DynaopAspectablePicoContainerFactory();
176         PicoContainer child = containerFactory.createContainer(parent);
177         assertEquals("value", child.getComponentInstance("key"));
178     }
179     
180     public void testMakeChildContainer(){
181         AspectablePicoContainerFactory aspectableContainerFactory = new DynaopAspectablePicoContainerFactory();
182         AspectablePicoContainer parent = aspectableContainerFactory.createContainer();
183         parent.registerComponentImplementation("t1", SimpleTouchable.class);
184         AspectablePicoContainer child = aspectableContainerFactory.makeChildContainer(parent);
185         Object JavaDoc t1 = child.getParent().getComponentInstance("t1");
186         assertNotNull(t1);
187         assertTrue(t1 instanceof SimpleTouchable);
188     }
189
190     public void testInterfacesWithClassPointcut() {
191         pico.registerComponentImplementation(Dao.class, DaoImpl.class);
192         pico.registerMixin(cuts.instancesOf(Dao.class), IdentifiableMixin.class);
193         pico.registerInterfaces(cuts.instancesOf(Dao.class), new Class JavaDoc[]{AnotherInterface.class});
194         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
195         assertTrue(dao instanceof Identifiable);
196         assertTrue(dao instanceof AnotherInterface);
197     }
198
199     public void testInterfacesWithClassPointcutNoAdvice() {
200         pico.registerComponentImplementation(Dao.class, DaoImpl.class);
201         pico.registerInterfaces(cuts.instancesOf(Dao.class), new Class JavaDoc[]{AnotherInterface.class});
202         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
203
204         // dynaop doesn't add any interfaces if there's no advice applied to the
205
// object:
206
assertFalse(dao instanceof AnotherInterface);
207     }
208
209     public void testInterfacesWithComponentPointcut() {
210         pico.registerComponentImplementation(Dao.class, DaoImpl.class);
211         pico.registerMixin(cuts.component(Dao.class), IdentifiableMixin.class);
212         pico.registerInterfaces(cuts.component(Dao.class), new Class JavaDoc[]{AnotherInterface.class});
213         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
214         assertTrue(dao instanceof Identifiable);
215         assertTrue(dao instanceof AnotherInterface);
216     }
217
218 }
Popular Tags