12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- package oglematchers
- import (
- "errors"
- "fmt"
- "reflect"
- "strings"
- )
- func AnyOf(vals ...interface{}) Matcher {
-
- var dummy *Matcher
- matcherType := reflect.TypeOf(dummy).Elem()
-
-
- wrapped := make([]Matcher, len(vals))
- for i, v := range vals {
- t := reflect.TypeOf(v)
- if t != nil && t.Implements(matcherType) {
- wrapped[i] = v.(Matcher)
- } else {
- wrapped[i] = Equals(v)
- }
- }
- return &anyOfMatcher{wrapped}
- }
- type anyOfMatcher struct {
- wrapped []Matcher
- }
- func (m *anyOfMatcher) Description() string {
- wrappedDescs := make([]string, len(m.wrapped))
- for i, matcher := range m.wrapped {
- wrappedDescs[i] = matcher.Description()
- }
- return fmt.Sprintf("or(%s)", strings.Join(wrappedDescs, ", "))
- }
- func (m *anyOfMatcher) Matches(c interface{}) (err error) {
- err = errors.New("")
-
- for _, matcher := range m.wrapped {
- wrappedErr := matcher.Matches(c)
-
- if wrappedErr == nil {
- err = nil
- return
- }
-
- if _, isFatal := wrappedErr.(*FatalError); isFatal {
- err = wrappedErr
- }
- }
- return
- }
|