KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tirsen > nanning > config > AspectSystemTest


1 package com.tirsen.nanning.config;
2
3 import java.util.Iterator JavaDoc;
4
5 import com.tirsen.nanning.*;
6 import junit.framework.TestCase;
7
8 public class AspectSystemTest extends TestCase {
9
10     public void test() throws NoSuchMethodException JavaDoc {
11         AspectSystem aspectSystem = new AspectSystem();
12         aspectSystem.addAspect(new FindTargetMixinAspect());
13         aspectSystem.addAspect(new Introductor(TestMixin.class, TestMixinImpl.class));
14         aspectSystem.addAspect(new InterceptorAspect(new MockInterceptor()));
15         final NullInterceptor nullInterceptor = new NullInterceptor();
16         aspectSystem.addAspect(new InterceptorAspect(nullInterceptor));
17         final MockConstructionInterceptor constructionInterceptor = new MockConstructionInterceptor();
18
19         aspectSystem.addAspect(new Aspect() {
20             public void introduce(AspectInstance aspectInstance) {
21             }
22
23             public void advise(AspectInstance aspectInstance) {
24                 aspectInstance.addConstructionInterceptor(constructionInterceptor);
25             }
26         });
27
28         Object JavaDoc bigMomma = aspectSystem.newInstance(Intf.class);
29         assertTrue(Aspects.isAspectObject(bigMomma));
30         assertTrue(bigMomma instanceof Intf);
31         assertTrue(bigMomma instanceof TestMixin);
32
33         assertEquals(2, Aspects.getInterceptors(bigMomma).size());
34
35         constructionInterceptor.verify();
36
37         assertSame(nullInterceptor,
38                    Aspects.getAspectInstance(bigMomma).getMixinForInterface(Intf.class).
39                    getInterceptorsForMethod(Intf.class.getMethod("call", new Class JavaDoc[0])).get(1));
40         MockInterceptor callInterceptor =
41                 (MockInterceptor) Aspects.getAspectInstance(bigMomma).getMixinForInterface(Intf.class).
42                 getInterceptorsForMethod(Intf.class.getMethod("call", new Class JavaDoc[0])).get(0);
43         MockInterceptor mixinCallInterceptor =
44                 (MockInterceptor) Aspects.getAspectInstance(bigMomma).getMixinForInterface(TestMixin.class).
45                 getInterceptorsForMethod(TestMixin.class.getMethod("mixinCall", new Class JavaDoc[0])).get(0);
46         ((TestMixin) bigMomma).mixinCall();
47         mixinCallInterceptor.verify();
48         ((Intf) bigMomma).call();
49         callInterceptor.verify();
50     }
51
52     public static interface IntfSub extends Intf {
53     }
54
55     public static class IntfSubImpl extends IntfImpl {
56     }
57
58     public void testInheritance() throws NoSuchMethodException JavaDoc {
59         AspectSystem aspectSystem = new AspectSystem();
60         aspectSystem.addAspect(new FindTargetMixinAspect());
61         aspectSystem.addAspect(new InterceptorAspect(NullInterceptor.class, InterceptorAspect.PER_METHOD));
62         Object JavaDoc bigMomma = aspectSystem.newInstance(IntfSub.class);
63
64         assertEquals(1,
65                      Aspects.getAspectInstance(bigMomma).getMixinForInterface(Intf.class).
66                      getInterceptorsForMethod(Intf.class.getMethod("call", new Class JavaDoc[0])).size());
67     }
68
69     public static interface Base {
70         public void m();
71     }
72
73     public static interface Sub extends Base {
74     }
75
76     public static interface C extends Sub, Base {
77     }
78 }
79
Popular Tags