Hi all, I am trying to rectify a 'bug' that I've created, and hence wrote a test for.
The code is within an error module, which is allowed to die() the program upon failure. To compensate for this within the test, I use eval(). In this case however, I'm testing an 'add_trace()' method, that dies if the caller supplies a param to step back one level before adding parts of the trace. Hence, I'm expecting death, but I don't get it. Death only comes when I run the test outside of the eval() scope. My question is, how do I remove the 'eval' wrapping from the stack after I eval() the code I'm trying to execute to get my breakage? Or, iow, how can I better write my add_trace() method? ... # add_trace() follows # test # # test # { # add_trace with param, but with an improper caller stack position _reset(); eval { $error->add_trace( 1 ) }; like ( $@, '/Bad API/', "add_trace() with a param when you are a first-level " . "caller() results in death via ISP::Error" ); } # # add_trace() # sub add_trace { my $self = shift; my $step_back = shift; $self->function_orders(); if ( $step_back ) { my $valid_caller = ( caller(1) )[0]; if ( ! $valid_caller ) { my $message = "blah..."; # appended with 'Bad API' later.. $self->bad_api( $message ); } unshift @{ $self->{ stack } }, { package => ( caller(1) )[0], filename => ( caller(1) )[1], line => ( caller(1) )[2], sub => ( caller(2) )[3] || '', }; return 1; } unshift @{ $self->{ stack } }, { package => ( caller(0) )[0], filename => ( caller(0) )[1], line => ( caller(0) )[2], sub => ( caller(1) )[3] || '', }; return 0; } Steve -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/