# This test is intended to verify that when a user does "go run -cover ..." # or "go build -cover ...", packages named on the command line are # always instrumented (but not their dependencies). This rule applies # inside and outside the standard library. [short] skip [!GOEXPERIMENT:coverageredesign] skip # Compile an object. go tool compile -p tiny tiny/tiny.go tiny/tiny2.go # Build a stdlib command with coverage. go build -o $WORK/nm.exe -cover cmd/nm # Save off old GOCOVERDIR setting env SAVEGOCOVERDIR=$GOCOVERDIR # Collect a coverage profile from running 'cmd/nm' on the object. mkdir $WORK/covdata env GOCOVERDIR=$WORK/covdata exec $WORK/nm.exe tiny.o # Restore previous GOCOVERDIR setting env GOCOVERDIR=$SAVEGOCOVERDIR # Check to make sure we instrumented just the main package, not # any dependencies. go tool covdata pkglist -i=$WORK/covdata stdout cmd/nm ! stdout cmd/internal/goobj pkglist.txt # ... now collect a coverage profile from a Go file # listed on the command line. go build -cover -o $WORK/another.exe testdata/another.go mkdir $WORK/covdata2 env GOCOVERDIR=$WORK/covdata2 exec $WORK/another.exe # Restore previous GOCOVERDIR setting env GOCOVERDIR=$SAVEGOCOVERDIR # Check to make sure we instrumented just the main package. go tool covdata pkglist -i=$WORK/covdata2 stdout command-line-arguments ! stdout fmt -- go.mod -- module example.prog -- testdata/another.go -- package main import "fmt" func main() { fmt.Println("Hi dad") } -- tiny/tiny.go -- package tiny var Tvar int -- tiny/tiny2.go -- package tiny var Tvar2 bool