Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 21 additions & 32 deletions coverage.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,42 @@ import (
"encoding/xml"
"fmt"
"io"
"io/ioutil"
"os"
"strconv"
"strings"
)

// New creates a new lcov parser
func New(filePath string, mode CoverageMode) Parser {
func New(mode CoverageMode) Parser {
return Parser{
path: filePath,
mode: mode,
}
}

// Parse parses the lcov file
func (l Parser) Parse() (Report, error) {
func (l Parser) Parse(path string) (Report, error) {
reader, err := os.Open(path)
if err != nil {
return Report{}, fmt.Errorf("coverage.Parse> Unable to open file: %v", err)
}
defer reader.Close()
return l.ParseReader(reader)
}

func (l Parser) ParseReader(reader io.Reader) (Report, error) {
switch l.mode {
case LCOV:
return l.processLcov()
return l.processLcov(reader)
case COBERTURA:
return l.processCobertura()
return l.processCobertura(reader)
case CLOVER:
return l.processClover()
return l.processClover(reader)
}
return Report{}, fmt.Errorf("coverage.parse> Unknown mode %s", l.mode)
return Report{}, fmt.Errorf("coverage.Parse> Unknown mode %s", l.mode)
}

func (l Parser) processClover() (Report, error) {
file, errF := os.Open(l.path)
if errF != nil {
return Report{}, fmt.Errorf("coverage.processClover> Unable to open file: %v", errF)
}
defer file.Close()

b, errR := ioutil.ReadAll(file)
func (l Parser) processClover(reader io.Reader) (Report, error) {
b, errR := io.ReadAll(reader)
if errR != nil {
return Report{}, fmt.Errorf("coverage.processClover> Unable to read file: %v", errR)
}
Expand Down Expand Up @@ -77,14 +78,8 @@ func (l Parser) processClover() (Report, error) {

}

func (l Parser) processCobertura() (Report, error) {
file, errF := os.Open(l.path)
if errF != nil {
return Report{}, fmt.Errorf("coverage.processCobertura> Unable to open file: %v", errF)
}
defer file.Close()

b, errR := ioutil.ReadAll(file)
func (l Parser) processCobertura(reader io.Reader) (Report, error) {
b, errR := io.ReadAll(reader)
if errR != nil {
return Report{}, fmt.Errorf("coverage.processCobertura> Unable to read file: %v", errR)
}
Expand All @@ -103,14 +98,8 @@ func (l Parser) processCobertura() (Report, error) {
return report, nil
}

func (l Parser) processLcov() (Report, error) {
file, errF := os.Open(l.path)
if errF != nil {
return Report{}, fmt.Errorf("coverage.processLcov> Unable to open lcov file: %v", errF)
}
defer file.Close()

r := bufio.NewReader(file)
func (l Parser) processLcov(reader io.Reader) (Report, error) {
r := bufio.NewReader(reader)

report := Report{
Files: make([]FileReport, 0),
Expand Down
12 changes: 6 additions & 6 deletions coverage_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import (
)

func TestLCOV(t *testing.T) {
lcovParser := New("./test/lcov.info", LCOV)
report, err := lcovParser.Parse()
lcovParser := New(LCOV)
report, err := lcovParser.Parse("./test/lcov.info")

assert.NoError(t, err)
assert.Equal(t, 67, report.CoveredBranches)
Expand All @@ -20,8 +20,8 @@ func TestLCOV(t *testing.T) {
}

func TestCobertura(t *testing.T) {
coberturaParser := New("./test/coverage.xml", COBERTURA)
report, err := coberturaParser.Parse()
coberturaParser := New(COBERTURA)
report, err := coberturaParser.Parse("./test/coverage.xml")

assert.NoError(t, err)
assert.Equal(t, 8, report.TotalLines)
Expand All @@ -31,8 +31,8 @@ func TestCobertura(t *testing.T) {
}

func TestClover(t *testing.T) {
cloverParser := New("./test/clover.xml", CLOVER)
report, err := cloverParser.Parse()
cloverParser := New(CLOVER)
report, err := cloverParser.Parse("./test/clover.xml")
assert.NoError(t, err)

assert.Equal(t, 20672, report.TotalLines)
Expand Down