RegressionTests__ExceptionTest.st
changeset 916 6d9ff4af7d5c
parent 641 0c1a14671aee
child 917 4c48bc5be61c
equal deleted inserted replaced
915:3dc4794cc37f 916:6d9ff4af7d5c
    25     [see also:]
    25     [see also:]
    26 
    26 
    27 "
    27 "
    28 ! !
    28 ! !
    29 
    29 
    30 !ExceptionTest methodsFor:'initialize / release'!
       
    31 
       
    32 setUp
       
    33     "common setup - invoked before testing."
       
    34 
       
    35     super setUp
       
    36 !
       
    37 
       
    38 tearDown
       
    39     "common cleanup - invoked after testing."
       
    40 
       
    41     super tearDown
       
    42 ! !
       
    43 
       
    44 !ExceptionTest methodsFor:'tests'!
    30 !ExceptionTest methodsFor:'tests'!
    45 
    31 
    46 test1
    32 test01
    47 
    33 
    48     |result zero|
    34     |result zero|
    49 
    35 
    50     result := OrderedCollection new.
    36     result := OrderedCollection new.
    51     zero := 0.
    37     zero := 0.
    52 
    38 
    53     [ 0 // zero ] 
    39     [ 0 // zero ] 
    54         on:ZeroDivide 
    40         on:ZeroDivide 
    55         do:[:ex|
    41         do:[:ex|
    56             self assert:(ex signal == ZeroDivide).
    42             self assert:(ex creator == ZeroDivide).
    57             self assert:(ex originator == 0).
    43             self assert:(ex originator == 0).
    58             result add:#Error 
    44             result add:#Error 
    59         ].
    45         ].
    60     self assert:(result size == 1).
    46     self assert:(result size == 1).
    61     self assert:(result first == #Error).
    47     self assert:(result first == #Error).
    62 
    48 !
    63 
    49 
    64     "
    50 test02
    65      self run:#test1
       
    66      self new test1
       
    67     "
       
    68 !
       
    69 
       
    70 test10
       
    71 
       
    72     |result zero|
       
    73 
       
    74     result := OrderedCollection new.
       
    75     zero := 0.
       
    76 
       
    77     [
       
    78         [
       
    79             Warning handle:[:ex | result add:#Warning ] do:[ 2 // zero ].
       
    80         ] on:ZeroDivide do:[:ex |
       
    81             result add:#Error.
       
    82             ex reject.
       
    83             [
       
    84                 self warn:ex description.
       
    85             ] on:Warning do:[:ex| result add:#Warning2]
       
    86         ]
       
    87     ] on:ZeroDivide do:[:ex |
       
    88         result add:#Error2
       
    89     ].
       
    90 
       
    91     self assert:(result size == 2).
       
    92     self assert:(result first == #Error).
       
    93     self assert:(result second == #Error2)
       
    94 
       
    95     "
       
    96      self run:#test10
       
    97      self new test10
       
    98     "
       
    99 !
       
   100 
       
   101 test2
       
   102 
    51 
   103     |result zero|
    52     |result zero|
   104 
    53 
   105     result := OrderedCollection new.
    54     result := OrderedCollection new.
   106     zero := 0.
    55     zero := 0.
   111             0 // zero
    60             0 // zero
   112         ].
    61         ].
   113     ] raise:ZeroDivide.
    62     ] raise:ZeroDivide.
   114     self assert:(result size == 1).
    63     self assert:(result size == 1).
   115     self assert:(result first == #Error).
    64     self assert:(result first == #Error).
   116 
    65 !
   117 
    66 
   118     "
    67 test03
   119      self run:#test2
       
   120      self new test2
       
   121     "
       
   122 !
       
   123 
       
   124 test3
       
   125 
    68 
   126     |result zero|
    69     |result zero|
   127 
    70 
   128     result := OrderedCollection new.
    71     result := OrderedCollection new.
   129     zero := 0.
    72     zero := 0.
   138         ].
    81         ].
   139     ] raise:ZeroDivide.
    82     ] raise:ZeroDivide.
   140     self assert:(result size == 2).
    83     self assert:(result size == 2).
   141     self assert:(result first == #Error).
    84     self assert:(result first == #Error).
   142     self assert:(result second == #Error1).
    85     self assert:(result second == #Error1).
   143 
    86 !
   144 
    87 
   145     "
    88 test04_on_do
   146      self run:#test3
       
   147      self new test3
       
   148     "
       
   149 !
       
   150 
       
   151 test4_on_do
       
   152 
    89 
   153     |exceptionHappened zero|
    90     |exceptionHappened zero|
   154 
    91 
   155     zero := 0.
    92     zero := 0.
   156     exceptionHappened := false.
    93     exceptionHappened := false.
   160         do:[:ex|
    97         do:[:ex|
   161             exceptionHappened := true
    98             exceptionHappened := true
   162         ].
    99         ].
   163 
   100 
   164     self assert:(exceptionHappened).
   101     self assert:(exceptionHappened).
   165 
   102 !
   166 
   103 
   167     "
   104 test05_on_do_ensure
   168      self run:#test4_on_do
       
   169      self new test4_on_do
       
   170     "
       
   171 !
       
   172 
       
   173 test5_on_do_ensure
       
   174 
   105 
   175     |exceptionHappened ensureCalled zero|
   106     |exceptionHappened ensureCalled zero|
   176 
   107 
   177     zero := 0.
   108     zero := 0.
   178     exceptionHappened := ensureCalled := false.
   109     exceptionHappened := ensureCalled := false.
   182         do:[:ex| exceptionHappened := true]
   113         do:[:ex| exceptionHappened := true]
   183         ensure:[ ensureCalled := true ].
   114         ensure:[ ensureCalled := true ].
   184 
   115 
   185     self assert:(exceptionHappened).
   116     self assert:(exceptionHappened).
   186     self assert:(ensureCalled).
   117     self assert:(ensureCalled).
   187 
   118 !
   188     "
   119 
   189      self run:#test5_on_do_ensure
   120 test06_on_do_ensure
   190      self new test5_on_do_ensure
       
   191     "
       
   192 !
       
   193 
       
   194 test6_on_do_ensure
       
   195 
   121 
   196     |exceptionHappened ensureCalled zero|
   122     |exceptionHappened ensureCalled zero|
   197 
   123 
   198     zero := 0.
   124     zero := 0.
   199     exceptionHappened := ensureCalled := false.
   125     exceptionHappened := ensureCalled := false.
   203         do:[:ex| exceptionHappened := true]
   129         do:[:ex| exceptionHappened := true]
   204         ensure:[ ensureCalled := true ].
   130         ensure:[ ensureCalled := true ].
   205 
   131 
   206     self assert:(exceptionHappened not).
   132     self assert:(exceptionHappened not).
   207     self assert:(ensureCalled).
   133     self assert:(ensureCalled).
   208 
   134 !
   209     "
   135 
   210      self run:#test6_on_do_ensure
   136 test07_error_in_unwind
   211      self new test6_on_do_ensure
       
   212     "
       
   213 !
       
   214 
       
   215 test7_error_in_unwind
       
   216     "think about this - not sure, how to react on an error happening in the unwind..."
   137     "think about this - not sure, how to react on an error happening in the unwind..."
   217 
   138 
   218     |zero trace|
   139     |zero trace|
   219 
   140 
   220     zero := 0.
   141     zero := 0.
   235             ].
   156             ].
   236         ].
   157         ].
   237     ] raise:Error.
   158     ] raise:Error.
   238 
   159 
   239     self assert:(trace asArray = #(1 5 3)).
   160     self assert:(trace asArray = #(1 5 3)).
   240 
   161 !
   241     "
   162 
   242      self run:#test7_error_in_unwind
   163 test08_error_in_unwind2
   243      self new test7_error_in_unwind
       
   244     "
       
   245 
       
   246     "Created: / 24-08-2011 / 13:55:27 / cg"
       
   247 !
       
   248 
       
   249 test8_error_in_unwind2
       
   250     "no matter what happens in test7 - this one should work !!"
   164     "no matter what happens in test7 - this one should work !!"
   251 
   165 
   252     |zero trace|
   166     |zero trace|
   253 
   167 
   254     zero := 0.
   168     zero := 0.
   274         ].
   188         ].
   275     ] raise:Error.
   189     ] raise:Error.
   276 
   190 
   277     self assert:(trace asArray = #(1 5 3 6)).
   191     self assert:(trace asArray = #(1 5 3 6)).
   278 
   192 
   279     "
       
   280      self run:#test8_error_in_unwind2
       
   281      self new test8_error_in_unwind2
       
   282     "
       
   283 
   193 
   284     "Created: / 24-08-2011 / 14:02:01 / cg"
   194     "Created: / 24-08-2011 / 14:02:01 / cg"
       
   195 !
       
   196 
       
   197 test09_reraiseOuterHandlerWithEnsure
       
   198     |trace|
       
   199 
       
   200     trace := OrderedCollection new.
       
   201 
       
   202     AbortSignal handle:[:ex |
       
   203         trace add:1.
       
   204     ] do:[
       
   205         [
       
   206             AbortSignal handle:[:ex |
       
   207                 trace add:2.
       
   208                 AbortSignal raise.
       
   209                 trace add:3.
       
   210             ] do:[
       
   211                 trace add:4.
       
   212                 AbortSignal raise.
       
   213                 trace add:5.
       
   214             ].
       
   215             trace add:6.
       
   216         ] ensure:[
       
   217             trace add:9
       
   218         ].
       
   219     ].
       
   220     trace add:7.
       
   221 
       
   222     self assert:(trace asArray = #(4 2 1 9 7)).
       
   223 !
       
   224 
       
   225 test10_reraiseOuterHandlerWithEnsure
       
   226     |trace|
       
   227 
       
   228     trace := OrderedCollection new.
       
   229 
       
   230     AbortSignal handle:[:ex |
       
   231         trace add:1.
       
   232     ] do:[
       
   233         [
       
   234             AbortSignal handle:[:ex |
       
   235                 trace add:2.
       
   236                 AbortSignal raise.
       
   237                 trace add:3.
       
   238             ] do:[
       
   239                 trace add:4.
       
   240                 AbortSignal raise.
       
   241                 trace add:5.
       
   242             ].
       
   243             trace add:6.
       
   244         ] ensure:[
       
   245             trace add:9
       
   246         ].
       
   247     ].
       
   248     trace add:7.
       
   249 
       
   250     self assert:(trace asArray = #(4 2 1 9 7)).
       
   251 !
       
   252 
       
   253 test11
       
   254 
       
   255     |result zero|
       
   256 
       
   257     result := OrderedCollection new.
       
   258     zero := 0.
       
   259 
       
   260     [
       
   261         [
       
   262             Warning handle:[:ex | result add:#Warning ] do:[ 2 // zero ].
       
   263         ] on:ZeroDivide do:[:ex |
       
   264             result add:#Error.
       
   265             ex reject.
       
   266             [
       
   267                 self warn:ex description.
       
   268             ] on:Warning do:[:ex| result add:#Warning2]
       
   269         ]
       
   270     ] on:ZeroDivide do:[:ex |
       
   271         result add:#Error2
       
   272     ].
       
   273 
       
   274     self assert:(result size == 2).
       
   275     self assert:(result first == #Error).
       
   276     self assert:(result second == #Error2)
       
   277 
       
   278     "
       
   279      self run:#test10
       
   280      self new test10
       
   281     "
       
   282 !
       
   283 
       
   284 test12_abortInEnsure
       
   285     |trace setUp tearDown action|
       
   286 
       
   287     trace := OrderedCollection new.
       
   288 
       
   289     setUp :=
       
   290         [
       
   291             trace add:1. 
       
   292             Transcript showCR:'1'.
       
   293             AbortSignal raise.
       
   294         ].
       
   295 
       
   296     tearDown :=
       
   297         [
       
   298             trace add:2.
       
   299             Transcript showCR:'2'.
       
   300             AbortSignal raise.
       
   301         ].
       
   302 
       
   303     action :=
       
   304         [
       
   305             trace add:3.
       
   306             Transcript showCR:'3'.
       
   307         ].
       
   308 
       
   309     AbortSignal handle:[:ex |
       
   310         trace add:44.
       
   311         Transcript showCR:'44'.
       
   312     ] do:[
       
   313         AbortSignal handle:[:ex |
       
   314             trace add:4.
       
   315             Transcript showCR:'4'.
       
   316         ] do:[
       
   317             [
       
   318                 trace add:5.
       
   319                 Transcript showCR:'5'.
       
   320                 setUp value.
       
   321                 trace add:6.
       
   322                 Transcript showCR:'6'.
       
   323                 action value.
       
   324                 trace add:7.
       
   325                 Transcript showCR:'7'.
       
   326             ] sunitEnsure: [
       
   327                 trace add:8.
       
   328                 Transcript showCR:'8'.
       
   329                 tearDown value
       
   330                 trace add:9.
       
   331                 Transcript showCR:'9'.
       
   332             ].
       
   333         ].
       
   334         trace add:10.
       
   335         Transcript showCR:'10'.
       
   336     ].
       
   337     self assert:(trace asArray = #(5 1 4 8 2 44 10)).
       
   338 
       
   339     "
       
   340      self new test12_reraiseOuterHandlerWithEnsure
       
   341     "
       
   342 !
       
   343 
       
   344 test13_abortInEnsureInProcess
       
   345     |trace setUp tearDown action p|
       
   346 
       
   347     trace := OrderedCollection new.
       
   348 
       
   349     setUp :=
       
   350         [
       
   351             trace add:1. 
       
   352             Transcript showCR:'1'.
       
   353             AbortSignal raise.
       
   354         ].
       
   355 
       
   356     tearDown :=
       
   357         [
       
   358             trace add:2.
       
   359             Transcript showCR:'2'.
       
   360             AbortSignal raise.
       
   361         ].
       
   362 
       
   363     action :=
       
   364         [
       
   365             trace add:3.
       
   366             Transcript showCR:'3'.
       
   367         ].
       
   368 
       
   369     p := 
       
   370         [
       
   371             AbortSignal handle:[:ex |
       
   372                 trace add:44.
       
   373                 Transcript showCR:'44'.
       
   374             ] do:[
       
   375                 AbortSignal handle:[:ex |
       
   376                     trace add:4.
       
   377                     Transcript showCR:'4'.
       
   378                 ] do:[
       
   379                     [
       
   380                         trace add:5.
       
   381                         Transcript showCR:'5'.
       
   382                         setUp value.
       
   383                         trace add:6.
       
   384                         Transcript showCR:'6'.
       
   385                         action value.
       
   386                         trace add:7.
       
   387                         Transcript showCR:'7'.
       
   388                     ] sunitEnsure: [
       
   389                         trace add:8.
       
   390                         Transcript showCR:'8'.
       
   391                         tearDown value
       
   392                         trace add:9.
       
   393                         Transcript showCR:'9'.
       
   394                     ].
       
   395                 ].
       
   396             ].
       
   397             trace add:10.
       
   398             Transcript showCR:'10'.
       
   399         ] newProcess.
       
   400     "/ p addExitAction:[ self halt].
       
   401     p resume.
       
   402 
       
   403     p waitUntilTerminated.
       
   404     self assert:(trace asArray = #(5 1 4 8 2 44 10)).
       
   405 
       
   406     "
       
   407      self new test12_reraiseOuterHandlerWithEnsure
       
   408     "
   285 ! !
   409 ! !
   286 
   410 
   287 !ExceptionTest class methodsFor:'documentation'!
   411 !ExceptionTest class methodsFor:'documentation'!
   288 
   412 
   289 version
   413 version
   290     ^ '$Header$'
   414     ^ '$Header$'
   291 ! !
   415 ! !
       
   416