RegressionTests__ExceptionTest.st
author Claus Gittinger <cg@exept.de>
Wed, 24 Aug 2011 14:04:01 +0200
changeset 634 ae51f7778dad
parent 349 8aeec57e44db
child 641 0c1a14671aee
permissions -rw-r--r--
added: #test7_error_in_unwind #test8_error_in_unwind2

"{ Package: 'exept:regression' }"

"{ NameSpace: RegressionTests }"

TestCase subclass:#ExceptionTest
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'tests-Regression'
!

!ExceptionTest class methodsFor:'documentation'!

documentation
"
    documentation to be added.

    [author:]
        Stefan Vogel (stefan@zwerg)

    [instance variables:]

    [class variables:]

    [see also:]

"
! !

!ExceptionTest methodsFor:'initialize / release'!

setUp
    "common setup - invoked before testing."

    super setUp
!

tearDown
    "common cleanup - invoked after testing."

    super tearDown
! !

!ExceptionTest methodsFor:'tests'!

test1

    |result zero|

    result := OrderedCollection new.
    zero := 0.

    [ 0 // zero ] 
        on:ZeroDivide 
        do:[:ex|
            self assert:(ex signal == ZeroDivide).
            self assert:(ex originator == 0).
            result add:#Error 
        ].
    self assert:(result size == 1).
    self assert:(result first == #Error).


    "
     self run:#test1
     self new test1
    "
!

test10

    |result zero|

    result := OrderedCollection new.
    zero := 0.

    [
        [
            Warning handle:[:ex | result add:#Warning ] do:[ 2 // zero ].
        ] on:ZeroDivide do:[:ex |
            result add:#Error.
            ex reject.
            [
                self warn:ex description.
            ] on:Warning do:[:ex| result add:#Warning2]
        ]
    ] on:ZeroDivide do:[:ex |
        result add:#Error2
    ].

    self assert:(result size == 2).
    self assert:(result first == #Error).
    self assert:(result second == #Error2)

    "
     self run:#test10
     self new test10
    "
!

test2

    |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).


    "
     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
    "
!

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.

    trace := OrderedCollection new.
    Error handle:[:ex |
        trace add:5.
    ] do:[
        [
            trace add:1.
            1 // zero.
            trace add:2.
        ] ensure:[
            trace add:3.
            1 // zero.
            trace add:4.
        ].
    ].
    self assert:(trace asArray = #(1 5 3)).

    "
     self run:#test7_error_in_unwind
     self new test7_error_in_unwind
    "

    "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.
    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.
            ].
        ].
    ].
    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'!

version
    ^ '$Header$'
! !