On Tue, Sep 09, 2003 at 05:49:47PM +0100, Fergal Daly wrote:
> > my $str1 = MyString->new("foo", "bar");
> > my $str2 = MyOtherString->new("foo", "baz");
> 
> Now they _do_ differ by more than just class and it should be a fail, although 
> I must admit that even with the current is_deeply it will be a pass. I 
> consider that a bug and it's something I avoided in Test::Deep by using 
> Scalar::Util::refaddr, I just never backported that to Test::More.

This, coupled with the post to p5p, makes me think that the main issue
here has nothing to do with overloading at all, but as to whether
is_deeply is meant to descend into an object that happens to be
implemented via a blessed datastructure.

I don't believe it should - if you need that there should another
method. 

> The reason I want it to fail is because if I pass these objects (and they are 
> definitely objects, they're only strings if you squint) 

This is where we differ in opinion as well.

It's not a matter of squinting. In the case of overload::string, and
similarly with tie(), the user may not even know that these are objects.
When asked to be a string they'll act as one, and that's good enough for
most uses. That's the point of providing this functionality in perl.

> Or if I pass them to a function that behaves differently for strings
> and objects, I'll get the object behaviour, not the string behaviour.

Depending on the behaviour, that's probably a bug in that function...

> "Mr deeply please check that datastructure and tell me if it's an array of a 
> type 5 widgets"
> "I checked and it's exactly what you asked for no way could it be anything 
> different"
> 
> Scenario B:
> "Mr deeply please check that datastructure and tell me if it's an array of a 
> type 5 widgets"
> "Well, some of them definitely were and some of them had labels on them that 
> said they were so I didn't bother checking those"
> "which ones has labels?"
> "none of them, all of them, some of them, I can't remember. Relax it's only 
> testing. Look at them yourself if you want to be sure"

Most of the time people shouldn't care. If the thing is sufficiently
masquerading as a type 5 widget you shouldn't care - that's purely an
implementation detail.

If you *really* need to care then you should use something other than
is_deeply. 

Tony

Reply via email to