Add builtin custom matcher function
ilya-hontarau opened this issue · 1 comments
ilya-hontarau commented
Requested feature
Add builtin custom matcher function
Why the feature is needed
Currently, we should implement Matcher interface in our own code, and it can be useful to provide the ability to create custom matcher using a function in the lib.
Proposed solution
We can create a constructor function, that accepts fmt.Stringer
, a match function and returns a new matcher.
mockMatcher.EXPECT().Matches(gomock.Custom(
gomock.StringerFunc(func() string {
return `expect string contains"test"`
}),
func(i interface{}) bool {
v, ok := i.(string)
if !ok {
return false
}
return strings.Contains(v, "test")
},
)).Return(true)
ichekrygin commented
With generics support, it could be something as simple as:
[NOT A CONTRIBUTION] 😮💨
type CustomMatcher[T any] struct {
value T
}
func (c *CustomMatcher[T]) Matches(value interface{}) bool {
return reflect.DeepEqual(c.value, value)
}
func (c *CustomMatcher[T]) String() string {
return fmt.Sprintf("%v", c.value)
}
func Custom[T any](value T) gomock.Matcher {
return &CustomMatcher[T]{
value: value,
}
}