1 /***************************************************************************************
2 * Copyright (c) Jonas Bon?r, Alexandre Vasseur. All rights reserved. *
3 * http://aspectwerkz.codehaus.org *
4 * ---------------------------------------------------------------------------------- *
5 * The software in this package is published under the terms of the LGPL license *
6 * a copy of which has been included with this distribution in the license.txt file. *
7 **************************************************************************************/
8 package test;
9
10 import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
11 import junit.framework.TestCase;
12
13 /***
14 * Test for complex CFLOW
15 * See AW-226
16 *
17 * @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur</a>
18 */
19 public class ComplexCFlowTest extends TestCase {
20
21 private static String s_logString = "";
22
23
24
25
26
27
28
29
30 public void testComplexNotCFlow_2() {
31 s_logString = "";
32 method2();
33 assertEquals(s_logString, " method2 method4");
34 }
35
36 public void testComplexNotCFlow_3() {
37 s_logString = "";
38 method3();
39 assertEquals(s_logString, " method3 method4");
40 }
41
42
43
44 public static class Aspect {
45
46 /***
47 * FIXME: this expression leads to match all at cflow early filtering.
48 *
49 * XXBefore execution(* test.ComplexCFlowTest.method4(..)) AND within(test.ComplexCFlowTest)
50 * AND !cflow(call(* test.ComplexCFlowTest.method2(..)) AND within(test.ComplexCFlowTest))
51 * AND !cflow(call(* test.ComplexCFlowTest.method3(..)) AND within(test.ComplexCFlowTest))
52 */
53 public void method4NotIn2Or3Advice(JoinPoint joinPoint) {
54 s_logString += " 4-!2-!3-Advice";
55 }
56 }
57
58
59
60 public static void main(String[] args) {
61 junit.textui.TestRunner.run(suite());
62 }
63
64 public static junit.framework.Test suite() {
65 return new junit.framework.TestSuite(ComplexCFlowTest.class);
66 }
67
68
69
70 public static void method1() {
71 s_logString += " method1";
72 method4();
73 }
74
75 public static void method2() {
76 s_logString += " method2";
77 method4();
78 }
79
80 public static void method3() {
81 s_logString += " method3";
82 method4();
83 }
84
85 public static void method4() {
86 s_logString += " method4";
87 }
88
89
90 }