try {
ExpressionNamespace space = ExpressionNamespace.getExpressionNamespace();
space.registerExpression("* test.ExpressionTest.set(..)", "", "pc1", PointcutType.EXECUTION);
space.registerExpression("* test.ExpressionTest.get(..)", "", "pc2", PointcutType.EXECUTION);
Expression root = space.createExpression("pc1 || pc2");
Expression rootAnonymous = space.createExpression("pc1 || execution(* test.ExpressionTest.get(..))");
Expression rootAnonymousAnonymous = space.createExpression(
"execution(* test.ExpressionTest.set(..)) || execution(* test.ExpressionTest.get(..))");
ClassMetaData classMetaData1 = ReflectionMetaDataMaker.createClassMetaData(ExpressionTest.class);
ClassMetaData classMetaData2 = ReflectionMetaDataMaker.createClassMetaData(ExpressionException.class);
MethodMetaData methodMetaData1 = ReflectionMetaDataMaker.createMethodMetaData(
ExpressionTest.class.getDeclaredMethod("set", new Class[]{})
);
MethodMetaData methodMetaData2 = ReflectionMetaDataMaker.createMethodMetaData(
ExpressionTest.class.getDeclaredMethod("get", new Class[]{})
);
MethodMetaData methodMetaData3 = ReflectionMetaDataMaker.createMethodMetaData(
ExpressionTest.class.getDeclaredMethod("suite", new Class[]{})
);
assertTrue(root.match(classMetaData1, PointcutType.EXECUTION));
assertTrue(rootAnonymous.match(classMetaData1, PointcutType.EXECUTION));
assertTrue(rootAnonymousAnonymous.match(classMetaData1, PointcutType.EXECUTION));
assertFalse(root.match(classMetaData2, PointcutType.EXECUTION));
assertFalse(rootAnonymous.match(classMetaData2, PointcutType.EXECUTION));
assertFalse(rootAnonymousAnonymous.match(classMetaData2, PointcutType.EXECUTION));
assertTrue(root.match(classMetaData1, methodMetaData1, PointcutType.EXECUTION));
assertTrue(rootAnonymous.match(classMetaData1, methodMetaData1, PointcutType.EXECUTION));
assertTrue(rootAnonymousAnonymous.match(classMetaData1, methodMetaData1, PointcutType.EXECUTION));
assertTrue(root.match(classMetaData1, methodMetaData2, PointcutType.EXECUTION));
assertTrue(rootAnonymous.match(classMetaData1, methodMetaData2, PointcutType.EXECUTION));
assertTrue(rootAnonymousAnonymous.match(classMetaData1, methodMetaData2, PointcutType.EXECUTION));
// long loop = 100000;
// long t1 = System.currentTimeMillis();
// for (int i = 0; i < loop; i++) {
// assertTrue(root.match(classMetaData1, methodMetaData2, PointcutType.EXECUTION));
// } System.out.println("\tNamed expression: " + (System.currentTimeMillis()-t1));
// t1 = System.currentTimeMillis();
// for (int i = 0; i < loop; i++) {
// assertTrue(rootAnonymous.match(classMetaData1, methodMetaData2, PointcutType.EXECUTION));
// } System.out.println("\tHalfNamed HalfAnonymous expression: " + (System.currentTimeMillis()-t1));
// t1 = System.currentTimeMillis();
// for (int i = 0; i < loop; i++) {
// assertTrue(rootAnonymousAnonymous.match(classMetaData1, methodMetaData2, PointcutType.EXECUTION));
// } System.out.println("\tAnonymous expression: " + (System.currentTimeMillis()-t1));
assertFalse(root.match(classMetaData1, methodMetaData3, PointcutType.EXECUTION));
assertFalse(rootAnonymous.match(classMetaData1, methodMetaData3, PointcutType.EXECUTION));
assertFalse(rootAnonymousAnonymous.match(classMetaData1, methodMetaData3, PointcutType.EXECUTION));
}
catch (Exception e) {
fail(e.toString());
}
}