KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nanocontainer > script > groovy > GroovyNodeBuilderAopTestCase


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.script.groovy;
11
12 import java.io.StringReader JavaDoc;
13
14 import org.nanocontainer.script.AbstractScriptedContainerBuilderTestCase;
15 import org.nanocontainer.testmodel.Dao;
16 import org.nanocontainer.testmodel.Identifiable;
17 import org.picocontainer.PicoContainer;
18
19 /**
20  * @author Stephen Molitor
21  * @author Paul Hammant
22  * @author Aslak Hellesøy
23  * @author Mauro Talevi
24  */

25 public class GroovyNodeBuilderAopTestCase extends AbstractScriptedContainerBuilderTestCase {
26
27     public void testContainerScopedInterceptor() {
28         String JavaDoc script = "" +
29                 "package org.nanocontainer.script.groovy\n" +
30                 "import org.nanocontainer.testmodel.*\n" +
31                 "import org.nanocontainer.aop.dynaop.*\n" +
32                 "" +
33                 "log = new StringBuffer()\n" +
34                 "logger = new LoggingInterceptor(log)\n" +
35                 "\n" +
36                 "cuts = new DynaopPointcutsFactory()\n" +
37                 "builder = new DynaopGroovyNodeBuilder()\n" +
38                 "nano = builder.container() {\n" +
39                 " aspect(classCut:cuts.instancesOf(Dao.class), methodCut:cuts.allMethods(), interceptor:logger)\n" +
40                 " component(key:Dao, class:DaoImpl)\n" +
41                 " component(key:StringBuffer, instance:log)\n" +
42                 "}\n";
43
44         PicoContainer pico = buildContainer(script);
45         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
46         StringBuffer JavaDoc log = (StringBuffer JavaDoc) pico.getComponentInstance(StringBuffer JavaDoc.class);
47         verifyIntercepted(dao, log);
48     }
49
50     public void testContainerScopedPointcutWithNestedAdvices() {
51         String JavaDoc script = "" +
52                 "package org.nanocontainer.script.groovy\n" +
53                 "import org.nanocontainer.testmodel.*\n" +
54                 "import org.nanocontainer.aop.dynaop.*\n" +
55                 "" +
56                 "log = new StringBuffer()\n" +
57                 "logger = new LoggingInterceptor(log)\n" +
58                 "\n" +
59                 "cuts = new DynaopPointcutsFactory()\n" +
60                 "builder = new DynaopGroovyNodeBuilder()\n" +
61                 "nano = builder.container() {\n" +
62                 " pointcut(classCut:cuts.instancesOf(Dao.class), methodCut:cuts.allMethods()) {\n" +
63                 " aspect(interceptor:logger)\n" +
64                 " }\n" +
65                 " component(key:Dao, class:DaoImpl)\n" +
66                 " component(key:StringBuffer, instance:log)\n" +
67                 "}\n";
68
69         PicoContainer pico = buildContainer(script);
70         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
71         StringBuffer JavaDoc log = (StringBuffer JavaDoc) pico.getComponentInstance(StringBuffer JavaDoc.class);
72         verifyIntercepted(dao, log);
73     }
74
75     public void testContainerScopedContainerSuppliedInterceptor() {
76         String JavaDoc script = "" +
77                 "package org.nanocontainer.script.groovy\n" +
78                 "import org.nanocontainer.testmodel.*\n" +
79                 "import org.nanocontainer.aop.dynaop.*\n" +
80                 "cuts = new DynaopPointcutsFactory()\n" +
81                 "builder = new DynaopGroovyNodeBuilder()\n" +
82                 "nano = builder.container() {\n" +
83                 " aspect(classCut:cuts.instancesOf(Dao), methodCut:cuts.allMethods(), interceptorKey:LoggingInterceptor)\n" +
84                 " component(key:'log', class:StringBuffer)\n" +
85                 " component(LoggingInterceptor)\n" +
86                 " component(key:Dao, class:DaoImpl)\n" +
87                 "}\n";
88
89         PicoContainer pico = buildContainer(script);
90         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
91         StringBuffer JavaDoc log = (StringBuffer JavaDoc) pico.getComponentInstance("log");
92         verifyIntercepted(dao, log);
93     }
94
95     public void testComponentScopedInterceptor() {
96         String JavaDoc script = "" +
97                 "package org.nanocontainer.script.groovy\n" +
98                 "import org.nanocontainer.testmodel.*\n" +
99                 "import org.nanocontainer.aop.dynaop.*\n" +
100                 "log = new StringBuffer()\n" +
101                 "logger = new LoggingInterceptor(log)\n" +
102                 "\n" +
103                 "cuts = new DynaopPointcutsFactory()\n" +
104                 "builder = new DynaopGroovyNodeBuilder()\n" +
105                 "nano = builder.container() {\n" +
106                 " component(key:'intercepted', class:DaoImpl) {\n" +
107                 " aspect(methodCut:cuts.allMethods(), interceptor:logger)\n" +
108                 " }\n" +
109                 " component(key:'log', instance:log)\n" +
110                 " component(key:'notIntercepted', class:DaoImpl)\n" +
111                 "}\n";
112
113         PicoContainer pico = buildContainer(script);
114         Dao intercepted = (Dao) pico.getComponentInstance("intercepted");
115         Dao notIntercepted = (Dao) pico.getComponentInstance("notIntercepted");
116         StringBuffer JavaDoc log = (StringBuffer JavaDoc) pico.getComponentInstance("log");
117
118         verifyIntercepted(intercepted, log);
119         verifyNotIntercepted(notIntercepted, log);
120     }
121
122     public void testContainerScopedMixin() {
123         String JavaDoc script = "" +
124                 "package org.nanocontainer.script.groovy\n" +
125                 "import org.nanocontainer.testmodel.*\n" +
126                 "import org.nanocontainer.aop.dynaop.*\n" +
127                 "cuts = new DynaopPointcutsFactory()\n" +
128                 "builder = new DynaopGroovyNodeBuilder()\n" +
129                 "nano = builder.container() {\n" +
130                 " component(key:Dao, class:DaoImpl) \n" +
131                 " aspect(classCut:cuts.instancesOf(Dao), mixinClass:IdentifiableMixin)\n" +
132                 "}";
133
134         PicoContainer pico = buildContainer(script);
135         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
136         verifyMixin(dao);
137     }
138
139     public void testExplicitAspectsManagerAndDecorationDelegate() {
140         String JavaDoc script = "" +
141                 "package org.nanocontainer.script.groovy\n" +
142                 "import org.nanocontainer.testmodel.*\n" +
143                 "import org.nanocontainer.aop.dynaop.*\n" +
144                 "aspectsManager = new org.nanocontainer.aop.dynaop.DynaopAspectsManager()\n" +
145                 "cuts = aspectsManager.getPointcutsFactory()\n" +
146                 "decorator = new org.nanocontainer.aop.defaults.AopNodeBuilderDecorationDelegate(aspectsManager)\n" +
147                 "builder = new OldGroovyNodeBuilder(decorator) \n" +
148                 "nano = builder.container() {\n" +
149                 " component(key:Dao, class:DaoImpl) \n" +
150                 " aspect(classCut:cuts.instancesOf(Dao), mixinClass:IdentifiableMixin)\n" +
151                 "}";
152
153         PicoContainer pico = buildContainer(script);
154         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
155         verifyMixin(dao);
156     }
157
158     public void testCustomComponentAdapterFactory() {
159         String JavaDoc script = "" +
160                 "package org.nanocontainer.script.groovy\n" +
161                 "import org.nanocontainer.testmodel.*\n" +
162                 "import org.nanocontainer.aop.dynaop.*\n" +
163                 "intLog = new StringBuffer()\n" +
164                 "logger = new LoggingInterceptor(intLog)\n" +
165                 "cafLog = new StringBuffer()\n" +
166                 "caf = new TestComponentAdapterFactory(cafLog)\n" +
167                 "cuts = new DynaopPointcutsFactory()\n" +
168                 "builder = new DynaopGroovyNodeBuilder()\n" +
169                 "nano = builder.container(componentAdapterFactory:caf) {\n" +
170                 " aspect(classCut:cuts.instancesOf(Dao.class), methodCut:cuts.allMethods(), interceptor:logger)\n" +
171                 " component(key:Dao, class:DaoImpl)\n" +
172                 " component(key:'intLog', instance:intLog)\n" +
173                 " component(key:'cafLog', instance:cafLog)\n" +
174                 "}";
175
176         PicoContainer pico = buildContainer(script);
177         Dao dao = (Dao) pico.getComponentInstance(Dao.class);
178         StringBuffer JavaDoc intLog = (StringBuffer JavaDoc) pico.getComponentInstance("intLog");
179         verifyIntercepted(dao, intLog);
180         StringBuffer JavaDoc cafLog = (StringBuffer JavaDoc) pico.getComponentInstance("cafLog");
181         assertEquals("called", cafLog.toString());
182     }
183     
184     private PicoContainer buildContainer(String JavaDoc script) {
185         GroovyContainerBuilder builder = new GroovyContainerBuilder(new StringReader JavaDoc(script), getClass().getClassLoader());
186         return buildContainer(builder, null, "SOME_SCOPE");
187     }
188
189     private void verifyIntercepted(Dao dao, StringBuffer JavaDoc log) {
190         String JavaDoc before = log.toString();
191         String JavaDoc data = dao.loadData();
192         assertEquals("data", data);
193         assertEquals(before + "startend", log.toString());
194     }
195
196     private void verifyNotIntercepted(Dao dao, StringBuffer JavaDoc log) {
197         String JavaDoc before = log.toString();
198         String JavaDoc data = dao.loadData();
199         assertEquals("data", data);
200         assertEquals(before, log.toString());
201     }
202
203     private void verifyMixin(Object JavaDoc component) {
204         assertTrue(component instanceof Identifiable);
205         Identifiable identifiable = (Identifiable) component;
206         identifiable.setId("id");
207         assertEquals("id", identifiable.getId());
208     }
209
210 }
Popular Tags