KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > CflowCompilerTest


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 import org.codehaus.aspectwerkz.cflow.CflowCompiler;
12 import org.codehaus.aspectwerkz.cflow.AbstractCflowSystemAspect;
13 import org.codehaus.aspectwerkz.transform.inlining.AsmHelper;
14 import org.codehaus.aspectwerkz.reflect.ClassInfo;
15 import org.codehaus.aspectwerkz.reflect.MethodInfo;
16 import org.codehaus.aspectwerkz.reflect.impl.asm.AsmClassInfo;
17 import org.codehaus.aspectwerkz.exception.DefinitionException;
18
19 import java.lang.reflect.Method JavaDoc;
20
21 /**
22  * @author <a HREF="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
23  */

24 public class CflowCompilerTest extends TestCase {
25
26     public void testCompiler() {
27         try {
28             Class JavaDoc cflowAspect = CflowCompiler.compileCflowAspectAndAttachToClassLoader(
29                     CflowCompilerTest.class.getClassLoader(),
30                     4
31             );
32
33             assertEquals(cflowAspect.getName().replace('/', '.'), "org.codehaus.aspectwerkz.cflow.Cflow_4");
34             assertTrue(cflowAspect.getSuperclass().equals(AbstractCflowSystemAspect.class));
35             Method enter = cflowAspect.getDeclaredMethod("isInCflow", new Class JavaDoc[0]);
36         } catch (Throwable JavaDoc t) {
37             fail(t.toString());
38         }
39     }
40
41     public void testCflow() throws Throwable JavaDoc {
42         Class JavaDoc cflowAspect = CflowCompiler.compileCflowAspectAndAttachToClassLoader(
43                 CflowCompilerTest.class.getClassLoader(),
44                 4
45         );
46
47         // check NPE
48
Method staticMethod = cflowAspect.getDeclaredMethod("isInCflow", new Class JavaDoc[0]);
49         Boolean JavaDoc b = (Boolean JavaDoc) staticMethod.invoke(null, new Object JavaDoc[0]);
50         assertFalse(b.booleanValue());
51
52         final AbstractCflowSystemAspect cflow = (AbstractCflowSystemAspect)
53                 cflowAspect.getDeclaredMethod("aspectOf", new Class JavaDoc[0]).invoke(null, new Object JavaDoc[0]);
54
55         assertFalse(cflow.inCflow());
56         Thread JavaDoc t = new Thread JavaDoc() {
57             public void run() {
58                 System.out.println(Thread.currentThread());
59                 cflow.enter();
60                 assertTrue(cflow.inCflow());
61                 cflow.enter();
62                 assertTrue(cflow.inCflow());
63                 cflow.exit();
64                 // leave the cflow in "inCflow" state is in this thread
65
}
66         };
67         t.start();
68         System.out.println(Thread.currentThread());
69
70         assertFalse(cflow.inCflow());
71     }
72
73
74
75     public static void main(String JavaDoc[] args) {
76         junit.textui.TestRunner.run(suite());
77     }
78
79     public static junit.framework.Test suite() {
80         return new junit.framework.TestSuite(CflowCompilerTest.class);
81     }
82
83 }
84
Popular Tags