Package test

Source Code of test.CflowCompilerTest

/**************************************************************************************
* 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;
import org.codehaus.aspectwerkz.cflow.CflowCompiler;
import org.codehaus.aspectwerkz.cflow.AbstractCflowSystemAspect;
import org.codehaus.aspectwerkz.transform.inlining.AsmHelper;
import org.codehaus.aspectwerkz.reflect.ClassInfo;
import org.codehaus.aspectwerkz.reflect.MethodInfo;
import org.codehaus.aspectwerkz.reflect.impl.asm.AsmClassInfo;
import org.codehaus.aspectwerkz.exception.DefinitionException;

import java.lang.reflect.Method;

/**
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
*/
public class CflowCompilerTest extends TestCase {

    public void testCompiler() {
        try {
            Class cflowAspect = CflowCompiler.compileCflowAspectAndAttachToClassLoader(
                    CflowCompilerTest.class.getClassLoader(),
                    4
            );

            assertEquals(cflowAspect.getName().replace('/', '.'), "org.codehaus.aspectwerkz.cflow.Cflow_4");
            assertTrue(cflowAspect.getSuperclass().equals(AbstractCflowSystemAspect.class));
            Method enter = cflowAspect.getDeclaredMethod("isInCflow", new Class[0]);
            Method exit = cflowAspect.getDeclaredMethod("isInCflowBelow", new Class[0]);
        } catch (Throwable t) {
            fail(t.toString());
        }
    }

    public void testCflow() throws Throwable {
        Class cflowAspect = CflowCompiler.compileCflowAspectAndAttachToClassLoader(
                CflowCompilerTest.class.getClassLoader(),
                4
        );

        // check NPE
        Method staticMethod = cflowAspect.getDeclaredMethod("isInCflow", new Class[0]);
        Boolean b = (Boolean) staticMethod.invoke(null, new Object[0]);
        assertFalse(b.booleanValue());
        staticMethod = cflowAspect.getDeclaredMethod("isInCflowBelow", new Class[0]);
        b = (Boolean) staticMethod.invoke(null, new Object[0]);
        assertFalse(b.booleanValue());


        final AbstractCflowSystemAspect cflow = (AbstractCflowSystemAspect)cflowAspect.newInstance();

        assertFalse(cflow.inCflow());
        assertFalse(cflow.inCflowBelow());
        Thread t = new Thread() {
            public void run() {
                System.out.println(Thread.currentThread());
                cflow.enter();
                assertTrue(cflow.inCflow());
                assertTrue( ! cflow.inCflowBelow());
                cflow.enter();
                assertTrue(cflow.inCflow());
                assertFalse( ! cflow.inCflowBelow());
                cflow.exit();
                // leave the cflow in "inCflow" state is in this thread
            }
        };
        t.start();
        System.out.println(Thread.currentThread());

        assertFalse(cflow.inCflow());
        assertFalse(cflow.inCflowBelow());
    }



    public static void main(String[] args) {
        junit.textui.TestRunner.run(suite());
    }

    public static junit.framework.Test suite() {
        return new junit.framework.TestSuite(CflowCompilerTest.class);
    }

}
TOP

Related Classes of test.CflowCompilerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.