mirror of
https://github.com/mgechev/revive.git
synced 2025-11-23 22:04:49 +02:00
rule: allow lowercased and kebab-cased options (#1272)
* rule: tests for Configure with named options; fix errors * rule: refactor and add tests for ifelse rules * rule: allow lowercased and kebab-cased options * test: update integration tests with lowercased params * docs: update rules descriptions * rule: simplify Configure implementation with one option * gofmt and fix lint * review: add isRuleOption, update grammar in doc, simplify regex Co-authored-by: ccoVeille <3875889+ccoVeille@users.noreply.github.com> --------- Co-authored-by: ccoVeille <3875889+ccoVeille@users.noreply.github.com>
This commit is contained in:
123
rule/unused_receiver_test.go
Normal file
123
rule/unused_receiver_test.go
Normal file
@@ -0,0 +1,123 @@
|
||||
package rule
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"regexp"
|
||||
"testing"
|
||||
|
||||
"github.com/mgechev/revive/lint"
|
||||
)
|
||||
|
||||
func TestUnusedReceiverRule_Configure(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
arguments lint.Arguments
|
||||
wantErr error
|
||||
wantRegex *regexp.Regexp
|
||||
wantFailureMsg string
|
||||
}{
|
||||
{
|
||||
name: "no arguments",
|
||||
arguments: lint.Arguments{},
|
||||
wantErr: nil,
|
||||
wantRegex: regexp.MustCompile("^_$"),
|
||||
wantFailureMsg: "method receiver '%s' is not referenced in method's body, consider removing or renaming it as _",
|
||||
},
|
||||
{
|
||||
name: "valid arguments",
|
||||
arguments: lint.Arguments{
|
||||
map[string]any{
|
||||
"allowRegex": "^_",
|
||||
},
|
||||
},
|
||||
wantErr: nil,
|
||||
wantRegex: regexp.MustCompile("^_"),
|
||||
wantFailureMsg: "method receiver '%s' is not referenced in method's body, consider removing or renaming it to match ^_",
|
||||
},
|
||||
{
|
||||
name: "valid lowercased arguments",
|
||||
arguments: lint.Arguments{
|
||||
map[string]any{
|
||||
"allowregex": "^_",
|
||||
},
|
||||
},
|
||||
wantErr: nil,
|
||||
wantRegex: regexp.MustCompile("^_"),
|
||||
wantFailureMsg: "method receiver '%s' is not referenced in method's body, consider removing or renaming it to match ^_",
|
||||
},
|
||||
{
|
||||
name: "valid kebab-cased arguments",
|
||||
arguments: lint.Arguments{
|
||||
map[string]any{
|
||||
"allow-regex": "^_",
|
||||
},
|
||||
},
|
||||
wantErr: nil,
|
||||
wantRegex: regexp.MustCompile("^_"),
|
||||
wantFailureMsg: "method receiver '%s' is not referenced in method's body, consider removing or renaming it to match ^_",
|
||||
},
|
||||
{
|
||||
name: "argument is not a map",
|
||||
arguments: lint.Arguments{
|
||||
"invalid_argument",
|
||||
},
|
||||
wantErr: nil,
|
||||
wantFailureMsg: "method receiver '%s' is not referenced in method's body, consider removing or renaming it as _",
|
||||
},
|
||||
{
|
||||
name: "missing allowRegex key",
|
||||
arguments: lint.Arguments{
|
||||
map[string]any{},
|
||||
},
|
||||
wantErr: nil,
|
||||
wantRegex: allowBlankIdentifierRegex,
|
||||
wantFailureMsg: "method receiver '%s' is not referenced in method's body, consider removing or renaming it as _",
|
||||
},
|
||||
{
|
||||
name: "invalid allowRegex type",
|
||||
arguments: lint.Arguments{
|
||||
map[string]any{
|
||||
"allowRegex": 123,
|
||||
},
|
||||
},
|
||||
wantErr: errors.New("error configuring [unused-receiver] rule: allowRegex is not string but [int]"),
|
||||
},
|
||||
{
|
||||
name: "invalid allowRegex value",
|
||||
arguments: lint.Arguments{
|
||||
map[string]any{
|
||||
"allowRegex": "[invalid",
|
||||
},
|
||||
},
|
||||
wantErr: errors.New("error configuring [unused-receiver] rule: allowRegex is not valid regex [[invalid]: error parsing regexp: missing closing ]: `[invalid`"),
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
var rule UnusedReceiverRule
|
||||
|
||||
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 tt.wantRegex != nil && rule.allowRegex.String() != tt.wantRegex.String() {
|
||||
t.Errorf("unexpected allowRegex: got = %v, want = %v", rule.allowRegex.String(), tt.wantRegex.String())
|
||||
}
|
||||
if tt.wantFailureMsg != rule.failureMsg {
|
||||
t.Errorf("unexpected failureMsg: got = %v, want = %v", rule.failureMsg, tt.wantFailureMsg)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user