]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/load/test: parse overlay files for test functions
authorKevin Herro <kevin109104@gmail.com>
Fri, 26 Mar 2021 15:58:11 +0000 (08:58 -0700)
committerJay Conrod <jayconrod@google.com>
Wed, 31 Mar 2021 16:39:16 +0000 (16:39 +0000)
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 <jayconrod@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
Trust: Jay Conrod <jayconrod@google.com>
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/go/internal/load/test.go
src/cmd/go/testdata/script/test_overlay.txt [new file with mode: 0644]

index 7bc16abcb60f47a8be3dc18f5f32d00f70ff1b9b..fc89bd0250b4b438d472ac186d8c8160e9b4c435 100644 (file)
@@ -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 (file)
index 0000000..b6bdc11
--- /dev/null
@@ -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"}}