reports/Builder__CoverageReportFormat.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 28 Jun 2013 03:54:52 +0200
changeset 186 b53f4cc947e1
parent 183 4e6fc1b6c282
child 192 c1bb8ec592e1
permissions -rw-r--r--
Improvements in coverage - exclude accessors and metadata methods.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/builder/reports' }"
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: Builder }"
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
ReportFormat subclass:#CoverageReportFormat
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	instanceVariableNames:''
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	category:'Builder-Reports-Formats'
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
CoverageReportFormat subclass:#Cobertura
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
    13
	instanceVariableNames:'currentPackage currentClass currentClassLinesBuffer currentMethod
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
    14
		infos'
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
	classVariableNames:''
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
	poolDictionaries:''
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
	privateIn:CoverageReportFormat
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
!CoverageReportFormat class methodsFor:'testing'!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
isAbstract
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
    ^self == CoverageReportFormat
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
    "Created: / 04-08-2011 / 11:44:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
    "Modified: / 25-06-2013 / 01:26:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
! !
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
!CoverageReportFormat::Cobertura class methodsFor:'accessing'!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
symbolicNames
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
    "Returns a collection of symbolic names for this format"
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
    ^ self shouldImplement
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
! !
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
!CoverageReportFormat::Cobertura class methodsFor:'documentation'!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
documentation
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
" }
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
 Replace 'Object', 'NewClass1' and
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
 the empty string arguments by true values.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
 Install (or change) the class by 'accepting',
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
 either via the menu or the keyboard (usually CMD-A).
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
 You can also change the category simply by editing
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
 the categoryString and accepting.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
 To be nice to others (and yourself later), do not forget to
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
 add some documentation; preferably under the classes documentation
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
 protocol.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
 (see the `create documentation stubs' item in the methodList menu;
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
  switch from instance to class to find this menu item.)
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
 Notice, that ST/X uses the convention to document the class using
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
 comment-only class methods (however, ST80 comments are supported and
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
 can be changed via the class-documentation menu).
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
"
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
! !
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
!CoverageReportFormat::Cobertura methodsFor:'accessing - defaults'!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
defaultFileSuffix
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    "superclass Builder::ReportFormat says that I am responsible to implement this method"
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    ^ 'xml'
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
    "Modified: / 25-06-2013 / 02:02:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
! !
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
!CoverageReportFormat::Cobertura methodsFor:'writing'!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
write: instrumentedMethods
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
    | packageMap |
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
    packageMap := Dictionary new.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    infos := Dictionary new.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
    instrumentedMethods do:[:method|
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
    84
        | classMap methodSet |
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
        classMap := packageMap at: method package ifAbsentPut: [ Dictionary new ].
186
b53f4cc947e1 Improvements in coverage - exclude accessors and metadata methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 183
diff changeset
    86
        methodSet := classMap at: method mclass theNonMetaclass ifAbsentPut: [ Set new ].
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
    87
        methodSet add: method.
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
    ].
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    packageMap keys asSortedCollection do:[:package|
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
        | classMap |            
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
        self writePackage: package with:[            
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
            ((classMap := packageMap at: package) keys asSortedCollection:[:a :b| a name < b name ]) do:[:class|
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
    95
                | methodSet |
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
                self writeClass: class with:[
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
    97
                    | methodSetOrdered info |
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
    99
                    info := infos at: class ifAbsentPut:[ReportSourceInfo for: class].
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   100
                    methodSetOrdered := (classMap at: class) asSortedCollection:[:a :b | (info offsetOfMethod: a) < (info offsetOfMethod: b)].
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   101
                    methodSetOrdered do:[:method|
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
                        self writeMethod: method.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
                    ]                    
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
                ]
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
            ]
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
        ]
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
    ]
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    "Created: / 25-06-2013 / 13:17:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
186
b53f4cc947e1 Improvements in coverage - exclude accessors and metadata methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 183
diff changeset
   110
    "Modified: / 28-06-2013 / 01:57:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
writeClass: class with: content
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
    | className classFileName classPathName |
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
    className := class name.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
    classFileName := class isPrivate 
182
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   119
                        ifTrue:[(Smalltalk fileNameForClass: class topOwningClass) , '.st']
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   120
                        ifFalse:[(Smalltalk fileNameForClass: class) , '.st'].
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
    class package ~~ currentPackage ifTrue:[
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
        classFileName := 'extensions.st'
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
    ].
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
    classPathName := ((currentPackage copyReplaceAll: $: with: Filename separator) replaceAll: $/ with: Filename separator) 
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
                        , Filename separator , classFileName.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
    stream nextPutAll:'        <class name="'; nextPutAll: className; nextPutAll: '" filename="'; nextPutAll: classPathName; nextPutLine:'" line-rate="1.0" branch-rate="1.0" complexity="1.0">'.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
    stream nextPutLine:'          <methods>'.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
    currentClass := class.
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   130
    currentClassLinesBuffer := String new writeStream.
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
    content value.               
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
    currentClass := nil.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
    stream nextPutLine:'          </methods>'.
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   134
    stream nextPutLine:'          <lines>'.
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   135
    stream nextPutAll: currentClassLinesBuffer contents.
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   136
    stream nextPutLine:'          </lines>'.
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   137
    currentClassLinesBuffer := nil.
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
    stream nextPutLine:'        </class>'
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
    "Created: / 25-06-2013 / 12:29:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   141
    "Modified: / 27-06-2013 / 00:05:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
writeFooter
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
    stream nextPutAll:'  </packages>
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
</coverage>'
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
    "Modified: / 25-06-2013 / 11:57:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
writeHeader
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
    stream nextPutAll:'<?xml version="1.0"?>
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
<!!--DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-03.dtd"-->
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
182
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   155
<coverage line-rate="1.0" branch-rate="1.0" version="1.9" timestamp="'; nextPutAll: Timestamp now utcSecondsSince1970 printString; nextPutLine:'">'.
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   156
    stream nextPutLine:'  <sources>'.
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   157
    Smalltalk packagePath do:[:each|
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   158
        stream 
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   159
            nextPutAll: '<source>';
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   160
            nextPutAll: each asFilename asAbsoluteFilename pathName;
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   161
            nextPutAll: '</source>';
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   162
            cr.                
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   163
    ].
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   164
    stream nextPutLine:'  </sources>'.
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   165
    stream nextPutLine:'  <packages>'.
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
182
556ad4c2c381 class: Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   167
    "Modified: / 26-06-2013 / 17:50:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   170
writeLine: lineNr hits: nhits on: s
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   172
    s nextPutAll:'            <line number="'; nextPutAll: lineNr printString; nextPutAll:'" hits="'; nextPutAll: nhits printString; nextPutLine:'" branch="false" />'.
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   174
    "Created: / 27-06-2013 / 00:03:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
writeMethod: method
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
186
b53f4cc947e1 Improvements in coverage - exclude accessors and metadata methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 183
diff changeset
   179
    | info firstCharOffset firstLineNr lastLineNr lines name |
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
186
b53f4cc947e1 Improvements in coverage - exclude accessors and metadata methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 183
diff changeset
   181
    name := method selector.
b53f4cc947e1 Improvements in coverage - exclude accessors and metadata methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 183
diff changeset
   182
    method mclass isMetaclass ifTrue:[
b53f4cc947e1 Improvements in coverage - exclude accessors and metadata methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 183
diff changeset
   183
        name := name , ' [class method]'.
b53f4cc947e1 Improvements in coverage - exclude accessors and metadata methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 183
diff changeset
   184
    ].
b53f4cc947e1 Improvements in coverage - exclude accessors and metadata methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 183
diff changeset
   185
b53f4cc947e1 Improvements in coverage - exclude accessors and metadata methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 183
diff changeset
   186
    stream nextPutAll:'        <method name="'; nextPutAll: name; nextPutLine: '" signature="" line-rate="1.0" branch-rate="1.0" complexity="1.0">'.
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
    stream nextPutLine:'          <lines>'.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
    currentMethod := method.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
186
b53f4cc947e1 Improvements in coverage - exclude accessors and metadata methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 183
diff changeset
   190
    info := infos at: method mclass theNonMetaclass ifAbsentPut:[ReportSourceInfo for: method mclass theNonMetaclass].
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
    firstCharOffset := info offsetOfMethod: method.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
    firstLineNr := (info lineAndColumnOfOffset: firstCharOffset) x.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
    lastLineNr := (info lineAndColumnOfOffset: firstCharOffset + method source size) x.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
    lines := Array new: lastLineNr - firstLineNr + 1 withAll: method methodInvocationInfo count.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
    (method blockInvocationInfo copy sort:[:a :b | a startPosition < b startPosition]) do:[:eachBlockInfo |
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
        | startLine endLine |
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
        startLine := (info lineAndColumnOfOffset: firstCharOffset + eachBlockInfo startPosition - 1) x.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
        endLine := (info lineAndColumnOfOffset: firstCharOffset + eachBlockInfo endPosition - 1) x.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
        startLine to: endLine do:[:lineNr|
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
            lines at: (lineNr - firstLineNr + 1) put: ((lines at: (lineNr - firstLineNr + 1)) min: eachBlockInfo count)
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
        ]            
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
    ].
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
    1 to: lines size do:[:i|
183
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   209
        self writeLine: (i + firstLineNr - 1) hits: (lines at: i) on: stream.
4e6fc1b6c282 Fixes in Builder::CoverageReportFormat
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   210
        self writeLine: (i + firstLineNr - 1) hits: (lines at: i) on: currentClassLinesBuffer.
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    ].
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
    currentMethod := nil.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
    stream nextPutLine:'          </lines>'.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
    stream nextPutLine:'        </method>'
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
    "Created: / 25-06-2013 / 13:17:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
186
b53f4cc947e1 Improvements in coverage - exclude accessors and metadata methods.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 183
diff changeset
   218
    "Modified: / 28-06-2013 / 01:59:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
167
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
writePackage: packageName with: aBlock
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
    stream nextPutAll:'    <package name="'; nextPutAll: packageName; nextPutLine: '" line-rate="1.0" branch-rate="1.0" complexity="1.0">'.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
    stream nextPutLine:'      <classes>'.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
    currentPackage := packageName.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
    aBlock value.               
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
    currentPackage := nil.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
    stream nextPutLine:'      </classes>'.
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
    stream nextPutLine:'    </package>'
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
    "Created: / 25-06-2013 / 11:55:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
    "Modified: / 25-06-2013 / 13:24:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
! !
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
!CoverageReportFormat class methodsFor:'documentation'!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
version
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
    ^ '$Header$'
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
!
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
version_CVS
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
    ^ '$Header$'
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
! !
394b26be9d47 initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244