--- /dev/null
+// 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 (
+ "log"
+ "testing"
+)
+
+// This test passes (TestHoverOnError in definition_test.go) without
+// the //line directive
+func TestHoverFailure(t *testing.T) {
+ const mod = `
+-- go.mod --
+module mod.com
+-- a.y --
+DWIM(main)
+
+-- main.go --
+//line a.y:1
+package main
+
+func main() {
+ var err error
+ err.Error()
+}`
+ withOptions(SkipLogs()).run(t, mod, func(t *testing.T, env *Env) {
+ env.OpenFile("main.go")
+ content, _ := env.Hover("main.go", env.RegexpSearch("main.go", "Error"))
+ // without the //line comment content would be non-nil
+ if content != nil {
+ t.Fatalf("expected nil hover content for Error")
+ }
+ })
+}
+
+// badPackageDup contains a duplicate definition of the 'a' const.
+// this is from diagnostics_test.go,
+const badPackageDup = `
+-- go.mod --
+module mod.com
+-- a.go --
+package consts
+
+const a = 1
+-- b.go --
+package consts
+//line gen.go:5
+const a = 2
+`
+
+func TestFailingDiagnosticClearingOnEdit(t *testing.T) {
+ runner.Run(t, badPackageDup, func(t *testing.T, env *Env) {
+ log.SetFlags(log.Lshortfile)
+ env.OpenFile("b.go")
+ env.Await(env.AnyDiagnosticAtCurrentVersion("a.go"))
+ // no diagnostics for either b.go or 'gen.go', but there should be
+ env.Await(NoDiagnostics("b.go"))
+
+ // Fix the error by editing the const name in b.go to `b`.
+ env.RegexpReplace("b.go", "(a) = 2", "b")
+ env.Await(
+ EmptyDiagnostics("a.go"),
+ // expected, as there have never been any diagnostics for b.go
+ NoDiagnostics("b.go"),
+ )
+ })
+}