blob: b61e631abd9339770dd4365f58887348d48e58e7 [file] [log] [blame]
# 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