blob: b6604afe6b3b7bf091a5108a3118b040d0837bd7 [file]
// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package workspace
import (
"flag"
"os"
"runtime"
"testing"
. "golang.org/x/tools/gopls/internal/test/integration"
)
var go121bin = flag.String("go121bin", "", "bin directory containing go 1.21 or later")
// TODO(golang/go#65917): delete this test once we no longer support building
// gopls with older Go versions.
func TestCanHandlePatchVersions(t *testing.T) {
// This test verifies the fixes for golang/go#66195 and golang/go#66636 --
// that gopls does not crash when encountering a go version with a patch
// number in the go.mod file.
//
// This is tricky to test, because the regression requires that gopls is
// built with an older go version, and then the environment is upgraded to
// have a more recent go. To set up this scenario, the test requires a path
// to a bin directory containing go1.21 or later.
if *go121bin == "" {
t.Skip("-go121bin directory is not set")
}
if runtime.GOOS != "linux" && runtime.GOOS != "darwin" {
t.Skip("requires linux or darwin") // for PATH separator
}
path := os.Getenv("PATH")
t.Setenv("PATH", *go121bin+":"+path)
const files = `
-- go.mod --
module example.com/bar
go 1.21.1
-- p.go --
package bar
type I interface { string }
`
WithOptions(
EnvVars{
"PATH": path,
},
).Run(t, files, func(t *testing.T, env *Env) {
env.OpenFile("p.go")
env.AfterChange(
NoDiagnostics(ForFile("p.go")),
)
})
}