On Wednesday 31 July 2002 12:39, Michael G Schwern wrote: > > This patch captures messages sent through diag() and stores them in the > > diagnostic array. Now all of the information the tests generate is > > available for later inspection.
> Dude, where's my patch? Did I completely miss it? Let's try this instead. -- c
diff -ur Test-Simple-0.46~/lib/Test/Builder.pm Test-Simple-0.46/lib/Test/Builder.pm --- Test-Simple-0.46~/lib/Test/Builder.pm Sat Jul 20 17:16:02 2002 +++ Test-Simple-0.46/lib/Test/Builder.pm Sat Jul 27 09:39:22 2002 @@ -296,7 +296,7 @@ my $todo = $self->todo($pack); my $out; - my $result = {}; + my $result = $Test_Results[$Curr_Test-1] ||= {}; unless( $test ) { $out .= "not "; @@ -329,7 +329,6 @@ $result->{type} = ''; } - $Test_Results[$Curr_Test-1] = $result; $out .= "\n"; $self->_print($out); @@ -658,13 +657,8 @@ lock($Curr_Test); $Curr_Test++; - $Test_Results[$Curr_Test-1] = { - 'ok' => 1, - actual_ok => 1, - name => '', - type => 'skip', - reason => $why, - }; + my $results = $Test_Results[$Curr_Test-1] ||= {}; + @$results{qw( ok actual_ok name type reason )} = ( 1, 1, '', 'skip', $why ); my $out = "ok"; $out .= " $Curr_Test" if $self->use_numbers; @@ -700,13 +694,9 @@ lock($Curr_Test); $Curr_Test++; - $Test_Results[$Curr_Test-1] = { - 'ok' => 1, - actual_ok => 0, - name => '', - type => 'todo_skip', - reason => $why, - }; + my $results = $Test_Results[$Curr_Test-1] ||= {}; + @$results{qw( ok actual_ok name type reason )} = + ( 1, 0, '', 'todo_skip', $why ); my $out = "not ok"; $out .= " $Curr_Test" if $self->use_numbers; @@ -897,6 +887,10 @@ my $fh = $self->todo ? $self->todo_output : $self->failure_output; local($\, $", $,) = (undef, ' ', ''); print $fh @msgs; + my $prev_test = $Curr_Test - 1; + $prev_test = 0 if $prev_test < 0; + $Test_Results[ $prev_test ]{diag} ||= []; + push @{ $Test_Results[ $prev_test ]{diag} }, @msgs; return 0; } @@ -1350,7 +1344,7 @@ In perl 5.8.0 and later, Test::Builder is thread-safe. The test number is shared amongst all threads. This means if one thread sets -the test number using current_test() they will all be effected. +the test number using current_test() they will all be affected. =head1 EXAMPLES diff -ur Test-Simple-0.46~/t/details.t Test-Simple-0.46/t/details.t --- Test-Simple-0.46~/t/details.t Sat Jul 20 17:08:36 2002 +++ Test-Simple-0.46/t/details.t Sat Jul 27 08:45:45 2002 @@ -47,6 +47,7 @@ TODO: { local $TODO = 'i need a todo'; +#line 50 $Test->ok( 0, 'a test to todo!' ); push @Expected_Details, { 'ok' => 1, @@ -54,6 +55,7 @@ name => 'a test to todo!', type => 'todo', reason => 'i need a todo', + diag => [ "# Failed (TODO) test ($0 at line 50)\n" ], }; $Test->todo_skip( 'i need both' ); @@ -76,15 +78,19 @@ reason => '', }; + $Test->current_test(6); + print "ok 6 - current_test incremented\n"; push @Expected_Details, { 'ok' => 1, actual_ok => undef, name => undef, type => 'unknown', reason => 'incrementing test number', + diag => [ '# Added', '# diagnostics', "\n" ], }; +$Test->diag(qw( Added diagnostics )); my @details = $Test->details(); $Test->is_num( scalar @details, 6, 'details() should return a list of all test details');