blob: 3e7c0f5f2fd6ba48636c5248c21a1fa195cdb094 [file] [log] [blame]
// 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 diagnostics
import (
"testing"
. "golang.org/x/tools/gopls/internal/test/integration"
)
// Test that the import error does not mention GOPATH when building with
// go/packages driver.
func TestBrokenWorkspace_GOPACKAGESDRIVER(t *testing.T) {
// A go.mod file is actually needed here, because the fake go/packages driver
// uses go list behind the scenes, and we load go/packages driver workspaces
// with ./...
const files = `
-- go.mod --
module m
go 1.12
-- a.go --
package foo
import "mod.com/hello"
`
WithOptions(
FakeGoPackagesDriver(t),
).Run(t, files, func(t *testing.T, env *Env) {
env.OpenFile("a.go")
env.AfterChange(
Diagnostics(
env.AtRegexp("a.go", `"mod.com`),
WithMessage("go/packages driver"),
),
)
// Deleting the import removes the error.
env.RegexpReplace("a.go", `import "mod.com/hello"`, "")
env.AfterChange(
NoDiagnostics(ForFile("a.go")),
)
})
}
func TestValidImportCheck_GoPackagesDriver(t *testing.T) {
const files = `
-- go.work --
use .
-- go.mod --
module example.com
go 1.0
-- a/a.go --
package a
import _ "example.com/b/internal/c"
-- b/internal/c/c.go --
package c
`
// Note that 'go list' produces an error ("use of internal package %q not allowed")
// and gopls produces another ("invalid use of internal package %q") with source=compiler.
// Here we assert that the second one is not reported with a go/packages driver.
// (We don't assert that the first is missing, because the test driver wraps go list!)
// go list
Run(t, files, func(t *testing.T, env *Env) {
env.OpenFile("a/a.go")
env.AfterChange(Diagnostics(WithMessage(`invalid use of internal package "example.com/b/internal/c"`)))
})
// test driver
WithOptions(
FakeGoPackagesDriver(t),
).Run(t, files, func(t *testing.T, env *Env) {
env.OpenFile("a/a.go")
env.AfterChange(NoDiagnostics(WithMessage(`invalid use of internal package "example.com/b/internal/c"`)))
})
}