blob: 0419a1163442680ae081d84b6be6557737a5c590 [file] [log] [blame]
// 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 workspace
import (
"runtime"
"testing"
. "golang.org/x/tools/gopls/internal/lsp/regtest"
"golang.org/x/tools/gopls/internal/lsp/tests/compare"
)
// Test for golang/go#57081.
func TestFormattingMisspelledURI(t *testing.T) {
if runtime.GOOS != "windows" && runtime.GOOS != "darwin" {
t.Skip("golang/go#57081 only reproduces on case-insensitive filesystems.")
}
const files = `
-- go.mod --
module mod.test
go 1.19
-- foo.go --
package foo
const C = 2 // extra space is intentional
`
Run(t, files, func(t *testing.T, env *Env) {
env.OpenFile("Foo.go")
env.FormatBuffer("Foo.go")
want := env.BufferText("Foo.go")
if want == "" {
t.Fatalf("Foo.go is empty")
}
// In golang/go#57081, we observed that if overlay cases don't match, gopls
// will find (and format) the on-disk contents rather than the overlay,
// resulting in invalid edits.
//
// Verify that this doesn't happen, by confirming that formatting is
// idempotent.
env.FormatBuffer("Foo.go")
got := env.BufferText("Foo.go")
if diff := compare.Text(want, got); diff != "" {
t.Errorf("invalid content after second formatting:\n%s", diff)
}
})
}
// Test that we can find packages for open files with different spelling on
// case-insensitive file systems.
func TestPackageForMisspelledURI(t *testing.T) {
t.Skip("golang/go#57081: this test fails because the Go command does not load Foo.go correctly")
if runtime.GOOS != "windows" && runtime.GOOS != "darwin" {
t.Skip("golang/go#57081 only reproduces on case-insensitive filesystems.")
}
const files = `
-- go.mod --
module mod.test
go 1.19
-- foo.go --
package foo
const C = D
-- bar.go --
package foo
const D = 2
`
Run(t, files, func(t *testing.T, env *Env) {
env.OpenFile("Foo.go")
env.AfterChange(NoDiagnostics())
})
}