| // Copyright 2023 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/cache" |
| . "golang.org/x/tools/gopls/internal/test/integration" |
| "golang.org/x/tools/internal/testenv" |
| ) |
| |
| func TestGoListErrors(t *testing.T) { |
| testenv.NeedsTool(t, "cgo") |
| |
| const src = ` |
| -- go.mod -- |
| module a.com |
| |
| go 1.18 |
| -- a/a.go -- |
| package a |
| |
| import |
| -- c/c.go -- |
| package c |
| |
| /* |
| int fortythree() { return 42; } |
| */ |
| import "C" |
| |
| func Foo() { |
| print(C.fortytwo()) |
| } |
| -- p/p.go -- |
| package p |
| |
| import "a.com/q" |
| |
| const P = q.Q + 1 |
| -- q/q.go -- |
| package q |
| |
| import "a.com/p" |
| |
| const Q = p.P + 1 |
| ` |
| |
| Run(t, src, func(t *testing.T, env *Env) { |
| env.OnceMet( |
| InitialWorkspaceLoad, |
| Diagnostics( |
| env.AtRegexp("a/a.go", "import\n()"), |
| FromSource(string(cache.ParseError)), |
| ), |
| Diagnostics( |
| AtPosition("c/c.go", 0, 0), |
| FromSource(string(cache.ListError)), |
| WithMessage("may indicate failure to perform cgo processing"), |
| ), |
| Diagnostics( |
| env.AtRegexp("p/p.go", `"a.com/q"`), |
| FromSource(string(cache.ListError)), |
| WithMessage("import cycle not allowed"), |
| ), |
| ) |
| }) |
| } |