1 package com.tirsen.nanning.config; 2 3 import java.util.Iterator ; 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 { 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 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 [0])).get(1)); 40 MockInterceptor callInterceptor = 41 (MockInterceptor) Aspects.getAspectInstance(bigMomma).getMixinForInterface(Intf.class). 42 getInterceptorsForMethod(Intf.class.getMethod("call", new Class [0])).get(0); 43 MockInterceptor mixinCallInterceptor = 44 (MockInterceptor) Aspects.getAspectInstance(bigMomma).getMixinForInterface(TestMixin.class). 45 getInterceptorsForMethod(TestMixin.class.getMethod("mixinCall", new Class [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 { 59 AspectSystem aspectSystem = new AspectSystem(); 60 aspectSystem.addAspect(new FindTargetMixinAspect()); 61 aspectSystem.addAspect(new InterceptorAspect(NullInterceptor.class, InterceptorAspect.PER_METHOD)); 62 Object bigMomma = aspectSystem.newInstance(IntfSub.class); 63 64 assertEquals(1, 65 Aspects.getAspectInstance(bigMomma).getMixinForInterface(Intf.class). 66 getInterceptorsForMethod(Intf.class.getMethod("call", new Class [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 |