mirror of
https://github.com/golang/go
synced 2024-11-15 01:20:28 -07:00
cmd/go,testdeps: move import of internal/coverage/cfile to testmain
Instead of having testing/internal/testdeps import the internal/coverage/cfile package directly, have the code in testmain pass in pointers to cfile functions during setup in the case that we're running a "go test -cover" binary. This reduces the size of regular non-coverage test binaries back to what they were before CL 585820. Updates #67401. Fixes #67588. Change-Id: Iaf1a613bc7d3c9df9943189065d0161ca9120d34 Reviewed-on: https://go-review.googlesource.com/c/go/+/587795 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
f109bdd127
commit
9b5d27faf9
@ -298,6 +298,9 @@ func TestPackagesAndErrors(ctx context.Context, done func(), opts PackageOpts, p
|
|||||||
// Also the linker introduces implicit dependencies reported by LinkerDeps.
|
// Also the linker introduces implicit dependencies reported by LinkerDeps.
|
||||||
stk.Push("testmain")
|
stk.Push("testmain")
|
||||||
deps := TestMainDeps // cap==len, so safe for append
|
deps := TestMainDeps // cap==len, so safe for append
|
||||||
|
if cover != nil && cfg.Experiment.CoverageRedesign {
|
||||||
|
deps = append(deps, "internal/coverage/cfile")
|
||||||
|
}
|
||||||
ldDeps, err := LinkerDeps(p)
|
ldDeps, err := LinkerDeps(p)
|
||||||
if err != nil && pmain.Error == nil {
|
if err != nil && pmain.Error == nil {
|
||||||
pmain.Error = &PackageError{Err: err}
|
pmain.Error = &PackageError{Err: err}
|
||||||
@ -907,6 +910,9 @@ import (
|
|||||||
{{end}}
|
{{end}}
|
||||||
"testing"
|
"testing"
|
||||||
"testing/internal/testdeps"
|
"testing/internal/testdeps"
|
||||||
|
{{if .Cover}}
|
||||||
|
"internal/coverage/cfile"
|
||||||
|
{{end}}
|
||||||
|
|
||||||
{{if .ImportTest}}
|
{{if .ImportTest}}
|
||||||
{{if .NeedTest}}_test{{else}}_{{end}} {{.Package.ImportPath | printf "%q"}}
|
{{if .NeedTest}}_test{{else}}_{{end}} {{.Package.ImportPath | printf "%q"}}
|
||||||
@ -944,6 +950,10 @@ func init() {
|
|||||||
{{if .Cover}}
|
{{if .Cover}}
|
||||||
testdeps.CoverMode = {{printf "%q" .Cover.Mode}}
|
testdeps.CoverMode = {{printf "%q" .Cover.Mode}}
|
||||||
testdeps.Covered = {{printf "%q" .Covered}}
|
testdeps.Covered = {{printf "%q" .Covered}}
|
||||||
|
testdeps.CoverSnapshotFunc = cfile.Snapshot
|
||||||
|
testdeps.CoverProcessTestDirFunc = cfile.ProcessCoverTestDir
|
||||||
|
testdeps.CoverMarkProfileEmittedFunc = cfile.MarkProfileEmitted
|
||||||
|
|
||||||
{{end}}
|
{{end}}
|
||||||
testdeps.ImportPath = {{.ImportPath | printf "%q"}}
|
testdeps.ImportPath = {{.ImportPath | printf "%q"}}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ package testdeps
|
|||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"context"
|
"context"
|
||||||
"internal/coverage/cfile"
|
|
||||||
"internal/fuzz"
|
"internal/fuzz"
|
||||||
"internal/testlog"
|
"internal/testlog"
|
||||||
"io"
|
"io"
|
||||||
@ -205,11 +204,21 @@ func (TestDeps) SnapshotCoverage() {
|
|||||||
var CoverMode string
|
var CoverMode string
|
||||||
var Covered string
|
var Covered string
|
||||||
|
|
||||||
|
// These variables below are set at runtime (via code in testmain) to point
|
||||||
|
// to the equivalent functions in package internal/coverage/cfile; doing
|
||||||
|
// things this way allows us to have tests import internal/coverage/cfile
|
||||||
|
// only when -cover is in effect (as opposed to importing for all tests).
|
||||||
|
var (
|
||||||
|
CoverSnapshotFunc func() float64
|
||||||
|
CoverProcessTestDirFunc func(dir string, cfile string, cm string, cpkg string, w io.Writer) error
|
||||||
|
CoverMarkProfileEmittedFunc func(val bool)
|
||||||
|
)
|
||||||
|
|
||||||
func (TestDeps) InitRuntimeCoverage() (mode string, tearDown func(string, string) (string, error), snapcov func() float64) {
|
func (TestDeps) InitRuntimeCoverage() (mode string, tearDown func(string, string) (string, error), snapcov func() float64) {
|
||||||
if CoverMode == "" {
|
if CoverMode == "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return CoverMode, coverTearDown, cfile.Snapshot
|
return CoverMode, coverTearDown, CoverSnapshotFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
func coverTearDown(coverprofile string, gocoverdir string) (string, error) {
|
func coverTearDown(coverprofile string, gocoverdir string) (string, error) {
|
||||||
@ -221,9 +230,9 @@ func coverTearDown(coverprofile string, gocoverdir string) (string, error) {
|
|||||||
}
|
}
|
||||||
defer os.RemoveAll(gocoverdir)
|
defer os.RemoveAll(gocoverdir)
|
||||||
}
|
}
|
||||||
cfile.MarkProfileEmitted(true)
|
CoverMarkProfileEmittedFunc(true)
|
||||||
cmode := CoverMode
|
cmode := CoverMode
|
||||||
if err := cfile.ProcessCoverTestDir(gocoverdir, coverprofile, cmode, Covered, os.Stdout); err != nil {
|
if err := CoverProcessTestDirFunc(gocoverdir, coverprofile, cmode, Covered, os.Stdout); err != nil {
|
||||||
return "error generating coverage report", err
|
return "error generating coverage report", err
|
||||||
}
|
}
|
||||||
return "", nil
|
return "", nil
|
||||||
|
Loading…
Reference in New Issue
Block a user