package org.nutz.aop.asm;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Method;
import org.junit.Test;
import org.nutz.Nutzs;
import org.nutz.aop.asm.test.Aop1;
import org.nutz.aop.interceptor.AbstractMethodInterceptor;
import org.nutz.aop.interceptor.LoggingMethodInterceptor;
import org.nutz.aop.matcher.MethodMatcherFactory;
import org.nutz.aop.matcher.RegexMethodMatcher;
import org.nutz.lang.Mirror;
public class RegexMethodMatcherTest {
@Test
public void testRegexMethodMatcherStringStringInt() throws Throwable {
AsmClassAgent agent = new AsmClassAgent();
MyL interceptor = new MyL();
agent.addInterceptor(new RegexMethodMatcher(null, "nonArgsVoid", 0), interceptor);
agent.addInterceptor(MethodMatcherFactory.matcher(".*"), new LoggingMethodInterceptor());
Mirror<Aop1> mirror = Mirror.me(agent.define(Nutzs.cd(), Aop1.class));
Aop1 aop1 = mirror.born("Nutz");
aop1.nonArgsVoid();
assertFalse(interceptor.runned);
aop1.argsVoid(null);
assertTrue(interceptor.runned);
}
}
class MyL extends AbstractMethodInterceptor {
public boolean runned = false;
@Override
public boolean beforeInvoke(Object obj, Method method, Object... args) {
runned = true;
return super.beforeInvoke(obj, method, args);
}
}