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 junit.framework.TestCase;
11  
12  /***
13   * test "pc AND (cf OR cf2)"
14   *
15   * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr</a>
16   * @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur </a>
17   */
18  public class CFlowTest extends TestCase implements Loggable {
19      private String m_logString = "";
20  
21      public CFlowTest(String name) {
22          super(name);
23      }
24  
25      public void testCallWithinCFlow() {
26          m_logString = "";
27          step1(); //will have cflow and will call step2()
28          assertEquals("step1 advice-before step2 advice-after ", m_logString);
29      }
30  
31      public void testCallWithinCFlowAnonymous() {
32          m_logString = "";
33          step1Anonymous(); //will have cflow and will call step2()
34          assertEquals(
35                  "step1Anonymous advice-beforeAnonymous step2Anonymous advice-afterAnonymous ",
36                  m_logString
37          );
38      }
39  
40      public void testCallWithinCFlowWithinCflow() {
41          m_logString = "";
42          step1_A(); //will have cflow and will call step1_B that will call step2_B()
43          assertEquals("step1_A step1_B advice-before2 step2_B advice-after2 ", m_logString);
44      }
45  
46      public void testCallOutsideCFlow() {
47          m_logString = "";
48          step2();
49          assertEquals("step2 ", m_logString);
50      }
51  
52      public void testCallWithinCFlow_B() {
53          m_logString = "";
54          step1_B(); //will have cflow and will call step2_B() but is NOT in step1_A cflow
55          assertEquals("step1_B step2_B ", m_logString);
56      }
57  
58      public void testCallOutsideCFlowAnonymous() {
59          m_logString = "";
60          step2Anonymous();
61          assertEquals("step2Anonymous ", m_logString);
62      }
63  
64      public void testCflowOnMySelfForPrecedence() {
65          m_logString = "";
66          cflowOnMyself();
67          assertEquals("cflowOnMyself advice-cflowOnMyself ", m_logString);
68      }
69  
70  //    //FIXME: see the aspect, pc is deactivated - see AW-251
71  //    public void testCallWithinNotCFlow_C() {
72  //        m_logString = "";
73  //        step1_C(); //will have "NOT cflow" and will call step2_C
74  //        assertEquals("step1_C step2_C ", m_logString);
75  //        m_logString = "";
76  //        step2_C(); //should be advised since not in step1_C cflow
77  //        assertEquals("advice-beforeC step2_C advice-afterC ", m_logString);
78  //    }
79  
80      public static void main(String[] args) {
81          junit.textui.TestRunner.run(suite());
82      }
83  
84      public static junit.framework.Test suite() {
85          return new junit.framework.TestSuite(CFlowTest.class);
86      }
87  
88      // ==== methods to test ====
89      public void log(final String wasHere) {
90          m_logString += wasHere;
91      }
92  
93      public void step1() {
94          log("step1 ");
95          step2();
96      }
97  
98      public void step1Anonymous() {
99          log("step1Anonymous ");
100         step2Anonymous();
101     }
102 
103     public void step1_B() {
104         log("step1_B ");
105         step2_B();
106     }
107 
108     public void step1_A() {
109         log("step1_A ");
110         step1_B();
111     }
112 
113     public void step2() {
114         log("step2 ");
115     }
116 
117     public void step2Anonymous() {
118         log("step2Anonymous ");
119     }
120 
121     public void step2_B() {
122         log("step2_B ");
123     }
124 
125     public void step1_C() {
126         log("step1_C ");
127         step2_C();
128     }
129 
130     public void step2_C() {
131         log("step2_C ");
132     }
133 
134     public void cflowOnMyself() {
135         log("cflowOnMyself ");
136     }
137 }