golangci-lint/pkg/config/linters_settings_test.go
2024-03-11 17:40:26 +01:00

237 lines
4.3 KiB
Go

package config
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestLintersSettings_Validate(t *testing.T) {
testCases := []struct {
desc string
settings *LintersSettings
}{
{
desc: "custom linter",
settings: &LintersSettings{
Custom: map[string]CustomLinterSettings{
"example": {
Type: "module",
},
},
},
},
{
desc: "govet",
settings: &LintersSettings{
Govet: GovetSettings{
Enable: []string{"a"},
DisableAll: true,
},
},
},
}
for _, test := range testCases {
test := test
t.Run(test.desc, func(t *testing.T) {
t.Parallel()
err := test.settings.Validate()
assert.NoError(t, err)
})
}
}
func TestLintersSettings_Validate_error(t *testing.T) {
testCases := []struct {
desc string
settings *LintersSettings
expected string
}{
{
desc: "custom linter error",
settings: &LintersSettings{
Custom: map[string]CustomLinterSettings{
"example": {
Type: "module",
Path: "example",
},
},
},
expected: `custom linter "example": path not supported with module type`,
},
{
desc: "govet error",
settings: &LintersSettings{
Govet: GovetSettings{
EnableAll: true,
DisableAll: true,
},
},
expected: "govet: enable-all and disable-all can't be combined",
},
}
for _, test := range testCases {
test := test
t.Run(test.desc, func(t *testing.T) {
t.Parallel()
err := test.settings.Validate()
assert.EqualError(t, err, test.expected)
})
}
}
func TestCustomLinterSettings_Validate(t *testing.T) {
testCases := []struct {
desc string
settings *CustomLinterSettings
}{
{
desc: "only path",
settings: &CustomLinterSettings{
Path: "example",
},
},
{
desc: "path and type goplugin",
settings: &CustomLinterSettings{
Type: "goplugin",
Path: "example",
},
},
{
desc: "type module",
settings: &CustomLinterSettings{
Type: "module",
},
},
}
for _, test := range testCases {
test := test
t.Run(test.desc, func(t *testing.T) {
t.Parallel()
err := test.settings.Validate()
assert.NoError(t, err)
})
}
}
func TestCustomLinterSettings_Validate_error(t *testing.T) {
testCases := []struct {
desc string
settings *CustomLinterSettings
expected string
}{
{
desc: "missing path",
settings: &CustomLinterSettings{},
expected: "path is required",
},
{
desc: "module and path",
settings: &CustomLinterSettings{
Type: "module",
Path: "example",
},
expected: "path not supported with module type",
},
}
for _, test := range testCases {
test := test
t.Run(test.desc, func(t *testing.T) {
t.Parallel()
err := test.settings.Validate()
assert.EqualError(t, err, test.expected)
})
}
}
func TestGovetSettings_Validate(t *testing.T) {
testCases := []struct {
desc string
settings *GovetSettings
}{
{
desc: "empty",
settings: &GovetSettings{},
},
{
desc: "disable-all and enable",
settings: &GovetSettings{
Enable: []string{"a"},
DisableAll: true,
},
},
{
desc: "enable-all and disable",
settings: &GovetSettings{
Disable: []string{"a"},
EnableAll: true,
},
},
}
for _, test := range testCases {
test := test
t.Run(test.desc, func(t *testing.T) {
t.Parallel()
err := test.settings.Validate()
assert.NoError(t, err)
})
}
}
func TestGovetSettings_Validate_error(t *testing.T) {
testCases := []struct {
desc string
settings *GovetSettings
expected string
}{
{
desc: "enable-all and disable-all",
settings: &GovetSettings{
EnableAll: true,
DisableAll: true,
},
expected: "govet: enable-all and disable-all can't be combined",
},
{
desc: "enable-all and enable",
settings: &GovetSettings{
EnableAll: true,
Enable: []string{"a"},
},
expected: "govet: enable-all and enable can't be combined",
},
{
desc: "disable-all and disable",
settings: &GovetSettings{
DisableAll: true,
Disable: []string{"a"},
},
expected: "govet: disable-all and disable can't be combined",
},
}
for _, test := range testCases {
test := test
t.Run(test.desc, func(t *testing.T) {
t.Parallel()
err := test.settings.Validate()
assert.EqualError(t, err, test.expected)
})
}
}