Skip to content

Commit 474ab5e

Browse files
committed
Add testsuite for high coverage, with measurements
Add cover.sh, a testsuite that builds goeval with coverage instrumentation and executes goeval with various arguments to reach high coverage. So far we don't check goeval output. The code of subcommands (packages ./sub/play, ./sub/share) isn't yet measured: that will require to pass the -cover flags to 'go run' in sub.go.
1 parent aca0f4b commit 474ab5e

2 files changed

Lines changed: 120 additions & 0 deletions

File tree

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,7 @@
11
/goeval
2+
3+
# Output of cover.sh
4+
/.coverage
5+
/.coverage.out
6+
/goeval.cover
7+
/goeval-offline.cover

cover.sh

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#!/usr/bin/env bash
2+
3+
set -euo pipefail
4+
5+
output="${1:-.coverage.out}"
6+
GOCOVERDIR=.coverage
7+
go=go
8+
goeval=./goeval.cover
9+
goeval_offline=./goeval-offline.cover
10+
11+
if ! command -v goimports >/dev/null; then
12+
echo "goimports: command not found." >&2
13+
exit 1
14+
fi
15+
16+
if [[ ! -d "$GOCOVERDIR" ]]; then
17+
mkdir -p "$GOCOVERDIR"
18+
else
19+
rm -f "$GOCOVERDIR"/cov*
20+
fi
21+
22+
unset GO111MODULE
23+
24+
echo Building...
25+
26+
$go build -covermode=set -coverpkg=./... -buildvcs=true -o=$goeval .
27+
$go build -covermode=set -coverpkg=./... -buildvcs=true -tags=goeval.offline -o=$goeval_offline .
28+
29+
export GOCOVERDIR
30+
31+
echo Running tests...
32+
33+
# --------------------------------------------------------------
34+
35+
$goeval || :
36+
$goeval -h || :
37+
38+
$goeval 'fmt.Println("Hello, world")'
39+
40+
# stdin
41+
$goeval - <<EOF
42+
fmt.Println("Hello, world")
43+
EOF
44+
45+
$goeval -E 'fmt.Println("Hello, world")'
46+
47+
$goeval -x 'fmt.Println("Hello, world")'
48+
49+
50+
# -i with comma
51+
# -i with . as alias
52+
# -i with _ as alias
53+
$goeval -i=.=fmt,time,_=os 'Println(time.Now())'
54+
55+
# -o
56+
{
57+
tmp_exe=$(mktemp -t goeval-cover)
58+
$goeval -i=.=fmt,time -o "$tmp_exe" 'Println(time.Now())'
59+
"$tmp_exe"
60+
rm "$tmp_exe"
61+
}
62+
63+
# With goimports builtin
64+
$goeval -goimports=goimports -E 'fmt.Println("Hello, world")'
65+
66+
# Without goimports builtin
67+
$goeval -goimports= -E 'fmt.Println("Hello, world")'
68+
69+
# With goimports as external command
70+
$goeval -goimports="$(command -v goimports)" -E 'fmt.Println("Hello, world")'
71+
72+
73+
# GOPATH mode with external package
74+
#GO111MODULE=off $go get github.com/klauspost/cpuid
75+
if [[ ! -d "$(go env GOPATH)"/src/github.com/klauspost/cpuid/v2 ]]; then
76+
mkdir -p "$(go env GOPATH)"/src/github.com/klauspost/cpuid
77+
cd "$(go env GOPATH)"/src/github.com/klauspost/cpuid
78+
git clone "$(go env GOPATH)"/src/github.com/klauspost/cpuid.git v2
79+
fi
80+
GO111MODULE=off $goeval -i github.com/klauspost/cpuid/v2 'fmt.Println(cpuid.CPU.X64Level())'
81+
82+
# Go module mode with external package
83+
$goeval -i cpuid=github.com/klauspost/cpuid/v2@v2.3.0 'fmt.Println(cpuid.CPU.X64Level())'
84+
85+
# -E with Go module mode with external package
86+
$goeval -E -i cpuid=github.com/klauspost/cpuid/v2@v2.3.0 'fmt.Println(cpuid.CPU.X64Level())'
87+
88+
$goeval -Eplay 'fmt.Println("Hello, world")'
89+
90+
# -Eplay with Go module mode with external package
91+
$goeval -Eplay -i cpuid=github.com/klauspost/cpuid/v2@v2.3.0 'fmt.Println(cpuid.CPU.X64Level())'
92+
93+
94+
$goeval -play 'fmt.Println("Hello, world")'
95+
96+
# -play with os.Args
97+
$goeval -play 'fmt.Println(os.Args[1])' 'Hello, world'
98+
99+
$goeval_offline -h || :
100+
101+
$goeval_offline 'fmt.Println("Hello, world")'
102+
103+
$goeval_offline -play 'fmt.Println("Hello, world")' || :
104+
105+
# We don't test -share here to not pollute play.golang.org
106+
# TODO(dolmen) Mock play.golang.org/share
107+
108+
# -------------------------------------------------------------
109+
110+
go tool covdata textfmt -i="$GOCOVERDIR" -o="$output"
111+
112+
if [[ -t 0 ]] && command -v open >/dev/null; then
113+
$go tool cover -html=$output
114+
fi

0 commit comments

Comments
 (0)