1
0
mirror of https://github.com/mgechev/revive.git synced 2025-11-23 22:04:49 +02:00
Files
revive/rule/unused_receiver_test.go
Oleksandr Redko 9f5f957b33 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>
2025-03-28 09:34:20 +01:00

124 lines
3.4 KiB
Go

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)
}
})
}
}