KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > test > aop > dynamicgenadvisor > DynamicTester


1 /*
2   * JBoss, Home of Professional Open Source
3   * Copyright 2005, JBoss Inc., and individual contributors as indicated
4   * by the @authors tag. See the copyright.txt in the distribution for a
5   * full listing of individual contributors.
6   *
7   * This is free software; you can redistribute it and/or modify it
8   * under the terms of the GNU Lesser General Public License as
9   * published by the Free Software Foundation; either version 2.1 of
10   * the License, or (at your option) any later version.
11   *
12   * This software is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15   * Lesser General Public License for more details.
16   *
17   * You should have received a copy of the GNU Lesser General Public
18   * License along with this software; if not, write to the Free
19   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21   */

22 package org.jboss.test.aop.dynamicgenadvisor;
23
24 import junit.framework.Test;
25 import junit.framework.TestSuite;
26 import junit.textui.TestRunner;
27
28
29 import org.jboss.aop.Advised;
30 import org.jboss.aop.AspectManager;
31 import org.jboss.aop.Domain;
32 import org.jboss.aop.InstanceAdvisor;
33 import org.jboss.aop.advice.AdviceBinding;
34 import org.jboss.aop.advice.AdviceFactory;
35 import org.jboss.aop.advice.AspectDefinition;
36 import org.jboss.aop.introduction.AnnotationIntroduction;
37 import org.jboss.aop.metadata.DynamicSimpleClassMetadataLoader;
38 import org.jboss.test.aop.AOPTestWithSetup;
39
40 /**
41  * Comment
42  *
43  * @author <a HREF="mailto:kabir.khan@jboss.org">Bill Burke</a>
44  * @version $Revision$
45  */

46 public class DynamicTester extends AOPTestWithSetup
47 {
48    public static Test suite()
49    {
50       TestSuite suite = new TestSuite("DynamicTester");
51       suite.addTestSuite(DynamicTester.class);
52       return suite;
53    }
54    // Constants ----------------------------------------------------
55
// Attributes ---------------------------------------------------
56

57    // Static -------------------------------------------------------
58

59    // Constructors -------------------------------------------------
60
public DynamicTester(String JavaDoc name)
61    {
62       super(name);
63    }
64
65    public void testNotAdvised() throws Exception JavaDoc
66    {
67       System.out.println("TEST NOT ADVISED");
68       Interceptions.clear();
69       POJO pojo = new POJO();
70       pojo.i = 10;
71       pojo.j = 20;
72       pojo.someMethod(123);
73       pojo.notPrepared();
74       assertTrue(Interceptions.isEmpty());
75    }
76    
77    public void testConstructor() throws Exception JavaDoc
78    {
79       System.out.println("TEST CONSTRUCTOR");
80       Interceptions.clear();
81       AdviceBinding binding = new AdviceBinding("execution(org.jboss.test.aop.dynamicgenadvisor.POJO->new())", null);
82       String JavaDoc name = binding.getName();
83       binding.addInterceptor(MyInterceptor.class);
84       AspectManager.instance().addBinding(binding);
85       
86       POJO pojo = new POJO();
87       assertEquals(1, Interceptions.size());
88       assertEquals(Interceptions.getConstructorName("MyInterceptor", "POJO"), Interceptions.get(0));
89       
90       AdviceBinding binding2 = new AdviceBinding("execution(org.jboss.test.aop.dynamicgenadvisor.POJO->new())", null);
91       String JavaDoc name2 = binding2.getName();
92       AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect");
93       binding2.addInterceptorFactory(new AdviceFactory(myAspect, "intercept"));
94       binding2.addInterceptor(MyInterceptor.class);
95       AspectManager.instance().addBinding(binding2);
96       
97       Interceptions.clear();
98       pojo = new POJO();
99       assertEquals(3, Interceptions.size());
100       assertEquals(Interceptions.getConstructorName("MyInterceptor", "POJO"), Interceptions.get(0));
101       assertEquals(Interceptions.getConstructorName("MyAspect", "POJO"), Interceptions.get(1));
102       assertEquals(Interceptions.getConstructorName("MyInterceptor", "POJO"), Interceptions.get(2));
103       
104       Interceptions.clear();
105       AspectManager.instance().removeBinding(name);
106       pojo = new POJO();
107       assertEquals(2, Interceptions.size());
108       assertEquals(Interceptions.getConstructorName("MyAspect", "POJO"), Interceptions.get(0));
109       assertEquals(Interceptions.getConstructorName("MyInterceptor", "POJO"), Interceptions.get(1));
110       
111       Interceptions.clear();
112       AspectManager.instance().removeBinding(name2);
113       pojo = new POJO();
114       assertTrue(Interceptions.isEmpty());
115    }
116
117    
118    public void testConstruction() throws Exception JavaDoc
119    {
120       System.out.println("TEST CONSTRUCTION");
121       Interceptions.clear();
122       AdviceBinding binding = new AdviceBinding("construction(org.jboss.test.aop.dynamicgenadvisor.POJO->new())", null);
123       String JavaDoc name = binding.getName();
124       binding.addInterceptor(MyInterceptor.class);
125       AspectManager.instance().addBinding(binding);
126       
127       POJO pojo = new POJO();
128       assertEquals(1, Interceptions.size());
129       assertEquals(Interceptions.getConstructionName("MyInterceptor", "POJO"), Interceptions.get(0));
130       
131       AdviceBinding binding2 = new AdviceBinding("construction(org.jboss.test.aop.dynamicgenadvisor.POJO->new())", null);
132       String JavaDoc name2 = binding2.getName();
133       AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect");
134       binding2.addInterceptorFactory(new AdviceFactory(myAspect, "intercept"));
135       binding2.addInterceptor(MyInterceptor.class);
136       AspectManager.instance().addBinding(binding2);
137       
138       Interceptions.clear();
139       pojo = new POJO();
140       assertEquals(3, Interceptions.size());
141       assertEquals(Interceptions.getConstructionName("MyInterceptor", "POJO"), Interceptions.get(0));
142       assertEquals(Interceptions.getConstructionName("MyAspect", "POJO"), Interceptions.get(1));
143       assertEquals(Interceptions.getConstructionName("MyInterceptor", "POJO"), Interceptions.get(2));
144       
145       Interceptions.clear();
146       AspectManager.instance().removeBinding(name);
147       pojo = new POJO();
148       assertEquals(2, Interceptions.size());
149       assertEquals(Interceptions.getConstructionName("MyAspect", "POJO"), Interceptions.get(0));
150       assertEquals(Interceptions.getConstructionName("MyInterceptor", "POJO"), Interceptions.get(1));
151       
152       Interceptions.clear();
153       AspectManager.instance().removeBinding(name2);
154       pojo = new POJO();
155       assertTrue(Interceptions.isEmpty());
156    }
157
158    public void testMethodExecution() throws Exception JavaDoc
159    {
160       System.out.println("TEST METHOD");
161       Interceptions.clear();
162       AdviceBinding binding = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null);
163       String JavaDoc name = binding.getName();
164       binding.addInterceptor(MyInterceptor.class);
165       AspectManager.instance().addBinding(binding);
166       
167       POJO pojo = new POJO();
168       pojo.someMethod(123);
169       assertEquals(1, Interceptions.size());
170       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
171       
172       AdviceBinding binding2 = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null);
173       String JavaDoc name2 = binding2.getName();
174       AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect");
175       binding2.addInterceptorFactory(new AdviceFactory(myAspect, "intercept"));
176       binding2.addInterceptor(MyInterceptor.class);
177       AspectManager.instance().addBinding(binding2);
178       
179       Interceptions.clear();
180       pojo.someMethod(123);
181       assertEquals(3, Interceptions.size());
182       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
183       assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(1));
184       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(2));
185       
186       Interceptions.clear();
187       AspectManager.instance().removeBinding(name);
188       pojo.someMethod(123);
189       assertEquals(2, Interceptions.size());
190       assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(0));
191       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(1));
192       
193       Interceptions.clear();
194       AspectManager.instance().removeBinding(name2);
195       pojo.someMethod(123);
196       assertTrue(Interceptions.isEmpty());
197    }
198
199    public void testFields() throws Exception JavaDoc
200    {
201       System.out.println("TEST FIELDS");
202       AdviceBinding binding = new AdviceBinding("set(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null);
203       String JavaDoc name = binding.getName();
204       binding.addInterceptor(MyInterceptor.class);
205       AspectManager.instance().addBinding(binding);
206       
207       Interceptions.clear();
208       POJO pojo = new POJO();
209       pojo.i = 5;
210       assertEquals(5, pojo.i);
211       POJO.j = 0;
212       assertEquals(0, POJO.j);
213       assertEquals(1, Interceptions.size());
214       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0));
215
216       AdviceBinding binding2 = new AdviceBinding("get(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null);
217       String JavaDoc name2 = binding2.getName();
218       binding2.addInterceptor(MyInterceptor.class);
219       AspectManager.instance().addBinding(binding2);
220       
221       Interceptions.clear();
222       pojo.i = 5;
223       assertEquals(5, pojo.i);
224       POJO.j++;
225       assertEquals(2, Interceptions.size());
226       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0));
227       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(1));
228
229       AdviceBinding binding3 = new AdviceBinding("field(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null);
230       String JavaDoc name3 = binding3.getName();
231       AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect");
232       binding3.addInterceptorFactory(new AdviceFactory(myAspect, "intercept"));
233       binding3.addInterceptor(MyInterceptor.class);
234       AspectManager.instance().addBinding(binding3);
235       
236       Interceptions.clear();
237       pojo.i = 20;
238       assertEquals(3, Interceptions.size());
239       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0));
240       assertEquals(Interceptions.getFieldWriteName("MyAspect", "POJO", "i"), Interceptions.get(1));
241       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(2));
242       
243       Interceptions.clear();
244       assertEquals(20, pojo.i);
245       assertEquals(3, Interceptions.size());
246       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(0));
247       assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(1));
248       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(2));
249       
250       AspectManager.instance().removeBinding(name);
251       AspectManager.instance().removeBinding(name2);
252
253       AdviceBinding binding4 = new AdviceBinding("field(static * org.jboss.test.aop.dynamicgenadvisor.POJO->j)", null);
254       String JavaDoc name4 = binding4.getName();
255       binding4.addInterceptor(MyInterceptor.class);
256       AspectManager.instance().addBinding(binding4);
257       
258       Interceptions.clear();
259       pojo.i=15;
260       assertEquals(15, pojo.i);
261       assertEquals(4, Interceptions.size());
262       assertEquals(Interceptions.getFieldWriteName("MyAspect", "POJO", "i"), Interceptions.get(0));
263       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(1));
264       assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(2));
265       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(3));
266
267       Interceptions.clear();
268       assertEquals(2, ++POJO.j);
269       assertEquals(2, Interceptions.size());
270       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "j"), Interceptions.get(0));
271       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "j"), Interceptions.get(1));
272       
273       Interceptions.clear();
274       AspectManager.instance().removeBinding(name3);
275       AspectManager.instance().removeBinding(name4);
276       pojo.i++;
277       POJO.j++;
278       assertTrue(Interceptions.isEmpty());
279    }
280
281    public void testSimpleInstanceUsingDomainForMethod()throws Exception JavaDoc
282    {
283       System.out.println("TEST SIMPLE INSTANCE USING DOMAIN FOR METHOD");
284       POJO pojo1 = new POJO();
285       POJO pojo2 = new POJO();
286       
287       AdviceBinding binding = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null);
288       String JavaDoc name = binding.getName();
289       binding.addInterceptor(MyInterceptor.class);
290       getInstanceDomain(pojo2).addBinding(binding);
291       
292       Interceptions.clear();
293       pojo1.someMethod(123);
294       assertTrue(Interceptions.isEmpty());
295       
296       Interceptions.clear();
297       pojo2.someMethod(123);
298       assertEquals(1, Interceptions.size());
299       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
300
301       getInstanceDomain(pojo2).removeBinding(name);
302       
303       Interceptions.clear();
304       pojo1.someMethod(123);
305       pojo2.someMethod(123);
306       assertTrue(Interceptions.isEmpty());
307       
308       
309    }
310
311    public void testInstanceUsingDomainForMethod()throws Exception JavaDoc
312    {
313       System.out.println("TEST INSTANCE USING DOMAIN FOR METHOD");
314       AdviceBinding bindingTopA = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null);
315       String JavaDoc nameTopA = bindingTopA.getName();
316       bindingTopA.addInterceptor(MyInterceptor.class);
317       AspectManager.instance().addBinding(bindingTopA);
318       
319       POJO pojo1 = new POJO();
320       POJO pojo2 = new POJO();
321       
322       Interceptions.clear();
323       pojo1.someMethod(123);
324       pojo2.someMethod(123);
325       assertEquals(2, Interceptions.size());
326       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
327       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(1));
328       
329       //Add instance advices
330
AdviceBinding bindingA = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null);
331       String JavaDoc nameA = bindingA.getName();
332       bindingA.addInterceptor(MyInterceptor.class);
333       getInstanceDomain(pojo1).addBinding(bindingA);
334       
335       AdviceBinding bindingB = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null);
336       String JavaDoc nameB = bindingB.getName();
337       AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect");
338       bindingB.addInterceptorFactory(new AdviceFactory(myAspect, "intercept"));
339       getInstanceDomain(pojo2).addBinding(bindingB);
340       
341       System.out.println("Added instance advices");
342       Interceptions.clear();
343       pojo1.someMethod(123);
344       assertEquals(2, Interceptions.size());
345       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
346       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(1));
347       
348       
349       Interceptions.clear();
350       pojo2.someMethod(123);
351       assertEquals(2, Interceptions.size());
352       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
353       assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(1));
354      
355       //Add top level advice
356
POJO pojo3 = new POJO();
357       AdviceBinding bindingTopB = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null);
358       String JavaDoc nameTopB = bindingTopB.getName();
359       bindingTopB.addInterceptor(YourInterceptor.class);
360       AspectManager.instance().addBinding(bindingTopB);
361       
362       System.out.println("Added top level advice");
363       
364       Interceptions.clear();
365       pojo1.someMethod(123);
366       assertEquals(3, Interceptions.size());
367       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
368       assertEquals(Interceptions.getMethodName("YourInterceptor", "POJO", "someMethod"), Interceptions.get(1));
369       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(2));
370
371       Interceptions.clear();
372       pojo2.someMethod(123);
373       assertEquals(3, Interceptions.size());
374       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
375       assertEquals(Interceptions.getMethodName("YourInterceptor", "POJO", "someMethod"), Interceptions.get(1));
376       assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(2));
377
378       
379       Interceptions.clear();
380       pojo3.someMethod(123);
381       assertEquals(2, Interceptions.size());
382       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
383       assertEquals(Interceptions.getMethodName("YourInterceptor", "POJO", "someMethod"), Interceptions.get(1));
384
385       
386       AspectManager.instance().removeBinding(nameTopB);
387
388       Interceptions.clear();
389       pojo1.someMethod(123);
390       assertEquals(2, Interceptions.size());
391       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
392       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(1));
393       
394       Interceptions.clear();
395       pojo2.someMethod(123);
396       assertEquals(2, Interceptions.size());
397       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
398       assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(1));
399       
400       getInstanceDomain(pojo1).removeBinding(nameA);
401       
402       Interceptions.clear();
403       pojo1.someMethod(123);
404       assertEquals(1, Interceptions.size());
405       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
406       
407       AspectManager.instance().removeBinding(nameTopA);
408       
409       Interceptions.clear();
410       pojo1.someMethod(123);
411       assertEquals(0, Interceptions.size());
412       
413       Interceptions.clear();
414       
415       pojo2.someMethod(123);
416       assertEquals(1, Interceptions.size());
417       assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(0));
418
419       getInstanceDomain(pojo2).removeBinding(nameB);
420
421       Interceptions.clear();
422       pojo1.someMethod(123);
423       pojo2.someMethod(123);
424       assertEquals(0, Interceptions.size());
425    }
426    
427    public void testSimpleInstanceUsingDomainForField() throws Exception JavaDoc
428    {
429       System.out.println("TEST SIMPLE INSTANCE USING DOMAIN FOR FIELD");
430       POJO pojo1 = new POJO();
431       POJO pojo2 = new POJO();
432       
433       AdviceBinding binding = new AdviceBinding("set(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null);
434       String JavaDoc name = binding.getName();
435       AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect");
436       binding.addInterceptorFactory(new AdviceFactory(myAspect, "intercept"));
437       getInstanceDomain(pojo2).addBinding(binding);
438       
439       Interceptions.clear();
440       pojo1.i = 10;
441       assertEquals(10, pojo1.i);
442       assertTrue(Interceptions.isEmpty());
443       
444       Interceptions.clear();
445       pojo2.i = 20;
446       assertEquals(20, pojo2.i);
447       assertEquals(1, Interceptions.size());
448       assertEquals(Interceptions.getFieldWriteName("MyAspect", "POJO", "i"), Interceptions.get(0));
449
450       AdviceBinding binding2 = new AdviceBinding("get(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null);
451       String JavaDoc name2 = binding2.getName();
452       binding2.addInterceptor(MyInterceptor.class);
453       getInstanceDomain(pojo2).addBinding(binding2);
454       
455       Interceptions.clear();
456       pojo2.i = 30;
457       assertEquals(30, pojo2.i);
458       assertEquals(2, Interceptions.size());
459       assertEquals(Interceptions.getFieldWriteName("MyAspect", "POJO", "i"), Interceptions.get(0));
460       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(1));
461
462       
463       getInstanceDomain(pojo2).removeBinding(name);
464       
465       Interceptions.clear();
466       pojo1.i = 15;
467       assertEquals(15, pojo1.i);
468       assertTrue(Interceptions.isEmpty());
469       
470       pojo2.i = 40;
471       assertEquals(0, Interceptions.size());
472       assertEquals(40, pojo2.i);
473       assertEquals(1, Interceptions.size());
474       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(0));
475
476       getInstanceDomain(pojo2).removeBinding(name2);
477       
478       Interceptions.clear();
479       pojo1.i = pojo2.i;
480       pojo2.i = pojo2.i;
481       assertTrue(Interceptions.isEmpty());
482    }
483
484    public void testInstanceUsingDomainForField()throws Exception JavaDoc
485    {
486       System.out.println("TEST INSTANCE USING DOMAIN FOR FIELD");
487       AdviceBinding bindingTopA = new AdviceBinding("field(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null);
488       String JavaDoc nameTopA = bindingTopA.getName();
489       bindingTopA.addInterceptor(MyInterceptor.class);
490       AspectManager.instance().addBinding(bindingTopA);
491       
492       POJO pojo1 = new POJO();
493       POJO pojo2 = new POJO();
494       
495       Interceptions.clear();
496       pojo1.i = 10;
497       pojo2.i=20;
498       assertEquals(10, pojo1.i);
499       assertEquals(20, pojo2.i);
500       assertEquals(4, Interceptions.size());
501       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0));
502       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(1));
503       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(2));
504       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(3));
505       
506       //Add instance advices
507
AdviceBinding bindingA = new AdviceBinding("set(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null);
508       String JavaDoc nameA = bindingA.getName();
509       bindingA.addInterceptor(MyInterceptor.class);
510       getInstanceDomain(pojo1).addBinding(bindingA);
511       
512       AdviceBinding bindingB = new AdviceBinding("get(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null);
513       String JavaDoc nameB = bindingB.getName();
514       AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect");
515       bindingB.addInterceptorFactory(new AdviceFactory(myAspect, "intercept"));
516       getInstanceDomain(pojo2).addBinding(bindingB);
517       
518       System.out.println("Added instance advices");
519       Interceptions.clear();
520       pojo1.i = 50;
521       assertEquals(50, pojo1.i);
522       assertEquals(3, Interceptions.size());
523       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0));
524       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(1));
525       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(2));
526       
527       Interceptions.clear();
528       pojo2.i = 100;
529       assertEquals(100, pojo2.i);
530       assertEquals(3, Interceptions.size());
531       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0));
532       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(1));
533       assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(2));
534      
535       //Add top level advice
536
POJO pojo3 = new POJO();
537       AdviceBinding bindingTopB = new AdviceBinding("field(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null);
538       String JavaDoc nameTopB = bindingTopB.getName();
539       bindingTopB.addInterceptor(YourInterceptor.class);
540       AspectManager.instance().addBinding(bindingTopB);
541       
542       System.out.println("Added top level advice");
543       
544       Interceptions.clear();
545       pojo1.i = 66;
546       assertEquals(66, pojo1.i);
547       assertEquals(5, Interceptions.size());
548       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0));
549       assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(1));
550       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(2));
551       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(3));
552       assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(4));
553
554       Interceptions.clear();
555       pojo2.i = 99;
556       assertEquals(99, pojo2.i);
557       assertEquals(5, Interceptions.size());
558       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0));
559       assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(1));
560       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(2));
561       assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(3));
562       assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(4));
563
564       
565       Interceptions.clear();
566       pojo3.i = 12;
567       assertEquals(12, pojo3.i);
568       assertEquals(4, Interceptions.size());
569       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0));
570       assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(1));
571       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(2));
572       assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(3));
573
574       
575       AspectManager.instance().removeBinding(nameTopA);
576       Interceptions.clear();
577       pojo1.i = 50;
578       assertEquals(50, pojo1.i);
579       assertEquals(3, Interceptions.size());
580       assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(0));
581       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(1));
582       assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(2));
583       
584       Interceptions.clear();
585       pojo2.i = 100;
586       assertEquals(100, pojo2.i);
587       assertEquals(3, Interceptions.size());
588       assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(0));
589       assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(1));
590       assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(2));
591
592
593       getInstanceDomain(pojo1).removeBinding(nameA);
594       
595       Interceptions.clear();
596       pojo1.i = 50;
597       assertEquals(50, pojo1.i);
598       assertEquals(2, Interceptions.size());
599       assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(0));
600       assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(1));
601       
602       Interceptions.clear();
603       pojo2.i = 100;
604       assertEquals(100, pojo2.i);
605       assertEquals(3, Interceptions.size());
606       assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(0));
607       assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(1));
608       assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(2));
609
610       AspectManager.instance().removeBinding(nameTopB);
611       Interceptions.clear();
612       pojo1.i = 14;
613       assertEquals(14, pojo1.i);
614       pojo2.i = 100;
615       assertEquals(100, pojo2.i);
616       assertEquals(1, Interceptions.size());
617       assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(0));
618
619       getInstanceDomain(pojo2).removeBinding(nameB);
620       
621       Interceptions.clear();
622       pojo1.i = 123;
623       assertEquals(123, pojo1.i);
624       pojo2.i = 123;
625       assertEquals(123, pojo2.i);
626       assertEquals(0, Interceptions.size());
627    }
628    
629    public void testInstanceUsingOldApiForMethod() throws Exception JavaDoc
630    {
631       System.out.println("TEST INSTANCE USING OLD API FOR METHOD");
632       POJO pojo1 = new POJO();
633       AdviceBinding bindingTopA = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.*POJO->someMethod*(..))", null);
634       String JavaDoc nameTopA = bindingTopA.getName();
635       AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect");
636       bindingTopA.addInterceptorFactory(new AdviceFactory(myAspect, "intercept"));
637       AspectManager.instance().addBinding(bindingTopA);
638       
639       Interceptions.clear();
640       pojo1.someMethod(123);
641       assertEquals(1, Interceptions.size());
642       assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(0));
643       
644       System.out.println("---- Adding more interceptors");
645       
646       InstanceAdvisor pojoIa1 = ((Advised)pojo1)._getInstanceAdvisor();
647       pojoIa1.insertInterceptor(new MyInterceptor());
648       
649       Interceptions.clear();
650       pojo1.someMethod(123);
651       assertEquals(2, Interceptions.size());
652       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
653       assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(1));
654
655       pojoIa1.appendInterceptor(new YourInterceptor());
656       
657       Interceptions.clear();
658       pojo1.someMethod(123);
659       assertEquals(3, Interceptions.size());
660       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
661       assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(1));
662       assertEquals(Interceptions.getMethodName("YourInterceptor", "POJO", "someMethod"), Interceptions.get(2));
663
664       System.out.println("Testing SubPOJO");
665       SubPOJO sub1 = new SubPOJO();
666       Interceptions.clear();
667       sub1.someMethod(123);
668       assertEquals(1, Interceptions.size());
669       assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(0));
670       
671       InstanceAdvisor subPojoIa1 = ((Advised)sub1)._getInstanceAdvisor();
672       subPojoIa1.insertInterceptor(new MyInterceptor());
673       subPojoIa1.appendInterceptor(new YourInterceptor());
674       
675       Interceptions.clear();
676       sub1.someMethod(123);
677       assertEquals(3, Interceptions.size());
678       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
679       assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(1));
680       assertEquals(Interceptions.getMethodName("YourInterceptor", "POJO", "someMethod"), Interceptions.get(2));
681       
682       AspectManager.instance().removeBinding(nameTopA);
683    }
684    
685    public void testAddAnnotation() throws Exception JavaDoc
686    {
687       System.out.println("TEST ADD ANNOTATION TO INSTANCE");
688       POJO pojo1 = new POJO();
689       POJO pojo2 = new POJO();
690       POJO pojo3 = new POJO();
691       POJO pojo4 = new POJO();
692
693       AnnotationIntroduction intro1 = AnnotationIntroduction.createClassAnnotationIntroduction(
694             "org.jboss.test.aop.dynamicgenadvisor.POJO",
695             "@org.jboss.test.aop.dynamicgenadvisor.MyAnnotation",
696             true);
697       getInstanceDomain(pojo1).addAnnotationOverride(intro1);
698       AdviceBinding binding1 = new AdviceBinding("execution(* @org.jboss.test.aop.dynamicgenadvisor.MyAnnotation->someMethod*(..))", null);
699       binding1.addInterceptor(MyInterceptor.class);
700       getInstanceDomain(pojo1).addBinding(binding1);
701
702       AnnotationIntroduction intro2 = AnnotationIntroduction.createFieldAnnotationIntroduction(
703             "int org.jboss.test.aop.dynamicgenadvisor.POJO->i",
704             "@org.jboss.test.aop.dynamicgenadvisor.MyAnnotation",
705             true);
706       getInstanceDomain(pojo2).addAnnotationOverride(intro2);
707       AdviceBinding binding2 = new AdviceBinding("field(* org.jboss.test.aop.dynamicgenadvisor.POJO->@org.jboss.test.aop.dynamicgenadvisor.MyAnnotation)", null);
708       binding2.addInterceptor(MyInterceptor.class);
709       getInstanceDomain(pojo2).addBinding(binding2);
710
711       AnnotationIntroduction intro3 = AnnotationIntroduction.createMethodAnnotationIntroduction(
712             "* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..)",
713             "@org.jboss.test.aop.dynamicgenadvisor.MyAnnotation",
714             true);
715       getInstanceDomain(pojo3).addAnnotationOverride(intro3);
716       AdviceBinding binding3 = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->@org.jboss.test.aop.dynamicgenadvisor.MyAnnotation(..))", null);
717       binding3.addInterceptor(MyInterceptor.class);
718       getInstanceDomain(pojo3).addBinding(binding3);
719
720       
721       System.out.println("--- POJO1");
722       Interceptions.clear();
723       pojo1.someMethod(123);
724       pojo1.notPrepared();
725       pojo1.i = pojo1.i;
726       assertEquals(1, Interceptions.size());
727       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
728       
729       System.out.println("--- POJO2");
730       Interceptions.clear();
731       pojo2.someMethod(123);
732       pojo2.notPrepared();
733       pojo2.i = pojo2.i;
734       assertEquals(2, Interceptions.size());
735       assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(0));
736       assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(1));
737
738       System.out.println("--- POJO3");
739       Interceptions.clear();
740       pojo3.someMethod(123);
741       pojo3.notPrepared();
742       pojo3.i = pojo3.i;
743       assertEquals(1, Interceptions.size());
744       assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0));
745       
746       System.out.println("--- POJO4");
747       Interceptions.clear();
748       pojo4.someMethod(123);
749       pojo4.notPrepared();
750       pojo4.i = pojo4.i;
751       assertEquals(0, Interceptions.size());
752    }
753    
754    
755    public void testAddClassMetadata()throws Exception JavaDoc
756    {
757       System.out.println("TEST ADD CLASS METADATA");
758
759       DynamicSimpleClassMetadataLoader loader = new DynamicSimpleClassMetadataLoader(
760             "T1", "TEST", "org.jboss.test.aop.dynamicgenadvisor.POJO");
761       loader.addDefaultMetaData("default", "default");
762       loader.addClassMetaData("class", "class");
763       loader.addMethodMetaData("* someMethod(..)", "fm", "someMethod");
764       loader.addFieldMetaData("i", "fm", "i");
765       AspectManager.instance().addClassMetaData(loader.getClassMetaDataBinding());
766       
767       AdviceBinding binding = new AdviceBinding("all(org.jboss.test.aop.dynamicgenadvisor.POJO)", null);
768       binding.addInterceptor(MetadataInterceptor.class);
769       AspectManager.instance().addBinding(binding);
770       
771       POJO pojo = new POJO();
772       
773       MetadataInterceptor.clear();
774       pojo.someMethod(123);
775       pojo.i = 100;
776       pojo.notPrepared();
777       assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size());
778       assertEquals(2, MetadataInterceptor.lastClassMetadata.size());
779       assertEquals(1, MetadataInterceptor.lastMethodMetadata.size());
780       assertEquals(1, MetadataInterceptor.lastFieldMetadata.size());
781       
782       //Make sure we get the metadata expected
783
assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(0));
784       assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(1));
785       
786       assertEquals("class", MetadataInterceptor.lastClassMetadata.get(0));
787       assertEquals("class", MetadataInterceptor.lastClassMetadata.get(1));
788       
789       assertEquals("someMethod", MetadataInterceptor.lastMethodMetadata.get(0));
790       
791       assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0));
792       
793       AspectManager.instance().removeClassMetaData(loader.getClassMetaDataBinding().getName());
794
795       MetadataInterceptor.clear();
796       pojo.someMethod(123);
797       pojo.i = 100;
798       pojo.notPrepared();
799       assertEquals(0, MetadataInterceptor.lastDefaultMetadata.size());
800       assertEquals(0, MetadataInterceptor.lastClassMetadata.size());
801       assertEquals(0, MetadataInterceptor.lastMethodMetadata.size());
802       assertEquals(0, MetadataInterceptor.lastFieldMetadata.size());
803       
804       //Try adding metadata again now that instance already exists
805
AspectManager.instance().addClassMetaData(loader.getClassMetaDataBinding());
806
807       MetadataInterceptor.clear();
808       pojo.someMethod(123);
809       pojo.i = 100;
810       pojo.notPrepared();
811       assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size());
812       assertEquals(2, MetadataInterceptor.lastClassMetadata.size());
813       assertEquals(1, MetadataInterceptor.lastMethodMetadata.size());
814       assertEquals(1, MetadataInterceptor.lastFieldMetadata.size());
815       
816       //Make sure we get the metadata expected
817
assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(0));
818       assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(1));
819       
820       assertEquals("class", MetadataInterceptor.lastClassMetadata.get(0));
821       assertEquals("class", MetadataInterceptor.lastClassMetadata.get(1));
822       
823       assertEquals("someMethod", MetadataInterceptor.lastMethodMetadata.get(0));
824       
825       assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0));
826       
827       AspectManager.instance().removeClassMetaData(loader.getClassMetaDataBinding().getName());
828
829       MetadataInterceptor.clear();
830       pojo.someMethod(123);
831       pojo.i = 100;
832       pojo.notPrepared();
833       assertEquals(0, MetadataInterceptor.lastDefaultMetadata.size());
834       assertEquals(0, MetadataInterceptor.lastClassMetadata.size());
835       assertEquals(0, MetadataInterceptor.lastMethodMetadata.size());
836       assertEquals(0, MetadataInterceptor.lastFieldMetadata.size());
837       
838       AspectManager.instance().removeBinding(binding.getName());
839       MetadataInterceptor.clear();
840       pojo.someMethod(123);
841       assertFalse(MetadataInterceptor.intercepted);
842    }
843
844    public void testBindingsUpdatedWhenAddMetadata() throws Exception JavaDoc
845    {
846       System.out.println("TEST BINDINGS UPDATED WHEN ADD METADATA");
847       
848       AdviceBinding binding = new AdviceBinding("all(@TEST)", null);
849       binding.addInterceptor(MetadataInterceptor.class);
850       AspectManager.instance().addBinding(binding);
851       
852       MetadataInterceptor.clear();
853       POJO pojox = new POJO();
854       pojox.someMethod(123);
855       assertFalse(MetadataInterceptor.intercepted);
856       
857       //Add metadata so binding takes effect
858
DynamicSimpleClassMetadataLoader loader = new DynamicSimpleClassMetadataLoader(
859             "DA", "TEST", "org.jboss.test.aop.dynamicgenadvisor.POJO");
860             loader.addDefaultMetaData("default", "default");
861             loader.addClassMetaData("class", "class");
862             loader.addMethodMetaData("* someMethod(..)", "fm", "someMethod");
863             loader.addFieldMetaData("i", "fm", "i");
864             AspectManager.instance().addClassMetaData(loader.getClassMetaDataBinding());
865             
866       MetadataInterceptor.clear();
867       POJO pojo = new POJO();
868       pojo.someMethod(123);
869       int i = pojo.i;
870       assertTrue(MetadataInterceptor.intercepted);
871       assertEquals(3, MetadataInterceptor.lastDefaultMetadata.size());
872       assertEquals(3, MetadataInterceptor.lastClassMetadata.size());
873       assertEquals(1, MetadataInterceptor.lastMethodMetadata.size());
874       assertEquals(1, MetadataInterceptor.lastFieldMetadata.size());
875       
876       assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(0));
877       assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(1));
878       assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(2));
879       
880       assertEquals("class", MetadataInterceptor.lastClassMetadata.get(0));
881       assertEquals("class", MetadataInterceptor.lastClassMetadata.get(1));
882       assertEquals("class", MetadataInterceptor.lastClassMetadata.get(2));
883       
884       assertEquals("someMethod", MetadataInterceptor.lastMethodMetadata.get(0));
885       
886       assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0));
887       
888       AspectManager.instance().removeClassMetaData("DA");
889       MetadataInterceptor.clear();
890       pojo.someMethod(123);
891       pojo.i = 100;
892       assertFalse(MetadataInterceptor.intercepted);
893       
894       //Add metadata to instance domain so binding takes effect
895
getInstanceDomain(pojo).addClassMetaData(loader.getClassMetaDataBinding());
896       MetadataInterceptor.clear();
897       pojo.someMethod(123);
898       i = pojo.i;
899       assertTrue(MetadataInterceptor.intercepted);
900       assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size());
901       assertEquals(2, MetadataInterceptor.lastClassMetadata.size());
902       assertEquals(1, MetadataInterceptor.lastMethodMetadata.size());
903       assertEquals(1, MetadataInterceptor.lastFieldMetadata.size());
904       
905       assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(0));
906       assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(1));
907       
908       assertEquals("class", MetadataInterceptor.lastClassMetadata.get(0));
909       assertEquals("class", MetadataInterceptor.lastClassMetadata.get(1));
910       
911       assertEquals("someMethod", MetadataInterceptor.lastMethodMetadata.get(0));
912       
913       assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0));
914       
915       //Clean up
916
getInstanceDomain(pojo).removeClassMetaData(loader.getClassMetaDataBinding().getName());
917       AspectManager.instance().removeBinding(binding.getName());
918       MetadataInterceptor.clear();
919       pojo.someMethod(123);
920       assertFalse(MetadataInterceptor.intercepted);
921    }
922    
923    public void testAddInstanceMetadata() throws Exception JavaDoc
924    {
925       System.out.println("TEST ADD METADATA TO INSTANCE");
926       POJO pojo1 = new POJO();
927       POJO pojo2 = new POJO();
928       POJO pojo3 = new POJO();
929
930       DynamicSimpleClassMetadataLoader loader1 = new DynamicSimpleClassMetadataLoader(
931             "D1", "TEST", "org.jboss.test.aop.dynamicgenadvisor.POJO");
932       loader1.addDefaultMetaData("default", "default1");
933       loader1.addClassMetaData("class", "class1");
934       loader1.addMethodMetaData("* someMethod(..)", "fm", "someMethod1");
935       loader1.addFieldMetaData("i", "fm", "i1");
936       
937       DynamicSimpleClassMetadataLoader loader2 = new DynamicSimpleClassMetadataLoader(
938             "D1", "TEST", "org.jboss.test.aop.dynamicgenadvisor.POJO"); //Use same name for loaders, they're in different domains
939
loader2.addDefaultMetaData("default", "default2");
940       loader2.addClassMetaData("class", "class2");
941       loader2.addMethodMetaData("* someMethod(..)", "fm", "someMethod2");
942       loader2.addFieldMetaData("i", "fm", "i2");
943       
944       getInstanceDomain(pojo1).addClassMetaData(loader1.getClassMetaDataBinding());
945       AdviceBinding binding1 = new AdviceBinding("all(@TEST)", null);
946       binding1.addInterceptor(MetadataInterceptor.class);
947       getInstanceDomain(pojo1).addBinding(binding1);
948       
949       AdviceBinding binding2 = new AdviceBinding("all(@TEST)", null);
950       getInstanceDomain(pojo2).addClassMetaData(loader2.getClassMetaDataBinding());
951       binding2.addInterceptor(MetadataInterceptor.class);
952       getInstanceDomain(pojo2).addBinding(binding2);
953       
954       AdviceBinding binding3 = new AdviceBinding("all(org.jboss.test.aop.dynamicgenadvisor.POJO)", null);
955       binding3.addInterceptor(MetadataInterceptor.class);
956       getInstanceDomain(pojo3).addBinding(binding3);
957       
958       MetadataInterceptor.clear();
959       System.out.println("---POJO1 set i");
960       pojo1.i = 10;
961       System.out.println("---POJO1 someMethod");
962       pojo1.someMethod(123);
963       System.out.println("---POJO1 not Prepared");
964       pojo1.notPrepared();
965       
966       System.out.println("---POJO2 set i");
967       pojo2.i = 20;
968       System.out.println("---POJO2 someMethod");
969       pojo2.someMethod(123);
970       System.out.println("---POJO2 not Prepared");
971       pojo2.notPrepared();
972       
973       assertEquals(4, MetadataInterceptor.lastDefaultMetadata.size());
974       assertEquals(4, MetadataInterceptor.lastClassMetadata.size());
975       assertEquals(2, MetadataInterceptor.lastMethodMetadata.size());
976       assertEquals(2, MetadataInterceptor.lastFieldMetadata.size());
977       
978       //Make sure we get the metadata expected
979
assertEquals("default1", MetadataInterceptor.lastDefaultMetadata.get(0));
980       assertEquals("default1", MetadataInterceptor.lastDefaultMetadata.get(1));
981       assertEquals("default2", MetadataInterceptor.lastDefaultMetadata.get(2));
982       assertEquals("default2", MetadataInterceptor.lastDefaultMetadata.get(3));
983       
984       assertEquals("class1", MetadataInterceptor.lastClassMetadata.get(0));
985       assertEquals("class1", MetadataInterceptor.lastClassMetadata.get(1));
986       assertEquals("class2", MetadataInterceptor.lastClassMetadata.get(2));
987       assertEquals("class2", MetadataInterceptor.lastClassMetadata.get(3));
988       
989       assertEquals("someMethod1", MetadataInterceptor.lastMethodMetadata.get(0));
990       assertEquals("someMethod2", MetadataInterceptor.lastMethodMetadata.get(1));
991       
992       assertEquals("i1", MetadataInterceptor.lastFieldMetadata.get(0));
993       assertEquals("i2", MetadataInterceptor.lastFieldMetadata.get(1));
994
995       
996       //This one has no metadata
997
MetadataInterceptor.clear();
998       System.out.println("---POJO3 set i");
999       pojo3.i = 20;
1000      System.out.println("---POJO3 someMethod");
1001      pojo3.someMethod(123);
1002      System.out.println("---POJO3 not Prepared");
1003      pojo3.notPrepared();
1004      
1005      assertTrue(MetadataInterceptor.intercepted);
1006      assertEquals(0, MetadataInterceptor.lastDefaultMetadata.size());
1007      assertEquals(0, MetadataInterceptor.lastClassMetadata.size());
1008      assertEquals(0, MetadataInterceptor.lastMethodMetadata.size());
1009      assertEquals(0, MetadataInterceptor.lastFieldMetadata.size());
1010      
1011   }
1012   
1013   
1014   public void testInstanceMetadataOverrides() throws Exception JavaDoc
1015   {
1016      System.out.println("TEST INSTANCE METADATA OVERRIDES");
1017
1018      MetadataInterceptor.clear();
1019      POJO pojo = new POJO();
1020      POJO pojo1 = new POJO();
1021      pojo.someMethod(123);
1022      assertFalse(MetadataInterceptor.intercepted);
1023
1024      AdviceBinding binding1 = new AdviceBinding("all(org.jboss.test.aop.dynamicgenadvisor.POJO)", null);
1025      binding1.addInterceptor(MetadataInterceptor.class);
1026      AspectManager.instance().addBinding(binding1);
1027
1028      DynamicSimpleClassMetadataLoader loader = new DynamicSimpleClassMetadataLoader(
1029            "TEST", "org.jboss.test.aop.dynamicgenadvisor.POJO");
1030      loader.addDefaultMetaData("default", "default");
1031      loader.addClassMetaData("class", "class");
1032      loader.addMethodMetaData("* someMethod(..)", "fm", "someMethod");
1033      loader.addFieldMetaData("i", "fm", "i");
1034      AspectManager.instance().addClassMetaData(loader.getClassMetaDataBinding());
1035      
1036      DynamicSimpleClassMetadataLoader instanceLoader = new DynamicSimpleClassMetadataLoader(
1037            "TEST", "org.jboss.test.aop.dynamicgenadvisor.POJO");
1038      instanceLoader.addDefaultMetaData("default", "defaultXXX");
1039      instanceLoader.addClassMetaData("class", "classXXX");
1040      instanceLoader.addMethodMetaData("* someMethod(..)", "fm", "someMethodXXX");
1041      instanceLoader.addFieldMetaData("i", "fm", "iXXX");
1042      getInstanceDomain(pojo1).addClassMetaData(instanceLoader.getClassMetaDataBinding());
1043
1044      MetadataInterceptor.clear();
1045      pojo.someMethod(123);
1046      pojo.i = 1000;
1047      assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size());
1048      assertEquals(2, MetadataInterceptor.lastClassMetadata.size());
1049      assertEquals(1, MetadataInterceptor.lastMethodMetadata.size());
1050      assertEquals(1, MetadataInterceptor.lastFieldMetadata.size());
1051      
1052      //Make sure we get the metadata expected
1053
assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(0));
1054      assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(1));
1055      
1056      assertEquals("class", MetadataInterceptor.lastClassMetadata.get(0));
1057      assertEquals("class", MetadataInterceptor.lastClassMetadata.get(1));
1058      
1059      assertEquals("someMethod", MetadataInterceptor.lastMethodMetadata.get(0));
1060      
1061      assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0));
1062
1063      MetadataInterceptor.clear();
1064      pojo1.someMethod(123);
1065      pojo1.i = 1000;
1066      assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size());
1067      assertEquals(2, MetadataInterceptor.lastClassMetadata.size());
1068      assertEquals(1, MetadataInterceptor.lastMethodMetadata.size());
1069      assertEquals(1, MetadataInterceptor.lastFieldMetadata.size());
1070      
1071      //Make sure we get the metadata expected
1072
assertEquals("defaultXXX", MetadataInterceptor.lastDefaultMetadata.get(0));
1073      assertEquals("defaultXXX", MetadataInterceptor.lastDefaultMetadata.get(1));
1074      
1075      assertEquals("classXXX", MetadataInterceptor.lastClassMetadata.get(0));
1076      assertEquals("classXXX", MetadataInterceptor.lastClassMetadata.get(1));
1077      
1078      assertEquals("someMethodXXX", MetadataInterceptor.lastMethodMetadata.get(0));
1079      
1080      assertEquals("iXXX", MetadataInterceptor.lastFieldMetadata.get(0));
1081
1082
1083      getInstanceDomain(pojo1).removeClassMetaData(instanceLoader.getClassMetaDataBinding().getName());
1084      
1085      MetadataInterceptor.clear();
1086      pojo1.someMethod(123);
1087      pojo1.i = 1000;
1088      assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size());
1089      assertEquals(2, MetadataInterceptor.lastClassMetadata.size());
1090      assertEquals(1, MetadataInterceptor.lastMethodMetadata.size());
1091      assertEquals(1, MetadataInterceptor.lastFieldMetadata.size());
1092      
1093      //Make sure we get the metadata expected
1094
assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(0));
1095      assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(1));
1096      
1097      assertEquals("class", MetadataInterceptor.lastClassMetadata.get(0));
1098      assertEquals("class", MetadataInterceptor.lastClassMetadata.get(1));
1099      
1100      assertEquals("someMethod", MetadataInterceptor.lastMethodMetadata.get(0));
1101      
1102      assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0));
1103      
1104      AspectManager.instance().removeClassMetaData(loader.getClassMetaDataBinding().getName());
1105      AspectManager.instance().removeBinding(binding1.getName());
1106      MetadataInterceptor.clear();
1107      pojo.someMethod(123);
1108      assertFalse(MetadataInterceptor.intercepted);
1109   }
1110   
1111   private Domain getInstanceDomain(Object JavaDoc obj)
1112   {
1113      Advised advised = ((Advised)obj);
1114      InstanceAdvisor advisor = advised._getInstanceAdvisor();
1115      return advisor.getDomain();
1116   }
1117   
1118   public static void main(String JavaDoc[] args)
1119   {
1120      TestRunner.run(suite());
1121   }
1122}
1123
Popular Tags