/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.AfterReturning; | |||||
import org.aspectj.lang.annotation.AfterThrowing; | |||||
import org.aspectj.lang.annotation.After; | |||||
import org.aspectj.lang.annotation.After; | |||||
import org.aspectj.lang.annotation.AfterReturning; | |||||
import org.aspectj.lang.annotation.AfterThrowing; | |||||
import org.aspectj.lang.annotation.AfterThrowing; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.JoinPoint; | |||||
import junit.framework.TestCase; | |||||
/** | |||||
* AfterXXX tests | |||||
* | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class AfterXTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(AfterXTest.class); | |||||
} | |||||
public int dupPos(int i) throws NoSuchMethodException { | |||||
if (i > 0) | |||||
return i*2; | |||||
else | |||||
throw new NoSuchMethodException("arg is negative"); | |||||
} | |||||
public void testAfterReturningAndThrowing() { | |||||
AfterXTest me = new AfterXTest(); | |||||
try { | |||||
s_log = new StringBuffer(); | |||||
int dup2 = me.dupPos(2); | |||||
// see after advice precedence here.. | |||||
//TODO really weird after finally comes first | |||||
// see BcelWeaver fix on sorting of shadowMungerList | |||||
//assertEquals("after after2- 2 4 afterRet- 2 ", s_log.toString()); | |||||
assertEquals("afterRet- 2 after2- 2 4 after ", s_log.toString()); | |||||
} catch (Exception e) { | |||||
fail("Should not fail " + e.toString()); | |||||
} | |||||
s_log = new StringBuffer(); | |||||
try { | |||||
int dupm2 = me.dupPos(-2); | |||||
fail("should not be reached"); | |||||
} catch (NoSuchMethodException e) { | |||||
//TODO really weird after finally comes first | |||||
// see BcelWeaver fix in sorting of shadowMungerList | |||||
assertEquals("after afterThrowing afterThrowing3- [arg is negative] ", s_log.toString()); | |||||
} | |||||
} | |||||
@Aspect | |||||
public static class TestAspect { | |||||
@AfterReturning("execution(int ataspectj.AfterXTest.dupPos(..)) && args(arg)") | |||||
public void afterRet(int arg) { | |||||
log("afterRet-"); | |||||
log(""+arg); | |||||
} | |||||
@AfterReturning(returning="ret", pointcut="execution(int ataspectj.AfterXTest.dupPos(..)) && args(arg)") | |||||
public void after2(int arg, int ret) {//CORRECT | |||||
//public void after2(int ret, int arg) {//INCORRECT | |||||
log("after2-"); | |||||
log(""+arg); | |||||
log(""+ret); | |||||
} | |||||
@After("execution(int ataspectj.AfterXTest.dupPos(..))") | |||||
public void after() { | |||||
log("after"); | |||||
} | |||||
@AfterThrowing("execution(int ataspectj.AfterXTest.dupPos(..))") | |||||
public void afterThrowing(JoinPoint jp) { | |||||
log("afterThrowing"); | |||||
} | |||||
// formal binding is mandatory in AJ | |||||
//@AfterThrowing(throwned="java.lang.RuntimeException", pointcut="execution(int alex.test.ReturnAndThrowHelloWorld.dupPos(..))") | |||||
//public void afterThrowing2() { | |||||
@AfterThrowing(throwing= "e", pointcut="execution(int ataspectj.AfterXTest.dupPos(..))") | |||||
public void afterThrowing2(RuntimeException e) { | |||||
fail("should not be bounded"); | |||||
} | |||||
@AfterThrowing(throwing= "e", value="execution(int ataspectj.AfterXTest.dupPos(..))") | |||||
public void afterThrowing3(NoSuchMethodException e) { | |||||
log("afterThrowing3-"); | |||||
log("["+e.getMessage()+"]"); | |||||
} | |||||
} | |||||
} | |||||
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.AfterReturning; | |||||
import org.aspectj.lang.annotation.AfterThrowing; | |||||
import org.aspectj.lang.annotation.After; | |||||
import org.aspectj.lang.annotation.After; | |||||
import org.aspectj.lang.annotation.AfterReturning; | |||||
import org.aspectj.lang.annotation.AfterThrowing; | |||||
import org.aspectj.lang.annotation.AfterThrowing; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.JoinPoint; | |||||
import junit.framework.TestCase; | |||||
/** | |||||
* AfterXXX tests | |||||
* | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class AfterXTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(AfterXTest.class); | |||||
} | |||||
public int dupPos(int i) throws NoSuchMethodException { | |||||
if (i > 0) | |||||
return i*2; | |||||
else | |||||
throw new NoSuchMethodException("arg is negative"); | |||||
} | |||||
public void testAfterReturningAndThrowing() { | |||||
AfterXTest me = new AfterXTest(); | |||||
try { | |||||
s_log = new StringBuffer(); | |||||
int dup2 = me.dupPos(2); | |||||
// see after advice precedence here.. | |||||
//TODO really weird after finally comes first | |||||
// see BcelWeaver fix on sorting of shadowMungerList | |||||
//assertEquals("after after2- 2 4 afterRet- 2 ", s_log.toString()); | |||||
assertEquals("afterRet- 2 after2- 2 4 after ", s_log.toString()); | |||||
} catch (Exception e) { | |||||
fail("Should not fail " + e.toString()); | |||||
} | |||||
s_log = new StringBuffer(); | |||||
try { | |||||
int dupm2 = me.dupPos(-2); | |||||
fail("should not be reached"); | |||||
} catch (NoSuchMethodException e) { | |||||
//TODO really weird after finally comes first | |||||
// see BcelWeaver fix in sorting of shadowMungerList | |||||
assertEquals("after afterThrowing afterThrowing3- [arg is negative] ", s_log.toString()); | |||||
} | |||||
} | |||||
@Aspect | |||||
public static class TestAspect { | |||||
@AfterReturning("execution(int ataspectj.AfterXTest.dupPos(..)) && args(arg)") | |||||
public void afterRet(int arg) { | |||||
log("afterRet-"); | |||||
log(""+arg); | |||||
} | |||||
@AfterReturning(returning="ret", pointcut="execution(int ataspectj.AfterXTest.dupPos(..)) && args(arg)") | |||||
public void after2(int arg, int ret) {//CORRECT | |||||
//public void after2(int ret, int arg) {//INCORRECT | |||||
log("after2-"); | |||||
log(""+arg); | |||||
log(""+ret); | |||||
} | |||||
@After("execution(int ataspectj.AfterXTest.dupPos(..))") | |||||
public void after() { | |||||
log("after"); | |||||
} | |||||
@AfterThrowing("execution(int ataspectj.AfterXTest.dupPos(..))") | |||||
public void afterThrowing(JoinPoint jp) { | |||||
log("afterThrowing"); | |||||
} | |||||
// formal binding is mandatory in AJ | |||||
//@AfterThrowing(throwned="java.lang.RuntimeException", pointcut="execution(int alex.test.ReturnAndThrowHelloWorld.dupPos(..))") | |||||
//public void afterThrowing2() { | |||||
@AfterThrowing(throwing= "e", pointcut="execution(int ataspectj.AfterXTest.dupPos(..))") | |||||
public void afterThrowing2(RuntimeException e) { | |||||
fail("should not be bounded"); | |||||
} | |||||
@AfterThrowing(throwing= "e", value="execution(int ataspectj.AfterXTest.dupPos(..))") | |||||
public void afterThrowing3(NoSuchMethodException e) { | |||||
log("afterThrowing3-"); | |||||
log("["+e.getMessage()+"]"); | |||||
} | |||||
} | |||||
} |
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import junit.framework.TestCase; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.annotation.Around; | |||||
import org.aspectj.lang.JoinPoint; | |||||
import org.aspectj.lang.ProceedingJoinPoint; | |||||
import org.aspectj.lang.annotation.Around; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
/** | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class BindingTest extends TestCase { | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(BindingTest.class); | |||||
} | |||||
public int substract(int i, int j) { | |||||
int res = i - j; | |||||
return res+1;//see +1 here | |||||
} | |||||
public static int dup(int i) { | |||||
return i*3;//see x3 here | |||||
} | |||||
public void testAroundArgs() { | |||||
int res = substract(3, 2);// should be 2 without around advice | |||||
assertEquals(1, res); | |||||
} | |||||
public void testProceedArgs() { | |||||
int res = dup((3+1));// advice will change arg with arg-1 | |||||
assertEquals(6, res); | |||||
callWithinStatic(); | |||||
} | |||||
private static void callWithinStatic() { | |||||
int res = dup((3+1)); | |||||
assertEquals(6, res); | |||||
} | |||||
@Aspect | |||||
public static class TestAspect_1 { | |||||
@Pointcut("call(int substract(int, int)) && within(ataspectj.BindingTest) && args(arg1, arg2)") | |||||
void pc(int arg2, int arg1) {}// see rather fancy ordering here.. | |||||
@Around("pc(argAdvice2, argAdvice1) && target(t)")//see here ordering remade consistent | |||||
public Object aaround(ProceedingJoinPoint jp, BindingTest t, int argAdvice1, int argAdvice2) throws Throwable { | |||||
int res = ((Integer)jp.proceed()).intValue(); | |||||
return new Integer(res-1); | |||||
} | |||||
@Pointcut("call(int dup(int)) && within(ataspectj.BindingTest) && args(arg1)") | |||||
void pc2(int arg1) {} | |||||
@Around("pc2(argAdvice1)") | |||||
public Object aaround2(int argAdvice1, ProceedingJoinPoint jp) throws Throwable { | |||||
int res = ((Integer)jp.proceed(new Object[]{new Integer(argAdvice1-1)})).intValue(); | |||||
return new Integer(res/3*2); | |||||
} | |||||
} | |||||
} | |||||
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import junit.framework.TestCase; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.annotation.Around; | |||||
import org.aspectj.lang.JoinPoint; | |||||
import org.aspectj.lang.ProceedingJoinPoint; | |||||
import org.aspectj.lang.annotation.Around; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
/** | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class BindingTest extends TestCase { | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(BindingTest.class); | |||||
} | |||||
public int substract(int i, int j) { | |||||
int res = i - j; | |||||
return res+1;//see +1 here | |||||
} | |||||
public static int dup(int i) { | |||||
return i*3;//see x3 here | |||||
} | |||||
public void testAroundArgs() { | |||||
int res = substract(3, 2);// should be 2 without around advice | |||||
assertEquals(1, res); | |||||
} | |||||
public void testProceedArgs() { | |||||
int res = dup((3+1));// advice will change arg with arg-1 | |||||
assertEquals(6, res); | |||||
callWithinStatic(); | |||||
} | |||||
private static void callWithinStatic() { | |||||
int res = dup((3+1)); | |||||
assertEquals(6, res); | |||||
} | |||||
@Aspect | |||||
public static class TestAspect_1 { | |||||
@Pointcut("call(int substract(int, int)) && within(ataspectj.BindingTest) && args(arg1, arg2)") | |||||
void pc(int arg2, int arg1) {}// see rather fancy ordering here.. | |||||
@Around("pc(argAdvice2, argAdvice1) && target(t)")//see here ordering remade consistent | |||||
public Object aaround(ProceedingJoinPoint jp, BindingTest t, int argAdvice1, int argAdvice2) throws Throwable { | |||||
int res = ((Integer)jp.proceed()).intValue(); | |||||
return new Integer(res-1); | |||||
} | |||||
@Pointcut("call(int dup(int)) && within(ataspectj.BindingTest) && args(arg1)") | |||||
void pc2(int arg1) {} | |||||
@Around("pc2(argAdvice1)") | |||||
public Object aaround2(int argAdvice1, ProceedingJoinPoint jp) throws Throwable { | |||||
int res = ((Integer)jp.proceed(new Object[]{new Integer(argAdvice1-1)})).intValue(); | |||||
return new Integer(res/3*2); | |||||
} | |||||
} | |||||
} |
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.JoinPoint; | |||||
import org.aspectj.lang.ProceedingJoinPoint; | |||||
import org.aspectj.runtime.internal.CFlowCounter; | |||||
import junit.framework.TestCase; | |||||
/** | |||||
* Test cflow (LTW of the aspect to add cflow fields to it) | |||||
* | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class CflowTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(CflowTest.class); | |||||
} | |||||
public void hello() { | |||||
log("hello"); | |||||
} | |||||
public void startCflow() { | |||||
hello(); | |||||
} | |||||
public void testCflow() { | |||||
CflowTest me = new CflowTest(); | |||||
s_log = new StringBuffer(); | |||||
me.hello(); | |||||
assertEquals("hello ", s_log.toString()); | |||||
s_log = new StringBuffer(); | |||||
me.startCflow(); | |||||
assertEquals("before hello ", s_log.toString()); | |||||
} | |||||
@Aspect | |||||
public static class TestAspect { | |||||
//LTW will add: | |||||
//public static final CFlowCounter ajc$cflowCounter$0 = new CFlowCounter(); | |||||
@Before("execution(* ataspectj.CflowTest.hello(..)) && this(t) && cflow(execution(* ataspectj.CflowTest.startCflow(..)))") | |||||
public void before(Object t, JoinPoint jp) { | |||||
assertEquals(CflowTest.class.getName(), t.getClass().getName()); | |||||
try { | |||||
//jp.proceed(); | |||||
} catch (Throwable throwable) { | |||||
fail("proceed called in before Advice must be a NO-OP:" + throwable.toString()); | |||||
} | |||||
log("before"); | |||||
} | |||||
} | |||||
} | |||||
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.JoinPoint; | |||||
import org.aspectj.lang.ProceedingJoinPoint; | |||||
import org.aspectj.runtime.internal.CFlowCounter; | |||||
import junit.framework.TestCase; | |||||
/** | |||||
* Test cflow (LTW of the aspect to add cflow fields to it) | |||||
* | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class CflowTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(CflowTest.class); | |||||
} | |||||
public void hello() { | |||||
log("hello"); | |||||
} | |||||
public void startCflow() { | |||||
hello(); | |||||
} | |||||
public void testCflow() { | |||||
CflowTest me = new CflowTest(); | |||||
s_log = new StringBuffer(); | |||||
me.hello(); | |||||
assertEquals("hello ", s_log.toString()); | |||||
s_log = new StringBuffer(); | |||||
me.startCflow(); | |||||
assertEquals("before hello ", s_log.toString()); | |||||
} | |||||
@Aspect | |||||
public static class TestAspect { | |||||
//LTW will add: | |||||
//public static final CFlowCounter ajc$cflowCounter$0 = new CFlowCounter(); | |||||
@Before("execution(* ataspectj.CflowTest.hello(..)) && this(t) && cflow(execution(* ataspectj.CflowTest.startCflow(..)))") | |||||
public void before(Object t, JoinPoint jp) { | |||||
assertEquals(CflowTest.class.getName(), t.getClass().getName()); | |||||
try { | |||||
//jp.proceed(); | |||||
} catch (Throwable throwable) { | |||||
fail("proceed called in before Advice must be a NO-OP:" + throwable.toString()); | |||||
} | |||||
log("before"); | |||||
} | |||||
} | |||||
} |
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import junit.framework.TestCase; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
/** | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class IfPointcutTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public void hello(int i) { | |||||
System.out.println("IfPointcutTest.hello " + i); | |||||
} | |||||
public void testIf() { | |||||
IfPointcutTest me = new IfPointcutTest(); | |||||
me.hello(1); | |||||
me.hello(-1); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(IfPointcutTest.class); | |||||
} | |||||
@Aspect | |||||
public static class TestAspect { | |||||
public boolean positive(int i) { | |||||
return (i>=0); | |||||
} | |||||
@Pointcut("args(i) && if(i>0)") | |||||
void ifPc(int i) {} | |||||
@Before("execution(* ataspectj.IfPointcutTest.hello(int)) && ifPc(i)") | |||||
void before(int i) { | |||||
System.out.println("IfPointcutTest$TestAspect.before"); | |||||
} | |||||
} | |||||
} | |||||
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import junit.framework.TestCase; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
/** | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class IfPointcutTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public void hello(int i) { | |||||
System.out.println("IfPointcutTest.hello " + i); | |||||
} | |||||
public void testIf() { | |||||
IfPointcutTest me = new IfPointcutTest(); | |||||
me.hello(1); | |||||
me.hello(-1); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(IfPointcutTest.class); | |||||
} | |||||
@Aspect | |||||
public static class TestAspect { | |||||
public boolean positive(int i) { | |||||
return (i>=0); | |||||
} | |||||
@Pointcut("args(i) && if(i>0)") | |||||
void ifPc(int i) {} | |||||
@Before("execution(* ataspectj.IfPointcutTest.hello(int)) && ifPc(i)") | |||||
void before(int i) { | |||||
System.out.println("IfPointcutTest$TestAspect.before"); | |||||
} | |||||
} | |||||
} |
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.JoinPoint; | |||||
import org.aspectj.lang.Aspects; | |||||
import org.aspectj.lang.NoAspectBoundException; | |||||
import junit.framework.TestCase; | |||||
/** | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class PerClauseTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(AfterXTest.class); | |||||
} | |||||
public void perTarget() { | |||||
log("perTarget"); | |||||
} | |||||
public void testPerTarget() { | |||||
s_log = new StringBuffer(); | |||||
perTarget(); | |||||
assertEquals("AOP.perTarget perTarget ", s_log.toString()); | |||||
// singleton | |||||
try { | |||||
Aspects.aspectOf(TestAspectPerTarget.class); | |||||
fail("should fail with NOABE"); | |||||
} catch (NoAspectBoundException e) { | |||||
;//ok | |||||
} | |||||
// this per | |||||
try { | |||||
TestAspectPerTarget aspect = (TestAspectPerTarget) Aspects.aspectOf(TestAspectPerTarget.class, this); | |||||
assertNotNull(aspect); | |||||
} catch (NoAspectBoundException e) { | |||||
fail(e.toString()); | |||||
} | |||||
// another per | |||||
PerClauseTest me = new PerClauseTest(); | |||||
try { | |||||
Aspects.aspectOf(TestAspectPerTarget.class, me); | |||||
fail("should fail"); | |||||
} catch (NoAspectBoundException e) { | |||||
;//ok | |||||
} | |||||
me.perTarget(); | |||||
try { | |||||
TestAspectPerTarget aspect = (TestAspectPerTarget) Aspects.aspectOf(TestAspectPerTarget.class, me); | |||||
assertNotNull(aspect); | |||||
} catch (NoAspectBoundException e) { | |||||
fail(e.toString()); | |||||
} | |||||
} | |||||
@Aspect("pertarget(execution(* ataspectj.PerClauseTest.perTarget()))") | |||||
public static class TestAspectPerTarget { | |||||
public TestAspectPerTarget() { | |||||
; | |||||
} | |||||
@Before("execution(* ataspectj.PerClauseTest.perTarget()) && target(t)") | |||||
public void before(JoinPoint jp, Object t) { | |||||
log("AOP."+jp.getSignature().getName()); | |||||
assertTrue("perX match", this.equals(Aspects.aspectOf(getClass(), t))); | |||||
} | |||||
} | |||||
public void perCflowEntry() { | |||||
perCflow(); | |||||
} | |||||
public void perCflow() { | |||||
log("perCflow"); | |||||
} | |||||
public void testPerCflow() { | |||||
s_log = new StringBuffer(); | |||||
perCflow(); | |||||
assertEquals("perCflow ", s_log.toString()); | |||||
s_log = new StringBuffer(); | |||||
perCflowEntry(); | |||||
assertEquals("AOP.perCflow perCflow ", s_log.toString()); | |||||
} | |||||
@Aspect("percflow(execution(* ataspectj.PerClauseTest.perCflowEntry()))") | |||||
public static class TestAspectPerCflow { | |||||
public TestAspectPerCflow() { | |||||
; | |||||
} | |||||
@Before("execution(* ataspectj.PerClauseTest.perCflow())") | |||||
public void before(JoinPoint jp) { | |||||
log("AOP."+jp.getSignature().getName()); | |||||
assertTrue("perX match", this.equals(Aspects.aspectOf(getClass(), Thread.currentThread()))); | |||||
} | |||||
} | |||||
} | |||||
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.JoinPoint; | |||||
import org.aspectj.lang.Aspects; | |||||
import org.aspectj.lang.NoAspectBoundException; | |||||
import junit.framework.TestCase; | |||||
/** | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class PerClauseTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(AfterXTest.class); | |||||
} | |||||
public void perTarget() { | |||||
log("perTarget"); | |||||
} | |||||
public void testPerTarget() { | |||||
s_log = new StringBuffer(); | |||||
perTarget(); | |||||
assertEquals("AOP.perTarget perTarget ", s_log.toString()); | |||||
// singleton | |||||
try { | |||||
Aspects.aspectOf(TestAspectPerTarget.class); | |||||
fail("should fail with NOABE"); | |||||
} catch (NoAspectBoundException e) { | |||||
;//ok | |||||
} | |||||
// this per | |||||
try { | |||||
TestAspectPerTarget aspect = (TestAspectPerTarget) Aspects.aspectOf(TestAspectPerTarget.class, this); | |||||
assertNotNull(aspect); | |||||
} catch (NoAspectBoundException e) { | |||||
fail(e.toString()); | |||||
} | |||||
// another per | |||||
PerClauseTest me = new PerClauseTest(); | |||||
try { | |||||
Aspects.aspectOf(TestAspectPerTarget.class, me); | |||||
fail("should fail"); | |||||
} catch (NoAspectBoundException e) { | |||||
;//ok | |||||
} | |||||
me.perTarget(); | |||||
try { | |||||
TestAspectPerTarget aspect = (TestAspectPerTarget) Aspects.aspectOf(TestAspectPerTarget.class, me); | |||||
assertNotNull(aspect); | |||||
} catch (NoAspectBoundException e) { | |||||
fail(e.toString()); | |||||
} | |||||
} | |||||
@Aspect("pertarget(execution(* ataspectj.PerClauseTest.perTarget()))") | |||||
public static class TestAspectPerTarget { | |||||
public TestAspectPerTarget() { | |||||
; | |||||
} | |||||
@Before("execution(* ataspectj.PerClauseTest.perTarget()) && target(t)") | |||||
public void before(JoinPoint jp, Object t) { | |||||
log("AOP."+jp.getSignature().getName()); | |||||
assertTrue("perX match", this.equals(Aspects.aspectOf(getClass(), t))); | |||||
} | |||||
} | |||||
public void perCflowEntry() { | |||||
perCflow(); | |||||
} | |||||
public void perCflow() { | |||||
log("perCflow"); | |||||
} | |||||
public void testPerCflow() { | |||||
s_log = new StringBuffer(); | |||||
perCflow(); | |||||
assertEquals("perCflow ", s_log.toString()); | |||||
s_log = new StringBuffer(); | |||||
perCflowEntry(); | |||||
assertEquals("AOP.perCflow perCflow ", s_log.toString()); | |||||
} | |||||
@Aspect("percflow(execution(* ataspectj.PerClauseTest.perCflowEntry()))") | |||||
public static class TestAspectPerCflow { | |||||
public TestAspectPerCflow() { | |||||
; | |||||
} | |||||
@Before("execution(* ataspectj.PerClauseTest.perCflow())") | |||||
public void before(JoinPoint jp) { | |||||
log("AOP."+jp.getSignature().getName()); | |||||
assertTrue("perX match", this.equals(Aspects.aspectOf(getClass(), Thread.currentThread()))); | |||||
} | |||||
} | |||||
} |
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.JoinPoint; | |||||
import org.aspectj.runtime.internal.CFlowCounter; | |||||
import junit.framework.TestCase; | |||||
/** | |||||
* Test pointcut reference without binding | |||||
* | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class PointcutReferenceTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(PointcutReferenceTest.class); | |||||
} | |||||
public void hello() { | |||||
log("hello"); | |||||
} | |||||
public void helloWithRef() { | |||||
log("helloWithRef"); | |||||
} | |||||
public void testPointcutReferenceNoBinding() { | |||||
PointcutReferenceTest me = new PointcutReferenceTest(); | |||||
s_log = new StringBuffer(); | |||||
me.hello(); | |||||
assertEquals("before hello ", s_log.toString()); | |||||
} | |||||
public void testPointcutReferenceBinding() { | |||||
PointcutReferenceTest me = new PointcutReferenceTest(); | |||||
s_log = new StringBuffer(); | |||||
me.helloWithRef(); | |||||
assertEquals("beforeWithRef helloWithRef ", s_log.toString()); | |||||
} | |||||
@Aspect | |||||
public static class TestAspect { | |||||
// order of pointcut in source code does not matter for pc refs | |||||
@Pointcut("execution(* ataspectj.PointcutReferenceTest.hello(..))") | |||||
void pcRef() {} | |||||
@Pointcut("pcRef()") | |||||
void pcRef2() {} | |||||
@Before("pcRef2()") | |||||
public void before(JoinPoint jp) { | |||||
log("before"); | |||||
} | |||||
// see here outer aspect reference | |||||
@Pointcut("execution(* ataspectj.PointcutReferenceTest.helloWithRef(..))" + | |||||
" && ataspectj.PointcutReferenceTest.RefAspect.pcRefObjectBinding(t)") | |||||
void pcRefBinding(Object t) {} | |||||
@Before("pcRefBinding(ttt)") | |||||
public void before(Object ttt, JoinPoint jp) { | |||||
log("beforeWithRef"); | |||||
} | |||||
} | |||||
@Aspect | |||||
public static class RefAspect { | |||||
@Pointcut("this(obj)") | |||||
public void pcRefObjectBinding(PointcutReferenceTest obj) {} | |||||
} | |||||
} | |||||
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.JoinPoint; | |||||
import org.aspectj.runtime.internal.CFlowCounter; | |||||
import junit.framework.TestCase; | |||||
/** | |||||
* Test pointcut reference without binding | |||||
* | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class PointcutReferenceTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(PointcutReferenceTest.class); | |||||
} | |||||
public void hello() { | |||||
log("hello"); | |||||
} | |||||
public void helloWithRef() { | |||||
log("helloWithRef"); | |||||
} | |||||
public void testPointcutReferenceNoBinding() { | |||||
PointcutReferenceTest me = new PointcutReferenceTest(); | |||||
s_log = new StringBuffer(); | |||||
me.hello(); | |||||
assertEquals("before hello ", s_log.toString()); | |||||
} | |||||
public void testPointcutReferenceBinding() { | |||||
PointcutReferenceTest me = new PointcutReferenceTest(); | |||||
s_log = new StringBuffer(); | |||||
me.helloWithRef(); | |||||
assertEquals("beforeWithRef helloWithRef ", s_log.toString()); | |||||
} | |||||
@Aspect | |||||
public static class TestAspect { | |||||
// order of pointcut in source code does not matter for pc refs | |||||
@Pointcut("execution(* ataspectj.PointcutReferenceTest.hello(..))") | |||||
void pcRef() {} | |||||
@Pointcut("pcRef()") | |||||
void pcRef2() {} | |||||
@Before("pcRef2()") | |||||
public void before(JoinPoint jp) { | |||||
log("before"); | |||||
} | |||||
// see here outer aspect reference | |||||
@Pointcut("execution(* ataspectj.PointcutReferenceTest.helloWithRef(..))" + | |||||
" && ataspectj.PointcutReferenceTest.RefAspect.pcRefObjectBinding(t)") | |||||
void pcRefBinding(Object t) {} | |||||
@Before("pcRefBinding(ttt)") | |||||
public void before(Object ttt, JoinPoint jp) { | |||||
log("beforeWithRef"); | |||||
} | |||||
} | |||||
@Aspect | |||||
public static class RefAspect { | |||||
@Pointcut("this(obj)") | |||||
public void pcRefObjectBinding(PointcutReferenceTest obj) {} | |||||
} | |||||
} |
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import junit.framework.TestCase; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.DeclarePrecedence; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Before; | |||||
/** | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class PrecedenceTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(PrecedenceTest.class); | |||||
} | |||||
public void hello() { | |||||
log("hello"); | |||||
} | |||||
public void testPrecedence() { | |||||
s_log = new StringBuffer(); | |||||
hello(); | |||||
assertEquals("TestAspect_3 TestAspect_2 TestAspect_1 hello", s_log.toString()); | |||||
} | |||||
@Aspect() | |||||
public static class TestAspect_1 { | |||||
@Before("execution(* ataspectj.PrecedenceTest.hello())") | |||||
void before() { | |||||
log("TestAspect_1"); | |||||
} | |||||
} | |||||
@Aspect() | |||||
@DeclarePrecedence("ataspectj.PrecedenceTest.TestAspect_3, ataspectj.PrecedenceTest.TestAspect_1") | |||||
public static class TestAspect_2 { | |||||
@Before("execution(* ataspectj.PrecedenceTest.hello())") | |||||
void before() { | |||||
log("TestAspect_2"); | |||||
} | |||||
} | |||||
@Aspect() | |||||
public static class TestAspect_3 { | |||||
@Before("execution(* ataspectj.PrecedenceTest.hello())") | |||||
void before() { | |||||
log("TestAspect_3"); | |||||
} | |||||
} | |||||
@Aspect() | |||||
@DeclarePrecedence("ataspectj.PrecedenceTest.TestAspect_3, ataspectj.PrecedenceTest.TestAspect_2, ataspectj.PrecedenceTest.TestAspect_1, *") | |||||
public static class TestAspect_Order { | |||||
} | |||||
} | |||||
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import junit.framework.TestCase; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.DeclarePrecedence; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Before; | |||||
/** | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class PrecedenceTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(PrecedenceTest.class); | |||||
} | |||||
public void hello() { | |||||
log("hello"); | |||||
} | |||||
public void testPrecedence() { | |||||
s_log = new StringBuffer(); | |||||
hello(); | |||||
assertEquals("TestAspect_3 TestAspect_2 TestAspect_1 hello", s_log.toString()); | |||||
} | |||||
@Aspect() | |||||
public static class TestAspect_1 { | |||||
@Before("execution(* ataspectj.PrecedenceTest.hello())") | |||||
void before() { | |||||
log("TestAspect_1"); | |||||
} | |||||
} | |||||
@Aspect() | |||||
@DeclarePrecedence("ataspectj.PrecedenceTest.TestAspect_3, ataspectj.PrecedenceTest.TestAspect_1") | |||||
public static class TestAspect_2 { | |||||
@Before("execution(* ataspectj.PrecedenceTest.hello())") | |||||
void before() { | |||||
log("TestAspect_2"); | |||||
} | |||||
} | |||||
@Aspect() | |||||
public static class TestAspect_3 { | |||||
@Before("execution(* ataspectj.PrecedenceTest.hello())") | |||||
void before() { | |||||
log("TestAspect_3"); | |||||
} | |||||
} | |||||
@Aspect() | |||||
@DeclarePrecedence("ataspectj.PrecedenceTest.TestAspect_3, ataspectj.PrecedenceTest.TestAspect_2, ataspectj.PrecedenceTest.TestAspect_1, *") | |||||
public static class TestAspect_Order { | |||||
} | |||||
} |
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.After; | |||||
import org.aspectj.lang.annotation.Around; | |||||
import org.aspectj.lang.annotation.DeclarePrecedence; | |||||
import org.aspectj.lang.annotation.After; | |||||
import org.aspectj.lang.annotation.Around; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.JoinPoint; | |||||
import org.aspectj.lang.ProceedingJoinPoint; | |||||
import org.aspectj.lang.ProceedingJoinPoint; | |||||
import org.aspectj.runtime.internal.AroundClosure; | |||||
import junit.framework.TestCase; | |||||
/** | |||||
* Test various advice and JoinPoint + binding, without pc ref | |||||
* | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class SingletonAspectBindingsTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(SingletonAspectBindingsTest.class); | |||||
} | |||||
public void hello() { | |||||
log("hello"); | |||||
} | |||||
public void hello(String s) { | |||||
log("hello-"); | |||||
log(s); | |||||
} | |||||
public void testExecutionWithThisBinding() { | |||||
s_log = new StringBuffer(); | |||||
SingletonAspectBindingsTest me = new SingletonAspectBindingsTest(); | |||||
me.hello(); | |||||
// see here advice precedence as in source code order | |||||
//TODO check around relative order | |||||
// see fix in BcelWeaver sorting shadowMungerList | |||||
//assertEquals("around2_ around_ before hello after _around _around2 ", s_log.toString()); | |||||
assertEquals("around_ around2_ before hello _around2 _around after ", s_log.toString()); | |||||
} | |||||
public void testExecutionWithArgBinding() { | |||||
s_log = new StringBuffer(); | |||||
SingletonAspectBindingsTest me = new SingletonAspectBindingsTest(); | |||||
me.hello("x"); | |||||
assertEquals("before- x hello- x ", s_log.toString()); | |||||
} | |||||
@Aspect | |||||
public static class TestAspect { | |||||
static int s = 0; | |||||
static { | |||||
s++; | |||||
} | |||||
public TestAspect() { | |||||
// assert clinit has run when singleton aspectOf reaches that | |||||
assertTrue(s>0); | |||||
} | |||||
//public static TestAspect aspectOf() {return null;} | |||||
@Around("execution(* ataspectj.SingletonAspectBindingsTest.hello())") | |||||
public void aaround(ProceedingJoinPoint jp) { | |||||
log("around_"); | |||||
try { | |||||
jp.proceed(); | |||||
} catch (Throwable throwable) { | |||||
throwable.printStackTrace(); | |||||
} | |||||
log("_around"); | |||||
} | |||||
@Around("execution(* ataspectj.SingletonAspectBindingsTest.hello()) && this(t)") | |||||
public void around2(ProceedingJoinPoint jp, Object t) { | |||||
log("around2_"); | |||||
assertEquals(SingletonAspectBindingsTest.class.getName(), t.getClass().getName()); | |||||
try { | |||||
jp.proceed(); | |||||
} catch (Throwable throwable) { | |||||
throwable.printStackTrace(); | |||||
} | |||||
log("_around2"); | |||||
} | |||||
@Before("execution(* ataspectj.SingletonAspectBindingsTest.hello())") | |||||
public void before(JoinPoint.StaticPart sjp) { | |||||
log("before"); | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
} | |||||
@After("execution(* ataspectj.SingletonAspectBindingsTest.hello())") | |||||
public void after(JoinPoint.StaticPart sjp) { | |||||
log("after"); | |||||
assertEquals("execution(public void ataspectj.SingletonAspectBindingsTest.hello())", sjp.toLongString()); | |||||
} | |||||
//TODO see String alias, see before advice name clash - all that works | |||||
// 1/ String is in java.lang.* - see SimpleScope.javalangPrefix array | |||||
// 2/ the advice is register thru its Bcel Method mirror | |||||
@Before("execution(* ataspectj.SingletonAspectBindingsTest.hello(String)) && args(s)") | |||||
public void before(String s, JoinPoint.StaticPart sjp) { | |||||
log("before-"); | |||||
log(s); | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
} | |||||
} | |||||
} | |||||
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.After; | |||||
import org.aspectj.lang.annotation.Around; | |||||
import org.aspectj.lang.annotation.DeclarePrecedence; | |||||
import org.aspectj.lang.annotation.After; | |||||
import org.aspectj.lang.annotation.Around; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.JoinPoint; | |||||
import org.aspectj.lang.ProceedingJoinPoint; | |||||
import org.aspectj.lang.ProceedingJoinPoint; | |||||
import org.aspectj.runtime.internal.AroundClosure; | |||||
import junit.framework.TestCase; | |||||
/** | |||||
* Test various advice and JoinPoint + binding, without pc ref | |||||
* | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class SingletonAspectBindingsTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(SingletonAspectBindingsTest.class); | |||||
} | |||||
public void hello() { | |||||
log("hello"); | |||||
} | |||||
public void hello(String s) { | |||||
log("hello-"); | |||||
log(s); | |||||
} | |||||
public void testExecutionWithThisBinding() { | |||||
s_log = new StringBuffer(); | |||||
SingletonAspectBindingsTest me = new SingletonAspectBindingsTest(); | |||||
me.hello(); | |||||
// see here advice precedence as in source code order | |||||
//TODO check around relative order | |||||
// see fix in BcelWeaver sorting shadowMungerList | |||||
//assertEquals("around2_ around_ before hello after _around _around2 ", s_log.toString()); | |||||
assertEquals("around_ around2_ before hello _around2 _around after ", s_log.toString()); | |||||
} | |||||
public void testExecutionWithArgBinding() { | |||||
s_log = new StringBuffer(); | |||||
SingletonAspectBindingsTest me = new SingletonAspectBindingsTest(); | |||||
me.hello("x"); | |||||
assertEquals("before- x hello- x ", s_log.toString()); | |||||
} | |||||
@Aspect | |||||
public static class TestAspect { | |||||
static int s = 0; | |||||
static { | |||||
s++; | |||||
} | |||||
public TestAspect() { | |||||
// assert clinit has run when singleton aspectOf reaches that | |||||
assertTrue(s>0); | |||||
} | |||||
//public static TestAspect aspectOf() {return null;} | |||||
@Around("execution(* ataspectj.SingletonAspectBindingsTest.hello())") | |||||
public void aaround(ProceedingJoinPoint jp) { | |||||
log("around_"); | |||||
try { | |||||
jp.proceed(); | |||||
} catch (Throwable throwable) { | |||||
throwable.printStackTrace(); | |||||
} | |||||
log("_around"); | |||||
} | |||||
@Around("execution(* ataspectj.SingletonAspectBindingsTest.hello()) && this(t)") | |||||
public void around2(ProceedingJoinPoint jp, Object t) { | |||||
log("around2_"); | |||||
assertEquals(SingletonAspectBindingsTest.class.getName(), t.getClass().getName()); | |||||
try { | |||||
jp.proceed(); | |||||
} catch (Throwable throwable) { | |||||
throwable.printStackTrace(); | |||||
} | |||||
log("_around2"); | |||||
} | |||||
@Before("execution(* ataspectj.SingletonAspectBindingsTest.hello())") | |||||
public void before(JoinPoint.StaticPart sjp) { | |||||
log("before"); | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
} | |||||
@After("execution(* ataspectj.SingletonAspectBindingsTest.hello())") | |||||
public void after(JoinPoint.StaticPart sjp) { | |||||
log("after"); | |||||
assertEquals("execution(public void ataspectj.SingletonAspectBindingsTest.hello())", sjp.toLongString()); | |||||
} | |||||
//TODO see String alias, see before advice name clash - all that works | |||||
// 1/ String is in java.lang.* - see SimpleScope.javalangPrefix array | |||||
// 2/ the advice is register thru its Bcel Method mirror | |||||
@Before("execution(* ataspectj.SingletonAspectBindingsTest.hello(String)) && args(s)") | |||||
public void before(String s, JoinPoint.StaticPart sjp) { | |||||
log("before-"); | |||||
log(s); | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
} | |||||
} | |||||
} |
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import junit.textui.TestRunner; | |||||
import junit.framework.TestResult; | |||||
import java.util.Enumeration; | |||||
/** | |||||
* Helper to run a test as a main class, but still throw exception and not just print on stderr | |||||
* upon test failure. | |||||
* <p/> | |||||
* This is required for Ajc test case that are also designed to work with LTW. | |||||
* | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class TestHelper { | |||||
public static void runAndThrowOnFailure(junit.framework.Test test) { | |||||
TestRunner r = new TestRunner(); | |||||
TestResult rr = r.doRun(test); | |||||
if (!rr.wasSuccessful()) { | |||||
StringBuffer sb = new StringBuffer("\n"); | |||||
Enumeration e = rr.failures(); | |||||
while (e.hasMoreElements()) { | |||||
sb.append("Failure: "); | |||||
sb.append(e.nextElement()); | |||||
sb.append("\n"); | |||||
} | |||||
e = rr.errors(); | |||||
while (e.hasMoreElements()) { | |||||
sb.append("Error: "); | |||||
sb.append(e.nextElement()); | |||||
sb.append("\n"); | |||||
} | |||||
throw new RuntimeException(sb.toString()); | |||||
} | |||||
} | |||||
} | |||||
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import junit.textui.TestRunner; | |||||
import junit.framework.TestResult; | |||||
import java.util.Enumeration; | |||||
/** | |||||
* Helper to run a test as a main class, but still throw exception and not just print on stderr | |||||
* upon test failure. | |||||
* <p/> | |||||
* This is required for Ajc test case that are also designed to work with LTW. | |||||
* | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class TestHelper { | |||||
public static void runAndThrowOnFailure(junit.framework.Test test) { | |||||
TestRunner r = new TestRunner(); | |||||
TestResult rr = r.doRun(test); | |||||
if (!rr.wasSuccessful()) { | |||||
StringBuffer sb = new StringBuffer("\n"); | |||||
Enumeration e = rr.failures(); | |||||
while (e.hasMoreElements()) { | |||||
sb.append("Failure: "); | |||||
sb.append(e.nextElement()); | |||||
sb.append("\n"); | |||||
} | |||||
e = rr.errors(); | |||||
while (e.hasMoreElements()) { | |||||
sb.append("Error: "); | |||||
sb.append(e.nextElement()); | |||||
sb.append("\n"); | |||||
} | |||||
throw new RuntimeException(sb.toString()); | |||||
} | |||||
} | |||||
} |
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import junit.framework.TestCase; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.JoinPoint; | |||||
/** | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class XXJoinPointTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(XXJoinPointTest.class); | |||||
} | |||||
public void hello() { | |||||
log("hello"); | |||||
} | |||||
public void testJoinPointsInAdviceSignature() { | |||||
s_log = new StringBuffer(); | |||||
XXJoinPointTest me = new XXJoinPointTest(); | |||||
me.hello(); | |||||
assertEquals("jp sjp esjp jp-sjp sjp-esjp sjp-jp-esjp esjp-jp-sjp hello ", s_log.toString()); | |||||
} | |||||
@Aspect | |||||
public static class TestAspect { | |||||
@Pointcut("call(* ataspectj.XXJoinPointTest.hello()) && within(ataspectj.XXJoinPointTest)") | |||||
void pc() {} | |||||
@Before("pc()") | |||||
void before(JoinPoint jp) { | |||||
assertEquals("hello", jp.getSignature().getName()); | |||||
log("jp"); | |||||
} | |||||
@Before("pc()") | |||||
void before(JoinPoint.StaticPart sjp) { | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
log("sjp"); | |||||
} | |||||
@Before("pc()") | |||||
void beforeEnclosing(JoinPoint.EnclosingStaticPart esjp) { | |||||
assertEquals("testJoinPointsInAdviceSignature", esjp.getSignature().getName()); | |||||
log("esjp"); | |||||
} | |||||
//weird order | |||||
@Before("pc()") | |||||
void beforeWEIRD1(JoinPoint jp, JoinPoint.StaticPart sjp) { | |||||
assertEquals("hello", jp.getSignature().getName()); | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
log("jp-sjp"); | |||||
} | |||||
@Before("pc()") | |||||
void before(JoinPoint.StaticPart sjp, JoinPoint.EnclosingStaticPart esjp) { | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
assertEquals("testJoinPointsInAdviceSignature", esjp.getSignature().getName()); | |||||
log("sjp-esjp"); | |||||
} | |||||
// conventional order | |||||
@Before("pc()") | |||||
void before(JoinPoint.StaticPart sjp, JoinPoint jp, JoinPoint.EnclosingStaticPart esjp) { | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
assertEquals("hello", jp.getSignature().getName()); | |||||
assertEquals("testJoinPointsInAdviceSignature", esjp.getSignature().getName()); | |||||
log("sjp-jp-esjp"); | |||||
} | |||||
// weird order | |||||
@Before("pc()") | |||||
void beforeWEIRD2(JoinPoint.EnclosingStaticPart esjp, JoinPoint jp, JoinPoint.StaticPart sjp) { | |||||
assertEquals("testJoinPointsInAdviceSignature", esjp.getSignature().getName()); | |||||
assertEquals("hello", jp.getSignature().getName()); | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
log("esjp-jp-sjp"); | |||||
} | |||||
} | |||||
} | |||||
/******************************************************************************* | |||||
* Copyright (c) Jonas Bonér, Alexandre Vasseur | |||||
* All rights reserved. This program and the accompanying materials | |||||
* are made available under the terms of the Common Public License v1.0 | |||||
* which accompanies this distribution, and is available at | |||||
* http://www.eclipse.org/legal/cpl-v10.html | |||||
*******************************************************************************/ | |||||
package ataspectj; | |||||
import junit.framework.TestCase; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Before; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.JoinPoint; | |||||
/** | |||||
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> | |||||
*/ | |||||
public class XXJoinPointTest extends TestCase { | |||||
static StringBuffer s_log = new StringBuffer(); | |||||
static void log(String s) { | |||||
s_log.append(s).append(" "); | |||||
} | |||||
public static void main(String[] args) { | |||||
TestHelper.runAndThrowOnFailure(suite()); | |||||
} | |||||
public static junit.framework.Test suite() { | |||||
return new junit.framework.TestSuite(XXJoinPointTest.class); | |||||
} | |||||
public void hello() { | |||||
log("hello"); | |||||
} | |||||
public void testJoinPointsInAdviceSignature() { | |||||
s_log = new StringBuffer(); | |||||
XXJoinPointTest me = new XXJoinPointTest(); | |||||
me.hello(); | |||||
assertEquals("jp sjp esjp jp-sjp sjp-esjp sjp-jp-esjp esjp-jp-sjp hello ", s_log.toString()); | |||||
} | |||||
@Aspect | |||||
public static class TestAspect { | |||||
@Pointcut("call(* ataspectj.XXJoinPointTest.hello()) && within(ataspectj.XXJoinPointTest)") | |||||
void pc() {} | |||||
@Before("pc()") | |||||
void before(JoinPoint jp) { | |||||
assertEquals("hello", jp.getSignature().getName()); | |||||
log("jp"); | |||||
} | |||||
@Before("pc()") | |||||
void before(JoinPoint.StaticPart sjp) { | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
log("sjp"); | |||||
} | |||||
@Before("pc()") | |||||
void beforeEnclosing(JoinPoint.EnclosingStaticPart esjp) { | |||||
assertEquals("testJoinPointsInAdviceSignature", esjp.getSignature().getName()); | |||||
log("esjp"); | |||||
} | |||||
//weird order | |||||
@Before("pc()") | |||||
void beforeWEIRD1(JoinPoint jp, JoinPoint.StaticPart sjp) { | |||||
assertEquals("hello", jp.getSignature().getName()); | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
log("jp-sjp"); | |||||
} | |||||
@Before("pc()") | |||||
void before(JoinPoint.StaticPart sjp, JoinPoint.EnclosingStaticPart esjp) { | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
assertEquals("testJoinPointsInAdviceSignature", esjp.getSignature().getName()); | |||||
log("sjp-esjp"); | |||||
} | |||||
// conventional order | |||||
@Before("pc()") | |||||
void before(JoinPoint.StaticPart sjp, JoinPoint jp, JoinPoint.EnclosingStaticPart esjp) { | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
assertEquals("hello", jp.getSignature().getName()); | |||||
assertEquals("testJoinPointsInAdviceSignature", esjp.getSignature().getName()); | |||||
log("sjp-jp-esjp"); | |||||
} | |||||
// weird order | |||||
@Before("pc()") | |||||
void beforeWEIRD2(JoinPoint.EnclosingStaticPart esjp, JoinPoint jp, JoinPoint.StaticPart sjp) { | |||||
assertEquals("testJoinPointsInAdviceSignature", esjp.getSignature().getName()); | |||||
assertEquals("hello", jp.getSignature().getName()); | |||||
assertEquals("hello", sjp.getSignature().getName()); | |||||
log("esjp-jp-sjp"); | |||||
} | |||||
} | |||||
} |