summaryrefslogtreecommitdiff
path: root/src/cmd/go/test.bash
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-09-26 17:09:11 -0400
committerRuss Cox <rsc@golang.org>2014-09-26 17:09:11 -0400
commitcd095410f3dbccb0e1f8e0477340b4bceb52a8af (patch)
treece0d8cafb15f615733ae2655850a1cd625670c35 /src/cmd/go/test.bash
parente6c761db0debeb8baa6f29927c68a061bbee8410 (diff)
downloadgo-cd095410f3dbccb0e1f8e0477340b4bceb52a8af.tar.gz
cmd/go: always build _test.go files and link into test
go test's handling of _test.go files when the entire package's set of files has no Test functions has varied over the past few releases. There are a few interesting cases (all contain no Test functions): (1) x_test.go has syntax errors (2) x_test.go has type errors (3) x_test.go has runtime errors (say, a func init that panics) In Go 1.1, tests with (1) or (2) failed; (3) passed. In Go 1.2, tests with (1) or (2) failed; (3) passed. In Go 1.3, tests with (1) failed; (2) or (3) passed. After this CL, tests with (1), (2), or (3) all fail. This is clearly a corner case, but it seems to me that the behavior of the test should not change if you add or remove a line like func TestAlwaysPasses(t *testing.T) {} That implies that the _test.go files must always be built and always be imported into the test binary. Doing so means that (1), (2), and (3) must all fail. Fixes issue 8337. LGTM=iant R=golang-codereviews, iant CC=adg, golang-codereviews, r https://codereview.appspot.com/150980043
Diffstat (limited to 'src/cmd/go/test.bash')
-rwxr-xr-xsrc/cmd/go/test.bash14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/cmd/go/test.bash b/src/cmd/go/test.bash
index 128487619..6a72bcde0 100755
--- a/src/cmd/go/test.bash
+++ b/src/cmd/go/test.bash
@@ -71,6 +71,20 @@ if ! grep -q "/tool/.*/$linker" $d/err.out; then
fi
rm -r $d
+TEST broken tests without Test functions all fail
+d=$(mktemp -d -t testgoXXX)
+./testgo test ./testdata/src/badtest/... >$d/err 2>&1 || true
+if grep -q '^ok' $d/err; then
+ echo test passed unexpectedly:
+ grep '^ok' $d/err
+ ok=false
+elif ! grep -q 'FAIL.*badtest/badexec' $d/err || ! grep -q 'FAIL.*badtest/badsyntax' $d/err || ! grep -q 'FAIL.*badtest/badvar' $d/err; then
+ echo test did not run everything
+ cat $d/err
+ ok=false
+fi
+rm -rf $d
+
TEST 'go build -a in dev branch'
./testgo install math || ok=false # should be up to date already but just in case
d=$(TMPDIR=/var/tmp mktemp -d -t testgoXXX)