From 393f65bdec7a0822eddd55af22a8f7fce9bc58cd Mon Sep 17 00:00:00 2001 From: ehilsdal Date: Tue, 18 Nov 2003 02:43:31 +0000 Subject: Work on Bugzilla 42668: effect of an after returning type incompatible with a join point return type * fix to semantics document to describe correct semantics * checkin of failing coverage test case for correct semantics --- tests/new/AfterReturningParamMatching.java | 72 ++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 tests/new/AfterReturningParamMatching.java (limited to 'tests/new') diff --git a/tests/new/AfterReturningParamMatching.java b/tests/new/AfterReturningParamMatching.java new file mode 100644 index 000000000..062bfa541 --- /dev/null +++ b/tests/new/AfterReturningParamMatching.java @@ -0,0 +1,72 @@ +import org.aspectj.testing.Tester; + +// this test verifies the matching behaivor for after returning with a typed parameter. + +public class AfterReturningParamMatching { + public static void main(String[] args) { + goBoolean(false); + Tester.checkAndClearEvents(new String[] { "Object" }); + + goByte(1); + Tester.checkAndClearEvents(new String[] { "byte", "int", "long", "Object"}); + + goInt(2); + Tester.checkAndClearEvents(new String[] { "byte", "int", "long", "Object" }); + + goLong(3); + Tester.checkAndClearEvents(new String[] { "byte", "int", "long", "Object" }); + + goObject(new Object()); + Tester.checkAndClearEvents(new String[] { "Object" }); + + goObject(new Integer(4)); + Tester.checkAndClearEvents(new String[] { "Object", "Number", "Integer" }); + + goObject(null); + Tester.checkAndClearEvents(new String[] { "Object" }); + + goNumber(new Long(5)); + Tester.checkAndClearEvents(new String[] { "Object", "Number" }); + + goNumber(new Integer(6)); + Tester.checkAndClearEvents(new String[] { "Object", "Number", "Integer" }); + + goNumber(null); + Tester.checkAndClearEvents(new String[] { "Object", "Number" }); + + goInteger(new Integer(7)); + Tester.checkAndClearEvents(new String[] { "Object", "Number", "Integer" }); + + goInteger(null); + Tester.checkAndClearEvents(new String[] { "Object", "Number", "Integer" }); + + } + static boolean goBoolean(boolean b) { return b; } + static byte goByte(int i) { return (byte) i; } + static int goInt(int i) { return i; } + static long goLong(int i) { return (long) i; } + + static Object goObject(Object o) { return o; } + static Number goNumber(Number o) { return o; } + static Integer goInteger(Integer o) { return o; } +} + +aspect A { + + pointcut methodsInQuestion(): + call(* goBoolean(*)) || + call(* goByte(*)) || + call(* goInt(*)) || + call(* goLong(*)) || + call(* goObject(*)) || + call(* goNumber(*)) || + call(* goInteger(*)); + + after() returning(byte b): methodsInQuestion() { Tester.event("byte"); } + after() returning(int b): methodsInQuestion() { Tester.event("int"); } + after() returning(long b): methodsInQuestion() { Tester.event("long"); } + after() returning(Object b): methodsInQuestion() { Tester.event("Object"); } + after() returning(Number b): methodsInQuestion() { Tester.event("Number"); } + after() returning(Integer b): methodsInQuestion() { Tester.event("Integer"); } + +} \ No newline at end of file -- cgit v1.2.3