1 package com.tirsen.nanning.config; 2 3 import com.tirsen.nanning.AspectInstance; 4 import com.tirsen.nanning.MixinInstance; 5 import com.tirsen.nanning.MethodInterceptor; 6 import com.tirsen.nanning.Invocation; 7 import junit.framework.TestCase; 8 9 import java.lang.reflect.Method ; 10 import java.util.Collections ; 11 12 public class InterceptorAspectTest extends TestCase { 13 private AspectInstance instance; 14 private MixinInstance mixin; 15 private NOPInterceptor interceptor; 16 private Method method; 17 private Method method2; 18 19 public static interface Interface { 20 void method(); 21 22 void method2(); 23 } 24 25 public static class NOPInterceptor implements MethodInterceptor { 26 public Object invoke(Invocation invocation) throws Throwable { 27 return null; 28 } 29 } 30 31 protected void setUp() throws Exception { 32 super.setUp(); 33 34 instance = new AspectInstance(); 35 mixin = new MixinInstance(Interface.class, null); 36 instance.addMixin(mixin); 37 38 interceptor = new NOPInterceptor(); 39 40 method = Interface.class.getMethod("method", null); 41 method2 = Interface.class.getMethod("method2", null); 42 } 43 44 public void testSingleton() { 45 InterceptorAspect interceptorAspect = new InterceptorAspect(interceptor); 46 assertEquals(InterceptorAspect.SINGLETON, interceptorAspect.getStateManagement()); 47 interceptorAspect.advise(instance); 48 assertEquals(Collections.singleton(interceptor), mixin.getAllInterceptors()); 49 assertEquals(Collections.singletonList(interceptor), mixin.getInterceptorsForMethod(method)); 50 assertEquals(Collections.singletonList(interceptor), mixin.getInterceptorsForMethod(method2)); 51 } 52 53 public void testPerMethod() { 54 InterceptorAspect interceptorAspect = new InterceptorAspect(NOPInterceptor.class, InterceptorAspect.PER_METHOD); 55 assertEquals(InterceptorAspect.PER_METHOD, interceptorAspect.getStateManagement()); 56 interceptorAspect.advise(instance); 57 assertEquals(2, mixin.getAllInterceptors().size()); 58 NOPInterceptor interceptor = (NOPInterceptor) mixin.getInterceptorsForMethod(method).get(0); 59 NOPInterceptor interceptor2 = (NOPInterceptor) mixin.getInterceptorsForMethod(method2).get(0); 60 assertTrue(interceptor != interceptor2); 61 } 62 63 public void testPerInstance() { 64 AspectInstance instance2 = new AspectInstance(); 65 instance2.addMixin(new MixinInstance(Interface.class, null)); 66 67 InterceptorAspect interceptorAspect = new InterceptorAspect(NOPInterceptor.class, InterceptorAspect.PER_INSTANCE); 68 assertEquals(InterceptorAspect.PER_INSTANCE, interceptorAspect.getStateManagement()); 69 70 interceptorAspect.advise(instance); 71 interceptorAspect.advise(instance2); 72 73 assertEquals(1, instance.getAllInterceptors().size()); 74 assertEquals(1, instance2.getAllInterceptors().size()); 75 NOPInterceptor interceptor = (NOPInterceptor) instance.getInterceptorsForMethod(method).get(0); 76 NOPInterceptor interceptor2 = (NOPInterceptor) instance2.getInterceptorsForMethod(method2).get(0); 77 assertTrue(interceptor != interceptor2); 78 } 79 80 public void testFalsePointcut() { 81 InterceptorAspect interceptorAspect = new InterceptorAspect(new AbstractPointcut() { 82 public boolean adviseMethod(Method method) { 83 return false; 84 } 85 }, interceptor); 86 assertEquals(0, interceptorAspect.getMethodsToAdvise(instance, mixin).length); 87 interceptorAspect.advise(instance); 88 assertEquals(0, mixin.getAllInterceptors().size()); 89 } 90 91 public void testIntroduce() { 92 new InterceptorAspect(null).introduce(instance); 93 assertEquals(1, instance.getMixins().size()); 94 } 95 } 96 | Popular Tags |