KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > staticinitialization > StaticInitializationTest


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.staticinitialization;
9
10 import java.util.ArrayList JavaDoc;
11 import java.util.List JavaDoc;
12
13 import junit.framework.TestCase;
14
15 import org.codehaus.aspectwerkz.joinpoint.EnclosingStaticJoinPoint;
16 import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
17 import org.codehaus.aspectwerkz.joinpoint.Rtti;
18 import org.codehaus.aspectwerkz.joinpoint.Signature;
19 import org.codehaus.aspectwerkz.joinpoint.StaticJoinPoint;
20 import org.codehaus.aspectwerkz.joinpoint.impl.StaticInitializationRttiImpl;
21 import org.codehaus.aspectwerkz.joinpoint.impl.StaticInitializerSignatureImpl;
22 import org.codehaus.aspectwerkz.joinpoint.management.JoinPointType;
23 import test.CallerSideAdviceTest;
24
25
26 /**
27  * Test for staticinitialization pointcuts.
28  *
29  * @author <a HREF="mailto:the_mindstorm@evolva.ro">Alex Popescu</a>
30  */

31 public class StaticInitializationTest extends TestCase {
32     public static final String JavaDoc[] BEFORE_EXPECTED_MESSAGES = {
33         "beforeStaticinitialization",
34         "aroundStaticinitializationSJP",
35         "aroundStaticinitializationJP"
36     };
37     
38     public static final String JavaDoc[] AFTER_EXPECTED_MESSAGES = {
39         "afterReturningStaticinitialization",
40         "afterStaticinititalization"
41     };
42     
43     public static final String JavaDoc CLINIT_EXECUTION_MESSAGE = "<clinit>.execution";
44     
45     public static List JavaDoc s_messages = new ArrayList JavaDoc();
46     public static List JavaDoc s_staticJoinPoints = new ArrayList JavaDoc();
47     public static List JavaDoc s_joinPoints = new ArrayList JavaDoc();
48     
49     public void testStaticInitializer() throws ClassNotFoundException JavaDoc {
50         Class JavaDoc reflectClazz = Class.forName("test.staticinitialization.ClinitTarget");
51         try {
52             // required to run the clinit on Java 1.5
53
reflectClazz.newInstance();
54         } catch (Exception JavaDoc e) {
55             fail(e.toString());
56         }
57
58         checkMessages();
59         
60         checkStaticJoinPoints(reflectClazz, s_staticJoinPoints);
61         checkStaticJoinPoints(reflectClazz, s_joinPoints);
62         
63         checkJoinPoints(reflectClazz);
64     }
65
66     private void checkMessages() {
67         int messages = 3 * (BEFORE_EXPECTED_MESSAGES.length
68                 + AFTER_EXPECTED_MESSAGES.length) + 1;
69         
70         assertEquals("logged messages should match",
71                      messages,
72                      s_messages.size());
73         
74         for(int i = 0; i < BEFORE_EXPECTED_MESSAGES.length; i++) {
75             for(int j = 0; j < 3; j++) {
76                 assertEquals(BEFORE_EXPECTED_MESSAGES[i],
77                              s_messages.get(i * 3 + j));
78             }
79         }
80         
81         int lastBeforeIndex = 3 * BEFORE_EXPECTED_MESSAGES.length;
82         
83         assertEquals("clinit was expected to execute",
84                      CLINIT_EXECUTION_MESSAGE,
85                      s_messages.get(lastBeforeIndex));
86         
87         lastBeforeIndex++;
88         
89         for(int i = 0; i < AFTER_EXPECTED_MESSAGES.length; i++) {
90             for(int j = 0; j < 3; j++) {
91                 assertEquals(AFTER_EXPECTED_MESSAGES[i],
92                              s_messages.get(lastBeforeIndex + (i * 3) + j));
93             }
94         }
95     }
96     
97     private void checkStaticJoinPoints(Class JavaDoc clazz, List JavaDoc data) {
98         assertEquals("staticjoinpoints number does not match",
99                      12,
100                      data.size()
101         );
102         
103         Class JavaDoc signatureClass = StaticInitializerSignatureImpl.class;
104         
105         for(int i = 0; i < data.size(); i++) {
106             StaticJoinPoint sjp = (StaticJoinPoint) data.get(i);
107             
108             assertEquals(clazz,
109                          sjp.getCallerClass());
110             
111             assertEquals(clazz,
112                          sjp.getCalleeClass());
113             
114             assertEquals(JoinPointType.STATIC_INITIALIZATION,
115                          sjp.getType());
116             
117             Signature signature = sjp.getSignature();
118             assertNotNull(signature);
119             
120             assertEquals(signatureClass,
121                          signature.getClass());
122             
123             assertEquals(clazz,
124                          signature.getDeclaringType());
125             
126             EnclosingStaticJoinPoint esjp = sjp.getEnclosingStaticJoinPoint();
127             
128             assertNotNull(esjp);
129             
130             assertEquals(JoinPointType.STATIC_INITIALIZATION,
131                          esjp.getType());
132             
133             Signature enclSig = esjp.getSignature();
134             
135             assertNotNull(enclSig);
136             
137             assertEquals(signatureClass,
138                          enclSig.getClass());
139             
140             assertEquals(clazz,
141                          enclSig.getDeclaringType());
142
143         }
144     }
145     
146     private void checkJoinPoints(Class JavaDoc clazz) {
147         assertEquals("joinpoints number does not match",
148                      12,
149                      s_staticJoinPoints.size()
150         );
151         
152         Class JavaDoc siRtti = StaticInitializationRttiImpl.class;
153         
154         for(int i = 0; i < s_joinPoints.size(); i++) {
155             JoinPoint jp = (JoinPoint) s_joinPoints.get(i);
156             
157             assertNull(jp.getCaller());
158             
159             assertNull(jp.getThis());
160             
161             assertNull(jp.getCallee());
162             
163             assertNull(jp.getTarget());
164             
165             Rtti rtti = jp.getRtti();
166             
167             assertNotNull(rtti);
168             
169             assertEquals(siRtti,
170                          rtti.getClass());
171             
172             assertEquals(clazz,
173                          rtti.getDeclaringType()
174             );
175             
176             assertNull(rtti.getThis());
177             
178             assertNull(rtti.getTarget());
179         }
180     }
181     
182     public static void main(String JavaDoc[] args) {
183         junit.textui.TestRunner.run(suite());
184     }
185
186     public static junit.framework.Test suite() {
187         return new junit.framework.TestSuite(StaticInitializationTest.class);
188     }
189 }
190
Popular Tags