From 309ab1ecc810fad29d09bbf91c22c6bfd1683c6f Mon Sep 17 00:00:00 2001 From: Jay Conrod Date: Fri, 10 May 2019 16:57:22 -0400 Subject: [PATCH] cmd/go: add generated code comment to _testmain.go template Fixes #31971 Change-Id: I127659be145e348fae20930615666d67dc7971ef Reviewed-on: https://go-review.googlesource.com/c/go/+/176468 Run-TryBot: Jay Conrod Reviewed-by: Brad Fitzpatrick --- src/cmd/go/internal/load/test.go | 2 ++ .../testdata/script/test_generated_main.txt | 35 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/cmd/go/testdata/script/test_generated_main.txt diff --git a/src/cmd/go/internal/load/test.go b/src/cmd/go/internal/load/test.go index 1dd439480f7..16f50e29d8d 100644 --- a/src/cmd/go/internal/load/test.go +++ b/src/cmd/go/internal/load/test.go @@ -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 index 00000000000..75ffa9cde2c --- /dev/null +++ b/src/cmd/go/testdata/script/test_generated_main.txt @@ -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") + } +}