github.com/elek/golangci-lint@v1.42.2-0.20211208090441-c05b7fcb3a9a/pkg/result/processors/exclude_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/result" 11 ) 12 13 func TestExcludeRulesMultiple(t *testing.T) { 14 lineCache := fsutils.NewLineCache(fsutils.NewFileCache()) 15 p := NewExcludeRules([]ExcludeRule{ 16 { 17 BaseRule: BaseRule{ 18 Text: "^exclude$", 19 Linters: []string{"linter"}, 20 }, 21 }, 22 { 23 BaseRule: BaseRule{ 24 Linters: []string{"testlinter"}, 25 Path: `_test\.go`, 26 }, 27 }, 28 { 29 BaseRule: BaseRule{ 30 Text: "^testonly$", 31 Path: `_test\.go`, 32 }, 33 }, 34 { 35 BaseRule: BaseRule{ 36 Source: "^//go:generate ", 37 Linters: []string{"lll"}, 38 }, 39 }, 40 }, lineCache, nil) 41 42 cases := []issueTestCase{ 43 {Path: "e.go", Text: "exclude", Linter: "linter"}, 44 {Path: "e.go", Text: "some", Linter: "linter"}, 45 {Path: "e_test.go", Text: "normal", Linter: "testlinter"}, 46 {Path: "e_Test.go", Text: "normal", Linter: "testlinter"}, 47 {Path: "e_test.go", Text: "another", Linter: "linter"}, 48 {Path: "e_test.go", Text: "testonly", Linter: "linter"}, 49 {Path: filepath.Join("testdata", "exclude_rules.go"), Line: 3, Linter: "lll"}, 50 } 51 var issues []result.Issue 52 for _, c := range cases { 53 issues = append(issues, newIssueFromIssueTestCase(c)) 54 } 55 processedIssues := process(t, p, issues...) 56 var resultingCases []issueTestCase 57 for _, i := range processedIssues { 58 resultingCases = append(resultingCases, issueTestCase{ 59 Path: i.FilePath(), 60 Linter: i.FromLinter, 61 Text: i.Text, 62 Line: i.Line(), 63 }) 64 } 65 expectedCases := []issueTestCase{ 66 {Path: "e.go", Text: "some", Linter: "linter"}, 67 {Path: "e_Test.go", Text: "normal", Linter: "testlinter"}, 68 {Path: "e_test.go", Text: "another", Linter: "linter"}, 69 } 70 assert.Equal(t, expectedCases, resultingCases) 71 } 72 73 func TestExcludeRulesText(t *testing.T) { 74 p := NewExcludeRules([]ExcludeRule{ 75 { 76 BaseRule: BaseRule{ 77 Text: "^exclude$", 78 Linters: []string{"linter"}, 79 }, 80 }, 81 }, nil, nil) 82 texts := []string{"excLude", "1", "", "exclud", "notexclude"} 83 var issues []result.Issue 84 for _, t := range texts { 85 issues = append(issues, result.Issue{ 86 Text: t, 87 FromLinter: "linter", 88 }) 89 } 90 91 processedIssues := process(t, p, issues...) 92 assert.Len(t, processedIssues, len(issues)-1) 93 94 var processedTexts []string 95 for _, i := range processedIssues { 96 processedTexts = append(processedTexts, i.Text) 97 } 98 assert.Equal(t, texts[1:], processedTexts) 99 } 100 101 func TestExcludeRulesEmpty(t *testing.T) { 102 processAssertSame(t, NewExcludeRules(nil, nil, nil), newIssueFromTextTestCase("test")) 103 } 104 105 func TestExcludeRulesCaseSensitiveMultiple(t *testing.T) { 106 lineCache := fsutils.NewLineCache(fsutils.NewFileCache()) 107 p := NewExcludeRulesCaseSensitive([]ExcludeRule{ 108 { 109 BaseRule: BaseRule{ 110 Text: "^exclude$", 111 Linters: []string{"linter"}, 112 }, 113 }, 114 { 115 BaseRule: BaseRule{ 116 Linters: []string{"testlinter"}, 117 Path: `_test\.go`, 118 }, 119 }, 120 { 121 BaseRule: BaseRule{ 122 Text: "^testonly$", 123 Path: `_test\.go`, 124 }, 125 }, 126 { 127 BaseRule: BaseRule{ 128 Source: "^//go:generate ", 129 Linters: []string{"lll"}, 130 }, 131 }, 132 }, lineCache, nil) 133 134 cases := []issueTestCase{ 135 {Path: "e.go", Text: "exclude", Linter: "linter"}, 136 {Path: "e.go", Text: "excLude", Linter: "linter"}, 137 {Path: "e.go", Text: "some", Linter: "linter"}, 138 {Path: "e_test.go", Text: "normal", Linter: "testlinter"}, 139 {Path: "e_Test.go", Text: "normal", Linter: "testlinter"}, 140 {Path: "e_test.go", Text: "another", Linter: "linter"}, 141 {Path: "e_test.go", Text: "testonly", Linter: "linter"}, 142 {Path: "e_test.go", Text: "testOnly", Linter: "linter"}, 143 {Path: filepath.Join("testdata", "exclude_rules_case_sensitive.go"), Line: 3, Linter: "lll"}, 144 } 145 var issues []result.Issue 146 for _, c := range cases { 147 issues = append(issues, newIssueFromIssueTestCase(c)) 148 } 149 processedIssues := process(t, p, issues...) 150 var resultingCases []issueTestCase 151 for _, i := range processedIssues { 152 resultingCases = append(resultingCases, issueTestCase{ 153 Path: i.FilePath(), 154 Linter: i.FromLinter, 155 Text: i.Text, 156 Line: i.Line(), 157 }) 158 } 159 expectedCases := []issueTestCase{ 160 {Path: "e.go", Text: "excLude", Linter: "linter"}, 161 {Path: "e.go", Text: "some", Linter: "linter"}, 162 {Path: "e_Test.go", Text: "normal", Linter: "testlinter"}, 163 {Path: "e_test.go", Text: "another", Linter: "linter"}, 164 {Path: "e_test.go", Text: "testOnly", Linter: "linter"}, 165 {Path: filepath.Join("testdata", "exclude_rules_case_sensitive.go"), Line: 3, Linter: "lll"}, 166 } 167 assert.Equal(t, expectedCases, resultingCases) 168 } 169 170 func TestExcludeRulesCaseSensitiveText(t *testing.T) { 171 p := NewExcludeRulesCaseSensitive([]ExcludeRule{ 172 { 173 BaseRule: BaseRule{ 174 Text: "^exclude$", 175 Linters: []string{"linter"}, 176 }, 177 }, 178 }, nil, nil) 179 texts := []string{"exclude", "excLude", "1", "", "exclud", "notexclude"} 180 var issues []result.Issue 181 for _, t := range texts { 182 issues = append(issues, result.Issue{ 183 Text: t, 184 FromLinter: "linter", 185 }) 186 } 187 188 processedIssues := process(t, p, issues...) 189 assert.Len(t, processedIssues, len(issues)-1) 190 191 var processedTexts []string 192 for _, i := range processedIssues { 193 processedTexts = append(processedTexts, i.Text) 194 } 195 assert.Equal(t, texts[1:], processedTexts) 196 } 197 198 func TestExcludeRulesCaseSensitiveEmpty(t *testing.T) { 199 processAssertSame(t, NewExcludeRulesCaseSensitive(nil, nil, nil), newIssueFromTextTestCase("test")) 200 }