internal/lsp/cmd: fix definition test to run independently

definition.Run requires a nil check of opts before applying to avoid
panic, and test must be run with markdown enabled.
When running 'go test' without -run flag, connection.initialize() was
not called and there was no problem because the default value of
Options.PreferredContentFormat was Markdown.
In addition, currently using the same connection despite different
options, therefore make to use a different connection for different
options.

Change-Id: I6ef773c14cbdcae621da9295d4c618c3aff0beee
Reviewed-on: https://go-review.googlesource.com/c/tools/+/222497
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/internal/lsp/cmd/cmd.go b/internal/lsp/cmd/cmd.go
index 09519e1..0788754 100644
--- a/internal/lsp/cmd/cmd.go
+++ b/internal/lsp/cmd/cmd.go
@@ -202,7 +202,12 @@
 	case strings.HasPrefix(app.Remote, "internal@"):
 		internalMu.Lock()
 		defer internalMu.Unlock()
-		if c := internalConnections[app.wd]; c != nil {
+		opts := source.DefaultOptions()
+		if app.options != nil {
+			app.options(&opts)
+		}
+		key := fmt.Sprintf("%s %v", app.wd, opts)
+		if c := internalConnections[key]; c != nil {
 			return c, nil
 		}
 		remote := app.Remote[len("internal@"):]
@@ -211,7 +216,7 @@
 		if err != nil {
 			return nil, err
 		}
-		internalConnections[app.wd] = connection
+		internalConnections[key] = connection
 		return connection, nil
 	default:
 		return app.connectRemote(ctx, app.Remote)
diff --git a/internal/lsp/cmd/definition.go b/internal/lsp/cmd/definition.go
index 2b2e3c0..688c7b2 100644
--- a/internal/lsp/cmd/definition.go
+++ b/internal/lsp/cmd/definition.go
@@ -64,7 +64,9 @@
 	// Plaintext makes more sense for the command line.
 	opts := d.query.app.options
 	d.query.app.options = func(o *source.Options) {
-		opts(o)
+		if opts != nil {
+			opts(o)
+		}
 		o.PreferredContentFormat = protocol.PlainText
 		if d.query.MarkdownSupported {
 			o.PreferredContentFormat = protocol.Markdown
diff --git a/internal/lsp/cmd/test/definition.go b/internal/lsp/cmd/test/definition.go
index e7d2c14..20d8c3f 100644
--- a/internal/lsp/cmd/test/definition.go
+++ b/internal/lsp/cmd/test/definition.go
@@ -33,7 +33,7 @@
 	}
 	d.Src = span.New(d.Src.URI(), span.NewPoint(0, 0, d.Src.Start().Offset()), span.Point{})
 	for _, mode := range godefModes {
-		args := []string{"query"}
+		args := []string{"query", "-markdown"}
 		tag := d.Name + "-definition"
 		if mode&jsonGoDef != 0 {
 			tag += "-json"