From: Kevin Herro Date: Fri, 26 Mar 2021 15:58:11 +0000 (-0700) Subject: cmd/go/internal/load/test: parse overlay files for test functions X-Git-Tag: go1.17beta1~903 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=46fa8afca61cf60c64f006685cd6cbb94e080118;p=gostls13.git cmd/go/internal/load/test: parse overlay files for test functions The existing implementation implicitly reads from the filesystem instead of using the overlay file data (due to src == nil), so pass in the overlaid source if we have an overlay for this file. Fixes #44946 Change-Id: I61ce09d10c5edac1b47332583efdcd3c1241f58a Reviewed-on: https://go-review.googlesource.com/c/go/+/305071 Reviewed-by: Jay Conrod Reviewed-by: Michael Matloob Trust: Jay Conrod Run-TryBot: Jay Conrod TryBot-Result: Go Bot --- diff --git a/src/cmd/go/internal/load/test.go b/src/cmd/go/internal/load/test.go index 7bc16abcb6..fc89bd0250 100644 --- a/src/cmd/go/internal/load/test.go +++ b/src/cmd/go/internal/load/test.go @@ -21,6 +21,7 @@ import ( "unicode" "unicode/utf8" + "cmd/go/internal/fsys" "cmd/go/internal/str" "cmd/go/internal/trace" ) @@ -578,7 +579,13 @@ type testFunc struct { var testFileSet = token.NewFileSet() func (t *testFuncs) load(filename, pkg string, doImport, seen *bool) error { - f, err := parser.ParseFile(testFileSet, filename, nil, parser.ParseComments) + // Pass in the overlaid source if we have an overlay for this file. + src, err := fsys.Open(filename) + if err != nil { + return err + } + defer src.Close() + f, err := parser.ParseFile(testFileSet, filename, src, parser.ParseComments) if err != nil { return err } diff --git a/src/cmd/go/testdata/script/test_overlay.txt b/src/cmd/go/testdata/script/test_overlay.txt new file mode 100644 index 0000000000..b6bdc116e6 --- /dev/null +++ b/src/cmd/go/testdata/script/test_overlay.txt @@ -0,0 +1,24 @@ +[short] skip + +cd $WORK/gopath/src/foo +go test -list=. -overlay=overlay.json . +stdout 'TestBar' + +-- go.mod -- +module test.pkg +-- foo/foo_test.go -- +package foo + +import "testing" + +func TestFoo(t *testing.T) { } +-- tmp/bar_test.go -- +package foo + +import "testing" + +func TestBar(t *testing.T) { + t.Fatal("dummy failure") +} +-- foo/overlay.json -- +{"Replace": {"foo_test.go": "../tmp/bar_test.go"}}