/**************************************************************************************
* 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.annotation.Before;
import org.codehaus.aspectwerkz.annotation.Around;
import org.codehaus.aspectwerkz.joinpoint.StaticJoinPoint;
import org.codehaus.aspectwerkz.transform.inlining.weaver.SerialVersionUidVisitor;
import java.io.Serializable;
import java.lang.reflect.Field;
/**
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
*/
public class CtorExecution extends TestCase implements Serializable {
static int s_count = 0;
public CtorExecution m_ref;
public int m_i;// = 1;
public CtorExecution(CtorExecution ref) {
postInit(this);
//m_ref = ref;
}
static void postInit(CtorExecution target) {
;
}
public CtorExecution() {
// tricky INVOKESPECIAL indexing
this(new CtorExecution((CtorExecution)null));
new CtorExecution((CtorExecution)null);
postInit(this);
}
public CtorExecution(String s) {
// tricky INVOKESPECIAL indexing
// and tricky new CtorExecution() call before instance initialization
// and tricky method call before instance initialization
super((new CtorExecution()).string(s));
(new CtorExecution()).string(s);
}
public CtorExecution(int i) {
// tricky field get and set before instance initialization
super(""+(new CtorExecution()).m_i++);
(new CtorExecution()).m_i++;
}
public String string(String s) {
return s;
}
public void testSome() {
s_count = 0;
CtorExecution me = new CtorExecution();
me = new CtorExecution(me);
me = new CtorExecution("foo");
me = new CtorExecution(2);
assertEquals(116, s_count);// don't know if it is the right number but decompiled seems ok..
}
public void testSerialVer() throws Throwable {
Class x = CtorExecution.class;
long l = SerialVersionUidVisitor.calculateSerialVersionUID(x);
// uncomment me and turn off weaver to compute the expected serialVerUID
//System.out.println(l);
Field f = x.getDeclaredField("serialVersionUID");
long uid = ((Long)f.get(null)).longValue();
//System.out.println(uid);
assertEquals(3813928159352352835L, uid);
}
public static class Aspect {
@Before("within(test.CtorExecution)")
void before(StaticJoinPoint sjp) {
s_count++;
//System.err.println(sjp.getSignature());
}
@Around("execution(test.CtorExecution.new(..))" +
" || (call(test.CtorExecution.new(..)) && within(test.CtorExecution))")
Object around(StaticJoinPoint sjp) throws Throwable {
s_count++;
//System.out.println(sjp.getSignature());
return sjp.proceed();
}
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public static junit.framework.Test suite() {
return new junit.framework.TestSuite(CtorExecution.class);
}
}