class: Builder::CoverageReportFormat
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 29 Jul 2013 20:55:42 +0200
changeset 213 2c6346e43dc0
parent 212 5ee76f1e9b71
child 214 99e04c6e23fb
class: Builder::CoverageReportFormat comment/format in: #isAbstract
reports/Builder__CoverageReportFormat.st
--- a/reports/Builder__CoverageReportFormat.st	Mon Jul 29 20:40:02 2013 +0200
+++ b/reports/Builder__CoverageReportFormat.st	Mon Jul 29 20:55:42 2013 +0200
@@ -28,11 +28,11 @@
 !CoverageReportFormat class methodsFor:'testing'!
 
 isAbstract
-
     ^self == CoverageReportFormat
 
     "Created: / 04-08-2011 / 11:44:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 25-06-2013 / 01:26:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 29-07-2013 / 19:55:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !CoverageReportFormat::Cobertura class methodsFor:'accessing'!
@@ -80,6 +80,33 @@
     "Modified: / 25-06-2013 / 02:02:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!CoverageReportFormat::Cobertura methodsFor:'private'!
+
+sourceInfoForClass: class inPackage: package
+    | infosPerPackage cls |
+
+    cls := class.
+    cls isMetaclass ifTrue:[
+        cls := cls theNonMetaclass
+    ].
+    cls isPrivate ifTrue:[
+        cls := cls topOwningClass.
+    ].
+    infosPerPackage := infos at: package ifAbsentPut:[Dictionary new].
+    ^ infosPerPackage at: class ifAbsentPut: [ReportSourceInfo forClass: cls inPackage: package].
+
+    "Created: / 29-07-2013 / 18:43:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+sourceInfoForExtensionsinPackage: package
+    | infosPerPackage |
+
+    infosPerPackage := infos at: package ifAbsentPut:[Dictionary new].
+    ^ infosPerPackage at: 'extensions.st' ifAbsentPut: [ReportSourceInfo forExtensionsInPackage: package].
+
+    "Created: / 29-07-2013 / 18:43:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !CoverageReportFormat::Cobertura methodsFor:'writing'!
 
 write: instrumentedMethods
@@ -103,8 +130,8 @@
                 self writeClass: class with:[
                     | methodSetOrdered info |
 
-                    info := infos at: class ifAbsentPut:[ReportSourceInfo for: class].
-                    methodSetOrdered := (classMap at: class) asSortedCollection:[:a :b | (info offsetOfMethod: a) < (info offsetOfMethod: b)].
+"/                    methodSetOrdered := (classMap at: class) asSortedCollection:[:a :b | (info offsetOfMethod: a) < (info offsetOfMethod: b)].
+                    methodSetOrdered := (classMap at: class) asSortedCollection:[:a :b | a selector < b selector].
                     methodSetOrdered do:[:method|
                         self writeMethod: method.
                     ]                    
@@ -114,7 +141,7 @@
     ]
 
     "Created: / 25-06-2013 / 13:17:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 28-06-2013 / 01:57:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 29-07-2013 / 18:49:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 writeClass: class with: content
@@ -194,7 +221,10 @@
     stream nextPutLine:'          <lines>'.
     currentMethod := method.
 
-    info := infos at: method mclass theNonMetaclass ifAbsentPut:[ReportSourceInfo for: method mclass theNonMetaclass].
+    info := method package == method mclass package 
+                ifTrue:[self sourceInfoForClass: method mclass inPackage: method package]
+                ifFalse:[self sourceInfoForExtensionsinPackage: method package]. 
+
     firstCharOffset := info offsetOfMethod: method.
     firstLineNr := (info lineAndColumnOfOffset: firstCharOffset) x.
     lastLineNr := (info lineAndColumnOfOffset: firstCharOffset + method source size) x.
@@ -204,11 +234,10 @@
     analyzer parseMethod: method source in: method mclass.
     analyzer intervals do:[:interval|
         | start stop |
-
-        start := info lineAndColumnOfOffset: interval first.
-        stop := info lineAndColumnOfOffset: interval last.
+        start := info lineAndColumnOfOffset: firstCharOffset + interval first - 1.
+        stop := info lineAndColumnOfOffset: firstCharOffset + interval last - 1.
         start x to: stop x do:[:lineNr|
-            lines at: lineNr put: -1.
+            lines at: lineNr - firstLineNr + 1 put: -1.
         ].
     ].
 
@@ -218,10 +247,11 @@
         startLine := (info lineAndColumnOfOffset: firstCharOffset + eachBlockInfo startPosition - 1) x.
         endLine := (info lineAndColumnOfOffset: firstCharOffset + eachBlockInfo endPosition - 1) x.
         startLine to: endLine do:[:lineNr|
+
             (lines at: (lineNr - firstLineNr + 1)) == -1 ifTrue:[
                 lines at: (lineNr - firstLineNr + 1) put: (eachBlockInfo count)
             ] ifFalse:[
-                lines at: (lineNr - firstLineNr + 1) put: ((lines at: (lineNr - firstLineNr + 1)) min: eachBlockInfo count)
+                lines at: (lineNr - firstLineNr + 1) put: (((lines at: (lineNr - firstLineNr + 1)) ? (SmallInteger maxVal)) min: eachBlockInfo count)
             ]
         ]            
     ].
@@ -240,7 +270,7 @@
     stream nextPutLine:'        </method>'
 
     "Created: / 25-06-2013 / 13:17:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 29-07-2013 / 10:56:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 29-07-2013 / 18:57:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 writePackage: packageName with: aBlock