// Also the linker introduces implicit dependencies reported by LinkerDeps.
stk.Push("testmain")
deps := TestMainDeps // cap==len, so safe for append
+ if cover != nil && cfg.Experiment.CoverageRedesign {
+ deps = append(deps, "internal/coverage/cfile")
+ }
ldDeps, err := LinkerDeps(p)
if err != nil && pmain.Error == nil {
pmain.Error = &PackageError{Err: err}
{{end}}
"testing"
"testing/internal/testdeps"
+{{if .Cover}}
+ "internal/coverage/cfile"
+{{end}}
{{if .ImportTest}}
{{if .NeedTest}}_test{{else}}_{{end}} {{.Package.ImportPath | printf "%q"}}
{{if .Cover}}
testdeps.CoverMode = {{printf "%q" .Cover.Mode}}
testdeps.Covered = {{printf "%q" .Covered}}
+ testdeps.CoverSnapshotFunc = cfile.Snapshot
+ testdeps.CoverProcessTestDirFunc = cfile.ProcessCoverTestDir
+ testdeps.CoverMarkProfileEmittedFunc = cfile.MarkProfileEmitted
+
{{end}}
testdeps.ImportPath = {{.ImportPath | printf "%q"}}
}
import (
"bufio"
"context"
- "internal/coverage/cfile"
"internal/fuzz"
"internal/testlog"
"io"
var CoverMode 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) {
if CoverMode == "" {
return
}
- return CoverMode, coverTearDown, cfile.Snapshot
+ return CoverMode, coverTearDown, CoverSnapshotFunc
}
func coverTearDown(coverprofile string, gocoverdir string) (string, error) {
}
defer os.RemoveAll(gocoverdir)
}
- cfile.MarkProfileEmitted(true)
+ CoverMarkProfileEmittedFunc(true)
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 "", nil