@@ -17,7 +17,7 @@ func (e missingFieldError) Error() string {
17
17
return string (e )
18
18
}
19
19
20
- func extractField (actual interface {}, field string , matchername string ) (interface {} , error ) {
20
+ func extractField (actual interface {}, field string , matchername string ) (any , error ) {
21
21
fields := strings .SplitN (field , "." , 2 )
22
22
actualValue := reflect .ValueOf (actual )
23
23
@@ -64,36 +64,46 @@ func extractField(actual interface{}, field string, matchername string) (interfa
64
64
type HaveFieldMatcher struct {
65
65
Field string
66
66
Expected interface {}
67
+ }
67
68
68
- 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
70
76
}
71
77
72
78
func (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" )
74
80
if err != nil {
75
81
return false , err
76
82
}
77
83
78
- 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 )
85
85
}
86
86
87
87
func (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
+ }
88
93
message = 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 )
90
95
91
96
return message
92
97
}
93
98
94
99
func (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
+ }
95
105
message = 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 )
97
107
98
108
return message
99
109
}
0 commit comments