Browse Source

Add test "asynchronous proceed for nested around-advice chain"

Relates to #128.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
tags/V1_9_9
Alexander Kriegisch 2 years ago
parent
commit
72e91478f4

+ 14
- 0
tests/bugs198/github_128/Application.java View File

@@ -0,0 +1,14 @@
public class Application {
@MarkerA
@MarkerB
public void doSomething() {
System.out.println(" Doing something");
}

public static void main(String[] args) throws InterruptedException {
MarkerAAspect.proceedTimes = Integer.parseInt(args[0]);
MarkerBAspect.proceedTimes = Integer.parseInt(args[1]);
new Application().doSomething();
Thread.sleep(500);
}
}

+ 9
- 0
tests/bugs198/github_128/MarkerA.java View File

@@ -0,0 +1,9 @@
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Retention(RUNTIME)
@Target(METHOD)
public @interface MarkerA {}

+ 23
- 0
tests/bugs198/github_128/MarkerAAspect.aj View File

@@ -0,0 +1,23 @@
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclarePrecedence;

@Aspect
@DeclarePrecedence("MarkerAAspect, MarkerBAspect")
public class MarkerAAspect {
public static int proceedTimes = 1;

@Around("@annotation(MarkerA) && execution(* *(..))")
public Object intercept(ProceedingJoinPoint thisJoinPoint) throws Throwable {
System.out.println(">> Outer intercept");
Object result = null;
for (int i = 0; i < proceedTimes; i++) {
System.out.println(" >> Outer proceed");
result = thisJoinPoint.proceed();
System.out.println(" << Outer proceed");
}
System.out.println("<< Outer intercept");
return result;
}
}

+ 9
- 0
tests/bugs198/github_128/MarkerB.java View File

@@ -0,0 +1,9 @@
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Retention(RUNTIME)
@Target(METHOD)
public @interface MarkerB {}

+ 30
- 0
tests/bugs198/github_128/MarkerBAspect.aj View File

@@ -0,0 +1,30 @@
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class MarkerBAspect {
public static int proceedTimes = 1;

@Around("@annotation(MarkerB) && execution(* *(..))")
public Object intercept(ProceedingJoinPoint thisJoinPoint) throws Throwable {
System.out.println(" >> Inner intercept");
new Thread(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < proceedTimes; i++) {
System.out.println(" >> Inner proceed");
thisJoinPoint.proceed();
System.out.println(" << Inner proceed");
}
}
catch (Throwable throwable) {
throwable.printStackTrace(System.out);
}
}
}).start();
System.out.println(" << Inner intercept");
return null;
}
}

+ 4
- 0
tests/src/test/java/org/aspectj/systemtest/ajc198/Bugs198Tests.java View File

@@ -48,6 +48,10 @@ public class Bugs198Tests extends XMLBasedAjcTestCase {
}
}

public void testAsyncProceedNestedAroundAdvice_gh128() {
runTest("asynchronous proceed for nested around-advice chain");
}

public static Test suite() {
return XMLBasedAjcTestCase.loadSuite(Bugs198Tests.class);
}

+ 79
- 0
tests/src/test/resources/org/aspectj/systemtest/ajc198/ajc198.xml View File

@@ -167,4 +167,83 @@
</run>
</ajc-test>

<ajc-test dir="bugs198/github_128" title="asynchronous proceed for nested around-advice chain">
<compile files="Application.java MarkerA.java MarkerAAspect.aj MarkerB.java MarkerBAspect.aj" options="-1.8" />
<run class="Application" options="1,1">
<stdout ordered="no">
<line text=">> Outer intercept"/>
<line text=" >> Outer proceed"/>
<line text=" >> Inner intercept"/>
<line text=" &lt;&lt; Inner intercept"/>
<line text=" &lt;&lt; Outer proceed"/>
<line text="&lt;&lt; Outer intercept"/>
<line text=" >> Inner proceed"/>
<line text=" Doing something"/>
<line text=" &lt;&lt; Inner proceed"/>
</stdout>
</run>
<run class="Application" options="2,1">
<stdout ordered="no">
<line text=">> Outer intercept"/>
<line text=" >> Outer proceed"/>
<line text=" >> Inner intercept"/>
<line text=" &lt;&lt; Inner intercept"/>
<line text=" &lt;&lt; Outer proceed"/>
<line text=" >> Outer proceed"/>
<line text=" >> Inner intercept"/>
<line text=" >> Inner proceed"/>
<line text=" Doing something"/>
<line text=" &lt;&lt; Inner proceed"/>
<line text=" &lt;&lt; Inner intercept"/>
<line text=" &lt;&lt; Outer proceed"/>
<line text=" >> Inner proceed"/>
<line text=" Doing something"/>
<line text=" &lt;&lt; Inner proceed"/>
<line text="&lt;&lt; Outer intercept"/>
</stdout>
</run>
<run class="Application" options="1,2">
<stdout ordered="no">
<line text=">> Outer intercept"/>
<line text=" >> Outer proceed"/>
<line text=" >> Inner intercept"/>
<line text=" &lt;&lt; Inner intercept"/>
<line text=" &lt;&lt; Outer proceed"/>
<line text="&lt;&lt; Outer intercept"/>
<line text=" >> Inner proceed"/>
<line text=" Doing something"/>
<line text=" &lt;&lt; Inner proceed"/>
<line text=" >> Inner proceed"/>
<line text=" Doing something"/>
<line text=" &lt;&lt; Inner proceed"/>
</stdout>
</run>
<run class="Application" options="2,2">
<stdout ordered="no">
<line text=">> Outer intercept"/>
<line text=" >> Outer proceed"/>
<line text=" >> Inner intercept"/>
<line text=" &lt;&lt; Inner intercept"/>
<line text=" &lt;&lt; Outer proceed"/>
<line text=" >> Outer proceed"/>
<line text=" >> Inner intercept"/>
<line text=" >> Inner proceed"/>
<line text=" &lt;&lt; Inner intercept"/>
<line text=" Doing something"/>
<line text=" &lt;&lt; Inner proceed"/>
<line text=" &lt;&lt; Outer proceed"/>
<line text=" >> Inner proceed"/>
<line text=" >> Inner proceed"/>
<line text=" Doing something"/>
<line text=" &lt;&lt; Inner proceed"/>
<line text=" >> Inner proceed"/>
<line text=" Doing something"/>
<line text=" &lt;&lt; Inner proceed"/>
<line text=" Doing something"/>
<line text=" &lt;&lt; Inner proceed"/>
<line text="&lt;&lt; Outer intercept"/>
</stdout>
</run>
</ajc-test>

</suite>

Loading…
Cancel
Save