On Wednesday 19 July 2006 18:10, Fergal Daly wrote: > On 20/07/06, chromatic <[EMAIL PROTECTED]> wrote:
> > On Thu, Jul 20, 2006 at 12:39:11AM +0100, Fergal Daly wrote: > > > Simple question. Given this code: > > > > > > sub foo { > > > my $thing; > > > is($thing->x(), "x"); # line 4 > > > is($thing->y(), "y"); > > > } > > > > > > $t1 = Thing->new(1); > > > foo($t1); # line 9 > > > $t2 = Thing->new(2); > > > foo($t2); > I'm talking about line numbers so adding a name is not relevant. > > Whether I add $T::B::L or not, I don't get any useful output. If you > disagree please show me your fixed version. sub foo :TestHelper { # this was just a typo; it's not part of my fix my $thing = shift; is($thing->x(), "x", 'checking x attribute'); is($thing->y(), "y", 'checking y attribute'); } This problem has two parts. You want two pieces of information to debug a failing test within foo(). The first is "Which object had the failure". The second is "Which test within the function failed?" 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! > > That boiler plate code tells Test::Builder *where* to report the call of > > the test. > What's your point? 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. > There's no guessing involved, the method is extremely straight forward > and always gets the right answer. By that I mean that it always finds > the spot where test script jumped into the test library. 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? What good does a stack trace do in a loop? > The problem is that a single position in the test script is not always > enough information to figure out what actually failed, That's why there are test descriptions too. -- c