# This test checks more of the "go build -cover" functionality, # specifically which packages get selected when building. [short] skip # Skip if new coverage is not enabled. [!GOEXPERIMENT:coverageredesign] skip #------------------------------------------- # Build for coverage. go build -mod=mod -o $WORK/modex.exe -cover mod.example/main # Save off old GOCOVERDIR setting env SAVEGOCOVERDIR=$GOCOVERDIR # Execute. mkdir $WORK/covdata env GOCOVERDIR=$WORK/covdata exec $WORK/modex.exe # Restore previous GOCOVERDIR setting env GOCOVERDIR=$SAVEGOCOVERDIR # Examine the result. go tool covdata percent -i=$WORK/covdata stdout 'coverage: 100.0% of statements' # By default we want to see packages resident in the module covered, # but not dependencies. go tool covdata textfmt -i=$WORK/covdata -o=$WORK/covdata/out.txt grep 'mode: set' $WORK/covdata/out.txt grep 'mod.example/main/main.go:' $WORK/covdata/out.txt grep 'mod.example/sub/sub.go:' $WORK/covdata/out.txt ! grep 'rsc.io' $WORK/covdata/out.txt rm $WORK/covdata rm $WORK/modex.exe #------------------------------------------- # Repeat the build but with -coverpkg=all go build -mod=mod -coverpkg=all -o $WORK/modex.exe -cover mod.example/main # Execute. mkdir $WORK/covdata env GOCOVERDIR=$WORK/covdata exec $WORK/modex.exe # Restore previous GOCOVERDIR setting env GOCOVERDIR=$SAVEGOCOVERDIR # Examine the result. go tool covdata percent -i=$WORK/covdata stdout 'coverage:.*[1-9][0-9.]+%' # The whole enchilada. go tool covdata textfmt -i=$WORK/covdata -o=$WORK/covdata/out.txt grep 'mode: set' $WORK/covdata/out.txt grep 'mod.example/main/main.go:' $WORK/covdata/out.txt grep 'mod.example/sub/sub.go:' $WORK/covdata/out.txt grep 'rsc.io' $WORK/covdata/out.txt grep 'bufio/bufio.go:' $WORK/covdata/out.txt # Use the covdata tool to select a specific set of module paths mkdir $WORK/covdata2 go tool covdata merge -pkg=rsc.io/quote -i=$WORK/covdata -o=$WORK/covdata2 # Examine the result. go tool covdata percent -i=$WORK/covdata2 stdout 'coverage:.*[1-9][0-9.]+%' # Check for expected packages + check that we don't see things from stdlib. go tool covdata textfmt -i=$WORK/covdata2 -o=$WORK/covdata2/out.txt grep 'mode: set' $WORK/covdata2/out.txt ! grep 'mod.example/main/main.go:' $WORK/covdata2/out.txt ! grep 'mod.example/sub/sub.go:' $WORK/covdata2/out.txt grep 'rsc.io' $WORK/covdata2/out.txt ! grep 'bufio/bufio.go:' $WORK/covdata2/out.txt #------------------------------------------- # end of test cmds, start of harness and related files. -- go.mod -- module mod.example go 1.20 require rsc.io/quote/v3 v3.0.0 -- main/main.go -- package main import ( "fmt" "mod.example/sub" "rsc.io/quote" ) func main() { fmt.Println(quote.Go(), sub.F()) } -- sub/sub.go -- package sub func F() int { return 42 }