/************************************************************************************** * Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. * * http://aspectwerkz.codehaus.org * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the LGPL license * * a copy of which has been included with this distribution in the license.txt file. * **************************************************************************************/ package test; import junit.framework.TestCase; /** * test "pc AND (cf OR cf2)" * * @author <a href="mailto:jboner@codehaus.org">Jonas Bon�r</a> * @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur </a> */ public class CFlowTest extends TestCase implements Loggable { private String m_logString = ""; public CFlowTest(String name) { super(name); } public void testCallWithinCFlow() { m_logString = ""; step1(); //will have cflow and will call step2() assertEquals("step1 advice-before step2 advice-after ", m_logString); } public void testCallWithinCFlowAnonymous() { m_logString = ""; step1Anonymous(); //will have cflow and will call step2() assertEquals( "step1Anonymous advice-beforeAnonymous step2Anonymous advice-afterAnonymous ", m_logString ); } public void testCallWithinCFlowWithinCflow() { m_logString = ""; step1_A(); //will have cflow and will call step1_B that will call step2_B() assertEquals("step1_A step1_B advice-before2 step2_B advice-after2 ", m_logString); } public void testCallOutsideCFlow() { m_logString = ""; step2(); assertEquals("step2 ", m_logString); } public void testCallWithinCFlow_B() { m_logString = ""; step1_B(); //will have cflow and will call step2_B() but is NOT in step1_A cflow assertEquals("step1_B step2_B ", m_logString); } public void testCallOutsideCFlowAnonymous() { m_logString = ""; step2Anonymous(); assertEquals("step2Anonymous ", m_logString); } public void testCflowOnMySelfForPrecedence() { m_logString = ""; cflowOnMyself(); assertEquals("cflowOnMyself advice-cflowOnMyself ", m_logString); } // //FIXME: see the aspect, pc is deactivated - see AW-251 // public void testCallWithinNotCFlow_C() { // m_logString = ""; // step1_C(); //will have "NOT cflow" and will call step2_C // assertEquals("step1_C step2_C ", m_logString); // m_logString = ""; // step2_C(); //should be advised since not in step1_C cflow // assertEquals("advice-beforeC step2_C advice-afterC ", m_logString); // } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public static junit.framework.Test suite() { return new junit.framework.TestSuite(CFlowTest.class); } // ==== methods to test ==== public void log(final String wasHere) { m_logString += wasHere; } public void step1() { log("step1 "); step2(); } public void step1Anonymous() { log("step1Anonymous "); step2Anonymous(); } public void step1_B() { log("step1_B "); step2_B(); } public void step1_A() { log("step1_A "); step1_B(); } public void step2() { log("step2 "); } public void step2Anonymous() { log("step2Anonymous "); } public void step2_B() { log("step2_B "); } public void step1_C() { log("step1_C "); step2_C(); } public void step2_C() { log("step2_C "); } public void cflowOnMyself() { log("cflowOnMyself "); } }