reports/Builder__CoverageReport.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 25 Jun 2013 20:30:42 +0200
changeset 175 692574468b98
parent 166 5bf6af786b93
child 185 f1415a086e05
permissions -rw-r--r--
automatically generated by browser

"{ Package: 'stx:goodies/builder/reports' }"

"{ NameSpace: Builder }"

Report subclass:#CoverageReport
	instanceVariableNames:'instrumentedMethods'
	classVariableNames:''
	poolDictionaries:''
	category:'Builder-Reports'
!


!CoverageReport methodsFor:'accessing-defaults'!

defaultFileSuffix

    "Return a default filename suffix. Note that format suffix will be 
     appended too if not file is explicitely specified"

    ^'Coverage'

    "Created: / 25-06-2013 / 01:12:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

defaultFormat
    "raise an error: must be redefined in concrete subclass(es)"

    ^ Builder::CoverageReportFormat::Cobertura new

    "Modified: / 25-06-2013 / 01:31:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

defaultName

    packages isNil ifTrue:[
        ^'someClasses'.
    ].

    ^String streamContents:[:s|
        packages do:[:packageOrClass|
            s nextPutAll: packageOrClass printString 
        ] separatedBy:[
            s nextPut:$,;space
        ]
    ]

    "Created: / 25-06-2013 / 01:29:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!CoverageReport methodsFor:'initialization'!

initialize
    instrumentedMethods := Set new.

    "Created: / 25-06-2013 / 01:40:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 25-06-2013 / 13:21:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

setupForClasses:classes
    "raise an error: must be redefined in concrete subclass(es)"

    classes do:[:each | self instrumentClass: each].

    "Modified: / 25-06-2013 / 16:22:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

setupForPackages:pkgs
    "raise an error: must be redefined in concrete subclass(es)"

    pkgs do:[:each | self instrumentPackage: each ].

    "Modified: / 25-06-2013 / 16:22:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!CoverageReport methodsFor:'instrumentation'!

instrumentClass:class
    class instAndClassMethods do:[:method|
        self instrumentMethod: method 
    ]

    "Created: / 25-06-2013 / 01:42:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

instrumentMethod:method

    | class selector |

    class := method mclass.
    selector := method selector.
    method isInstrumented ifFalse:[
        InstrumentingCompiler compileMethod: method.
    ].
    instrumentedMethods add: (class compiledMethodAt: selector)

    "Created: / 25-06-2013 / 01:44:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 25-06-2013 / 13:21:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

instrumentPackage:pkg
    Smalltalk allMethodsDo:[:method|
        method package asSymbol == pkg asSymbol ifTrue:[
            self instrumentMethod: method.
        ]
    ]

    "Created: / 25-06-2013 / 01:42:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 25-06-2013 / 17:51:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!CoverageReport methodsFor:'running'!

runReport
    "Actually run the report. What to do (what classes/packages to check)
     must be stored instance variables"

    format write: instrumentedMethods.

    "Modified: / 25-06-2013 / 13:13:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!CoverageReport class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
!

version_SVN
    ^ '$Id$'
! !