go/packages: add a test case for golang/go#32499
Updates golang/go#32499
Change-Id: Ib9daf7c0dc8c6052f84230e54e181ab60166349b
Reviewed-on: https://go-review.googlesource.com/c/tools/+/190037
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
Reviewed-by: Michael Matloob <matloob@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/go/packages/packages_test.go b/go/packages/packages_test.go
index 9f81b4a..c0cd50e 100644
--- a/go/packages/packages_test.go
+++ b/go/packages/packages_test.go
@@ -1050,6 +1050,77 @@
}
}
+// TestOverlayModFileChanges tests the behavior resulting from having files from
+// multiple modules in overlays.
+func TestOverlayModFileChanges(t *testing.T) {
+ // TODO: Enable this test when golang/go#32499 is resolved.
+ t.Skip()
+
+ // Create two unrelated modules in a temporary directory.
+ tmp, err := ioutil.TempDir("", "tmp")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.Remove(tmp)
+
+ // mod1 has a dependency on golang.org/x/xerrors.
+ mod1, err := ioutil.TempDir(tmp, "mod1")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.Remove(mod1)
+ if err := ioutil.WriteFile(filepath.Join(mod1, "go.mod"), []byte(`module mod1
+
+ require (
+ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7
+ )
+ `), 0775); err != nil {
+ t.Fatal(err)
+ }
+
+ // mod2 does not have any dependencies.
+ mod2, err := ioutil.TempDir(tmp, "mod2")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.Remove(mod2)
+
+ want := `module mod2
+`
+ if err := ioutil.WriteFile(filepath.Join(mod2, "go.mod"), []byte(want), 0775); err != nil {
+ t.Fatal(err)
+ }
+
+ // Run packages.Load on mod2, while passing the contents over mod1/main.go in the overlay.
+ config := &packages.Config{
+ Dir: mod2,
+ Mode: packages.LoadImports,
+ Overlay: map[string][]byte{
+ filepath.Join(mod1, "main.go"): []byte(`package main
+import "golang.org/x/xerrors"
+func main() {
+ _ = errors.New("")
+}
+`),
+ filepath.Join(mod2, "main.go"): []byte(`package main
+func main() {}
+`),
+ },
+ }
+ if _, err := packages.Load(config, fmt.Sprintf("file=%s", filepath.Join(mod2, "main.go"))); err != nil {
+ t.Fatal(err)
+ }
+
+ // Check that mod2/go.mod has not been modified.
+ got, err := ioutil.ReadFile(filepath.Join(mod2, "go.mod"))
+ if err != nil {
+ t.Fatal(err)
+ }
+ if string(got) != want {
+ t.Errorf("expected %s, got %s", want, string(got))
+ }
+}
+
func TestLoadAllSyntaxImportErrors(t *testing.T) {
packagestest.TestAll(t, testLoadAllSyntaxImportErrors)
}