KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > soto > aop > AdviserTest


1 package org.sapia.soto.aop;
2
3 import junit.framework.TestCase;
4
5 import org.sapia.soto.SotoContainer;
6
7
8 /**
9  * @author Yanick Duchesne
10  * 29-Sep-2003
11  */

12 public class AdviserTest extends TestCase {
13   /**
14    * Constructor for AdviserTest.
15    */

16   public AdviserTest(String JavaDoc name) {
17     super(name);
18   }
19
20   public void testMethodWithoutSig() throws Exception JavaDoc {
21     Adviser adviser = new Adviser();
22     TestAroundAdvice advice;
23     AdviceDef def = adviser.createAdviceDef();
24     def.setAdvice(advice = new TestAroundAdvice());
25     def.setId("around");
26
27     MethodPointCut pc = adviser.createMethod();
28     pc.setName("first*");
29
30     AdviceRef ref = pc.createAdviceRef();
31     ref.setId("around");
32
33     TestService svc = new TestService();
34     svc = (TestService) adviser.advise(svc);
35     svc.firstMethod();
36     svc.firstMethod("someArg");
37
38     super.assertEquals(2, advice.preCount);
39     super.assertEquals(2, advice.postCount);
40   }
41
42   public void testMethodWithSig() throws Exception JavaDoc {
43     Adviser adviser = new Adviser();
44     TestAroundAdvice advice;
45     AdviceDef def = adviser.createAdviceDef();
46     def.setAdvice(advice = new TestAroundAdvice());
47     def.setId("around");
48
49     MethodPointCut pc = adviser.createMethod();
50     pc.setName("first*");
51     pc.setSig("java.lang.*");
52
53     AdviceRef ref = pc.createAdviceRef();
54     ref.setId("around");
55
56     TestService svc = new TestService();
57     svc = (TestService) adviser.advise(svc);
58     svc.firstMethod();
59     svc.firstMethod("someArg");
60
61     super.assertEquals(1, advice.preCount);
62     super.assertEquals(1, advice.postCount);
63   }
64
65   public void testBeforeAdvice() throws Exception JavaDoc {
66     Adviser adviser = new Adviser();
67     TestBeforeAdvice advice;
68     AdviceDef def = adviser.createAdviceDef();
69     def.setAdvice(advice = new TestBeforeAdvice());
70     def.setId("before");
71
72     MethodPointCut pc = adviser.createMethod();
73     pc.setName("*");
74
75     AdviceRef ref = pc.createAdviceRef();
76     ref.setId("before");
77
78     TestService svc = new TestService();
79     svc = (TestService) adviser.advise(svc);
80     svc.firstMethod();
81     svc.firstMethod("someArg");
82     svc.secondMethod();
83
84     super.assertEquals(3, advice.count);
85   }
86
87   public void testAfterAdvice() throws Exception JavaDoc {
88     Adviser adviser = new Adviser();
89     TestAfterAdvice advice;
90     AdviceDef def = adviser.createAdviceDef();
91     def.setAdvice(advice = new TestAfterAdvice());
92     def.setId("after");
93
94     MethodPointCut pc = adviser.createMethod();
95     pc.setName("*");
96
97     AdviceRef ref = pc.createAdviceRef();
98     ref.setId("after");
99
100     TestService svc = new TestService();
101     svc = (TestService) adviser.advise(svc);
102     svc.firstMethod();
103     svc.firstMethod("someArg");
104     svc.secondMethod();
105
106     super.assertEquals(3, advice.count);
107   }
108
109   public void testThrowsAdvice() throws Exception JavaDoc {
110     Adviser adviser = new Adviser();
111     TestThrowsAdvice advice;
112     AdviceDef def = adviser.createAdviceDef();
113     def.setAdvice(advice = new TestThrowsAdvice());
114     def.setId("throws");
115
116     MethodPointCut pc = adviser.createMethod();
117     pc.setName("*");
118
119     AdviceRef ref = pc.createAdviceRef();
120     ref.setId("throws");
121
122     TestService svc = new TestService();
123     svc = (TestService) adviser.advise(svc);
124
125     try {
126       svc.throwsMethod();
127     } catch (Exception JavaDoc e) {
128       //ok
129
}
130
131     super.assertTrue("Throws advice was not invoked", advice.invoked);
132   }
133
134   public void testReturnAdvice() throws Exception JavaDoc {
135     Adviser adviser = new Adviser();
136     TestReturnAdvice advice;
137     AdviceDef def = adviser.createAdviceDef();
138     def.setAdvice(advice = new TestReturnAdvice());
139     def.setId("return");
140
141     MethodPointCut pc = adviser.createMethod();
142     pc.setName("getName");
143
144     AdviceRef ref = pc.createAdviceRef();
145     ref.setId("return");
146
147     TestService svc = new TestService();
148     svc = (TestService) adviser.advise(svc);
149     svc.getName();
150     super.assertEquals(1, advice.count);
151   }
152
153   public void testGroup() throws Exception JavaDoc {
154     Adviser adviser = new Adviser();
155     TestAfterAdvice after = new TestAfterAdvice();
156     AdviceDef outer = adviser.createAdviceDef();
157     outer.setAdvice(after);
158     outer.setId("outer");
159
160     Group group = adviser.createGroup();
161     group.setId("test");
162
163     AdviceDef inner = group.createAdviceDef();
164     AdviceRef outerRef = group.createAdviceRef();
165     outerRef.setId("outer");
166
167     TestAroundAdvice adv = new TestAroundAdvice();
168     inner.setAdvice(adv);
169
170     MethodPointCut pc = adviser.createMethod();
171     pc.setName("*");
172
173     GroupRef ref = pc.createGroupRef();
174     ref.setId("test");
175
176     TestService svc = new TestService();
177     svc = (TestService) adviser.advise(svc);
178     svc.firstMethod();
179     super.assertEquals(1, adv.preCount);
180     super.assertEquals(1, adv.postCount);
181     super.assertEquals(1, after.count);
182   }
183
184   public void testConfig() throws Exception JavaDoc {
185     SotoContainer cont = new SotoContainer();
186     cont.load("org/sapia/soto/aop/aopConfig.xml");
187     cont.start();
188     cont.dispose();
189   }
190
191   public void testImplements() throws Exception JavaDoc {
192     Adviser adviser = new Adviser();
193     adviser.setImplements(
194       "java.io.Serializable, org.sapia.soto.aop.TestMarker*, java.**.Comparable");
195
196     TestImplementation impl = new TestImplementation();
197     super.assertTrue(adviser.matchesImplements(impl));
198     adviser.setImplements("**");
199     impl = new TestImplementation();
200     super.assertTrue(adviser.matchesImplements(impl));
201     adviser.setImplements("org.sapia.soto.aop.TestMarker*");
202     impl = new TestImplementation();
203     super.assertTrue(adviser.matchesImplements(impl));
204   }
205
206   public void testPreInvocation() throws Exception JavaDoc {
207     Adviser adviser = new Adviser();
208     TestBeforeAdviceInvoker first;
209     TestBeforeAdvice second;
210     TestAfterAdvice third;
211     AdviceDef firstDef = adviser.createAdviceDef();
212     AdviceDef secondDef = adviser.createAdviceDef();
213     AdviceDef thirdDef = adviser.createAdviceDef();
214     firstDef.setAdvice(first = new TestBeforeAdviceInvoker());
215     firstDef.setId("first");
216     secondDef.setAdvice(second = new TestBeforeAdvice());
217     secondDef.setId("second");
218     thirdDef.setAdvice(third = new TestAfterAdvice());
219     thirdDef.setId("third");
220
221     MethodPointCut pc = adviser.createMethod();
222     pc.setName("*");
223
224     pc.createAdviceRef().setId("first");
225     pc.createAdviceRef().setId("second");
226     pc.createAdviceRef().setId("third");
227
228     TestService svc = new TestService();
229     svc = (TestService) adviser.advise(svc);
230     svc.firstMethod();
231
232     Invocation inv = first.invocation;
233     super.assertTrue("Invocation not passed to advice", inv != null);
234     super.assertTrue("Invocation was not called", inv.wasInvoked());
235     super.assertEquals(0, second.count);
236     super.assertEquals(1, third.count);
237   }
238 }
239
Popular Tags