Good catch Mariano -- I have run your test on Squeak and fixed a couple of instances there too.
On Wed, May 30, 2012 at 7:05 AM, Mariano Martinez Peck <[email protected]> wrote: > Hi guys. I found a problem while working with FuelPreview where we store > objects of the graph in a Set. While doing a collect, there was an error > because an implementation of #= was assuming that the argument was of a > certain shape. Of course, that should answer false instead. So I wrote this > test to see all existing wrong implementations: > > testAllClassesImplementSafeEqualsMethod > "This tests that all classes in the system that implements #= do it in a way > that they don't throw error when passing as an argument something different > from expected. The correct behavior is that #= answers false." > | wrongClasses | > wrongClasses := IdentityDictionary new. > ((SystemNavigation default allImplementorsOf: #=) > collect: [:each | each methodClass]) > do: [:each | > | instance | > "Some classes like CompiledMethod override basicNew to throw > an error. > In any case, the comparison will be false, so no problem" > [instance := each basicNew] on: Error do: []. > [instance = Object new] > on: Error > do: [: err | wrongClasses at: each put: err ]]. > self assert: wrongClasses isEmpty > > > The result is: {Magnitude. WideCharacterSet. KMKeymap. MCMockDefinition. > ScaledDecimal. MCSnapshot} > > So, my I think we should change #= in those classes by adding: > > self == aKeymap > ifTrue: [ ^ true ]. > self class = aKeymap class > ifFalse: [ ^ false ]. > > at the beginning of the #= > > what do you think? if agree, I open an issue. > > > -- > Mariano > http://marianopeck.wordpress.com >
