mirror of
https://github.com/golang/go
synced 2024-11-19 04:54:41 -07:00
490d13020f
I was about to add some more tests and it caused a huge number of golden files, which was hard to deal with. Now all the golden files are packed into a single .golden archive in the txtar format. I also changed the tagging key for hover results to use the marker name rather than the line and column, as it makes it more stable against test data changes. Change-Id: Iaa1f54ab55a41d380db67b9f6f928fa7a52d9a5e Reviewed-on: https://go-review.googlesource.com/c/tools/+/174877 Run-TryBot: Ian Cottrell <iancottrell@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rebecca Stambler <rstambler@golang.org>
67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
// 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 cmd_test
|
|
|
|
import (
|
|
"context"
|
|
"os/exec"
|
|
"regexp"
|
|
"strings"
|
|
"testing"
|
|
|
|
"golang.org/x/tools/internal/lsp/cmd"
|
|
"golang.org/x/tools/internal/lsp/tests"
|
|
"golang.org/x/tools/internal/tool"
|
|
)
|
|
|
|
var formatModes = [][]string{
|
|
[]string{},
|
|
[]string{"-d"},
|
|
}
|
|
|
|
func (r *runner) Format(t *testing.T, data tests.Formats) {
|
|
for _, spn := range data {
|
|
for _, mode := range formatModes {
|
|
tag := "gofmt" + strings.Join(mode, "")
|
|
uri := spn.URI()
|
|
filename, err := uri.Filename()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
args := append(mode, filename)
|
|
expect := string(r.data.Golden(tag, filename, func() ([]byte, error) {
|
|
cmd := exec.Command("gofmt", args...)
|
|
contents, _ := cmd.Output() // ignore error, sometimes we have intentionally ungofmt-able files
|
|
contents = []byte(r.normalizePaths(fixFileHeader(string(contents))))
|
|
return contents, nil
|
|
}))
|
|
if expect == "" {
|
|
//TODO: our error handling differs, for now just skip unformattable files
|
|
continue
|
|
}
|
|
app := &cmd.Application{}
|
|
app.Config = r.data.Config
|
|
got := captureStdOut(t, func() {
|
|
tool.Main(context.Background(), app, append([]string{"format"}, args...))
|
|
})
|
|
got = r.normalizePaths(got)
|
|
// check the first two lines are the expected file header
|
|
if expect != got {
|
|
t.Errorf("format failed with %#v expected:\n%s\ngot:\n%s", args, expect, got)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var unifiedHeader = regexp.MustCompile(`^diff -u.*\n(---\s+\S+\.go\.orig)\s+[\d-:. ]+(\n\+\+\+\s+\S+\.go)\s+[\d-:. ]+(\n@@)`)
|
|
|
|
func fixFileHeader(s string) string {
|
|
match := unifiedHeader.FindStringSubmatch(s)
|
|
if match == nil {
|
|
return s
|
|
}
|
|
return strings.Join(append(match[1:], s[len(match[0]):]), "")
|
|
}
|