internal/lsp/regtest: reproduce edge cases when creating new files

This adds tests for golang/go#40690, as well as a case for a bug in
changing package names.

Updates golang/go#40690

Change-Id: I516404e77728024f8bee3da31a88bad1f1917a9b
Reviewed-on: https://go-review.googlesource.com/c/tools/+/251017
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
diff --git a/internal/lsp/regtest/diagnostics_test.go b/internal/lsp/regtest/diagnostics_test.go
index 779d820..5540967 100644
--- a/internal/lsp/regtest/diagnostics_test.go
+++ b/internal/lsp/regtest/diagnostics_test.go
@@ -835,6 +835,64 @@
 	})
 }
 
+// Reproduce golang/go#40690.
+func TestCreateOnlyXTest(t *testing.T) {
+	t.Skip("golang/go#40690 is not resolved yet.")
+
+	const mod = `
+	-- go.mod --
+	module mod.com
+	-- foo/foo.go --
+	package foo
+	-- foo/bar_test.go --
+	`
+	run(t, mod, func(t *testing.T, env *Env) {
+		env.Await(CompletedWork(lsp.DiagnosticWorkTitle(lsp.FromInitialWorkspaceLoad), 1))
+		env.OpenFile("foo/bar_test.go")
+		env.EditBuffer("foo/bar_test.go", fake.NewEdit(0, 0, 0, 0, `package foo
+	`))
+		env.Await(
+			CompletedWork(lsp.DiagnosticWorkTitle(lsp.FromDidChange), 1),
+		)
+		env.RegexpReplace("foo/bar_test.go", "package foo", "package foo_test")
+		env.Await(
+			OnceMet(
+				CompletedWork(lsp.DiagnosticWorkTitle(lsp.FromDidChange), 2),
+				NoErrorLogs(),
+			),
+		)
+	})
+}
+
+func TestChangePackageName(t *testing.T) {
+	t.Skip("This issue hasn't been fixed yet. See golang.org/issue/41061.")
+
+	const mod = `
+-- go.mod --
+module mod.com
+-- foo/foo.go --
+package foo
+-- foo/bar_test.go --
+package foo_
+`
+	run(t, mod, func(t *testing.T, env *Env) {
+		env.Await(CompletedWork(lsp.DiagnosticWorkTitle(lsp.FromInitialWorkspaceLoad), 1))
+		env.OpenFile("foo/bar_test.go")
+		env.RegexpReplace("foo/bar_test.go", "package foo_", "package foo_test")
+		env.SaveBuffer("foo/bar_test.go")
+		env.Await(
+			OnceMet(
+				CompletedWork(lsp.DiagnosticWorkTitle(lsp.FromDidSave), 1),
+				NoDiagnostics("foo/bar_test.go"),
+			),
+			OnceMet(
+				CompletedWork(lsp.DiagnosticWorkTitle(lsp.FromDidSave), 1),
+				NoDiagnostics("foo/foo.go"),
+			),
+		)
+	})
+}
+
 // Reproduces golang/go#40825.
 func TestEmptyGOPATHXTest_40825(t *testing.T) {
 	const files = `