-
Notifications
You must be signed in to change notification settings - Fork 78
/
Copy pathjson_formatter.go
86 lines (72 loc) · 2.05 KB
/
json_formatter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package simplecov
import (
"encoding/json"
"os"
"github.com/Sirupsen/logrus"
"github.com/codeclimate/test-reporter/env"
"github.com/codeclimate/test-reporter/formatters"
"github.com/pkg/errors"
)
type branch struct {
Type string `json:"type"`
StartLine int `json:"start_line"`
EndLine int `json:"end_line"`
Coverage interface{} `json:"coverage"`
}
type fileCoverage struct {
LineCoverage []interface{} `json:"lines"`
Branches []branch `json:"branches"`
}
type meta struct {
SimpleCovVersion string `json:"simplecov_version"`
}
type simplecovJsonFormatterReport struct {
Meta meta `json:"meta"`
CoverageType map[string]fileCoverage `json:"coverage"`
}
func transformLineCoverageToCoverage(ln []interface{}) formatters.Coverage {
coverage := make([]formatters.NullInt, len(ln))
ignoredLine := formatters.NullInt{-1, false}
var convertedCoverageValue int
for i := 0; i < len(ln); i++ {
_, ok := ln[i].(string)
if ok {
coverage[i] = ignoredLine
} else {
if ln[i] == nil {
coverage[i] = ignoredLine
} else {
convertedCoverageValue = int(ln[i].(float64))
coverage[i] = formatters.NewNullInt(convertedCoverageValue)
}
}
}
return coverage
}
func jsonFormat(r Formatter, rep formatters.Report) (formatters.Report, error) {
logrus.Debugf("Analyzing simplecov json output from latest format %s", r.Path)
jf, err := os.Open(r.Path)
if err != nil {
return rep, errors.WithStack(errors.Errorf("could not open coverage file %s", r.Path))
}
var m simplecovJsonFormatterReport
decoder := json.NewDecoder(jf)
decoder.DisallowUnknownFields()
err = decoder.Decode(&m)
if err != nil {
return rep, errors.WithStack(err)
}
gitHead, _ := env.GetHead()
for n, ls := range m.CoverageType {
fe, err := formatters.NewSourceFile(n, gitHead)
if err != nil {
return rep, errors.WithStack(err)
}
fe.Coverage = transformLineCoverageToCoverage(ls.LineCoverage)
err = rep.AddSourceFile(fe)
if err != nil {
return rep, errors.WithStack(err)
}
}
return rep, nil
}