From 2f423b68c72b24c874b9150404fd11cf934aebce Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Wed, 1 Dec 2021 01:06:03 +0200 Subject: [PATCH] Add tests for stderr and file outputs --- test/linters_test.go | 50 ++++++++++++++++++++++++++++++++++- test/testshared/testshared.go | 5 ++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/test/linters_test.go b/test/linters_test.go index c5be4856a5a4..6676b11c24de 100644 --- a/test/linters_test.go +++ b/test/linters_test.go @@ -2,6 +2,8 @@ package test import ( "bufio" + "fmt" + "io/ioutil" "os" "os/exec" "path/filepath" @@ -100,7 +102,7 @@ func TestGciLocal(t *testing.T) { func TestMultipleOutputs(t *testing.T) { sourcePath := filepath.Join(testdataDir, "gci", "gci.go") args := []string{ - "--disable-all", "--print-issued-lines=false", "--print-linter-name=false", "--out-format=line-number,json", + "--disable-all", "--print-issued-lines=false", "--print-linter-name=false", "--out-format=line-number,json:stdout", sourcePath, } rc := extractRunContextFromComments(t, sourcePath) @@ -114,6 +116,52 @@ func TestMultipleOutputs(t *testing.T) { ExpectOutputContains(`"Issues":[`) } +func TestStderrOutput(t *testing.T) { + sourcePath := filepath.Join(testdataDir, "gci", "gci.go") + args := []string{ + "--disable-all", "--print-issued-lines=false", "--print-linter-name=false", "--out-format=line-number,json:stderr", + sourcePath, + } + rc := extractRunContextFromComments(t, sourcePath) + args = append(args, rc.args...) + + cfg, err := yaml.Marshal(rc.config) + require.NoError(t, err) + + testshared.NewLintRunner(t).RunWithYamlConfig(string(cfg), args...). + ExpectHasIssue("testdata/gci/gci.go:7: File is not `gci`-ed"). + ExpectOutputContains(`"Issues":[`) +} + +func TestFileOutput(t *testing.T) { + f, err := os.CreateTemp("", "golangci_lint_test_result") + require.NoError(t, err) + f.Close() + + resultPath := f.Name() + defer os.Remove(resultPath) + + sourcePath := filepath.Join(testdataDir, "gci", "gci.go") + args := []string{ + "--disable-all", "--print-issued-lines=false", "--print-linter-name=false", + fmt.Sprintf("--out-format=json:%s,line-number", resultPath), + sourcePath, + } + rc := extractRunContextFromComments(t, sourcePath) + args = append(args, rc.args...) + + cfg, err := yaml.Marshal(rc.config) + require.NoError(t, err) + + testshared.NewLintRunner(t).RunWithYamlConfig(string(cfg), args...). + ExpectHasIssue("testdata/gci/gci.go:7: File is not `gci`-ed"). + ExpectOutputNotContains(`"Issues":[`) + + b, err := ioutil.ReadFile(resultPath) + require.NoError(t, err) + require.Contains(t, string(b), `"Issues":[`) +} + func saveConfig(t *testing.T, cfg map[string]interface{}) (cfgPath string, finishFunc func()) { f, err := os.CreateTemp("", "golangci_lint_test") require.NoError(t, err) diff --git a/test/testshared/testshared.go b/test/testshared/testshared.go index 0d1f91c01dd6..fa70c23131ae 100644 --- a/test/testshared/testshared.go +++ b/test/testshared/testshared.go @@ -76,6 +76,11 @@ func (r *RunResult) ExpectOutputContains(s string) *RunResult { return r } +func (r *RunResult) ExpectOutputNotContains(s string) *RunResult { + assert.NotContains(r.t, r.output, s, "exit code is %d", r.exitCode) + return r +} + func (r *RunResult) ExpectOutputEq(s string) *RunResult { assert.Equal(r.t, s, r.output, "exit code is %d", r.exitCode) return r