7 "github.com/onsi/gomega/format"
10 type ContainElementMatcher struct {
14 func (matcher *ContainElementMatcher) Match(actual interface{}) (success bool, err error) {
15 if !isArrayOrSlice(actual) && !isMap(actual) {
16 return false, fmt.Errorf("ContainElement matcher expects an array/slice/map. Got:\n%s", format.Object(actual, 1))
19 elemMatcher, elementIsMatcher := matcher.Element.(omegaMatcher)
20 if !elementIsMatcher {
21 elemMatcher = &EqualMatcher{Expected: matcher.Element}
24 value := reflect.ValueOf(actual)
25 var keys []reflect.Value
27 keys = value.MapKeys()
30 for i := 0; i < value.Len(); i++ {
34 success, err = elemMatcher.Match(value.MapIndex(keys[i]).Interface())
36 success, err = elemMatcher.Match(value.Index(i).Interface())
47 return false, lastError
50 func (matcher *ContainElementMatcher) FailureMessage(actual interface{}) (message string) {
51 return format.Message(actual, "to contain element matching", matcher.Element)
54 func (matcher *ContainElementMatcher) NegatedFailureMessage(actual interface{}) (message string) {
55 return format.Message(actual, "not to contain element matching", matcher.Element)