RegressionTests__ExceptionTest.st
changeset 916 6d9ff4af7d5c
parent 641 0c1a14671aee
child 917 4c48bc5be61c
--- a/RegressionTests__ExceptionTest.st	Thu Apr 18 14:46:28 2013 +0200
+++ b/RegressionTests__ExceptionTest.st	Fri Apr 19 12:11:21 2013 +0200
@@ -27,23 +27,9 @@
 "
 ! !
 
-!ExceptionTest methodsFor:'initialize / release'!
-
-setUp
-    "common setup - invoked before testing."
-
-    super setUp
-!
-
-tearDown
-    "common cleanup - invoked after testing."
-
-    super tearDown
-! !
-
 !ExceptionTest methodsFor:'tests'!
 
-test1
+test01
 
     |result zero|
 
@@ -53,21 +39,218 @@
     [ 0 // zero ] 
         on:ZeroDivide 
         do:[:ex|
-            self assert:(ex signal == ZeroDivide).
+            self assert:(ex creator == ZeroDivide).
             self assert:(ex originator == 0).
             result add:#Error 
         ].
     self assert:(result size == 1).
     self assert:(result first == #Error).
+!
+
+test02
+
+    |result zero|
+
+    result := OrderedCollection new.
+    zero := 0.
+
+    self should:[
+        [ 0 // zero ] on:ZeroDivide do:[:ex|
+            result add:#Error.
+            0 // zero
+        ].
+    ] raise:ZeroDivide.
+    self assert:(result size == 1).
+    self assert:(result first == #Error).
+!
+
+test03
+
+    |result zero|
+
+    result := OrderedCollection new.
+    zero := 0.
+
+    self should:[
+        [ 0 // zero ] on:ZeroDivide do:[:ex|
+            result add:#Error.
+            [ 0 // zero ] on:ZeroDivide do:[:ex|
+                result add:#Error1.
+                ex reject.
+            ].
+        ].
+    ] raise:ZeroDivide.
+    self assert:(result size == 2).
+    self assert:(result first == #Error).
+    self assert:(result second == #Error1).
+!
+
+test04_on_do
+
+    |exceptionHappened zero|
+
+    zero := 0.
+    exceptionHappened := false.
+
+    [0 // zero] 
+        on:ZeroDivide 
+        do:[:ex|
+            exceptionHappened := true
+        ].
+
+    self assert:(exceptionHappened).
+!
+
+test05_on_do_ensure
+
+    |exceptionHappened ensureCalled zero|
+
+    zero := 0.
+    exceptionHappened := ensureCalled := false.
+
+    [0 // zero] 
+        on:ZeroDivide 
+        do:[:ex| exceptionHappened := true]
+        ensure:[ ensureCalled := true ].
+
+    self assert:(exceptionHappened).
+    self assert:(ensureCalled).
+!
+
+test06_on_do_ensure
+
+    |exceptionHappened ensureCalled zero|
+
+    zero := 0.
+    exceptionHappened := ensureCalled := false.
+
+    [zero // 1] 
+        on:ZeroDivide 
+        do:[:ex| exceptionHappened := true]
+        ensure:[ ensureCalled := true ].
+
+    self assert:(exceptionHappened not).
+    self assert:(ensureCalled).
+!
+
+test07_error_in_unwind
+    "think about this - not sure, how to react on an error happening in the unwind..."
+
+    |zero trace|
+
+    zero := 0.
+
+    trace := OrderedCollection new.
+    self should:[
+        Error handle:[:ex |
+            trace add:5.
+        ] do:[
+            [
+                trace add:1.
+                1 // zero.
+                trace add:2.
+            ] ensure:[
+                trace add:3.
+                1 // zero.
+                trace add:4.
+            ].
+        ].
+    ] raise:Error.
+
+    self assert:(trace asArray = #(1 5 3)).
+!
+
+test08_error_in_unwind2
+    "no matter what happens in test7 - this one should work !!"
+
+    |zero trace|
+
+    zero := 0.
+
+    trace := OrderedCollection new.
+    self shouldnt:[
+        Error handle:[:ex |
+            trace add:6.
+        ] do:[
+            Error handle:[:ex |
+                trace add:5.
+            ] do:[
+                [
+                    trace add:1.
+                    1 // zero.
+                    trace add:2.
+                ] ensure:[
+                    trace add:3.
+                    1 // zero.
+                    trace add:4.
+                ].
+            ].
+        ].
+    ] raise:Error.
+
+    self assert:(trace asArray = #(1 5 3 6)).
 
 
-    "
-     self run:#test1
-     self new test1
-    "
+    "Created: / 24-08-2011 / 14:02:01 / cg"
 !
 
-test10
+test09_reraiseOuterHandlerWithEnsure
+    |trace|
+
+    trace := OrderedCollection new.
+
+    AbortSignal handle:[:ex |
+        trace add:1.
+    ] do:[
+        [
+            AbortSignal handle:[:ex |
+                trace add:2.
+                AbortSignal raise.
+                trace add:3.
+            ] do:[
+                trace add:4.
+                AbortSignal raise.
+                trace add:5.
+            ].
+            trace add:6.
+        ] ensure:[
+            trace add:9
+        ].
+    ].
+    trace add:7.
+
+    self assert:(trace asArray = #(4 2 1 9 7)).
+!
+
+test10_reraiseOuterHandlerWithEnsure
+    |trace|
+
+    trace := OrderedCollection new.
+
+    AbortSignal handle:[:ex |
+        trace add:1.
+    ] do:[
+        [
+            AbortSignal handle:[:ex |
+                trace add:2.
+                AbortSignal raise.
+                trace add:3.
+            ] do:[
+                trace add:4.
+                AbortSignal raise.
+                trace add:5.
+            ].
+            trace add:6.
+        ] ensure:[
+            trace add:9
+        ].
+    ].
+    trace add:7.
+
+    self assert:(trace asArray = #(4 2 1 9 7)).
+!
+
+test11
 
     |result zero|
 
@@ -98,190 +281,131 @@
     "
 !
 
-test2
+test12_abortInEnsure
+    |trace setUp tearDown action|
+
+    trace := OrderedCollection new.
+
+    setUp :=
+        [
+            trace add:1. 
+            Transcript showCR:'1'.
+            AbortSignal raise.
+        ].
 
-    |result zero|
+    tearDown :=
+        [
+            trace add:2.
+            Transcript showCR:'2'.
+            AbortSignal raise.
+        ].
 
-    result := OrderedCollection new.
-    zero := 0.
+    action :=
+        [
+            trace add:3.
+            Transcript showCR:'3'.
+        ].
 
-    self should:[
-        [ 0 // zero ] on:ZeroDivide do:[:ex|
-            result add:#Error.
-            0 // zero
+    AbortSignal handle:[:ex |
+        trace add:44.
+        Transcript showCR:'44'.
+    ] do:[
+        AbortSignal handle:[:ex |
+            trace add:4.
+            Transcript showCR:'4'.
+        ] do:[
+            [
+                trace add:5.
+                Transcript showCR:'5'.
+                setUp value.
+                trace add:6.
+                Transcript showCR:'6'.
+                action value.
+                trace add:7.
+                Transcript showCR:'7'.
+            ] sunitEnsure: [
+                trace add:8.
+                Transcript showCR:'8'.
+                tearDown value
+                trace add:9.
+                Transcript showCR:'9'.
+            ].
         ].
-    ] raise:ZeroDivide.
-    self assert:(result size == 1).
-    self assert:(result first == #Error).
-
+        trace add:10.
+        Transcript showCR:'10'.
+    ].
+    self assert:(trace asArray = #(5 1 4 8 2 44 10)).
 
     "
-     self run:#test2
-     self new test2
-    "
-!
-
-test3
-
-    |result zero|
-
-    result := OrderedCollection new.
-    zero := 0.
-
-    self should:[
-        [ 0 // zero ] on:ZeroDivide do:[:ex|
-            result add:#Error.
-            [ 0 // zero ] on:ZeroDivide do:[:ex|
-                result add:#Error1.
-                ex reject.
-            ].
-        ].
-    ] raise:ZeroDivide.
-    self assert:(result size == 2).
-    self assert:(result first == #Error).
-    self assert:(result second == #Error1).
-
-
-    "
-     self run:#test3
-     self new test3
-    "
-!
-
-test4_on_do
-
-    |exceptionHappened zero|
-
-    zero := 0.
-    exceptionHappened := false.
-
-    [0 // zero] 
-        on:ZeroDivide 
-        do:[:ex|
-            exceptionHappened := true
-        ].
-
-    self assert:(exceptionHappened).
-
-
-    "
-     self run:#test4_on_do
-     self new test4_on_do
+     self new test12_reraiseOuterHandlerWithEnsure
     "
 !
 
-test5_on_do_ensure
-
-    |exceptionHappened ensureCalled zero|
-
-    zero := 0.
-    exceptionHappened := ensureCalled := false.
-
-    [0 // zero] 
-        on:ZeroDivide 
-        do:[:ex| exceptionHappened := true]
-        ensure:[ ensureCalled := true ].
-
-    self assert:(exceptionHappened).
-    self assert:(ensureCalled).
-
-    "
-     self run:#test5_on_do_ensure
-     self new test5_on_do_ensure
-    "
-!
-
-test6_on_do_ensure
-
-    |exceptionHappened ensureCalled zero|
-
-    zero := 0.
-    exceptionHappened := ensureCalled := false.
-
-    [zero // 1] 
-        on:ZeroDivide 
-        do:[:ex| exceptionHappened := true]
-        ensure:[ ensureCalled := true ].
-
-    self assert:(exceptionHappened not).
-    self assert:(ensureCalled).
-
-    "
-     self run:#test6_on_do_ensure
-     self new test6_on_do_ensure
-    "
-!
-
-test7_error_in_unwind
-    "think about this - not sure, how to react on an error happening in the unwind..."
-
-    |zero trace|
-
-    zero := 0.
+test13_abortInEnsureInProcess
+    |trace setUp tearDown action p|
 
     trace := OrderedCollection new.
-    self should:[
-        Error handle:[:ex |
-            trace add:5.
-        ] do:[
-            [
-                trace add:1.
-                1 // zero.
-                trace add:2.
-            ] ensure:[
-                trace add:3.
-                1 // zero.
-                trace add:4.
+
+    setUp :=
+        [
+            trace add:1. 
+            Transcript showCR:'1'.
+            AbortSignal raise.
+        ].
+
+    tearDown :=
+        [
+            trace add:2.
+            Transcript showCR:'2'.
+            AbortSignal raise.
+        ].
+
+    action :=
+        [
+            trace add:3.
+            Transcript showCR:'3'.
+        ].
+
+    p := 
+        [
+            AbortSignal handle:[:ex |
+                trace add:44.
+                Transcript showCR:'44'.
+            ] do:[
+                AbortSignal handle:[:ex |
+                    trace add:4.
+                    Transcript showCR:'4'.
+                ] do:[
+                    [
+                        trace add:5.
+                        Transcript showCR:'5'.
+                        setUp value.
+                        trace add:6.
+                        Transcript showCR:'6'.
+                        action value.
+                        trace add:7.
+                        Transcript showCR:'7'.
+                    ] sunitEnsure: [
+                        trace add:8.
+                        Transcript showCR:'8'.
+                        tearDown value
+                        trace add:9.
+                        Transcript showCR:'9'.
+                    ].
+                ].
             ].
-        ].
-    ] raise:Error.
+            trace add:10.
+            Transcript showCR:'10'.
+        ] newProcess.
+    "/ p addExitAction:[ self halt].
+    p resume.
 
-    self assert:(trace asArray = #(1 5 3)).
+    p waitUntilTerminated.
+    self assert:(trace asArray = #(5 1 4 8 2 44 10)).
 
     "
-     self run:#test7_error_in_unwind
-     self new test7_error_in_unwind
+     self new test12_reraiseOuterHandlerWithEnsure
     "
-
-    "Created: / 24-08-2011 / 13:55:27 / cg"
-!
-
-test8_error_in_unwind2
-    "no matter what happens in test7 - this one should work !!"
-
-    |zero trace|
-
-    zero := 0.
-
-    trace := OrderedCollection new.
-    self shouldnt:[
-        Error handle:[:ex |
-            trace add:6.
-        ] do:[
-            Error handle:[:ex |
-                trace add:5.
-            ] do:[
-                [
-                    trace add:1.
-                    1 // zero.
-                    trace add:2.
-                ] ensure:[
-                    trace add:3.
-                    1 // zero.
-                    trace add:4.
-                ].
-            ].
-        ].
-    ] raise:Error.
-
-    self assert:(trace asArray = #(1 5 3 6)).
-
-    "
-     self run:#test8_error_in_unwind2
-     self new test8_error_in_unwind2
-    "
-
-    "Created: / 24-08-2011 / 14:02:01 / cg"
 ! !
 
 !ExceptionTest class methodsFor:'documentation'!
@@ -289,3 +413,4 @@
 version
     ^ '$Header$'
 ! !
+