mirror of
https://github.com/mgechev/revive.git
synced 2025-11-23 22:04:49 +02:00
134 lines
4.0 KiB
Go
134 lines
4.0 KiB
Go
package rule
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
"regexp"
|
|
"testing"
|
|
|
|
"github.com/mgechev/revive/lint"
|
|
)
|
|
|
|
func TestImportAliasNamingRule_Configure(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
arguments lint.Arguments
|
|
wantErr error
|
|
wantAllowRegex *regexp.Regexp
|
|
wantDenyRegex *regexp.Regexp
|
|
}{
|
|
{
|
|
name: "no arguments",
|
|
arguments: lint.Arguments{},
|
|
wantErr: nil,
|
|
wantAllowRegex: regexp.MustCompile("^[a-z][a-z0-9]{0,}$"), //nolint:gocritic // regexpSimplify: backward compatibility
|
|
wantDenyRegex: nil,
|
|
},
|
|
{
|
|
name: "valid string argument",
|
|
arguments: lint.Arguments{"^[a-z][a-z0-9]*$"},
|
|
wantErr: nil,
|
|
wantAllowRegex: regexp.MustCompile("^[a-z][a-z0-9]*$"),
|
|
wantDenyRegex: nil,
|
|
},
|
|
{
|
|
name: "valid map arguments",
|
|
arguments: lint.Arguments{map[string]any{
|
|
"allowRegex": "^[a-z][a-z0-9]*$",
|
|
"denyRegex": "^v\\d+$",
|
|
}},
|
|
wantErr: nil,
|
|
wantAllowRegex: regexp.MustCompile("^[a-z][a-z0-9]*$"),
|
|
wantDenyRegex: regexp.MustCompile(`^v\d+$`),
|
|
},
|
|
{
|
|
name: "valid map lowercased arguments",
|
|
arguments: lint.Arguments{map[string]any{
|
|
"allowregex": "^[a-z][a-z0-9]*$",
|
|
"denyregex": "^v\\d+$",
|
|
}},
|
|
wantErr: nil,
|
|
wantAllowRegex: regexp.MustCompile("^[a-z][a-z0-9]*$"),
|
|
wantDenyRegex: regexp.MustCompile(`^v\d+$`),
|
|
},
|
|
{
|
|
name: "valid map kebab-cased arguments",
|
|
arguments: lint.Arguments{map[string]any{
|
|
"allow-regex": "^[a-z][a-z0-9]*$",
|
|
"deny-regex": "^v\\d+$",
|
|
}},
|
|
wantErr: nil,
|
|
wantAllowRegex: regexp.MustCompile("^[a-z][a-z0-9]*$"),
|
|
wantDenyRegex: regexp.MustCompile(`^v\d+$`),
|
|
},
|
|
{
|
|
name: "invalid argument type",
|
|
arguments: lint.Arguments{123},
|
|
wantErr: errors.New(`invalid argument '123' for 'import-alias-naming' rule. Expecting string or map[string]string, got int`),
|
|
},
|
|
{
|
|
name: "invalid string argument regex",
|
|
arguments: lint.Arguments{"["},
|
|
wantErr: errors.New("invalid argument to the import-alias-naming allowRegexp rule. Expecting \"[\" to be a valid regular expression, got: error parsing regexp: missing closing ]: `[`"),
|
|
},
|
|
{
|
|
name: "invalid map key",
|
|
arguments: lint.Arguments{
|
|
map[string]any{
|
|
"unknownKey": "value",
|
|
},
|
|
},
|
|
wantErr: errors.New(`invalid map key for 'import-alias-naming' rule. Expecting 'allowRegex' or 'denyRegex', got unknownKey`),
|
|
},
|
|
{
|
|
name: "invalid allowRegex type",
|
|
arguments: lint.Arguments{map[string]any{
|
|
"allowRegex": 123,
|
|
}},
|
|
wantErr: errors.New("invalid argument '123' for import-alias-naming allowRegexp rule. Expecting string, got int"),
|
|
},
|
|
{
|
|
name: "invalid denyRegex type",
|
|
arguments: lint.Arguments{map[string]any{
|
|
"denyRegex": 123,
|
|
}},
|
|
wantErr: errors.New("invalid argument '123' for import-alias-naming denyRegexp rule. Expecting string, got int"),
|
|
},
|
|
{
|
|
name: "invalid denyRegex regex",
|
|
arguments: lint.Arguments{map[string]any{
|
|
"denyRegex": "[",
|
|
}},
|
|
wantErr: errors.New(`invalid argument to the import-alias-naming denyRegexp rule. Expecting "[" to be a valid regular expression, got: error parsing regexp: missing closing ]: ` + "`[`"),
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
var rule ImportAliasNamingRule
|
|
|
|
err := rule.Configure(tt.arguments)
|
|
|
|
if tt.wantErr != nil {
|
|
if err == nil {
|
|
t.Errorf("unexpected error: got = nil, want = %v", tt.wantErr)
|
|
return
|
|
}
|
|
if err.Error() != tt.wantErr.Error() {
|
|
t.Errorf("unexpected error: got = %v, want = %v", err, tt.wantErr)
|
|
}
|
|
return
|
|
}
|
|
if err != nil {
|
|
t.Errorf("unexpected error: got = %v, want = nil", err)
|
|
}
|
|
if !reflect.DeepEqual(rule.allowRegexp, tt.wantAllowRegex) {
|
|
t.Errorf("unexpected allowRegex: got = %v, want %v", rule.allowRegexp, tt.wantAllowRegex)
|
|
}
|
|
if !reflect.DeepEqual(rule.denyRegexp, tt.wantDenyRegex) {
|
|
t.Errorf("unexpected denyRegexp: got = %v, want %v", rule.denyRegexp, tt.wantDenyRegex)
|
|
}
|
|
})
|
|
}
|
|
}
|