.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.1-0.20210319172145-bda8f5cee399 / cmd / getgo / main_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/cmd/getgo/main_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/cmd/getgo/main_test.go
new file mode 100644 (file)
index 0000000..0c0e8b9
--- /dev/null
@@ -0,0 +1,174 @@
+// Copyright 2017 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.
+
+//go:build !plan9
+// +build !plan9
+
+package main
+
+import (
+       "bytes"
+       "fmt"
+       "io/ioutil"
+       "os"
+       "os/exec"
+       "runtime"
+       "testing"
+)
+
+const (
+       testbin = "testgetgo"
+)
+
+var (
+       exeSuffix string // ".exe" on Windows
+)
+
+func init() {
+       if runtime.GOOS == "windows" {
+               exeSuffix = ".exe"
+       }
+}
+
+// TestMain creates a getgo command for testing purposes and
+// deletes it after the tests have been run.
+func TestMain(m *testing.M) {
+       if os.Getenv("GOGET_INTEGRATION") == "" {
+               fmt.Fprintln(os.Stderr, "main_test: Skipping integration tests with GOGET_INTEGRATION unset")
+               return
+       }
+
+       args := []string{"build", "-tags", testbin, "-o", testbin + exeSuffix}
+       out, err := exec.Command("go", args...).CombinedOutput()
+       if err != nil {
+               fmt.Fprintf(os.Stderr, "building %s failed: %v\n%s", testbin, err, out)
+               os.Exit(2)
+       }
+
+       // Don't let these environment variables confuse the test.
+       os.Unsetenv("GOBIN")
+       os.Unsetenv("GOPATH")
+       os.Unsetenv("GIT_ALLOW_PROTOCOL")
+       os.Unsetenv("PATH")
+
+       r := m.Run()
+
+       os.Remove(testbin + exeSuffix)
+
+       os.Exit(r)
+}
+
+func createTmpHome(t *testing.T) string {
+       tmpd, err := ioutil.TempDir("", "testgetgo")
+       if err != nil {
+               t.Fatalf("creating test tempdir failed: %v", err)
+       }
+
+       os.Setenv("HOME", tmpd)
+       return tmpd
+}
+
+// doRun runs the test getgo command, recording stdout and stderr and
+// returning exit status.
+func doRun(t *testing.T, args ...string) error {
+       var stdout, stderr bytes.Buffer
+       t.Logf("running %s %v", testbin, args)
+       cmd := exec.Command("./"+testbin+exeSuffix, args...)
+       cmd.Stdout = &stdout
+       cmd.Stderr = &stderr
+       cmd.Env = os.Environ()
+       status := cmd.Run()
+       if stdout.Len() > 0 {
+               t.Log("standard output:")
+               t.Log(stdout.String())
+       }
+       if stderr.Len() > 0 {
+               t.Log("standard error:")
+               t.Log(stderr.String())
+       }
+       return status
+}
+
+func TestCommandVerbose(t *testing.T) {
+       tmpd := createTmpHome(t)
+       defer os.RemoveAll(tmpd)
+
+       err := doRun(t, "-v")
+       if err != nil {
+               t.Fatal(err)
+       }
+       // make sure things are in path
+       shellConfig, err := shellConfigFile()
+       if err != nil {
+               t.Fatal(err)
+       }
+       b, err := ioutil.ReadFile(shellConfig)
+       if err != nil {
+               t.Fatal(err)
+       }
+       home, err := getHomeDir()
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       expected := fmt.Sprintf(`
+export PATH=$PATH:%s/.go/bin
+
+export GOPATH=%s/go
+
+export PATH=$PATH:%s/go/bin
+`, home, home, home)
+
+       if string(b) != expected {
+               t.Fatalf("%s expected %q, got %q", shellConfig, expected, string(b))
+       }
+}
+
+func TestCommandPathExists(t *testing.T) {
+       tmpd := createTmpHome(t)
+       defer os.RemoveAll(tmpd)
+
+       // run once
+       err := doRun(t, "-skip-dl")
+       if err != nil {
+               t.Fatal(err)
+       }
+       // make sure things are in path
+       shellConfig, err := shellConfigFile()
+       if err != nil {
+               t.Fatal(err)
+       }
+       b, err := ioutil.ReadFile(shellConfig)
+       if err != nil {
+               t.Fatal(err)
+       }
+       home, err := getHomeDir()
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       expected := fmt.Sprintf(`
+export GOPATH=%s/go
+
+export PATH=$PATH:%s/go/bin
+`, home, home)
+
+       if string(b) != expected {
+               t.Fatalf("%s expected %q, got %q", shellConfig, expected, string(b))
+       }
+
+       // run twice
+       if err := doRun(t, "-skip-dl"); err != nil {
+               t.Fatal(err)
+       }
+
+       b, err = ioutil.ReadFile(shellConfig)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       if string(b) != expected {
+               t.Fatalf("%s expected %q, got %q", shellConfig, expected, string(b))
+       }
+}