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  }