]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: add generated code comment to _testmain.go template
authorJay Conrod <jayconrod@google.com>
Fri, 10 May 2019 20:57:22 +0000 (16:57 -0400)
committerJay Conrod <jayconrod@google.com>
Fri, 10 May 2019 21:07:01 +0000 (21:07 +0000)
Fixes #31971

Change-Id: I127659be145e348fae20930615666d67dc7971ef
Reviewed-on: https://go-review.googlesource.com/c/go/+/176468
Run-TryBot: Jay Conrod <jayconrod@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/go/internal/load/test.go
src/cmd/go/testdata/script/test_generated_main.txt [new file with mode: 0644]

index 1dd439480f7dcdf884f5f70332213ee1db58dde0..16f50e29d8ded8086da379c18467f95891ab8322 100644 (file)
@@ -641,6 +641,8 @@ var _ = func() bool {
 `)
 
 var testmainTmpl = lazytemplate.New("main", `
+// Code generated by 'go test'. DO NOT EDIT.
+
 package main
 
 import (
diff --git a/src/cmd/go/testdata/script/test_generated_main.txt b/src/cmd/go/testdata/script/test_generated_main.txt
new file mode 100644 (file)
index 0000000..75ffa9c
--- /dev/null
@@ -0,0 +1,35 @@
+# Tests that the generated test main file has a generated code comment.
+# This is needed by analyzers that access source files through 'go list'.
+# Verifies golang.org/issue/31971.
+# TODO(jayconrod): This test is brittle. We should write _testmain.go as
+# a build action instead of with an ad-hoc WriteFile call
+# in internal/test/test.go. Then we could just grep 'go get -n'.
+go test x_test.go
+
+-- x_test.go --
+package x
+
+import (
+       "os"
+       "path/filepath"
+       "io/ioutil"
+       "regexp"
+       "testing"
+)
+
+func Test(t *testing.T) {
+       exePath, err := os.Executable()
+       if err != nil {
+               t.Fatal(err)
+       }
+       testmainPath := filepath.Join(filepath.Dir(exePath), "_testmain.go")
+       source, err := ioutil.ReadFile(testmainPath)
+       if err != nil {
+               t.Fatal(err)
+       }
+       if matched, err := regexp.Match(`(?m)^// Code generated .* DO NOT EDIT\.$`, source); err != nil {
+               t.Fatal(err)
+       } else if !matched {
+               t.Error("_testmain.go does not have generated code comment")
+       }
+}