123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package gstruct
- import (
- "fmt"
- "reflect"
- "github.com/onsi/gomega/format"
- "github.com/onsi/gomega/types"
- )
- //PointTo applies the given matcher to the value pointed to by actual. It fails if the pointer is
- //nil.
- // actual := 5
- // Expect(&actual).To(PointTo(Equal(5)))
- func PointTo(matcher types.GomegaMatcher) types.GomegaMatcher {
- return &PointerMatcher{
- Matcher: matcher,
- }
- }
- type PointerMatcher struct {
- Matcher types.GomegaMatcher
- // Failure message.
- failure string
- }
- func (m *PointerMatcher) Match(actual interface{}) (bool, error) {
- val := reflect.ValueOf(actual)
- // return error if actual type is not a pointer
- if val.Kind() != reflect.Ptr {
- return false, fmt.Errorf("PointerMatcher expects a pointer but we have '%s'", val.Kind())
- }
- if !val.IsValid() || val.IsNil() {
- m.failure = format.Message(actual, "not to be <nil>")
- return false, nil
- }
- // Forward the value.
- elem := val.Elem().Interface()
- match, err := m.Matcher.Match(elem)
- if !match {
- m.failure = m.Matcher.FailureMessage(elem)
- }
- return match, err
- }
- func (m *PointerMatcher) FailureMessage(_ interface{}) (message string) {
- return m.failure
- }
- func (m *PointerMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return m.Matcher.NegatedFailureMessage(actual)
- }
|