On Thursday 20 July 2006 02:59, Fergal Daly wrote:

> > There already exist two long-accepted, well-understood, coded, tested,
> > and debugged ways to answer both questions.  I don't see the value in
> > adding a third, especially when it's not substantially better than either
> > and can be wrong in other circumstances!
>
> What circumstances? Example please.

In a deep call stack beyond the $Level.

> Without stack traces, here's the only way I know to use subroutines
> safely in test scripts.

> sub foo {
>  my ($thing, $name) = @_;
>  is($thing->x(), "x", "checking x in $name"); # line 4
>  is($thing->y(), "y", "checking y in $name");
> }

You forgot $Level or :TestHelper.  Was this an accident or deliberate?

> > Your patch relies on $Level too, as it calls the caller() *method* within
> > Test::Builder.  If someone has not set it correctly, your patch will
> > report the wrong information.
>
> Someone? Who? If there's a bug in one of the Test::XXX modules then
> yes the stack trace could be wong but that's a bug that needs to be
> fixed and is not a problem with my patch.

I thought that was the problem you were trying to fix: reporting the wrong 
location.

If your patch doesn't fix that, I'm not sure what the point is.  Why report 
extra information if you know it's not reliable?

> > sub an_extra_level
> > {
> >         ok( $_[0], $_[1], $_[2] );
> > }
> >
> > sub another_extra_level
> > {
> >         an_extra_level( @_ );
> > }
> >
> > sub yet_another_extra_level
> > {
> >         another_extra_level( @_ );
> > }
> >
> > sub still_more_extra_levels
> > {
> >         yet_another_extra_level( @_ );
> > }
> >
> > still_more_extra_levels( $have, $want, $diagnostic );
> >
> > Where do you start debugging that?

> With a stack trace it's pretty easy.

Yes, you *merely* check *every* level reported in the stack trace to find the 
place that the call to the test function *may* have occurred, hoping that 
someone set $Level appropriately.

I don't really want to grovel through extra information that I know probably 
isn't useful by default.  If Schwern is amenable, I wouldn't complain too 
much if this were an option for the person running the test (probably set 
through an environment variable), but it's too much information that I don't 
trust to be useful for a default.

> > That's why there are test descriptions too.
> But some people don't like having to provide names

Yes, some people write bad code.  I don't think there's an algorithmic way to 
fix that.

-- c

Reply via email to