# This test checks basic "go build -cover" functionality. [short] skip # Hard-wire new coverage for this test. env GOEXPERIMENT=coverageredesign # Build for coverage. go build -gcflags=-m -o example.exe -cover example/main & [race] go build -o examplewithrace.exe -race -cover example/main & wait # First execute without GOCOVERDIR set... env GOCOVERDIR= exec ./example.exe normal stderr '^warning: GOCOVERDIR not set, no coverage data emitted' # ... then with GOCOVERDIR set. env GOCOVERDIR=data/normal exec ./example.exe normal ! stderr '^warning: GOCOVERDIR not set, no coverage data emitted' go tool covdata percent -i=data/normal stdout 'coverage:.*[1-9][0-9.]+%' # Program makes a direct call to os.Exit(0). env GOCOVERDIR=data/goodexit exec ./example.exe goodexit ! stderr '^warning: GOCOVERDIR not set, no coverage data emitted' go tool covdata percent -i=data/goodexit stdout 'coverage:.*[1-9][0-9.]+%' # Program makes a direct call to os.Exit(1). env GOCOVERDIR=data/badexit ! exec ./example.exe badexit ! stderr '^warning: GOCOVERDIR not set, no coverage data emitted' go tool covdata percent -i=data/badexit stdout 'coverage:.*[1-9][0-9.]+%' # Program invokes panic. env GOCOVERDIR=data/panic ! exec ./example.exe panic ! stderr '^warning: GOCOVERDIR not set, no coverage data emitted' go tool covdata percent -i=data/panic stdout 'coverage:.*[0-9.]+%' # Skip remainder if no race detector support. [!race] skip env GOCOVERDIR=data2/normal exec ./examplewithrace.exe normal ! stderr '^warning: GOCOVERDIR not set, no coverage data emitted' go tool covdata percent -i=data2/normal stdout 'coverage:.*[1-9][0-9.]+%' # Program makes a direct call to os.Exit(0). env GOCOVERDIR=data2/goodexit exec ./examplewithrace.exe goodexit ! stderr '^warning: GOCOVERDIR not set, no coverage data emitted' go tool covdata percent -i=data2/goodexit stdout 'coverage:.*[1-9][0-9.]+%' # Program makes a direct call to os.Exit(1). env GOCOVERDIR=data2/badexit ! exec ./examplewithrace.exe badexit ! stderr '^warning: GOCOVERDIR not set, no coverage data emitted' go tool covdata percent -i=data2/badexit stdout 'coverage:.*[1-9][0-9.]+%' # Program invokes panic. env GOCOVERDIR=data2/panic ! exec ./examplewithrace.exe panic ! stderr '^warning: GOCOVERDIR not set, no coverage data emitted' go tool covdata percent -i=data2/panic stdout 'coverage:.*[0-9.]+%' # end of test cmds, start of harness and related files. -- go.mod -- module example go 1.18 -- main/example.go -- package main import "example/sub" func main() { sub.S() } -- sub/sub.go -- package sub import "os" func S() { switch os.Args[1] { case "normal": println("hi") case "goodexit": os.Exit(0) case "badexit": os.Exit(1) case "panic": panic("something bad happened") } } -- data/README.txt -- Just a location where we can write coverage profiles. -- data/normal/f.txt -- X -- data/goodexit/f.txt -- X -- data/badexit/f.txt -- X -- data/panic/f.txt -- X -- data2/README.txt -- Just a location where we can write coverage profiles. -- data2/normal/f.txt -- X -- data2/goodexit/f.txt -- X -- data2/badexit/f.txt -- X -- data2/panic/f.txt -- X