stop memoizing result of HaveField · onsi/gomega@3bdbc4e
@@ -17,7 +17,7 @@ func (e missingFieldError) Error() string {
1717return string(e)
1818}
191920-func extractField(actual interface{}, field string, matchername string) (interface{}, error) {
20+func extractField(actual interface{}, field string, matchername string) (any, error) {
2121fields := strings.SplitN(field, ".", 2)
2222actualValue := reflect.ValueOf(actual)
2323@@ -64,36 +64,46 @@ func extractField(actual interface{}, field string, matchername string) (interfa
6464type HaveFieldMatcher struct {
6565Field string
6666Expected interface{}
67+}
676868-extractedField interface{}
69-expectedMatcher omegaMatcher
69+func (matcher *HaveFieldMatcher) expectedMatcher() omegaMatcher {
70+var isMatcher bool
71+expectedMatcher, isMatcher := matcher.Expected.(omegaMatcher)
72+if !isMatcher {
73+expectedMatcher = &EqualMatcher{Expected: matcher.Expected}
74+ }
75+return expectedMatcher
7076}
71777278func (matcher *HaveFieldMatcher) Match(actual interface{}) (success bool, err error) {
73-matcher.extractedField, err = extractField(actual, matcher.Field, "HaveField")
79+extractedField, err := extractField(actual, matcher.Field, "HaveField")
7480if err != nil {
7581return false, err
7682 }
778378-var isMatcher bool
79-matcher.expectedMatcher, isMatcher = matcher.Expected.(omegaMatcher)
80-if !isMatcher {
81-matcher.expectedMatcher = &EqualMatcher{Expected: matcher.Expected}
82- }
83-84-return matcher.expectedMatcher.Match(matcher.extractedField)
84+return matcher.expectedMatcher().Match(extractedField)
8585}
86868787func (matcher *HaveFieldMatcher) FailureMessage(actual interface{}) (message string) {
88+extractedField, err := extractField(actual, matcher.Field, "HaveField")
89+if err != nil {
90+// this really shouldn't happen
91+return fmt.Sprintf("Failed to extract field '%s': %s", matcher.Field, err)
92+ }
8893message = fmt.Sprintf("Value for field '%s' failed to satisfy matcher.\n", matcher.Field)
89-message += matcher.expectedMatcher.FailureMessage(matcher.extractedField)
94+message += matcher.expectedMatcher().FailureMessage(extractedField)
90959196return message
9297}
93989499func (matcher *HaveFieldMatcher) NegatedFailureMessage(actual interface{}) (message string) {
100+extractedField, err := extractField(actual, matcher.Field, "HaveField")
101+if err != nil {
102+// this really shouldn't happen
103+return fmt.Sprintf("Failed to extract field '%s': %s", matcher.Field, err)
104+ }
95105message = fmt.Sprintf("Value for field '%s' satisfied matcher, but should not have.\n", matcher.Field)
96-message += matcher.expectedMatcher.NegatedFailureMessage(matcher.extractedField)
106+message += matcher.expectedMatcher().NegatedFailureMessage(extractedField)
9710798108return message
99109}