Skip to content

Commit dbe7b39

Browse files
author
Ale Paredes
authored
Add sources to coverage.py formatter (#247)
- coverage.py formatter was not parsing <source> tags. Making format-coverage to fail when it was run in a different working directory to the directory the tests ran - Updates integration-test for coverage.py so it runs on a different working directory.
1 parent 86282ca commit dbe7b39

File tree

3 files changed

+36
-11
lines changed

3 files changed

+36
-11
lines changed

formatters/coveragepy/coveragepy.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,30 +41,32 @@ func (r *Formatter) Format() (formatters.Report, error) {
4141
return rep, errors.WithStack(err)
4242
}
4343

44-
c := &xmlFile{}
45-
err = xml.NewDecoder(fx).Decode(c)
44+
coverageFile := &xmlFile{}
45+
err = xml.NewDecoder(fx).Decode(coverageFile)
4646
if err != nil {
4747
return rep, errors.WithStack(err)
4848
}
4949

5050
gitHead, _ := env.GetHead()
51-
for _, pp := range c.Packages {
52-
for _, cc := range pp.Classes {
53-
sf, err := formatters.NewSourceFile(cc.FileName, gitHead)
51+
for _, xmlPackage := range coverageFile.Packages {
52+
for _, xmlClass := range xmlPackage.Classes {
53+
fileName := coverageFile.getFullFilePath(xmlClass.FileName)
54+
logrus.Debugf("creating test file report for %s", fileName)
55+
sourceFile, err := formatters.NewSourceFile(fileName, gitHead)
5456
if err != nil {
5557
return rep, errors.WithStack(err)
5658
}
5759
num := 1
58-
for _, l := range cc.Lines {
60+
for _, l := range xmlClass.Lines {
5961
for num < l.Number {
60-
sf.Coverage = append(sf.Coverage, formatters.NullInt{})
62+
sourceFile.Coverage = append(sourceFile.Coverage, formatters.NullInt{})
6163
num++
6264
}
6365
ni := formatters.NewNullInt(l.Hits)
64-
sf.Coverage = append(sf.Coverage, ni)
66+
sourceFile.Coverage = append(sourceFile.Coverage, ni)
6567
num++
6668
}
67-
err = rep.AddSourceFile(sf)
69+
err = rep.AddSourceFile(sourceFile)
6870
if err != nil {
6971
return rep, errors.WithStack(err)
7072
}

formatters/coveragepy/xml.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
package coveragepy
22

3-
import "encoding/xml"
3+
import (
4+
"encoding/xml"
5+
"fmt"
6+
"os"
7+
)
8+
9+
type Source struct {
10+
Path string `xml:",chardata"`
11+
}
412

513
type xmlFile struct {
614
XMLName xml.Name `xml:"coverage"`
15+
Sources []Source `xml:"sources>source"`
716
Packages []struct {
817
Name string `xml:"name,attr"`
918
Classes []struct {
@@ -15,3 +24,16 @@ type xmlFile struct {
1524
} `xml:"classes>class"`
1625
} `xml:"packages>package"`
1726
}
27+
28+
func (covpyFile xmlFile) getFullFilePath(filename string) string {
29+
fullFilePath := filename
30+
31+
for _, source := range covpyFile.Sources {
32+
filepath := fmt.Sprintf("%s/%s", source.Path, filename)
33+
if _, err := os.Stat(filepath); err == nil {
34+
fullFilePath = filepath
35+
break
36+
}
37+
}
38+
return fullFilePath
39+
}

integration-tests/coverage_py/Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ RUN git config --global user.name "Your Name"
2929
RUN git add ignore.me
3030
RUN git commit -m "testing"
3131

32+
WORKDIR ..
3233
ENV CC_TEST_REPORTER_ID=c4881e09870b0fac1291c93339b36ffe36210a2645c1ad25e52d8fda3943fb4d
33-
RUN test-reporter format-coverage -d
34+
RUN test-reporter format-coverage -d -t coverage.py python-test-reporter/coverage.xml
3435
RUN cat coverage/codeclimate.json
3536
RUN test-reporter upload-coverage -d -s 2

0 commit comments

Comments
 (0)