mock icon indicating copy to clipboard operation
mock copied to clipboard

Add builtin custom matcher function

Open ilya-hontarau opened this issue 2 years ago • 1 comments

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)

ilya-hontarau avatar Feb 18 '23 16:02 ilya-hontarau

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

ichekrygin avatar Mar 16 '23 23:03 ichekrygin