assert.ObjectsAreEqual: improve list/map support#1058
Conversation
Function `ObjectsAreEqual` now compares two objects of type array/slice/map by iterating over each element. When two objects contain the same value but have different types, the function will now return `true`.
|
Hi @harryzcy, Thanks for your fix. Do you have any idea when this fix will be released? |
No, I don't know when maintainers will review them. |
There was a problem hiding this comment.
This is a similar change to #1586 and I think it can be a welcome one.
Currently the doc for EqualValues says:
EqualValues asserts that two objects are equal or convertible to the larger type and equal.
That would need to change because this behavior is quite different. Probably a second sentence describing the behavior for lists and maps. Though I've often been hesitant to have a function with different behavior based on the value of its arguments. Would it be better to have a new assertion for this? Genuine question as I'm undecided.
Apologies for the delay in this review. I advise you read my last comment first.
|
I am very late to addressing those comments. Apologies. I have addresses those comments, and the PR is ready for review again.
I'm also not very sure on this. It does seems like slightly different behavior for different types are confusing. Would like to hear what other people think? If more people are leaning toward having a new assertion, I'm happy to do that instead. |
Summary
Function
ObjectsAreEqualnow compares two objects of type array/slice/map by iterating over each element. When two objects contain the same value but have different types, the function will now returntrue.Changes
ObjectsAreEqualValuesinassertion.gois changed.listsAreEqualValuesandmapsAreEqualValuesare added.Motivation
Currently,
assert.EqualValueswould fail when two objects are of type array/slice/map and contain values of different types.But,
assert.EqualValuesshould always compare objects by value. So the above code should idealy pass.Related issues
Closes #1057