12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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();
- }
- }
- }
|