1
0
mirror of https://github.com/golang/go synced 2024-11-19 06:24:41 -07:00
go/internal/lsp/regtest/reg_test.go
Ian Cottrell 8a3674bff3 internal/lsp: change exit handling
Exit now closes the connection rather than exiting the process.
This allows things to shutdown gracefully, and removes special
cases. It also allows the tests to call CloseEditor instead of
just Shutdown, which prevents goroutine leaks.

Change-Id: I26121ba5d393ef74ce0e912611c8b3817e3691ea
Reviewed-on: https://go-review.googlesource.com/c/tools/+/231798
Reviewed-by: Robert Findley <rfindley@google.com>
2020-06-03 13:14:19 +00:00

59 lines
1.7 KiB
Go

// 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 (
"context"
"flag"
"fmt"
"os"
"testing"
"time"
"golang.org/x/tools/internal/lsp/cmd"
"golang.org/x/tools/internal/tool"
)
var (
runSubprocessTests = flag.Bool("enable_gopls_subprocess_tests", false, "run regtests against a gopls subprocess")
goplsBinaryPath = flag.String("gopls_test_binary", "", "path to the gopls binary for use as a remote, for use with the -gopls_subprocess_testmode flag")
alwaysPrintLogs = flag.Bool("regtest_print_rpc_logs", false, "whether to always print RPC logs")
regtestTimeout = flag.Duration("regtest_timeout", 60*time.Second, "default timeout for each regtest")
printGoroutinesOnFailure = flag.Bool("regtest_print_goroutines", false, "whether to print goroutine info on failure")
)
var runner *Runner
func TestMain(m *testing.M) {
flag.Parse()
if os.Getenv("_GOPLS_TEST_BINARY_RUN_AS_GOPLS") == "true" {
tool.Main(context.Background(), cmd.New("gopls", "", nil, nil), os.Args[1:])
os.Exit(0)
}
runner = &Runner{
DefaultModes: NormalModes,
Timeout: *regtestTimeout,
AlwaysPrintLogs: *alwaysPrintLogs,
PrintGoroutinesOnFailure: *printGoroutinesOnFailure,
}
if *runSubprocessTests {
goplsPath := *goplsBinaryPath
if goplsPath == "" {
var err error
goplsPath, err = os.Executable()
if err != nil {
panic(fmt.Sprintf("finding test binary path: %v", err))
}
}
runner.DefaultModes = NormalModes | SeparateProcess
runner.GoplsPath = goplsPath
}
code := m.Run()
runner.Close()
os.Exit(code)
}