/**************************************************************************************
* 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.staticinitialization;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.codehaus.aspectwerkz.joinpoint.EnclosingStaticJoinPoint;
import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
import org.codehaus.aspectwerkz.joinpoint.Rtti;
import org.codehaus.aspectwerkz.joinpoint.Signature;
import org.codehaus.aspectwerkz.joinpoint.StaticJoinPoint;
import org.codehaus.aspectwerkz.joinpoint.impl.StaticInitializationRttiImpl;
import org.codehaus.aspectwerkz.joinpoint.impl.StaticInitializerSignatureImpl;
import org.codehaus.aspectwerkz.joinpoint.management.JoinPointType;
import test.CallerSideAdviceTest;
/**
* Test for staticinitialization pointcuts.
*
* @author <a href="mailto:the_mindstorm@evolva.ro">Alex Popescu</a>
*/
public class StaticInitializationTest extends TestCase {
public static final String[] BEFORE_EXPECTED_MESSAGES = {
"beforeStaticinitialization",
"aroundStaticinitializationSJP",
"aroundStaticinitializationJP"
};
public static final String[] AFTER_EXPECTED_MESSAGES = {
"afterReturningStaticinitialization",
"afterStaticinititalization"
};
public static final String CLINIT_EXECUTION_MESSAGE = "<clinit>.execution";
public static List s_messages = new ArrayList();
public static List s_staticJoinPoints = new ArrayList();
public static List s_joinPoints = new ArrayList();
public void testStaticInitializer() throws ClassNotFoundException {
Class reflectClazz = Class.forName("test.staticinitialization.ClinitTarget");
try {
// required to run the clinit on Java 1.5
reflectClazz.newInstance();
} catch (Exception e) {
fail(e.toString());
}
checkMessages();
checkStaticJoinPoints(reflectClazz, s_staticJoinPoints);
checkStaticJoinPoints(reflectClazz, s_joinPoints);
checkJoinPoints(reflectClazz);
}
private void checkMessages() {
int messages = 3 * (BEFORE_EXPECTED_MESSAGES.length
+ AFTER_EXPECTED_MESSAGES.length) + 1;
assertEquals("logged messages should match",
messages,
s_messages.size());
for(int i = 0; i < BEFORE_EXPECTED_MESSAGES.length; i++) {
for(int j = 0; j < 3; j++) {
assertEquals(BEFORE_EXPECTED_MESSAGES[i],
s_messages.get(i * 3 + j));
}
}
int lastBeforeIndex = 3 * BEFORE_EXPECTED_MESSAGES.length;
assertEquals("clinit was expected to execute",
CLINIT_EXECUTION_MESSAGE,
s_messages.get(lastBeforeIndex));
lastBeforeIndex++;
for(int i = 0; i < AFTER_EXPECTED_MESSAGES.length; i++) {
for(int j = 0; j < 3; j++) {
assertEquals(AFTER_EXPECTED_MESSAGES[i],
s_messages.get(lastBeforeIndex + (i * 3) + j));
}
}
}
private void checkStaticJoinPoints(Class clazz, List data) {
assertEquals("staticjoinpoints number does not match",
12,
data.size()
);
Class signatureClass = StaticInitializerSignatureImpl.class;
for(int i = 0; i < data.size(); i++) {
StaticJoinPoint sjp = (StaticJoinPoint) data.get(i);
assertEquals(clazz,
sjp.getCallerClass());
assertEquals(clazz,
sjp.getCalleeClass());
assertEquals(JoinPointType.STATIC_INITIALIZATION,
sjp.getType());
Signature signature = sjp.getSignature();
assertNotNull(signature);
assertEquals(signatureClass,
signature.getClass());
assertEquals(clazz,
signature.getDeclaringType());
EnclosingStaticJoinPoint esjp = sjp.getEnclosingStaticJoinPoint();
assertNotNull(esjp);
assertEquals(JoinPointType.STATIC_INITIALIZATION,
esjp.getType());
Signature enclSig = esjp.getSignature();
assertNotNull(enclSig);
assertEquals(signatureClass,
enclSig.getClass());
assertEquals(clazz,
enclSig.getDeclaringType());
}
}
private void checkJoinPoints(Class clazz) {
assertEquals("joinpoints number does not match",
12,
s_staticJoinPoints.size()
);
Class siRtti = StaticInitializationRttiImpl.class;
for(int i = 0; i < s_joinPoints.size(); i++) {
JoinPoint jp = (JoinPoint) s_joinPoints.get(i);
assertNull(jp.getCaller());
assertNull(jp.getThis());
assertNull(jp.getCallee());
assertNull(jp.getTarget());
Rtti rtti = jp.getRtti();
assertNotNull(rtti);
assertEquals(siRtti,
rtti.getClass());
assertEquals(clazz,
rtti.getDeclaringType()
);
assertNull(rtti.getThis());
assertNull(rtti.getTarget());
}
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public static junit.framework.Test suite() {
return new junit.framework.TestSuite(StaticInitializationTest.class);
}
}