243 lines
5.5 KiB
Go
243 lines
5.5 KiB
Go
package lintersdb
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/golangci/golangci-lint/pkg/config"
|
|
"github.com/golangci/golangci-lint/pkg/logutils"
|
|
)
|
|
|
|
type validateErrorTestCase struct {
|
|
desc string
|
|
cfg *config.Linters
|
|
expected string
|
|
}
|
|
|
|
var validateLintersNamesErrorTestCases = []validateErrorTestCase{
|
|
{
|
|
desc: "unknown enabled linter",
|
|
cfg: &config.Linters{
|
|
Enable: []string{"golangci"},
|
|
Disable: nil,
|
|
},
|
|
expected: `unknown linters: 'golangci', run 'golangci-lint help linters' to see the list of supported linters`,
|
|
},
|
|
{
|
|
desc: "unknown disabled linter",
|
|
cfg: &config.Linters{
|
|
Enable: nil,
|
|
Disable: []string{"golangci"},
|
|
},
|
|
expected: `unknown linters: 'golangci', run 'golangci-lint help linters' to see the list of supported linters`,
|
|
},
|
|
}
|
|
|
|
var validatePresetsErrorTestCases = []validateErrorTestCase{
|
|
{
|
|
desc: "unknown preset",
|
|
cfg: &config.Linters{
|
|
EnableAll: false,
|
|
Presets: []string{"golangci"},
|
|
},
|
|
expected: "no such preset \"golangci\": only next presets exist: " +
|
|
"(bugs|comment|complexity|error|format|import|metalinter|module|performance|sql|style|test|unused)",
|
|
},
|
|
{
|
|
desc: "presets and enable-all",
|
|
cfg: &config.Linters{
|
|
EnableAll: true,
|
|
Presets: []string{"bugs"},
|
|
},
|
|
expected: `--presets is incompatible with --enable-all`,
|
|
},
|
|
}
|
|
|
|
type validatorTestCase struct {
|
|
desc string
|
|
cfg *config.Linters
|
|
}
|
|
|
|
var validateLintersNamesTestCases = []validatorTestCase{
|
|
{
|
|
desc: "no enable no disable",
|
|
cfg: &config.Linters{
|
|
Enable: nil,
|
|
Disable: nil,
|
|
},
|
|
},
|
|
{
|
|
desc: "existing enabled linter",
|
|
cfg: &config.Linters{
|
|
Enable: []string{"gofmt"},
|
|
Disable: nil,
|
|
},
|
|
},
|
|
{
|
|
desc: "existing disabled linter",
|
|
cfg: &config.Linters{
|
|
Enable: nil,
|
|
Disable: []string{"gofmt"},
|
|
},
|
|
},
|
|
}
|
|
|
|
var validatePresetsTestCases = []validatorTestCase{
|
|
{
|
|
desc: "known preset",
|
|
cfg: &config.Linters{
|
|
EnableAll: false,
|
|
Presets: []string{"bugs"},
|
|
},
|
|
},
|
|
{
|
|
desc: "enable-all and no presets",
|
|
cfg: &config.Linters{
|
|
EnableAll: true,
|
|
Presets: nil,
|
|
},
|
|
},
|
|
{
|
|
desc: "no presets",
|
|
cfg: &config.Linters{
|
|
EnableAll: false,
|
|
Presets: nil,
|
|
},
|
|
},
|
|
}
|
|
|
|
func TestValidator_Validate(t *testing.T) {
|
|
m, err := NewManager(nil, nil, NewLinterBuilder())
|
|
require.NoError(t, err)
|
|
|
|
v := NewValidator(m)
|
|
|
|
var testCases []validatorTestCase
|
|
testCases = append(testCases, validateLintersNamesTestCases...)
|
|
testCases = append(testCases, validatePresetsTestCases...)
|
|
|
|
for _, test := range testCases {
|
|
test := test
|
|
t.Run(test.desc, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
err := v.Validate(&config.Config{Linters: *test.cfg})
|
|
require.NoError(t, err)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestValidator_Validate_error(t *testing.T) {
|
|
m, err := NewManager(nil, nil, NewLinterBuilder())
|
|
require.NoError(t, err)
|
|
|
|
v := NewValidator(m)
|
|
|
|
var testCases []validateErrorTestCase
|
|
testCases = append(testCases, validateLintersNamesErrorTestCases...)
|
|
testCases = append(testCases, validatePresetsErrorTestCases...)
|
|
|
|
for _, test := range testCases {
|
|
test := test
|
|
t.Run(test.desc, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
err := v.Validate(&config.Config{Linters: *test.cfg})
|
|
require.Error(t, err)
|
|
|
|
require.EqualError(t, err, test.expected)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestValidator_validateLintersNames(t *testing.T) {
|
|
m, err := NewManager(nil, nil, NewLinterBuilder())
|
|
require.NoError(t, err)
|
|
|
|
v := NewValidator(m)
|
|
|
|
for _, test := range validateLintersNamesTestCases {
|
|
test := test
|
|
t.Run(test.desc, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
err := v.validateLintersNames(test.cfg)
|
|
require.NoError(t, err)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestValidator_validateLintersNames_error(t *testing.T) {
|
|
m, err := NewManager(nil, nil, NewLinterBuilder())
|
|
require.NoError(t, err)
|
|
|
|
v := NewValidator(m)
|
|
|
|
for _, test := range validateLintersNamesErrorTestCases {
|
|
test := test
|
|
t.Run(test.desc, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
err := v.validateLintersNames(test.cfg)
|
|
require.Error(t, err)
|
|
|
|
require.EqualError(t, err, test.expected)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestValidator_validatePresets(t *testing.T) {
|
|
v := NewValidator(nil)
|
|
|
|
for _, test := range validatePresetsTestCases {
|
|
test := test
|
|
t.Run(test.desc, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
err := v.validatePresets(test.cfg)
|
|
require.NoError(t, err)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestValidator_validatePresets_error(t *testing.T) {
|
|
v := NewValidator(nil)
|
|
|
|
for _, test := range validatePresetsErrorTestCases {
|
|
test := test
|
|
t.Run(test.desc, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
err := v.validatePresets(test.cfg)
|
|
require.Error(t, err)
|
|
|
|
require.EqualError(t, err, test.expected)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestValidator_alternativeNamesDeprecation(t *testing.T) {
|
|
t.Setenv(logutils.EnvTestRun, "0")
|
|
|
|
log := logutils.NewMockLog().
|
|
OnWarnf("The name %q is deprecated. The linter has been renamed to: %s.", "vet", "govet").
|
|
OnWarnf("The name %q is deprecated. The linter has been renamed to: %s.", "vetshadow", "govet").
|
|
OnWarnf("The name %q is deprecated. The linter has been renamed to: %s.", "logrlint", "loggercheck").
|
|
OnWarnf("The linter named %q is deprecated. It has been split into: %s.", "megacheck", "gosimple, staticcheck, unused").
|
|
OnWarnf("The name %q is deprecated. The linter has been renamed to: %s.", "gas", "gosec")
|
|
|
|
m, err := NewManager(log, nil, NewLinterBuilder())
|
|
require.NoError(t, err)
|
|
|
|
v := NewValidator(m)
|
|
|
|
cfg := &config.Linters{
|
|
Enable: []string{"vet", "vetshadow", "logrlint"},
|
|
Disable: []string{"megacheck", "gas"},
|
|
}
|
|
|
|
err = v.alternativeNamesDeprecation(cfg)
|
|
require.NoError(t, err)
|
|
}
|