From 9824b018cedcb636cc1210a3a9f0249d1d44fe49 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Thu, 20 Jun 2013 10:27:44 -0700 Subject: [PATCH] cmd/go: put the coverage information on the summary line. Output now: ok crypto/aes 0.060s coverage: 89.8% of statements ok crypto/des 0.074s coverage: 92.2% of statements ok crypto/dsa 0.056s coverage: 34.5% of statements ok crypto/ecdsa 0.058s coverage: 86.8% of statements ok crypto/elliptic 0.039s coverage: 94.6% of statements ok crypto/hmac 0.037s coverage: 93.5% of statements ok crypto/md5 0.031s coverage: 96.2% of statements ok crypto/rand 0.074s coverage: 9.9% of statements ok crypto/rc4 0.090s coverage: 66.7% of statements ok crypto/rsa 0.253s coverage: 83.5% of statements R=rsc, adg CC=golang-dev https://golang.org/cl/10413044 --- src/cmd/go/test.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/cmd/go/test.go b/src/cmd/go/test.go index 2e235265306..32f342288e3 100644 --- a/src/cmd/go/test.go +++ b/src/cmd/go/test.go @@ -16,6 +16,7 @@ import ( "os/exec" "path" "path/filepath" + "regexp" "runtime" "sort" "strings" @@ -781,7 +782,7 @@ func (b *builder) runTest(a *action) error { if testShowPass { a.testOutput.Write(out) } - fmt.Fprintf(a.testOutput, "ok \t%s\t%s\n", a.p.ImportPath, t) + fmt.Fprintf(a.testOutput, "ok \t%s\t%s%s\n", a.p.ImportPath, t, coveragePercentage(out)) return nil } @@ -797,6 +798,23 @@ func (b *builder) runTest(a *action) error { return nil } +// coveragePercentage returns the coverage results (if enabled) for the +// test. It uncovers the data by scanning the output from the test run. +func coveragePercentage(out []byte) string { + if !testCover { + return "" + } + // The string looks like + // test coverage for encoding/binary: 79.9% of statements + // Extract the piece from the percentage to the end of the line. + re := regexp.MustCompile(`test coverage for [^ ]+: (.*)\n`) + matches := re.FindSubmatch(out) + if matches == nil { + return "(missing coverage statistics)" + } + return fmt.Sprintf("\tcoverage: %s", matches[1]) +} + // cleanTest is the action for cleaning up after a test. func (b *builder) cleanTest(a *action) error { if buildWork {