aboutsummaryrefslogtreecommitdiffstats
path: root/tests/new/HoldProceed.java
diff options
context:
space:
mode:
authorwisberg <wisberg>2002-12-16 18:51:06 +0000
committerwisberg <wisberg>2002-12-16 18:51:06 +0000
commit144143c2970a1e874d74cdbd0f8c622d4282a3c3 (patch)
treeb12383d3d9e76c7e1f25f7fbec83051ef17f81fb /tests/new/HoldProceed.java
parentfafae443719b26159ab2d7dac1c9b46b5e00b671 (diff)
downloadaspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.tar.gz
aspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.zip
initial version
Diffstat (limited to 'tests/new/HoldProceed.java')
-rw-r--r--tests/new/HoldProceed.java67
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/new/HoldProceed.java b/tests/new/HoldProceed.java
new file mode 100644
index 000000000..1f14060d7
--- /dev/null
+++ b/tests/new/HoldProceed.java
@@ -0,0 +1,67 @@
+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();
+ }
+ }
+}