TestResultStX.st
author vrany
Mon, 16 Jan 2012 21:46:11 +0100
changeset 439 c61cd2a45ee0
parent 345 abd1f2918992
child 465 0297ec178c9f
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
345
abd1f2918992 initial checkin
vrany
parents:
diff changeset
     1
"{ Package: 'stx:goodies/sunit' }"
abd1f2918992 initial checkin
vrany
parents:
diff changeset
     2
abd1f2918992 initial checkin
vrany
parents:
diff changeset
     3
TestResult subclass:#TestResultStX
abd1f2918992 initial checkin
vrany
parents:
diff changeset
     4
	instanceVariableNames:''
abd1f2918992 initial checkin
vrany
parents:
diff changeset
     5
	classVariableNames:''
abd1f2918992 initial checkin
vrany
parents:
diff changeset
     6
	poolDictionaries:''
abd1f2918992 initial checkin
vrany
parents:
diff changeset
     7
	category:'SUnit-Smalltalk/X'
abd1f2918992 initial checkin
vrany
parents:
diff changeset
     8
!
abd1f2918992 initial checkin
vrany
parents:
diff changeset
     9
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    10
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    11
!TestResultStX methodsFor:'outcome'!
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    12
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    13
rememberEndTime
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    14
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    15
    ^outcome endTime: Timestamp now
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    16
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    17
    "Created: / 16-08-2011 / 17:36:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    18
!
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    19
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    20
rememberException:detail
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    21
    "common for failure and error:
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    22
     called when a test fails. testCase is the failed 
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    23
     testcase, detail is platform specific object describing 
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    24
     the failure. Actually, on all platforms exeptt GemStone, 
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    25
     detail is an instance of an exception that caused the failure"
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    26
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    27
    |backtrace|
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    28
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    29
    ((Smalltalk respondsTo:#isSmalltalkX) and:[Smalltalk isSmalltalkX]) ifTrue:[
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    30
        "remember the backtrace (as string, to prevent objects from being kept forwever
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    31
         from being garbage collected, the signal (i.e. the exception class) and the
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    32
         exceptions message (description).
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    33
         Would like to have an exceptionInfo obejct for that, but that might be hard to 
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    34
         get returned back into the main stream sunit package..."
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    35
        
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    36
        backtrace := String streamContents:[:s |
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    37
                        |con topReached|
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    38
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    39
                        "could use printAllOn:s, but noone is interested in contexts above the
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    40
                         testcase's runtest context"
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    41
                        topReached := false.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    42
                        con := detail suspendedContext.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    43
                        [ 
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    44
                            con notNil and:[topReached not]
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    45
                        ] whileTrue:[
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    46
                            con printOn:s.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    47
                            s cr.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    48
                            topReached := (con selector == outcome selector)
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    49
                                          and:[con receiver == outcome].
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    50
                            con := con sender.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    51
                        ]
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    52
                     ].
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    53
        outcome exceptionDetail:(Dictionary new
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    54
                                    at:#exception put:detail signal;
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    55
                                    at:#description put:detail description;
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    56
                                    at:#backtrace put:backtrace;
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    57
                                    yourself).
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    58
        ^ self.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    59
    ].
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    60
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    61
    "add other dialect specifics here"
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    62
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    63
    "Created: / 06-08-2011 / 11:29:23 / cg"
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    64
    "Created: / 16-08-2011 / 17:32:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    65
!
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    66
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    67
rememberOutput: aString
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    68
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    69
    outcome collectedOutput: aString
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    70
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    71
    "Created: / 16-08-2011 / 18:18:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    72
!
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    73
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    74
rememberStartTime
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    75
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    76
    ^outcome startTime: Timestamp now
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    77
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    78
    "Created: / 16-08-2011 / 17:36:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    79
! !
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    80
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    81
!TestResultStX methodsFor:'running'!
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    82
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    83
performCase: aTestCase
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    84
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    85
    | savedStdout savedTranscript collector|
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    86
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    87
    savedStdout := Stdout.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    88
    savedTranscript := Transcript.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    89
    collector := WriteStream on:(String new:100).
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    90
    [
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    91
        Stdout := SplittingWriteStream on:collector and: Stdout.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    92
        Transcript := SplittingWriteStream on:collector and: Transcript.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    93
        super performCase: aTestCase.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    94
    ] ensure:[
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    95
        Stdout := savedStdout.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    96
        Transcript := savedTranscript.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    97
        self rememberOutput: collector contents.
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    98
    ].
abd1f2918992 initial checkin
vrany
parents:
diff changeset
    99
abd1f2918992 initial checkin
vrany
parents:
diff changeset
   100
    "Created: / 16-08-2011 / 18:18:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
abd1f2918992 initial checkin
vrany
parents:
diff changeset
   101
! !
abd1f2918992 initial checkin
vrany
parents:
diff changeset
   102
abd1f2918992 initial checkin
vrany
parents:
diff changeset
   103
!TestResultStX class methodsFor:'documentation'!
abd1f2918992 initial checkin
vrany
parents:
diff changeset
   104
abd1f2918992 initial checkin
vrany
parents:
diff changeset
   105
version
abd1f2918992 initial checkin
vrany
parents:
diff changeset
   106
    ^ '$Header: /cvs/stx/stx/goodies/sunit/TestResultStX.st,v 1.1 2011-08-16 17:54:09 vrany Exp $'
abd1f2918992 initial checkin
vrany
parents:
diff changeset
   107
!
abd1f2918992 initial checkin
vrany
parents:
diff changeset
   108
abd1f2918992 initial checkin
vrany
parents:
diff changeset
   109
version_CVS
abd1f2918992 initial checkin
vrany
parents:
diff changeset
   110
    ^ '$Header: /cvs/stx/stx/goodies/sunit/TestResultStX.st,v 1.1 2011-08-16 17:54:09 vrany Exp $'
abd1f2918992 initial checkin
vrany
parents:
diff changeset
   111
! !