mirror of
https://github.com/golang/go
synced 2024-10-01 03:38:32 -06:00
afe1c6fc1b
Originally I decided to use t.Parallel() in hopes of uncovering new bugs. That may have worked... but manifested as rare flakes that are difficult to diagnose (golang.org/issues/37318). Since this level of parallelism is extremely unlikely in normal gopls workloads, I'm going to remove the t.Parallel() calls in hopes of eliminating this flakiness. I'd rather be able to continue running these tests. Also, don't run in the 'Shared' execution mode by default: normal gopls execution is either as a sidecar (the Singleton execution mode), or as a daemon (the Forwarded execution mode). Un-skip the TestGoToStdlibDefinition test, as hopefully it will no longer flake. Updates golang/go#37318. Change-Id: Id73ee3c8702ab4ab1d039baa038fbce879e38df8 Reviewed-on: https://go-review.googlesource.com/c/tools/+/221379 Run-TryBot: Robert Findley <rfindley@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com>
99 lines
2.4 KiB
Go
99 lines
2.4 KiB
Go
// 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.
|
|
|
|
package regtest
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"golang.org/x/tools/internal/lsp/fake"
|
|
)
|
|
|
|
const exampleProgram = `
|
|
-- go.mod --
|
|
module mod
|
|
|
|
go 1.12
|
|
-- main.go --
|
|
package main
|
|
|
|
import "fmt"
|
|
|
|
func main() {
|
|
fmt.Println("Hello World.")
|
|
}`
|
|
|
|
func TestDiagnosticErrorInEditedFile(t *testing.T) {
|
|
runner.Run(t, exampleProgram, func(ctx context.Context, t *testing.T, env *Env) {
|
|
// Deleting the 'n' at the end of Println should generate a single error
|
|
// diagnostic.
|
|
edit := fake.NewEdit(5, 11, 5, 12, "")
|
|
env.OpenFile("main.go")
|
|
env.EditBuffer("main.go", edit)
|
|
env.Await(DiagnosticAt("main.go", 5, 5))
|
|
})
|
|
}
|
|
|
|
const brokenFile = `package main
|
|
|
|
const Foo = "abc
|
|
`
|
|
|
|
func TestDiagnosticErrorInNewFile(t *testing.T) {
|
|
runner.Run(t, brokenFile, func(ctx context.Context, t *testing.T, env *Env) {
|
|
env.CreateBuffer("broken.go", brokenFile)
|
|
env.Await(DiagnosticAt("broken.go", 2, 12))
|
|
})
|
|
}
|
|
|
|
// badPackage contains a duplicate definition of the 'a' const.
|
|
const badPackage = `
|
|
-- go.mod --
|
|
module mod
|
|
|
|
go 1.12
|
|
-- a.go --
|
|
package consts
|
|
|
|
const a = 1
|
|
-- b.go --
|
|
package consts
|
|
|
|
const a = 2
|
|
`
|
|
|
|
func TestDiagnosticClearingOnEdit(t *testing.T) {
|
|
runner.Run(t, badPackage, func(ctx context.Context, t *testing.T, env *Env) {
|
|
env.OpenFile("b.go")
|
|
env.Await(DiagnosticAt("a.go", 2, 6), DiagnosticAt("b.go", 2, 6))
|
|
|
|
// Fix the error by editing the const name in b.go to `b`.
|
|
edit := fake.NewEdit(2, 6, 2, 7, "b")
|
|
env.EditBuffer("b.go", edit)
|
|
env.Await(EmptyDiagnostics("a.go"), EmptyDiagnostics("b.go"))
|
|
})
|
|
}
|
|
|
|
func TestDiagnosticClearingOnDelete(t *testing.T) {
|
|
runner.Run(t, badPackage, func(ctx context.Context, t *testing.T, env *Env) {
|
|
env.OpenFile("a.go")
|
|
env.Await(DiagnosticAt("a.go", 2, 6), DiagnosticAt("b.go", 2, 6))
|
|
env.RemoveFileFromWorkspace("b.go")
|
|
|
|
env.Await(EmptyDiagnostics("a.go"), EmptyDiagnostics("b.go"))
|
|
})
|
|
}
|
|
|
|
func TestDiagnosticClearingOnClose(t *testing.T) {
|
|
runner.Run(t, badPackage, func(ctx context.Context, t *testing.T, env *Env) {
|
|
env.CreateBuffer("c.go", `package consts
|
|
|
|
const a = 3`)
|
|
env.Await(DiagnosticAt("a.go", 2, 6), DiagnosticAt("b.go", 2, 6), DiagnosticAt("c.go", 2, 6))
|
|
env.CloseBuffer("c.go")
|
|
env.Await(DiagnosticAt("a.go", 2, 6), DiagnosticAt("b.go", 2, 6), EmptyDiagnostics("c.go"))
|
|
})
|
|
}
|