cmd/cover: show file coverage in HTML drop down

As requested on Stack Overflow: http://goo.gl/ams9fY
(Kudos to sberry for his JavaScript solution, provided there.
This change does the same thing on the server side.)

LGTM=r
R=r
CC=golang-codereviews
https://golang.org/cl/127030043
This commit is contained in:
Andrew Gerrand 2014-08-12 09:22:11 +10:00
parent cd6b8ab06d
commit 573fa9f0bd
1 changed files with 24 additions and 5 deletions

View File

@ -50,8 +50,9 @@ func htmlOutput(profile, outfile string) error {
return err
}
d.Files = append(d.Files, &templateFile{
Name: fn,
Body: template.HTML(buf.String()),
Name: fn,
Body: template.HTML(buf.String()),
Coverage: percentCovered(profile),
})
}
@ -83,6 +84,23 @@ func htmlOutput(profile, outfile string) error {
return nil
}
// percentCovered returns, as a percentage, the fraction of the statements in
// the profile covered by the test run.
// In effect, it reports the coverage of a given source file.
func percentCovered(p *cover.Profile) float64 {
var total, covered int64
for _, b := range p.Blocks {
total += int64(b.NumStmt)
if b.Count > 0 {
covered += int64(b.NumStmt)
}
}
if total == 0 {
return 0
}
return float64(covered) / float64(total) * 100
}
// htmlGen generates an HTML coverage report with the provided filename,
// source code, and tokens, and writes it to the given Writer.
func htmlGen(w io.Writer, src []byte, boundaries []cover.Boundary) error {
@ -166,8 +184,9 @@ type templateData struct {
}
type templateFile struct {
Name string
Body template.HTML
Name string
Body template.HTML
Coverage float64
}
const tmplHTML = `
@ -215,7 +234,7 @@ const tmplHTML = `
<div id="nav">
<select id="files">
{{range $i, $f := .Files}}
<option value="file{{$i}}">{{$f.Name}}</option>
<option value="file{{$i}}">{{$f.Name}} ({{printf "%.1f" $f.Coverage}}%)</option>
{{end}}
</select>
</div>