.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.1-0.20210319172145-bda8f5cee399 / internal / lsp / diff / difftest / difftest_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/internal/lsp/diff/difftest/difftest_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/internal/lsp/diff/difftest/difftest_test.go
new file mode 100644 (file)
index 0000000..fd7ecf9
--- /dev/null
@@ -0,0 +1,84 @@
+// Copyright 2019 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 difftest supplies a set of tests that will operate on any
+// implementation of a diff algorithm as exposed by
+// "golang.org/x/tools/internal/lsp/diff"
+package difftest_test
+
+import (
+       "fmt"
+       "io/ioutil"
+       "os"
+       "os/exec"
+       "strings"
+       "testing"
+
+       "golang.org/x/tools/internal/lsp/diff/difftest"
+       "golang.org/x/tools/internal/testenv"
+)
+
+func TestVerifyUnified(t *testing.T) {
+       testenv.NeedsTool(t, "diff")
+       for _, test := range difftest.TestCases {
+               t.Run(test.Name, func(t *testing.T) {
+                       t.Helper()
+                       if test.NoDiff {
+                               t.Skip("diff tool produces expected different results")
+                       }
+                       diff, err := getDiffOutput(test.In, test.Out)
+                       if err != nil {
+                               t.Fatal(err)
+                       }
+                       if len(diff) > 0 {
+                               diff = difftest.UnifiedPrefix + diff
+                       }
+                       if diff != test.Unified {
+                               t.Errorf("unified:\n%q\ndiff -u:\n%q", test.Unified, diff)
+                       }
+               })
+       }
+}
+
+func getDiffOutput(a, b string) (string, error) {
+       fileA, err := ioutil.TempFile("", "myers.in")
+       if err != nil {
+               return "", err
+       }
+       defer os.Remove(fileA.Name())
+       if _, err := fileA.Write([]byte(a)); err != nil {
+               return "", err
+       }
+       if err := fileA.Close(); err != nil {
+               return "", err
+       }
+       fileB, err := ioutil.TempFile("", "myers.in")
+       if err != nil {
+               return "", err
+       }
+       defer os.Remove(fileB.Name())
+       if _, err := fileB.Write([]byte(b)); err != nil {
+               return "", err
+       }
+       if err := fileB.Close(); err != nil {
+               return "", err
+       }
+       cmd := exec.Command("diff", "-u", fileA.Name(), fileB.Name())
+       cmd.Env = append(cmd.Env, "LANG=en_US.UTF-8")
+       out, err := cmd.CombinedOutput()
+       if err != nil {
+               if _, ok := err.(*exec.ExitError); !ok {
+                       return "", fmt.Errorf("failed to run diff -u %v %v: %v\n%v", fileA.Name(), fileB.Name(), err, string(out))
+               }
+       }
+       diff := string(out)
+       if len(diff) <= 0 {
+               return diff, nil
+       }
+       bits := strings.SplitN(diff, "\n", 3)
+       if len(bits) != 3 {
+               return "", fmt.Errorf("diff output did not have file prefix:\n%s", diff)
+       }
+       return bits[2], nil
+}