| // Copyright 2020 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. |
| |
| // +build 1.14 |
| |
| package regtest |
| |
| import ( |
| "testing" |
| |
| "golang.org/x/tools/internal/lsp/fake" |
| "golang.org/x/tools/internal/lsp/protocol" |
| ) |
| |
| const ardanLabsProxy = ` |
| -- github.com/ardanlabs/conf@v1.2.3/go.mod -- |
| module github.com/ardanlabs/conf |
| |
| go 1.12 |
| -- github.com/ardanlabs/conf@v1.2.3/conf.go -- |
| package conf |
| |
| var ErrHelpWanted error |
| ` |
| |
| // -modfile flag that is used to provide modfile diagnostics is only available |
| // with 1.14. |
| func Test_Issue38211(t *testing.T) { |
| const ardanLabs = ` |
| -- go.mod -- |
| module mod.com |
| |
| go 1.14 |
| -- main.go -- |
| package main |
| |
| import "github.com/ardanlabs/conf" |
| |
| func main() { |
| _ = conf.ErrHelpWanted |
| } |
| ` |
| runner.Run(t, ardanLabs, func(t *testing.T, env *Env) { |
| // Expect a diagnostic with a suggested fix to add |
| // "github.com/ardanlabs/conf" to the go.mod file. |
| env.OpenFile("go.mod") |
| env.OpenFile("main.go") |
| metBy := env.Await( |
| env.DiagnosticAtRegexp("main.go", `"github.com/ardanlabs/conf"`), |
| ) |
| d, ok := metBy[0].(*protocol.PublishDiagnosticsParams) |
| if !ok { |
| t.Fatalf("unexpected type for metBy (%T)", metBy) |
| } |
| env.ApplyQuickFixes("main.go", d.Diagnostics) |
| env.SaveBuffer("go.mod") |
| env.Await( |
| EmptyDiagnostics("main.go"), |
| ) |
| // Comment out the line that depends on conf and expect a |
| // diagnostic and a fix to remove the import. |
| env.RegexpReplace("main.go", "_ = conf.ErrHelpWanted", "//_ = conf.ErrHelpWanted") |
| env.Await( |
| env.DiagnosticAtRegexp("main.go", `"github.com/ardanlabs/conf"`), |
| ) |
| env.SaveBuffer("main.go") |
| // Expect a diagnostic and fix to remove the dependency in the go.mod. |
| metBy = env.Await( |
| EmptyDiagnostics("main.go"), |
| env.DiagnosticAtRegexp("go.mod", "require github.com/ardanlabs/conf"), |
| ) |
| d, ok = metBy[1].(*protocol.PublishDiagnosticsParams) |
| if !ok { |
| t.Fatalf("unexpected type for metBy (%T)", metBy) |
| } |
| env.ApplyQuickFixes("go.mod", d.Diagnostics) |
| env.SaveBuffer("go.mod") |
| env.Await( |
| EmptyDiagnostics("go.mod"), |
| ) |
| // Uncomment the lines and expect a new diagnostic for the import. |
| env.RegexpReplace("main.go", "//_ = conf.ErrHelpWanted", "_ = conf.ErrHelpWanted") |
| env.SaveBuffer("main.go") |
| env.Await( |
| env.DiagnosticAtRegexp("main.go", `"github.com/ardanlabs/conf"`), |
| ) |
| }, WithProxy(ardanLabsProxy)) |
| } |
| |
| // Test for golang/go#38207. |
| func TestNewModule_Issue38207(t *testing.T) { |
| const emptyFile = ` |
| -- go.mod -- |
| module mod.com |
| |
| go 1.12 |
| -- main.go -- |
| ` |
| runner.Run(t, emptyFile, func(t *testing.T, env *Env) { |
| env.OpenFile("main.go") |
| env.OpenFile("go.mod") |
| env.EditBuffer("main.go", fake.NewEdit(0, 0, 0, 0, `package main |
| |
| import "github.com/ardanlabs/conf" |
| |
| func main() { |
| _ = conf.ErrHelpWanted |
| } |
| `)) |
| env.SaveBuffer("main.go") |
| metBy := env.Await( |
| env.DiagnosticAtRegexp("main.go", `"github.com/ardanlabs/conf"`), |
| ) |
| d, ok := metBy[0].(*protocol.PublishDiagnosticsParams) |
| if !ok { |
| t.Fatalf("unexpected type for diagnostics (%T)", d) |
| } |
| env.ApplyQuickFixes("main.go", d.Diagnostics) |
| env.Await( |
| EmptyDiagnostics("main.go"), |
| ) |
| }, WithProxy(ardanLabsProxy)) |
| } |