1
0
mirror of https://github.com/mgechev/revive.git synced 2025-11-23 22:04:49 +02:00
Files
revive/rule/exported_test.go

179 lines
4.5 KiB
Go
Raw Normal View History

package rule
import (
"errors"
"testing"
"github.com/mgechev/revive/lint"
)
func TestExportedRule_Configure(t *testing.T) {
tests := []struct {
name string
arguments lint.Arguments
wantErr error
wantDisabledChecks disabledChecks
wantIsRepetitiveMsg string
}{
{
name: "default configuration",
arguments: lint.Arguments{},
wantErr: nil,
wantDisabledChecks: disabledChecks{
PrivateReceivers: true,
PublicInterfaces: true,
},
wantIsRepetitiveMsg: "stutters",
},
{
name: "valid arguments",
arguments: lint.Arguments{
"checkPrivateReceivers",
"disableStutteringCheck",
"checkPublicInterface",
"disableChecksOnConstants",
"disableChecksOnFunctions",
"disableChecksOnMethods",
"disableChecksOnTypes",
"disableChecksOnVariables",
},
wantErr: nil,
wantDisabledChecks: disabledChecks{
PrivateReceivers: false,
PublicInterfaces: false,
Const: true,
Function: true,
Method: true,
RepetitiveNames: true,
Type: true,
Var: true,
},
wantIsRepetitiveMsg: "stutters",
},
{
name: "valid lowercased arguments",
arguments: lint.Arguments{
"checkprivatereceivers",
"disablestutteringcheck",
"checkpublicinterface",
"disablechecksonconstants",
"disablechecksonfunctions",
"disablechecksonmethods",
"disablechecksontypes",
"disablechecksonvariables",
},
wantErr: nil,
wantDisabledChecks: disabledChecks{
PrivateReceivers: false,
PublicInterfaces: false,
Const: true,
Function: true,
Method: true,
RepetitiveNames: true,
Type: true,
Var: true,
},
wantIsRepetitiveMsg: "stutters",
},
{
name: "valid kebab-cased arguments",
arguments: lint.Arguments{
"check-private-receivers",
"disable-stuttering-check",
"check-public-interface",
"disable-checks-on-constants",
"disable-checks-on-functions",
"disable-checks-on-methods",
"disable-checks-on-types",
"disable-checks-on-variables",
},
wantErr: nil,
wantDisabledChecks: disabledChecks{
PrivateReceivers: false,
PublicInterfaces: false,
Const: true,
Function: true,
Method: true,
RepetitiveNames: true,
Type: true,
Var: true,
},
wantIsRepetitiveMsg: "stutters",
},
{
name: "valid sayRepetitiveInsteadOfStutters",
arguments: lint.Arguments{
"sayRepetitiveInsteadOfStutters",
},
wantErr: nil,
wantDisabledChecks: disabledChecks{
PrivateReceivers: true,
PublicInterfaces: true,
},
wantIsRepetitiveMsg: "is repetitive",
},
{
name: "valid lowercased sayRepetitiveInsteadOfStutters",
arguments: lint.Arguments{
"sayrepetitiveinsteadofstutters",
},
wantErr: nil,
wantDisabledChecks: disabledChecks{
PrivateReceivers: true,
PublicInterfaces: true,
},
wantIsRepetitiveMsg: "is repetitive",
},
{
name: "valid kebab-cased sayRepetitiveInsteadOfStutters",
arguments: lint.Arguments{
"say-repetitive-instead-of-stutters",
},
wantErr: nil,
wantDisabledChecks: disabledChecks{
PrivateReceivers: true,
PublicInterfaces: true,
},
wantIsRepetitiveMsg: "is repetitive",
},
{
name: "unknown configuration flag",
arguments: lint.Arguments{"unknownFlag"},
wantErr: errors.New("unknown configuration flag unknownFlag for exported rule"),
},
{
name: "invalid argument type",
arguments: lint.Arguments{123},
wantErr: errors.New("invalid argument for the exported rule: expecting a string, got int"),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var rule ExportedRule
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 rule.disabledChecks != tt.wantDisabledChecks {
t.Errorf("unexpected disabledChecks: got = %+v, want %+v", rule.disabledChecks, tt.wantDisabledChecks)
}
if rule.isRepetitiveMsg != tt.wantIsRepetitiveMsg {
t.Errorf("unexpected stuttersMsg: got = %v, want %v", rule.isRepetitiveMsg, tt.wantIsRepetitiveMsg)
}
})
}
}