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  }