aboutsummaryrefslogtreecommitdiff
path: root/internal/lsp/lsprpc/binder_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/lsp/lsprpc/binder_test.go')
-rw-r--r--internal/lsp/lsprpc/binder_test.go154
1 files changed, 0 insertions, 154 deletions
diff --git a/internal/lsp/lsprpc/binder_test.go b/internal/lsp/lsprpc/binder_test.go
deleted file mode 100644
index f7dd83033..000000000
--- a/internal/lsp/lsprpc/binder_test.go
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright 2021 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 lsprpc_test
-
-import (
- "context"
- "regexp"
- "strings"
- "testing"
- "time"
-
- jsonrpc2_v2 "golang.org/x/tools/internal/jsonrpc2_v2"
- "golang.org/x/tools/internal/lsp/protocol"
-
- . "golang.org/x/tools/internal/lsp/lsprpc"
-)
-
-type TestEnv struct {
- Listeners []jsonrpc2_v2.Listener
- Conns []*jsonrpc2_v2.Connection
- Servers []*jsonrpc2_v2.Server
-}
-
-func (e *TestEnv) Shutdown(t *testing.T) {
- for _, l := range e.Listeners {
- if err := l.Close(); err != nil {
- t.Error(err)
- }
- }
- for _, c := range e.Conns {
- if err := c.Close(); err != nil {
- t.Error(err)
- }
- }
- for _, s := range e.Servers {
- if err := s.Wait(); err != nil {
- t.Error(err)
- }
- }
-}
-
-func (e *TestEnv) serve(ctx context.Context, t *testing.T, server jsonrpc2_v2.Binder) (jsonrpc2_v2.Listener, *jsonrpc2_v2.Server) {
- l, err := jsonrpc2_v2.NetPipeListener(ctx)
- if err != nil {
- t.Fatal(err)
- }
- e.Listeners = append(e.Listeners, l)
- s, err := jsonrpc2_v2.Serve(ctx, l, server)
- if err != nil {
- t.Fatal(err)
- }
- e.Servers = append(e.Servers, s)
- return l, s
-}
-
-func (e *TestEnv) dial(ctx context.Context, t *testing.T, dialer jsonrpc2_v2.Dialer, client jsonrpc2_v2.Binder, forwarded bool) *jsonrpc2_v2.Connection {
- if forwarded {
- l, _ := e.serve(ctx, t, NewForwardBinder(dialer))
- dialer = l.Dialer()
- }
- conn, err := jsonrpc2_v2.Dial(ctx, dialer, client)
- if err != nil {
- t.Fatal(err)
- }
- e.Conns = append(e.Conns, conn)
- return conn
-}
-
-func staticClientBinder(client protocol.Client) jsonrpc2_v2.Binder {
- f := func(context.Context, protocol.Server) protocol.Client { return client }
- return NewClientBinder(f)
-}
-
-func staticServerBinder(server protocol.Server) jsonrpc2_v2.Binder {
- f := func(ctx context.Context, client protocol.ClientCloser) protocol.Server {
- return server
- }
- return NewServerBinder(f)
-}
-
-func TestClientLoggingV2(t *testing.T) {
- ctx := context.Background()
-
- for name, forwarded := range map[string]bool{
- "forwarded": true,
- "standalone": false,
- } {
- t.Run(name, func(t *testing.T) {
- client := FakeClient{Logs: make(chan string, 10)}
- env := new(TestEnv)
- defer env.Shutdown(t)
- l, _ := env.serve(ctx, t, staticServerBinder(PingServer{}))
- conn := env.dial(ctx, t, l.Dialer(), staticClientBinder(client), forwarded)
-
- if err := protocol.ServerDispatcherV2(conn).DidOpen(ctx, &protocol.DidOpenTextDocumentParams{}); err != nil {
- t.Errorf("DidOpen: %v", err)
- }
- select {
- case got := <-client.Logs:
- want := "ping"
- matched, err := regexp.MatchString(want, got)
- if err != nil {
- t.Fatal(err)
- }
- if !matched {
- t.Errorf("got log %q, want a log containing %q", got, want)
- }
- case <-time.After(1 * time.Second):
- t.Error("timeout waiting for client log")
- }
- })
- }
-}
-
-func TestRequestCancellationV2(t *testing.T) {
- ctx := context.Background()
-
- for name, forwarded := range map[string]bool{
- "forwarded": true,
- "standalone": false,
- } {
- t.Run(name, func(t *testing.T) {
- server := WaitableServer{
- Started: make(chan struct{}),
- Completed: make(chan error),
- }
- env := new(TestEnv)
- defer env.Shutdown(t)
- l, _ := env.serve(ctx, t, staticServerBinder(server))
- client := FakeClient{Logs: make(chan string, 10)}
- conn := env.dial(ctx, t, l.Dialer(), staticClientBinder(client), forwarded)
-
- sd := protocol.ServerDispatcherV2(conn)
- ctx, cancel := context.WithCancel(ctx)
-
- result := make(chan error)
- go func() {
- _, err := sd.Hover(ctx, &protocol.HoverParams{})
- result <- err
- }()
- // Wait for the Hover request to start.
- <-server.Started
- cancel()
- if err := <-result; err == nil {
- t.Error("nil error for cancelled Hover(), want non-nil")
- }
- if err := <-server.Completed; err == nil || !strings.Contains(err.Error(), "cancelled hover") {
- t.Errorf("Hover(): unexpected server-side error %v", err)
- }
- })
- }
-}