]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: fix go test using package main_test
authorRuss Cox <rsc@golang.org>
Tue, 10 Sep 2013 18:43:35 +0000 (14:43 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 10 Sep 2013 18:43:35 +0000 (14:43 -0400)
A package main binary (that is, a command) being installed
does not mean we can skip the build of the package archive
during a test.

Fixes #3417.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/13462046

src/cmd/go/test.bash
src/cmd/go/test.go
src/cmd/go/testdata/src/main_test/m.go [new file with mode: 0644]
src/cmd/go/testdata/src/main_test/m_test.go [new file with mode: 0644]

index 61e9e6ada0944cfc9cab8d51a5c96670235479ae..b55989c2075c8d5223a8d3e6440e412fd9260bc8 100755 (executable)
@@ -138,6 +138,27 @@ elif ! test -x testdata/bin/go-cmd-test; then
        ok=false
 fi
 
+TEST package main_test imports archive not binary
+export GOBIN=$(pwd)/testdata/bin
+mkdir -p $GOBIN
+export GOPATH=$(pwd)/testdata
+touch ./testdata/src/main_test/m.go
+if ! ./testgo test main_test; then
+       echo "go test main_test failed without install"
+       ok=false
+elif ! ./testgo install main_test; then
+       echo "go test main_test failed"
+       ok=false
+elif [ "$(./testgo list -f '{{.Stale}}' main_test)" != false ]; then
+       echo "after go install, main listed as stale"
+       ok=false
+elif ! ./testgo test main_test; then
+       echo "go test main_test failed after install"
+       ok=false
+fi
+rm -rf $GOBIN
+unset GOBIN
+
 # And with $GOBIN set, binaries get installed to $GOBIN.
 TEST install into GOBIN
 if ! GOBIN=$(pwd)/testdata/bin1 GOPATH=$(pwd)/testdata ./testgo install go-cmd-test; then
index 3b79e24285b5e1357dbe6f9cc2ea24a7d7bbab0c..ebc9d28548585074f7c376e12c119fa4ae368dde 100644 (file)
@@ -590,7 +590,7 @@ func (b *builder) test(p *Package) (buildAction, runAction, printAction *action,
        localCover := testCover && testCoverPaths == nil
 
        // Test package.
-       if len(p.TestGoFiles) > 0 || localCover {
+       if len(p.TestGoFiles) > 0 || localCover || p.Name == "main" {
                ptest = new(Package)
                *ptest = *p
                ptest.GoFiles = nil
diff --git a/src/cmd/go/testdata/src/main_test/m.go b/src/cmd/go/testdata/src/main_test/m.go
new file mode 100644 (file)
index 0000000..c682f03
--- /dev/null
@@ -0,0 +1,4 @@
+package main
+
+func F()    {}
+func main() {}
diff --git a/src/cmd/go/testdata/src/main_test/m_test.go b/src/cmd/go/testdata/src/main_test/m_test.go
new file mode 100644 (file)
index 0000000..f865b77
--- /dev/null
@@ -0,0 +1,10 @@
+package main_test
+
+import (
+       . "main_test"
+       "testing"
+)
+
+func Test1(t *testing.T) {
+       F()
+}