Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201105173854-bc9fc8d8c4bc / cmd / cover / cover_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/cmd/cover/cover_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/cmd/cover/cover_test.go
new file mode 100644 (file)
index 0000000..54c4512
--- /dev/null
@@ -0,0 +1,107 @@
+// Copyright 2013 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.
+
+// No testdata on Android.
+
+// +build !android
+
+package main_test
+
+import (
+       "bytes"
+       "fmt"
+       "io/ioutil"
+       "os"
+       "os/exec"
+       "path/filepath"
+       "testing"
+
+       "golang.org/x/tools/internal/testenv"
+)
+
+const (
+       // Data directory, also the package directory for the test.
+       testdata = "testdata"
+)
+
+var debug = false // Keeps the rewritten files around if set.
+
+// Run this shell script, but do it in Go so it can be run by "go test".
+//
+//     replace the word LINE with the line number < testdata/test.go > testdata/test_line.go
+//     go build -o ./testcover
+//     ./testcover -mode=count -var=CoverTest -o ./testdata/test_cover.go testdata/test_line.go
+//     go run ./testdata/main.go ./testdata/test.go
+//
+func TestCover(t *testing.T) {
+       testenv.NeedsTool(t, "go")
+
+       tmpdir, err := ioutil.TempDir("", "TestCover")
+       if err != nil {
+               t.Fatal(err)
+       }
+       defer func() {
+               if debug {
+                       fmt.Printf("test files left in %s\n", tmpdir)
+               } else {
+                       os.RemoveAll(tmpdir)
+               }
+       }()
+
+       testcover := filepath.Join(tmpdir, "testcover.exe")
+       testMain := filepath.Join(tmpdir, "main.go")
+       testTest := filepath.Join(tmpdir, "test.go")
+       coverInput := filepath.Join(tmpdir, "test_line.go")
+       coverOutput := filepath.Join(tmpdir, "test_cover.go")
+
+       for _, f := range []string{testMain, testTest} {
+               data, err := ioutil.ReadFile(filepath.Join(testdata, filepath.Base(f)))
+               if err != nil {
+                       t.Fatal(err)
+               }
+               if err := ioutil.WriteFile(f, data, 0644); err != nil {
+                       t.Fatal(err)
+               }
+       }
+
+       // Read in the test file (testTest) and write it, with LINEs specified, to coverInput.
+       file, err := ioutil.ReadFile(testTest)
+       if err != nil {
+               t.Fatal(err)
+       }
+       lines := bytes.Split(file, []byte("\n"))
+       for i, line := range lines {
+               lines[i] = bytes.Replace(line, []byte("LINE"), []byte(fmt.Sprint(i+1)), -1)
+       }
+       err = ioutil.WriteFile(coverInput, bytes.Join(lines, []byte("\n")), 0666)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       // go build -o testcover
+       cmd := exec.Command("go", "build", "-o", testcover)
+       run(cmd, t)
+
+       // ./testcover -mode=count -var=coverTest -o ./testdata/test_cover.go testdata/test_line.go
+       cmd = exec.Command(testcover, "-mode=count", "-var=coverTest", "-o", coverOutput, coverInput)
+       run(cmd, t)
+
+       // defer removal of ./testdata/test_cover.go
+       if !debug {
+               defer os.Remove(coverOutput)
+       }
+
+       // go run ./testdata/main.go ./testdata/test.go
+       cmd = exec.Command("go", "run", testMain, coverOutput)
+       run(cmd, t)
+}
+
+func run(c *exec.Cmd, t *testing.T) {
+       c.Stdout = os.Stdout
+       c.Stderr = os.Stderr
+       err := c.Run()
+       if err != nil {
+               t.Fatal(err)
+       }
+}