20
20
import static com .google .common .collect .Lists .asList ;
21
21
import static com .google .common .truth .extensions .proto .FieldScopeUtil .asList ;
22
22
23
+ import com .google .common .base .Objects ;
23
24
import com .google .common .truth .FailureMetadata ;
24
25
import com .google .common .truth .Subject ;
25
26
import com .google .protobuf .Descriptors .FieldDescriptor ;
@@ -117,9 +118,17 @@ public ProtoFluentAssertion reportingMismatchesOnly() {
117
118
return usingConfig (config .reportingMismatchesOnly ());
118
119
}
119
120
121
+ private static boolean notMessagesWithSameDescriptor (
122
+ @ Nullable Message actual , @ Nullable Object expected ) {
123
+ if (actual != null && expected instanceof Message ) {
124
+ return actual .getDescriptorForType () != ((Message ) expected ).getDescriptorForType ();
125
+ }
126
+ return true ;
127
+ }
128
+
120
129
@ Override
121
130
public void isEqualTo (@ Nullable Object expected ) {
122
- if (actual () == null || expected == null || actual (). getClass () != expected . getClass ( )) {
131
+ if (notMessagesWithSameDescriptor ( actual (), expected )) {
123
132
super .isEqualTo (expected );
124
133
} else {
125
134
DiffResult diffResult = makeDifferencer ().diffMessages (actual (), (Message ) expected );
@@ -137,24 +146,22 @@ public void isEqualTo(@Nullable Object expected) {
137
146
* without throwing any exceptions.
138
147
*/
139
148
boolean testIsEqualTo (@ Nullable Object expected ) {
140
- if (actual () == null || expected == null ) {
141
- return actual () == expected ; // Only true if both null.
142
- } else if (actual ().getClass () != expected .getClass ()) {
143
- return false ;
149
+ if (notMessagesWithSameDescriptor (actual (), expected )) {
150
+ return Objects .equal (actual (), expected );
144
151
} else {
145
152
return makeDifferencer ().diffMessages (actual (), (Message ) expected ).isMatched ();
146
153
}
147
154
}
148
155
149
156
@ Override
150
157
public void isNotEqualTo (@ Nullable Object expected ) {
151
- if (actual () == null || expected == null || actual (). getClass () != expected . getClass ( )) {
158
+ if (notMessagesWithSameDescriptor ( actual (), expected )) {
152
159
super .isNotEqualTo (expected );
153
160
} else {
154
161
DiffResult diffResult = makeDifferencer ().diffMessages (actual (), (Message ) expected );
155
162
if (diffResult .isMatched ()) {
156
163
failWithRawMessage (
157
- failureMessage (/* expectedEqual = */ false )
164
+ failureMessage (/* expectedEqual= */ false )
158
165
+ "\n "
159
166
+ diffResult .printToString (config .reportMismatchesOnly ()));
160
167
}
0 commit comments