func TestMatchers(t *testing.T) { type e interface{} type testCase struct { matcher gomock.Matcher yes, no []e } tests := []testCase{ testCase{gomock.Any(), []e{3, nil, "foo"}, nil}, testCase{gomock.Eq(4), []e{4}, []e{3, "blah", nil, int64(4)}}, testCase{gomock.Nil(), []e{nil, (error)(nil), (chan bool)(nil), (*int)(nil)}, []e{"", 0, make(chan bool), errors.New("err"), new(int)}}, testCase{gomock.Not(gomock.Eq(4)), []e{3, "blah", nil, int64(4)}, []e{4}}, } for i, test := range tests { for _, x := range test.yes { if !test.matcher.Matches(x) { t.Errorf(`test %d: "%v %s" should be true.`, i, x, test.matcher) } } for _, x := range test.no { if test.matcher.Matches(x) { t.Errorf(`test %d: "%v %s" should be false.`, i, x, test.matcher) } } } }
// A more thorough test of notMatcher func TestNotMatcher(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() mockMatcher := mock_matcher.NewMockMatcher(ctrl) notMatcher := gomock.Not(mockMatcher) mockMatcher.EXPECT().Matches(4).Return(true) if match := notMatcher.Matches(4); match { t.Errorf("notMatcher should not match 4") } mockMatcher.EXPECT().Matches(5).Return(false) if match := notMatcher.Matches(5); !match { t.Errorf("notMatcher should match 5") } }