summaryrefslogtreecommitdiffstats
path: root/tests/new/TryAndProceed.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/new/TryAndProceed.java')
-rw-r--r--tests/new/TryAndProceed.java90
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/new/TryAndProceed.java b/tests/new/TryAndProceed.java
new file mode 100644
index 000000000..42cebaeee
--- /dev/null
+++ b/tests/new/TryAndProceed.java
@@ -0,0 +1,90 @@
+import org.aspectj.testing.Tester;
+
+public class TryAndProceed {
+ public static void main(String[] args) {
+ new C().mNoThrows();
+ Tester.checkEqual(C.buf.toString(), "beforeAll:aroundAll:mNoThrows:");
+ C.buf = new StringBuffer();
+
+ A.aspectOf().allowThrowingAround = true;
+ try {
+ new C().mThrowsCheckedExc();
+ Tester.checkFailed("should have thrown RuntimeExc");
+ } catch (CheckedExc ce) {
+ Tester.checkFailed("should have thrown RuntimeExc not " + ce);
+ } catch (RuntimeException re) {
+ //System.out.println("caught " + re);
+ }
+ Tester.checkEqual(C.buf.toString(),
+ "beforeAll:aroundCheckedNoThrow:aroundAll:aroundCheckedThrow:aroundCaughtCE:");
+ C.buf = new StringBuffer();
+
+ A.aspectOf().allowThrowingBefore = true;
+ try {
+ new C().mThrowsCheckedExc();
+ Tester.checkFailed("should have thrown CheckedExc");
+ } catch (CheckedExc ce) {
+ //System.out.println("caught " + ce);
+ } catch (RuntimeException re) {
+ Tester.checkFailed("should have thrown CheckedExc not RuntimeExc");
+ }
+ Tester.checkEqual(C.buf.toString(), "beforeChecked:");
+
+ }
+}
+
+
+class C {
+ public static StringBuffer buf = new StringBuffer();
+
+ public void mThrowsCheckedExc() throws CheckedExc {
+ C.buf.append("mThrowsCheckedExc:");
+ }
+
+ public void mNoThrows() {
+ C.buf.append("mNoThrows:");
+ }
+}
+
+aspect A {
+ pointcut checkedCut(): call(void C.mThrowsCheckedExc());
+ pointcut uncheckedCut(): call(void C.mNoThrows());
+ pointcut allCut(): checkedCut() || uncheckedCut();
+
+ public static boolean allowThrowingBefore = false;
+ public static boolean allowThrowingAround = false;
+
+ before() throws CheckedExc: checkedCut() && if(allowThrowingBefore) {
+ C.buf.append("beforeChecked:");
+ throw new CheckedExc("from before");
+ }
+
+ before(): allCut() {
+ C.buf.append("beforeAll:");
+ }
+
+ Object around(): checkedCut() {
+ C.buf.append("aroundCheckedNoThrow:");
+ return proceed();
+ }
+
+ Object around(): allCut() {
+ C.buf.append("aroundAll:");
+ try {
+ return proceed();
+ } catch (CheckedExc ce) {
+ C.buf.append("aroundCaughtCE:");
+
+ throw new RuntimeException("hand-softening CheckedExc");
+ }
+ }
+
+ Object around() throws CheckedExc: checkedCut() && if(allowThrowingAround) {
+ C.buf.append("aroundCheckedThrow:");
+ throw new CheckedExc("from around");
+ }
+}
+
+class CheckedExc extends Exception {
+ public CheckedExc(String m) { super(m); }
+}