Awesome!! Thank you so much for fixing it so quickly and being tolerant of
my lack of knowledge. I have to say I am once again impressed by the
smalltalk community. Thank you.

On Wed, Jun 29, 2011 at 11:11 PM, Ramon Leon <[email protected]>wrote:

> On 06/29/2011 05:40 PM, David Zmick wrote:
>
>> Okay. So I wrote a test case with similar behavior and it worked
>> correctly, but the difference between the test case objects and my
>> objects is that all of the test case objects are active records that get
>> saved, not just the top level object as in my code.
>>
>
> Nope, that wasn't the difference that mattered.  You did find a bug, an
> interesting one, but your test code was overly complex hiding what was
> really going on.  Here's a simpler test case that exposes the bug more
> directly.
>
> testObjectFoundMultipleTimesIn**Aggregate
>        | obj key |
>        obj := SDPersonMock new.
>        obj children: Dictionary new.
>        key := Object new.
>
>        "store ref to key in two places"
>        obj children at: key put: 1.
>        obj children at: 1 put: key.
>
>        self deny: (obj children keys includes: nil).
>        self deny: (obj children values includes: nil).
>        obj save.
>        self flushAndReload.
>        self deny: (obj children keys includes: nil).
>        self deny: (obj children values includes: nil)
>
> The bug has been fixed, pull down the latest code from SqueakSource and
> your code with work fine.  As you can see from the test case above, the
> issue was related to an object being references in multiple places inside an
> active record.  During serialization, this exposed a silly bug in the deep
> copy that I think I introduced recently with a round of refactoring.  Thanks
> for the bug report.
>
>
> --
> Ramon Leon
> http://onsmalltalk.com
>
>


-- 
David Zmick
[email protected]

Reply via email to