github.com/elek/golangci-lint@v1.42.2-0.20211208090441-c05b7fcb3a9a/pkg/result/processors/severity_rules_test.go (about) 1 package processors 2 3 import ( 4 "path/filepath" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 9 "github.com/elek/golangci-lint/pkg/fsutils" 10 "github.com/elek/golangci-lint/pkg/logutils" 11 "github.com/elek/golangci-lint/pkg/report" 12 "github.com/elek/golangci-lint/pkg/result" 13 ) 14 15 func TestSeverityRulesMultiple(t *testing.T) { 16 lineCache := fsutils.NewLineCache(fsutils.NewFileCache()) 17 log := report.NewLogWrapper(logutils.NewStderrLog(""), &report.Data{}) 18 p := NewSeverityRules("error", []SeverityRule{ 19 { 20 Severity: "info", 21 BaseRule: BaseRule{ 22 Text: "^ssl$", 23 Linters: []string{"gosec"}, 24 }, 25 }, 26 { 27 Severity: "info", 28 BaseRule: BaseRule{ 29 Linters: []string{"linter"}, 30 Path: "e.go", 31 }, 32 }, 33 { 34 Severity: "info", 35 BaseRule: BaseRule{ 36 Text: "^testonly$", 37 Path: `_test\.go`, 38 }, 39 }, 40 { 41 BaseRule: BaseRule{ 42 Source: "^//go:generate ", 43 Linters: []string{"lll"}, 44 }, 45 }, 46 { 47 Severity: "info", 48 BaseRule: BaseRule{ 49 Source: "^//go:dosomething", 50 }, 51 }, 52 { 53 Severity: "info", 54 BaseRule: BaseRule{ 55 Linters: []string{"someotherlinter"}, 56 }, 57 }, 58 { 59 Severity: "info", 60 BaseRule: BaseRule{ 61 Linters: []string{"somelinter"}, 62 }, 63 }, 64 { 65 Severity: "info", 66 }, 67 }, lineCache, log) 68 69 cases := []issueTestCase{ 70 {Path: "ssl.go", Text: "ssl", Linter: "gosec"}, 71 {Path: "e.go", Text: "some", Linter: "linter"}, 72 {Path: "e_test.go", Text: "testonly", Linter: "testlinter"}, 73 {Path: filepath.Join("testdata", "exclude_rules.go"), Line: 3, Linter: "lll"}, 74 {Path: filepath.Join("testdata", "severity_rules.go"), Line: 3, Linter: "invalidgo"}, 75 {Path: "someotherlinter.go", Text: "someotherlinter", Linter: "someotherlinter"}, 76 {Path: "somenotmatchlinter.go", Text: "somenotmatchlinter", Linter: "somenotmatchlinter"}, 77 {Path: "empty.go", Text: "empty", Linter: "empty"}, 78 } 79 var issues []result.Issue 80 for _, c := range cases { 81 issues = append(issues, newIssueFromIssueTestCase(c)) 82 } 83 processedIssues := process(t, p, issues...) 84 var resultingCases []issueTestCase 85 for _, i := range processedIssues { 86 resultingCases = append(resultingCases, issueTestCase{ 87 Path: i.FilePath(), 88 Linter: i.FromLinter, 89 Text: i.Text, 90 Line: i.Line(), 91 Severity: i.Severity, 92 }) 93 } 94 expectedCases := []issueTestCase{ 95 {Path: "ssl.go", Text: "ssl", Linter: "gosec", Severity: "info"}, 96 {Path: "e.go", Text: "some", Linter: "linter", Severity: "info"}, 97 {Path: "e_test.go", Text: "testonly", Linter: "testlinter", Severity: "info"}, 98 {Path: filepath.Join("testdata", "exclude_rules.go"), Line: 3, Linter: "lll", Severity: "error"}, 99 {Path: filepath.Join("testdata", "severity_rules.go"), Line: 3, Linter: "invalidgo", Severity: "info"}, 100 {Path: "someotherlinter.go", Text: "someotherlinter", Linter: "someotherlinter", Severity: "info"}, 101 {Path: "somenotmatchlinter.go", Text: "somenotmatchlinter", Linter: "somenotmatchlinter", Severity: "error"}, 102 {Path: "empty.go", Text: "empty", Linter: "empty", Severity: "error"}, 103 } 104 assert.Equal(t, expectedCases, resultingCases) 105 } 106 107 func TestSeverityRulesText(t *testing.T) { 108 p := NewSeverityRules("", []SeverityRule{ 109 { 110 BaseRule: BaseRule{ 111 Text: "^severity$", 112 Linters: []string{"linter"}, 113 }, 114 }, 115 }, nil, nil) 116 texts := []string{"seveRity", "1", "", "serverit", "notseverity"} 117 var issues []result.Issue 118 for _, t := range texts { 119 issues = append(issues, result.Issue{ 120 Text: t, 121 FromLinter: "linter", 122 }) 123 } 124 125 processedIssues := process(t, p, issues...) 126 assert.Len(t, processedIssues, len(issues)) 127 128 var processedTexts []string 129 for _, i := range processedIssues { 130 processedTexts = append(processedTexts, i.Text) 131 } 132 assert.Equal(t, texts, processedTexts) 133 } 134 135 func TestSeverityRulesOnlyDefault(t *testing.T) { 136 lineCache := fsutils.NewLineCache(fsutils.NewFileCache()) 137 log := report.NewLogWrapper(logutils.NewStderrLog(""), &report.Data{}) 138 p := NewSeverityRules("info", []SeverityRule{}, lineCache, log) 139 140 cases := []issueTestCase{ 141 {Path: "ssl.go", Text: "ssl", Linter: "gosec"}, 142 {Path: "empty.go", Text: "empty", Linter: "empty"}, 143 } 144 var issues []result.Issue 145 for _, c := range cases { 146 issues = append(issues, newIssueFromIssueTestCase(c)) 147 } 148 processedIssues := process(t, p, issues...) 149 var resultingCases []issueTestCase 150 for _, i := range processedIssues { 151 resultingCases = append(resultingCases, issueTestCase{ 152 Path: i.FilePath(), 153 Linter: i.FromLinter, 154 Text: i.Text, 155 Line: i.Line(), 156 Severity: i.Severity, 157 }) 158 } 159 expectedCases := []issueTestCase{ 160 {Path: "ssl.go", Text: "ssl", Linter: "gosec", Severity: "info"}, 161 {Path: "empty.go", Text: "empty", Linter: "empty", Severity: "info"}, 162 } 163 assert.Equal(t, expectedCases, resultingCases) 164 } 165 166 func TestSeverityRulesEmpty(t *testing.T) { 167 processAssertSame(t, NewSeverityRules("", nil, nil, nil), newIssueFromTextTestCase("test")) 168 } 169 170 func TestSeverityRulesCaseSensitive(t *testing.T) { 171 lineCache := fsutils.NewLineCache(fsutils.NewFileCache()) 172 p := NewSeverityRulesCaseSensitive("error", []SeverityRule{ 173 { 174 Severity: "info", 175 BaseRule: BaseRule{ 176 Text: "^ssl$", 177 Linters: []string{"gosec", "someotherlinter"}, 178 }, 179 }, 180 }, lineCache, nil) 181 182 cases := []issueTestCase{ 183 {Path: "e.go", Text: "ssL", Linter: "gosec"}, 184 } 185 var issues []result.Issue 186 for _, c := range cases { 187 issues = append(issues, newIssueFromIssueTestCase(c)) 188 } 189 processedIssues := process(t, p, issues...) 190 var resultingCases []issueTestCase 191 for _, i := range processedIssues { 192 resultingCases = append(resultingCases, issueTestCase{ 193 Path: i.FilePath(), 194 Linter: i.FromLinter, 195 Text: i.Text, 196 Line: i.Line(), 197 Severity: i.Severity, 198 }) 199 } 200 expectedCases := []issueTestCase{ 201 {Path: "e.go", Text: "ssL", Linter: "gosec", Severity: "error"}, 202 } 203 assert.Equal(t, expectedCases, resultingCases) 204 }