12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package matchers
- import (
- "fmt"
- "reflect"
- "github.com/onsi/gomega/format"
- )
- type HaveKeyMatcher struct {
- Key interface{}
- }
- func (matcher *HaveKeyMatcher) Match(actual interface{}) (success bool, err error) {
- if !isMap(actual) {
- return false, fmt.Errorf("HaveKey matcher expects a map. Got:%s", format.Object(actual, 1))
- }
- keyMatcher, keyIsMatcher := matcher.Key.(omegaMatcher)
- if !keyIsMatcher {
- keyMatcher = &EqualMatcher{Expected: matcher.Key}
- }
- keys := reflect.ValueOf(actual).MapKeys()
- for i := 0; i < len(keys); i++ {
- success, err := keyMatcher.Match(keys[i].Interface())
- if err != nil {
- return false, fmt.Errorf("HaveKey's key matcher failed with:\n%s%s", format.Indent, err.Error())
- }
- if success {
- return true, nil
- }
- }
- return false, nil
- }
- func (matcher *HaveKeyMatcher) FailureMessage(actual interface{}) (message string) {
- switch matcher.Key.(type) {
- case omegaMatcher:
- return format.Message(actual, "to have key matching", matcher.Key)
- default:
- return format.Message(actual, "to have key", matcher.Key)
- }
- }
- func (matcher *HaveKeyMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- switch matcher.Key.(type) {
- case omegaMatcher:
- return format.Message(actual, "not to have key matching", matcher.Key)
- default:
- return format.Message(actual, "not to have key", matcher.Key)
- }
- }
|