testing: script to measure coverage of a binary

Updates #27
This commit is contained in:
Michael McLoughlin
2019-01-02 20:04:45 -08:00
parent d09e9ce5f9
commit cf76c56dfc
2 changed files with 38 additions and 1 deletions

View File

@@ -41,7 +41,15 @@ func Generate() {
flag.Parse()
}
cfg := flags.Config()
os.Exit(Main(cfg, ctx))
status := Main(cfg, ctx)
// To record coverage of integration tests we wrap main() functions in a test
// functions. In this case we need the main function to terminate, therefore we
// only exit for failure status codes.
if status != 0 {
os.Exit(status)
}
}
func GP8v() reg.GPVirtual { return ctx.GP8v() }

29
script/covermain Executable file
View File

@@ -0,0 +1,29 @@
#!/bin/bash -e
main=$1
coverprofile=$2
# Temporary working directory.
workdir=$(mktemp -d)
# Wrap the main function in a go test.
cp ${main} ${workdir}
cat > ${workdir}/main_test.go <<EOF
package main
import "testing"
func TestRunMain(t *testing.T) {
main()
}
EOF
# Execute the test with coverage.
testbin="${workdir}/testbin"
output="${workdir}/cover.out"
go test -o ${testbin} -covermode=count -coverpkg="github.com/mmcloughlin/avo/..." ${workdir}/*.go
${testbin} -test.coverprofile=${output}
cp ${output} ${coverprofile}
# Cleanup.
rm -rf ${workdir}