org.aspectj/tests/new/HoldProceed.java
2002-12-16 18:51:06 +00:00

68 lines
1.7 KiB
Java

import org.aspectj.testing.Tester;
import java.util.*;
public class HoldProceed {
public static void main(String[] args) {
C c = new C();
c.m1(); c.m2(); c.m1();
Tester.check("m");
Tester.checkEqual(A.buf.toString(), "");
A.runProceeds();
Tester.checkEqual(A.buf.toString(), "m1:b:m2:m1:");
A.runProceeds();
Tester.checkEqual(A.buf.toString(), "m1:b:m2:m1:m1:b:m2:m1:");
try {
c.m3();
} catch (Exception e) {
Tester.check(false, "shouldn't throw anything");
}
try {
A.runProceeds();
} catch (Error err) { //??? this is an odd test for the fact that Exception is wrapped
Tester.note("caught err");
}
Tester.check("caught err");
}
}
class C {
public void m1() {A. buf.append("m1:"); }
public void m2() {A. buf.append("m2:"); }
public void m3() throws Exception { throw new Exception("from m3"); }
}
aspect A {
static StringBuffer buf = new StringBuffer();
static List heldProceeds = new LinkedList();
int cnt = 0;
void around (): call(void C.m*()) {
heldProceeds.add(new Runnable() { public void run() { proceed(); cnt++; } });
class MyRun implements Runnable {
public void run() { System.out.println("run"); }
public void m() { Tester.note("m"); }
}
MyRun mr = new MyRun();
mr.m();
}
before(): call(void C.m2()) {
new Runnable() {
public void run() { buf.append("b:"); }
}.run();
}
public static void runProceeds() {
for (Iterator i = heldProceeds.iterator(); i.hasNext(); ) {
((Runnable)i.next()).run();
}
}
}