1package Test::Builder; 2 3use 5.006; 4use strict; 5use warnings; 6 7our $VERSION = '1.302175'; 8 9BEGIN { 10 if( $] < 5.008 ) { 11 require Test::Builder::IO::Scalar; 12 } 13} 14 15use Scalar::Util qw/blessed reftype weaken/; 16 17use Test2::Util qw/USE_THREADS try get_tid/; 18use Test2::API qw/context release/; 19# Make Test::Builder thread-safe for ithreads. 20BEGIN { 21 warn "Test::Builder was loaded after Test2 initialization, this is not recommended." 22 if Test2::API::test2_init_done() || Test2::API::test2_load_done(); 23 24 if (USE_THREADS && ! Test2::API::test2_ipc_disabled()) { 25 require Test2::IPC; 26 require Test2::IPC::Driver::Files; 27 Test2::IPC::Driver::Files->import; 28 Test2::API::test2_ipc_enable_polling(); 29 Test2::API::test2_no_wait(1); 30 } 31} 32 33use Test2::Event::Subtest; 34use Test2::Hub::Subtest; 35 36use Test::Builder::Formatter; 37use Test::Builder::TodoDiag; 38 39our $Level = 1; 40our $Test = $ENV{TB_NO_EARLY_INIT} ? undef : Test::Builder->new; 41 42sub _add_ts_hooks { 43 my $self = shift; 44 45 my $hub = $self->{Stack}->top; 46 47 # Take a reference to the hash key, we do this to avoid closing over $self 48 # which is the singleton. We use a reference because the value could change 49 # in rare cases. 50 my $epkgr = \$self->{Exported_To}; 51 52 #$hub->add_context_aquire(sub {$_[0]->{level} += $Level - 1}); 53 54 $hub->pre_filter(sub { 55 my ($active_hub, $e) = @_; 56 57 my $epkg = $$epkgr; 58 my $cpkg = $e->{trace} ? $e->{trace}->{frame}->[0] : undef; 59 60 no strict 'refs'; 61 no warnings 'once'; 62 my $todo; 63 $todo = ${"$cpkg\::TODO"} if $cpkg; 64 $todo = ${"$epkg\::TODO"} if $epkg && !$todo; 65 66 return $e unless defined($todo); 67 return $e unless length($todo); 68 69 # Turn a diag into a todo diag 70 return Test::Builder::TodoDiag->new(%$e) if ref($e) eq 'Test2::Event::Diag'; 71 72 $e->set_todo($todo) if $e->can('set_todo'); 73 $e->add_amnesty({tag => 'TODO', details => $todo}); 74 75 # Set todo on ok's 76 if ($e->isa('Test2::Event::Ok')) { 77 $e->set_effective_pass(1); 78 79 if (my $result = $e->get_meta(__PACKAGE__)) { 80 $result->{reason} ||= $todo; 81 $result->{type} ||= 'todo'; 82 $result->{ok} = 1; 83 } 84 } 85 86 return $e; 87 }, inherit => 1); 88} 89 90{ 91 no warnings; 92 INIT { 93 use warnings; 94 Test2::API::test2_load() unless Test2::API::test2_in_preload(); 95 } 96} 97 98sub new { 99 my($class) = shift; 100 unless($Test) { 101 $Test = $class->create(singleton => 1); 102 103 Test2::API::test2_add_callback_post_load( 104 sub { 105 $Test->{Original_Pid} = $$ if !$Test->{Original_Pid} || $Test->{Original_Pid} == 0; 106 $Test->reset(singleton => 1); 107 $Test->_add_ts_hooks; 108 } 109 ); 110 111 # Non-TB tools normally expect 0 added to the level. $Level is normally 1. So 112 # we only want the level to change if $Level != 1. 113 # TB->ctx compensates for this later. 114 Test2::API::test2_add_callback_context_aquire(sub { $_[0]->{level} += $Level - 1 }); 115 116 Test2::API::test2_add_callback_exit(sub { $Test->_ending(@_) }); 117 118 Test2::API::test2_ipc()->set_no_fatal(1) if Test2::API::test2_has_ipc(); 119 } 120 return $Test; 121} 122 123sub create { 124 my $class = shift; 125 my %params = @_; 126 127 my $self = bless {}, $class; 128 if ($params{singleton}) { 129 $self->{Stack} = Test2::API::test2_stack(); 130 } 131 else { 132 $self->{Stack} = Test2::API::Stack->new; 133 $self->{Stack}->new_hub( 134 formatter => Test::Builder::Formatter->new, 135 ipc => Test2::API::test2_ipc(), 136 ); 137 138 $self->reset(%params); 139 $self->_add_ts_hooks; 140 } 141 142 return $self; 143} 144 145sub ctx { 146 my $self = shift; 147 context( 148 # 1 for our frame, another for the -1 off of $Level in our hook at the top. 149 level => 2, 150 fudge => 1, 151 stack => $self->{Stack}, 152 hub => $self->{Hub}, 153 wrapped => 1, 154 @_ 155 ); 156} 157 158sub parent { 159 my $self = shift; 160 my $ctx = $self->ctx; 161 my $chub = $self->{Hub} || $ctx->hub; 162 $ctx->release; 163 164 my $meta = $chub->meta(__PACKAGE__, {}); 165 my $parent = $meta->{parent}; 166 167 return undef unless $parent; 168 169 return bless { 170 Original_Pid => $$, 171 Stack => $self->{Stack}, 172 Hub => $parent, 173 }, blessed($self); 174} 175 176sub child { 177 my( $self, $name ) = @_; 178 179 $name ||= "Child of " . $self->name; 180 my $ctx = $self->ctx; 181 182 my $parent = $ctx->hub; 183 my $pmeta = $parent->meta(__PACKAGE__, {}); 184 $self->croak("You already have a child named ($pmeta->{child}) running") 185 if $pmeta->{child}; 186 187 $pmeta->{child} = $name; 188 189 # Clear $TODO for the child. 190 my $orig_TODO = $self->find_TODO(undef, 1, undef); 191 192 my $subevents = []; 193 194 my $hub = $ctx->stack->new_hub( 195 class => 'Test2::Hub::Subtest', 196 ); 197 198 $hub->pre_filter(sub { 199 my ($active_hub, $e) = @_; 200 201 # Turn a diag into a todo diag 202 return Test::Builder::TodoDiag->new(%$e) if ref($e) eq 'Test2::Event::Diag'; 203 204 return $e; 205 }, inherit => 1) if $orig_TODO; 206 207 $hub->listen(sub { push @$subevents => $_[1] }); 208 209 $hub->set_nested( $parent->nested + 1 ); 210 211 my $meta = $hub->meta(__PACKAGE__, {}); 212 $meta->{Name} = $name; 213 $meta->{TODO} = $orig_TODO; 214 $meta->{TODO_PKG} = $ctx->trace->package; 215 $meta->{parent} = $parent; 216 $meta->{Test_Results} = []; 217 $meta->{subevents} = $subevents; 218 $meta->{subtest_id} = $hub->id; 219 $meta->{subtest_uuid} = $hub->uuid; 220 $meta->{subtest_buffered} = $parent->format ? 0 : 1; 221 222 $self->_add_ts_hooks; 223 224 $ctx->release; 225 return bless { Original_Pid => $$, Stack => $self->{Stack}, Hub => $hub, no_log_results => $self->{no_log_results} }, blessed($self); 226} 227 228sub finalize { 229 my $self = shift; 230 my $ok = 1; 231 ($ok) = @_ if @_; 232 233 my $st_ctx = $self->ctx; 234 my $chub = $self->{Hub} || return $st_ctx->release; 235 236 my $meta = $chub->meta(__PACKAGE__, {}); 237 if ($meta->{child}) { 238 $self->croak("Can't call finalize() with child ($meta->{child}) active"); 239 } 240 241 local $? = 0; # don't fail if $subtests happened to set $? nonzero 242 243 $self->{Stack}->pop($chub); 244 245 $self->find_TODO($meta->{TODO_PKG}, 1, $meta->{TODO}); 246 247 my $parent = $self->parent; 248 my $ctx = $parent->ctx; 249 my $trace = $ctx->trace; 250 delete $ctx->hub->meta(__PACKAGE__, {})->{child}; 251 252 $chub->finalize($trace->snapshot(hid => $chub->hid, nested => $chub->nested), 1) 253 if $ok 254 && $chub->count 255 && !$chub->no_ending 256 && !$chub->ended; 257 258 my $plan = $chub->plan || 0; 259 my $count = $chub->count; 260 my $failed = $chub->failed; 261 my $passed = $chub->is_passing; 262 263 my $num_extra = $plan =~ m/\D/ ? 0 : $count - $plan; 264 if ($count && $num_extra != 0) { 265 my $s = $plan == 1 ? '' : 's'; 266 $st_ctx->diag(<<"FAIL"); 267Looks like you planned $plan test$s but ran $count. 268FAIL 269 } 270 271 if ($failed) { 272 my $s = $failed == 1 ? '' : 's'; 273 274 my $qualifier = $num_extra == 0 ? '' : ' run'; 275 276 $st_ctx->diag(<<"FAIL"); 277Looks like you failed $failed test$s of $count$qualifier. 278FAIL 279 } 280 281 if (!$passed && !$failed && $count && !$num_extra) { 282 $st_ctx->diag(<<"FAIL"); 283All assertions inside the subtest passed, but errors were encountered. 284FAIL 285 } 286 287 $st_ctx->release; 288 289 unless ($chub->bailed_out) { 290 my $plan = $chub->plan; 291 if ( $plan && $plan eq 'SKIP' ) { 292 $parent->skip($chub->skip_reason, $meta->{Name}); 293 } 294 elsif ( !$chub->count ) { 295 $parent->ok( 0, sprintf q[No tests run for subtest "%s"], $meta->{Name} ); 296 } 297 else { 298 $parent->{subevents} = $meta->{subevents}; 299 $parent->{subtest_id} = $meta->{subtest_id}; 300 $parent->{subtest_uuid} = $meta->{subtest_uuid}; 301 $parent->{subtest_buffered} = $meta->{subtest_buffered}; 302 $parent->ok( $chub->is_passing, $meta->{Name} ); 303 } 304 } 305 306 $ctx->release; 307 return $chub->is_passing; 308} 309 310sub subtest { 311 my $self = shift; 312 my ($name, $code, @args) = @_; 313 my $ctx = $self->ctx; 314 $ctx->throw("subtest()'s second argument must be a code ref") 315 unless $code && reftype($code) eq 'CODE'; 316 317 $name ||= "Child of " . $self->name; 318 319 320 $_->($name,$code,@args) 321 for Test2::API::test2_list_pre_subtest_callbacks(); 322 323 $ctx->note("Subtest: $name"); 324 325 my $child = $self->child($name); 326 327 my $start_pid = $$; 328 my $st_ctx; 329 my ($ok, $err, $finished, $child_error); 330 T2_SUBTEST_WRAPPER: { 331 my $ctx = $self->ctx; 332 $st_ctx = $ctx->snapshot; 333 $ctx->release; 334 $ok = eval { local $Level = 1; $code->(@args); 1 }; 335 ($err, $child_error) = ($@, $?); 336 337 # They might have done 'BEGIN { skip_all => "whatever" }' 338 if (!$ok && $err =~ m/Label not found for "last T2_SUBTEST_WRAPPER"/ || (blessed($err) && blessed($err) eq 'Test::Builder::Exception')) { 339 $ok = undef; 340 $err = undef; 341 } 342 else { 343 $finished = 1; 344 } 345 } 346 347 if ($start_pid != $$ && !$INC{'Test2/IPC.pm'}) { 348 warn $ok ? "Forked inside subtest, but subtest never finished!\n" : $err; 349 exit 255; 350 } 351 352 my $trace = $ctx->trace; 353 354 if (!$finished) { 355 if(my $bailed = $st_ctx->hub->bailed_out) { 356 my $chub = $child->{Hub}; 357 $self->{Stack}->pop($chub); 358 $ctx->bail($bailed->reason); 359 } 360 my $code = $st_ctx->hub->exit_code; 361 $ok = !$code; 362 $err = "Subtest ended with exit code $code" if $code; 363 } 364 365 my $st_hub = $st_ctx->hub; 366 my $plan = $st_hub->plan; 367 my $count = $st_hub->count; 368 369 if (!$count && (!defined($plan) || "$plan" ne 'SKIP')) { 370 $st_ctx->plan(0) unless defined $plan; 371 $st_ctx->diag('No tests run!'); 372 } 373 374 $child->finalize($st_ctx->trace); 375 376 $ctx->release; 377 378 die $err unless $ok; 379 380 $? = $child_error if defined $child_error; 381 382 return $st_hub->is_passing; 383} 384 385sub name { 386 my $self = shift; 387 my $ctx = $self->ctx; 388 release $ctx, $ctx->hub->meta(__PACKAGE__, {})->{Name}; 389} 390 391sub reset { ## no critic (Subroutines::ProhibitBuiltinHomonyms) 392 my ($self, %params) = @_; 393 394 Test2::API::test2_unset_is_end(); 395 396 # We leave this a global because it has to be localized and localizing 397 # hash keys is just asking for pain. Also, it was documented. 398 $Level = 1; 399 400 $self->{no_log_results} = $ENV{TEST_NO_LOG_RESULTS} ? 1 : 0 401 unless $params{singleton}; 402 403 $self->{Original_Pid} = Test2::API::test2_in_preload() ? -1 : $$; 404 405 my $ctx = $self->ctx; 406 my $hub = $ctx->hub; 407 $ctx->release; 408 unless ($params{singleton}) { 409 $hub->reset_state(); 410 $hub->_tb_reset(); 411 } 412 413 $ctx = $self->ctx; 414 415 my $meta = $ctx->hub->meta(__PACKAGE__, {}); 416 %$meta = ( 417 Name => $0, 418 Ending => 0, 419 Done_Testing => undef, 420 Skip_All => 0, 421 Test_Results => [], 422 parent => $meta->{parent}, 423 ); 424 425 $self->{Exported_To} = undef unless $params{singleton}; 426 427 $self->{Orig_Handles} ||= do { 428 my $format = $ctx->hub->format; 429 my $out; 430 if ($format && $format->isa('Test2::Formatter::TAP')) { 431 $out = $format->handles; 432 } 433 $out ? [@$out] : []; 434 }; 435 436 $self->use_numbers(1); 437 $self->no_header(0) unless $params{singleton}; 438 $self->no_ending(0) unless $params{singleton}; 439 $self->reset_outputs; 440 441 $ctx->release; 442 443 return; 444} 445 446 447my %plan_cmds = ( 448 no_plan => \&no_plan, 449 skip_all => \&skip_all, 450 tests => \&_plan_tests, 451); 452 453sub plan { 454 my( $self, $cmd, $arg ) = @_; 455 456 return unless $cmd; 457 458 my $ctx = $self->ctx; 459 my $hub = $ctx->hub; 460 461 $ctx->throw("You tried to plan twice") if $hub->plan; 462 463 local $Level = $Level + 1; 464 465 if( my $method = $plan_cmds{$cmd} ) { 466 local $Level = $Level + 1; 467 $self->$method($arg); 468 } 469 else { 470 my @args = grep { defined } ( $cmd, $arg ); 471 $ctx->throw("plan() doesn't understand @args"); 472 } 473 474 release $ctx, 1; 475} 476 477 478sub _plan_tests { 479 my($self, $arg) = @_; 480 481 my $ctx = $self->ctx; 482 483 if($arg) { 484 local $Level = $Level + 1; 485 $self->expected_tests($arg); 486 } 487 elsif( !defined $arg ) { 488 $ctx->throw("Got an undefined number of tests"); 489 } 490 else { 491 $ctx->throw("You said to run 0 tests"); 492 } 493 494 $ctx->release; 495} 496 497 498sub expected_tests { 499 my $self = shift; 500 my($max) = @_; 501 502 my $ctx = $self->ctx; 503 504 if(@_) { 505 $self->croak("Number of tests must be a positive integer. You gave it '$max'") 506 unless $max =~ /^\+?\d+$/; 507 508 $ctx->plan($max); 509 } 510 511 my $hub = $ctx->hub; 512 513 $ctx->release; 514 515 my $plan = $hub->plan; 516 return 0 unless $plan; 517 return 0 if $plan =~ m/\D/; 518 return $plan; 519} 520 521 522sub no_plan { 523 my($self, $arg) = @_; 524 525 my $ctx = $self->ctx; 526 527 if (defined $ctx->hub->plan) { 528 warn "Plan already set, no_plan() is a no-op, this will change to a hard failure in the future."; 529 $ctx->release; 530 return; 531 } 532 533 $ctx->alert("no_plan takes no arguments") if $arg; 534 535 $ctx->hub->plan('NO PLAN'); 536 537 release $ctx, 1; 538} 539 540 541sub done_testing { 542 my($self, $num_tests) = @_; 543 544 my $ctx = $self->ctx; 545 546 my $meta = $ctx->hub->meta(__PACKAGE__, {}); 547 548 if ($meta->{Done_Testing}) { 549 my ($file, $line) = @{$meta->{Done_Testing}}[1,2]; 550 local $ctx->hub->{ended}; # OMG This is awful. 551 $self->ok(0, "done_testing() was already called at $file line $line"); 552 $ctx->release; 553 return; 554 } 555 $meta->{Done_Testing} = [$ctx->trace->call]; 556 557 my $plan = $ctx->hub->plan; 558 my $count = $ctx->hub->count; 559 560 # If done_testing() specified the number of tests, shut off no_plan 561 if( defined $num_tests ) { 562 $ctx->plan($num_tests) if !$plan || $plan eq 'NO PLAN'; 563 } 564 elsif ($count && defined $num_tests && $count != $num_tests) { 565 $self->ok(0, "planned to run @{[ $self->expected_tests ]} but done_testing() expects $num_tests"); 566 } 567 else { 568 $num_tests = $self->current_test; 569 } 570 571 if( $self->expected_tests && $num_tests != $self->expected_tests ) { 572 $self->ok(0, "planned to run @{[ $self->expected_tests ]} ". 573 "but done_testing() expects $num_tests"); 574 } 575 576 $ctx->plan($num_tests) if $ctx->hub->plan && $ctx->hub->plan eq 'NO PLAN'; 577 578 $ctx->hub->finalize($ctx->trace, 1); 579 580 release $ctx, 1; 581} 582 583 584sub has_plan { 585 my $self = shift; 586 587 my $ctx = $self->ctx; 588 my $plan = $ctx->hub->plan; 589 $ctx->release; 590 591 return( $plan ) if $plan && $plan !~ m/\D/; 592 return('no_plan') if $plan && $plan eq 'NO PLAN'; 593 return(undef); 594} 595 596 597sub skip_all { 598 my( $self, $reason ) = @_; 599 600 my $ctx = $self->ctx; 601 602 $ctx->hub->meta(__PACKAGE__, {})->{Skip_All} = $reason || 1; 603 604 # Work around old perl bug 605 if ($] < 5.020000) { 606 my $begin = 0; 607 my $level = 0; 608 while (my @call = caller($level++)) { 609 last unless @call && $call[0]; 610 next unless $call[3] =~ m/::BEGIN$/; 611 $begin++; 612 last; 613 } 614 # HACK! 615 die 'Label not found for "last T2_SUBTEST_WRAPPER"' if $begin && $ctx->hub->meta(__PACKAGE__, {})->{parent}; 616 } 617 618 $ctx->plan(0, SKIP => $reason); 619} 620 621 622sub exported_to { 623 my( $self, $pack ) = @_; 624 625 if( defined $pack ) { 626 $self->{Exported_To} = $pack; 627 } 628 return $self->{Exported_To}; 629} 630 631 632sub ok { 633 my( $self, $test, $name ) = @_; 634 635 my $ctx = $self->ctx; 636 637 # $test might contain an object which we don't want to accidentally 638 # store, so we turn it into a boolean. 639 $test = $test ? 1 : 0; 640 641 # In case $name is a string overloaded object, force it to stringify. 642 no warnings qw/uninitialized numeric/; 643 $name = "$name" if defined $name; 644 645 # Profiling showed that the regex here was a huge time waster, doing the 646 # numeric addition first cuts our profile time from ~300ms to ~50ms 647 $self->diag(<<" ERR") if 0 + $name && $name =~ /^[\d\s]+$/; 648 You named your test '$name'. You shouldn't use numbers for your test names. 649 Very confusing. 650 ERR 651 use warnings qw/uninitialized numeric/; 652 653 my $trace = $ctx->{trace}; 654 my $hub = $ctx->{hub}; 655 656 my $result = { 657 ok => $test, 658 actual_ok => $test, 659 reason => '', 660 type => '', 661 (name => defined($name) ? $name : ''), 662 }; 663 664 $hub->{_meta}->{+__PACKAGE__}->{Test_Results}[ $hub->{count} ] = $result unless $self->{no_log_results}; 665 666 my $orig_name = $name; 667 668 my @attrs; 669 my $subevents = delete $self->{subevents}; 670 my $subtest_id = delete $self->{subtest_id}; 671 my $subtest_uuid = delete $self->{subtest_uuid}; 672 my $subtest_buffered = delete $self->{subtest_buffered}; 673 my $epkg = 'Test2::Event::Ok'; 674 if ($subevents) { 675 $epkg = 'Test2::Event::Subtest'; 676 push @attrs => (subevents => $subevents, subtest_id => $subtest_id, subtest_uuid => $subtest_uuid, buffered => $subtest_buffered); 677 } 678 679 my $e = bless { 680 trace => bless( {%$trace}, 'Test2::EventFacet::Trace'), 681 pass => $test, 682 name => $name, 683 _meta => {'Test::Builder' => $result}, 684 effective_pass => $test, 685 @attrs, 686 }, $epkg; 687 $hub->send($e); 688 689 $self->_ok_debug($trace, $orig_name) unless($test); 690 691 $ctx->release; 692 return $test; 693} 694 695sub _ok_debug { 696 my $self = shift; 697 my ($trace, $orig_name) = @_; 698 699 my $is_todo = $self->in_todo; 700 701 my $msg = $is_todo ? "Failed (TODO)" : "Failed"; 702 703 my (undef, $file, $line) = $trace->call; 704 if (defined $orig_name) { 705 $self->diag(qq[ $msg test '$orig_name'\n at $file line $line.\n]); 706 } 707 else { 708 $self->diag(qq[ $msg test at $file line $line.\n]); 709 } 710} 711 712sub _diag_fh { 713 my $self = shift; 714 local $Level = $Level + 1; 715 return $self->in_todo ? $self->todo_output : $self->failure_output; 716} 717 718sub _unoverload { 719 my ($self, $type, $thing) = @_; 720 721 return unless ref $$thing; 722 return unless blessed($$thing) || scalar $self->_try(sub{ $$thing->isa('UNIVERSAL') }); 723 { 724 local ($!, $@); 725 require overload; 726 } 727 my $string_meth = overload::Method( $$thing, $type ) || return; 728 $$thing = $$thing->$string_meth(); 729} 730 731sub _unoverload_str { 732 my $self = shift; 733 734 $self->_unoverload( q[""], $_ ) for @_; 735} 736 737sub _unoverload_num { 738 my $self = shift; 739 740 $self->_unoverload( '0+', $_ ) for @_; 741 742 for my $val (@_) { 743 next unless $self->_is_dualvar($$val); 744 $$val = $$val + 0; 745 } 746} 747 748# This is a hack to detect a dualvar such as $! 749sub _is_dualvar { 750 my( $self, $val ) = @_; 751 752 # Objects are not dualvars. 753 return 0 if ref $val; 754 755 no warnings 'numeric'; 756 my $numval = $val + 0; 757 return ($numval != 0 and $numval ne $val ? 1 : 0); 758} 759 760 761sub is_eq { 762 my( $self, $got, $expect, $name ) = @_; 763 764 my $ctx = $self->ctx; 765 766 local $Level = $Level + 1; 767 768 if( !defined $got || !defined $expect ) { 769 # undef only matches undef and nothing else 770 my $test = !defined $got && !defined $expect; 771 772 $self->ok( $test, $name ); 773 $self->_is_diag( $got, 'eq', $expect ) unless $test; 774 $ctx->release; 775 return $test; 776 } 777 778 release $ctx, $self->cmp_ok( $got, 'eq', $expect, $name ); 779} 780 781 782sub is_num { 783 my( $self, $got, $expect, $name ) = @_; 784 my $ctx = $self->ctx; 785 local $Level = $Level + 1; 786 787 if( !defined $got || !defined $expect ) { 788 # undef only matches undef and nothing else 789 my $test = !defined $got && !defined $expect; 790 791 $self->ok( $test, $name ); 792 $self->_is_diag( $got, '==', $expect ) unless $test; 793 $ctx->release; 794 return $test; 795 } 796 797 release $ctx, $self->cmp_ok( $got, '==', $expect, $name ); 798} 799 800 801sub _diag_fmt { 802 my( $self, $type, $val ) = @_; 803 804 if( defined $$val ) { 805 if( $type eq 'eq' or $type eq 'ne' ) { 806 # quote and force string context 807 $$val = "'$$val'"; 808 } 809 else { 810 # force numeric context 811 $self->_unoverload_num($val); 812 } 813 } 814 else { 815 $$val = 'undef'; 816 } 817 818 return; 819} 820 821 822sub _is_diag { 823 my( $self, $got, $type, $expect ) = @_; 824 825 $self->_diag_fmt( $type, $_ ) for \$got, \$expect; 826 827 local $Level = $Level + 1; 828 return $self->diag(<<"DIAGNOSTIC"); 829 got: $got 830 expected: $expect 831DIAGNOSTIC 832 833} 834 835sub _isnt_diag { 836 my( $self, $got, $type ) = @_; 837 838 $self->_diag_fmt( $type, \$got ); 839 840 local $Level = $Level + 1; 841 return $self->diag(<<"DIAGNOSTIC"); 842 got: $got 843 expected: anything else 844DIAGNOSTIC 845} 846 847 848sub isnt_eq { 849 my( $self, $got, $dont_expect, $name ) = @_; 850 my $ctx = $self->ctx; 851 local $Level = $Level + 1; 852 853 if( !defined $got || !defined $dont_expect ) { 854 # undef only matches undef and nothing else 855 my $test = defined $got || defined $dont_expect; 856 857 $self->ok( $test, $name ); 858 $self->_isnt_diag( $got, 'ne' ) unless $test; 859 $ctx->release; 860 return $test; 861 } 862 863 release $ctx, $self->cmp_ok( $got, 'ne', $dont_expect, $name ); 864} 865 866sub isnt_num { 867 my( $self, $got, $dont_expect, $name ) = @_; 868 my $ctx = $self->ctx; 869 local $Level = $Level + 1; 870 871 if( !defined $got || !defined $dont_expect ) { 872 # undef only matches undef and nothing else 873 my $test = defined $got || defined $dont_expect; 874 875 $self->ok( $test, $name ); 876 $self->_isnt_diag( $got, '!=' ) unless $test; 877 $ctx->release; 878 return $test; 879 } 880 881 release $ctx, $self->cmp_ok( $got, '!=', $dont_expect, $name ); 882} 883 884 885sub like { 886 my( $self, $thing, $regex, $name ) = @_; 887 my $ctx = $self->ctx; 888 889 local $Level = $Level + 1; 890 891 release $ctx, $self->_regex_ok( $thing, $regex, '=~', $name ); 892} 893 894sub unlike { 895 my( $self, $thing, $regex, $name ) = @_; 896 my $ctx = $self->ctx; 897 898 local $Level = $Level + 1; 899 900 release $ctx, $self->_regex_ok( $thing, $regex, '!~', $name ); 901} 902 903 904my %numeric_cmps = map { ( $_, 1 ) } ( "<", "<=", ">", ">=", "==", "!=", "<=>" ); 905 906# Bad, these are not comparison operators. Should we include more? 907my %cmp_ok_bl = map { ( $_, 1 ) } ( "=", "+=", ".=", "x=", "^=", "|=", "||=", "&&=", "..."); 908 909sub cmp_ok { 910 my( $self, $got, $type, $expect, $name ) = @_; 911 my $ctx = $self->ctx; 912 913 if ($cmp_ok_bl{$type}) { 914 $ctx->throw("$type is not a valid comparison operator in cmp_ok()"); 915 } 916 917 my ($test, $succ); 918 my $error; 919 { 920 ## no critic (BuiltinFunctions::ProhibitStringyEval) 921 922 local( $@, $!, $SIG{__DIE__} ); # isolate eval 923 924 my($pack, $file, $line) = $ctx->trace->call(); 925 926 # This is so that warnings come out at the caller's level 927 $succ = eval qq[ 928#line $line "(eval in cmp_ok) $file" 929\$test = (\$got $type \$expect); 9301; 931]; 932 $error = $@; 933 } 934 local $Level = $Level + 1; 935 my $ok = $self->ok( $test, $name ); 936 937 # Treat overloaded objects as numbers if we're asked to do a 938 # numeric comparison. 939 my $unoverload 940 = $numeric_cmps{$type} 941 ? '_unoverload_num' 942 : '_unoverload_str'; 943 944 $self->diag(<<"END") unless $succ; 945An error occurred while using $type: 946------------------------------------ 947$error 948------------------------------------ 949END 950 951 unless($ok) { 952 $self->$unoverload( \$got, \$expect ); 953 954 if( $type =~ /^(eq|==)$/ ) { 955 $self->_is_diag( $got, $type, $expect ); 956 } 957 elsif( $type =~ /^(ne|!=)$/ ) { 958 no warnings; 959 my $eq = ($got eq $expect || $got == $expect) 960 && ( 961 (defined($got) xor defined($expect)) 962 || (length($got) != length($expect)) 963 ); 964 use warnings; 965 966 if ($eq) { 967 $self->_cmp_diag( $got, $type, $expect ); 968 } 969 else { 970 $self->_isnt_diag( $got, $type ); 971 } 972 } 973 else { 974 $self->_cmp_diag( $got, $type, $expect ); 975 } 976 } 977 return release $ctx, $ok; 978} 979 980sub _cmp_diag { 981 my( $self, $got, $type, $expect ) = @_; 982 983 $got = defined $got ? "'$got'" : 'undef'; 984 $expect = defined $expect ? "'$expect'" : 'undef'; 985 986 local $Level = $Level + 1; 987 return $self->diag(<<"DIAGNOSTIC"); 988 $got 989 $type 990 $expect 991DIAGNOSTIC 992} 993 994sub _caller_context { 995 my $self = shift; 996 997 my( $pack, $file, $line ) = $self->caller(1); 998 999 my $code = ''; 1000 $code .= "#line $line $file\n" if defined $file and defined $line; 1001 1002 return $code; 1003} 1004 1005 1006sub BAIL_OUT { 1007 my( $self, $reason ) = @_; 1008 1009 my $ctx = $self->ctx; 1010 1011 $self->{Bailed_Out} = 1; 1012 1013 $ctx->bail($reason); 1014} 1015 1016 1017{ 1018 no warnings 'once'; 1019 *BAILOUT = \&BAIL_OUT; 1020} 1021 1022sub skip { 1023 my( $self, $why, $name ) = @_; 1024 $why ||= ''; 1025 $name = '' unless defined $name; 1026 $self->_unoverload_str( \$why ); 1027 1028 my $ctx = $self->ctx; 1029 1030 $ctx->hub->meta(__PACKAGE__, {})->{Test_Results}[ $ctx->hub->count ] = { 1031 'ok' => 1, 1032 actual_ok => 1, 1033 name => $name, 1034 type => 'skip', 1035 reason => $why, 1036 } unless $self->{no_log_results}; 1037 1038 $name =~ s|#|\\#|g; # # in a name can confuse Test::Harness. 1039 $name =~ s{\n}{\n# }sg; 1040 $why =~ s{\n}{\n# }sg; 1041 1042 my $tctx = $ctx->snapshot; 1043 $tctx->skip('', $why); 1044 1045 return release $ctx, 1; 1046} 1047 1048 1049sub todo_skip { 1050 my( $self, $why ) = @_; 1051 $why ||= ''; 1052 1053 my $ctx = $self->ctx; 1054 1055 $ctx->hub->meta(__PACKAGE__, {})->{Test_Results}[ $ctx->hub->count ] = { 1056 'ok' => 1, 1057 actual_ok => 0, 1058 name => '', 1059 type => 'todo_skip', 1060 reason => $why, 1061 } unless $self->{no_log_results}; 1062 1063 $why =~ s{\n}{\n# }sg; 1064 my $tctx = $ctx->snapshot; 1065 $tctx->send_event( 'Skip', todo => $why, todo_diag => 1, reason => $why, pass => 0); 1066 1067 return release $ctx, 1; 1068} 1069 1070 1071sub maybe_regex { 1072 my( $self, $regex ) = @_; 1073 my $usable_regex = undef; 1074 1075 return $usable_regex unless defined $regex; 1076 1077 my( $re, $opts ); 1078 1079 # Check for qr/foo/ 1080 if( _is_qr($regex) ) { 1081 $usable_regex = $regex; 1082 } 1083 # Check for '/foo/' or 'm,foo,' 1084 elsif(( $re, $opts ) = $regex =~ m{^ /(.*)/ (\w*) $ }sx or 1085 ( undef, $re, $opts ) = $regex =~ m,^ m([^\w\s]) (.+) \1 (\w*) $,sx 1086 ) 1087 { 1088 $usable_regex = length $opts ? "(?$opts)$re" : $re; 1089 } 1090 1091 return $usable_regex; 1092} 1093 1094sub _is_qr { 1095 my $regex = shift; 1096 1097 # is_regexp() checks for regexes in a robust manner, say if they're 1098 # blessed. 1099 return re::is_regexp($regex) if defined &re::is_regexp; 1100 return ref $regex eq 'Regexp'; 1101} 1102 1103sub _regex_ok { 1104 my( $self, $thing, $regex, $cmp, $name ) = @_; 1105 1106 my $ok = 0; 1107 my $usable_regex = $self->maybe_regex($regex); 1108 unless( defined $usable_regex ) { 1109 local $Level = $Level + 1; 1110 $ok = $self->ok( 0, $name ); 1111 $self->diag(" '$regex' doesn't look much like a regex to me."); 1112 return $ok; 1113 } 1114 1115 { 1116 my $test; 1117 my $context = $self->_caller_context; 1118 1119 { 1120 ## no critic (BuiltinFunctions::ProhibitStringyEval) 1121 1122 local( $@, $!, $SIG{__DIE__} ); # isolate eval 1123 1124 # No point in issuing an uninit warning, they'll see it in the diagnostics 1125 no warnings 'uninitialized'; 1126 1127 $test = eval $context . q{$test = $thing =~ /$usable_regex/ ? 1 : 0}; 1128 } 1129 1130 $test = !$test if $cmp eq '!~'; 1131 1132 local $Level = $Level + 1; 1133 $ok = $self->ok( $test, $name ); 1134 } 1135 1136 unless($ok) { 1137 $thing = defined $thing ? "'$thing'" : 'undef'; 1138 my $match = $cmp eq '=~' ? "doesn't match" : "matches"; 1139 1140 local $Level = $Level + 1; 1141 $self->diag( sprintf <<'DIAGNOSTIC', $thing, $match, $regex ); 1142 %s 1143 %13s '%s' 1144DIAGNOSTIC 1145 1146 } 1147 1148 return $ok; 1149} 1150 1151 1152sub is_fh { 1153 my $self = shift; 1154 my $maybe_fh = shift; 1155 return 0 unless defined $maybe_fh; 1156 1157 return 1 if ref $maybe_fh eq 'GLOB'; # its a glob ref 1158 return 1 if ref \$maybe_fh eq 'GLOB'; # its a glob 1159 1160 return eval { $maybe_fh->isa("IO::Handle") } || 1161 eval { tied($maybe_fh)->can('TIEHANDLE') }; 1162} 1163 1164 1165sub level { 1166 my( $self, $level ) = @_; 1167 1168 if( defined $level ) { 1169 $Level = $level; 1170 } 1171 return $Level; 1172} 1173 1174 1175sub use_numbers { 1176 my( $self, $use_nums ) = @_; 1177 1178 my $ctx = $self->ctx; 1179 my $format = $ctx->hub->format; 1180 unless ($format && $format->can('no_numbers') && $format->can('set_no_numbers')) { 1181 warn "The current formatter does not support 'use_numbers'" if $format; 1182 return release $ctx, 0; 1183 } 1184 1185 $format->set_no_numbers(!$use_nums) if defined $use_nums; 1186 1187 return release $ctx, $format->no_numbers ? 0 : 1; 1188} 1189 1190BEGIN { 1191 for my $method (qw(no_header no_diag)) { 1192 my $set = "set_$method"; 1193 my $code = sub { 1194 my( $self, $no ) = @_; 1195 1196 my $ctx = $self->ctx; 1197 my $format = $ctx->hub->format; 1198 unless ($format && $format->can($set)) { 1199 warn "The current formatter does not support '$method'" if $format; 1200 $ctx->release; 1201 return 1202 } 1203 1204 $format->$set($no) if defined $no; 1205 1206 return release $ctx, $format->$method ? 1 : 0; 1207 }; 1208 1209 no strict 'refs'; ## no critic 1210 *$method = $code; 1211 } 1212} 1213 1214sub no_ending { 1215 my( $self, $no ) = @_; 1216 1217 my $ctx = $self->ctx; 1218 1219 $ctx->hub->set_no_ending($no) if defined $no; 1220 1221 return release $ctx, $ctx->hub->no_ending; 1222} 1223 1224sub diag { 1225 my $self = shift; 1226 return unless @_; 1227 1228 my $text = join '' => map {defined($_) ? $_ : 'undef'} @_; 1229 1230 if (Test2::API::test2_in_preload()) { 1231 chomp($text); 1232 $text =~ s/^/# /msg; 1233 print STDERR $text, "\n"; 1234 return 0; 1235 } 1236 1237 my $ctx = $self->ctx; 1238 $ctx->diag($text); 1239 $ctx->release; 1240 return 0; 1241} 1242 1243 1244sub note { 1245 my $self = shift; 1246 return unless @_; 1247 1248 my $text = join '' => map {defined($_) ? $_ : 'undef'} @_; 1249 1250 if (Test2::API::test2_in_preload()) { 1251 chomp($text); 1252 $text =~ s/^/# /msg; 1253 print STDOUT $text, "\n"; 1254 return 0; 1255 } 1256 1257 my $ctx = $self->ctx; 1258 $ctx->note($text); 1259 $ctx->release; 1260 return 0; 1261} 1262 1263 1264sub explain { 1265 my $self = shift; 1266 1267 local ($@, $!); 1268 require Data::Dumper; 1269 1270 return map { 1271 ref $_ 1272 ? do { 1273 my $dumper = Data::Dumper->new( [$_] ); 1274 $dumper->Indent(1)->Terse(1); 1275 $dumper->Sortkeys(1) if $dumper->can("Sortkeys"); 1276 $dumper->Dump; 1277 } 1278 : $_ 1279 } @_; 1280} 1281 1282 1283sub output { 1284 my( $self, $fh ) = @_; 1285 1286 my $ctx = $self->ctx; 1287 my $format = $ctx->hub->format; 1288 $ctx->release; 1289 return unless $format && $format->isa('Test2::Formatter::TAP'); 1290 1291 $format->handles->[Test2::Formatter::TAP::OUT_STD()] = $self->_new_fh($fh) 1292 if defined $fh; 1293 1294 return $format->handles->[Test2::Formatter::TAP::OUT_STD()]; 1295} 1296 1297sub failure_output { 1298 my( $self, $fh ) = @_; 1299 1300 my $ctx = $self->ctx; 1301 my $format = $ctx->hub->format; 1302 $ctx->release; 1303 return unless $format && $format->isa('Test2::Formatter::TAP'); 1304 1305 $format->handles->[Test2::Formatter::TAP::OUT_ERR()] = $self->_new_fh($fh) 1306 if defined $fh; 1307 1308 return $format->handles->[Test2::Formatter::TAP::OUT_ERR()]; 1309} 1310 1311sub todo_output { 1312 my( $self, $fh ) = @_; 1313 1314 my $ctx = $self->ctx; 1315 my $format = $ctx->hub->format; 1316 $ctx->release; 1317 return unless $format && $format->isa('Test::Builder::Formatter'); 1318 1319 $format->handles->[Test::Builder::Formatter::OUT_TODO()] = $self->_new_fh($fh) 1320 if defined $fh; 1321 1322 return $format->handles->[Test::Builder::Formatter::OUT_TODO()]; 1323} 1324 1325sub _new_fh { 1326 my $self = shift; 1327 my($file_or_fh) = shift; 1328 1329 my $fh; 1330 if( $self->is_fh($file_or_fh) ) { 1331 $fh = $file_or_fh; 1332 } 1333 elsif( ref $file_or_fh eq 'SCALAR' ) { 1334 # Scalar refs as filehandles was added in 5.8. 1335 if( $] >= 5.008 ) { 1336 open $fh, ">>", $file_or_fh 1337 or $self->croak("Can't open scalar ref $file_or_fh: $!"); 1338 } 1339 # Emulate scalar ref filehandles with a tie. 1340 else { 1341 $fh = Test::Builder::IO::Scalar->new($file_or_fh) 1342 or $self->croak("Can't tie scalar ref $file_or_fh"); 1343 } 1344 } 1345 else { 1346 open $fh, ">", $file_or_fh 1347 or $self->croak("Can't open test output log $file_or_fh: $!"); 1348 _autoflush($fh); 1349 } 1350 1351 return $fh; 1352} 1353 1354sub _autoflush { 1355 my($fh) = shift; 1356 my $old_fh = select $fh; 1357 $| = 1; 1358 select $old_fh; 1359 1360 return; 1361} 1362 1363 1364sub reset_outputs { 1365 my $self = shift; 1366 1367 my $ctx = $self->ctx; 1368 my $format = $ctx->hub->format; 1369 $ctx->release; 1370 return unless $format && $format->isa('Test2::Formatter::TAP'); 1371 $format->set_handles([@{$self->{Orig_Handles}}]) if $self->{Orig_Handles}; 1372 1373 return; 1374} 1375 1376 1377sub carp { 1378 my $self = shift; 1379 my $ctx = $self->ctx; 1380 $ctx->alert(join "", @_); 1381 $ctx->release; 1382} 1383 1384sub croak { 1385 my $self = shift; 1386 my $ctx = $self->ctx; 1387 $ctx->throw(join "", @_); 1388 $ctx->release; 1389} 1390 1391 1392sub current_test { 1393 my( $self, $num ) = @_; 1394 1395 my $ctx = $self->ctx; 1396 my $hub = $ctx->hub; 1397 1398 if( defined $num ) { 1399 $hub->set_count($num); 1400 1401 unless ($self->{no_log_results}) { 1402 # If the test counter is being pushed forward fill in the details. 1403 my $test_results = $ctx->hub->meta(__PACKAGE__, {})->{Test_Results}; 1404 if ($num > @$test_results) { 1405 my $start = @$test_results ? @$test_results : 0; 1406 for ($start .. $num - 1) { 1407 $test_results->[$_] = { 1408 'ok' => 1, 1409 actual_ok => undef, 1410 reason => 'incrementing test number', 1411 type => 'unknown', 1412 name => undef 1413 }; 1414 } 1415 } 1416 # If backward, wipe history. Its their funeral. 1417 elsif ($num < @$test_results) { 1418 $#{$test_results} = $num - 1; 1419 } 1420 } 1421 } 1422 return release $ctx, $hub->count; 1423} 1424 1425 1426sub is_passing { 1427 my $self = shift; 1428 1429 my $ctx = $self->ctx; 1430 my $hub = $ctx->hub; 1431 1432 if( @_ ) { 1433 my ($bool) = @_; 1434 $hub->set_failed(0) if $bool; 1435 $hub->is_passing($bool); 1436 } 1437 1438 return release $ctx, $hub->is_passing; 1439} 1440 1441 1442sub summary { 1443 my($self) = shift; 1444 1445 return if $self->{no_log_results}; 1446 1447 my $ctx = $self->ctx; 1448 my $data = $ctx->hub->meta(__PACKAGE__, {})->{Test_Results}; 1449 $ctx->release; 1450 return map { $_ ? $_->{'ok'} : () } @$data; 1451} 1452 1453 1454sub details { 1455 my $self = shift; 1456 1457 return if $self->{no_log_results}; 1458 1459 my $ctx = $self->ctx; 1460 my $data = $ctx->hub->meta(__PACKAGE__, {})->{Test_Results}; 1461 $ctx->release; 1462 return @$data; 1463} 1464 1465 1466sub find_TODO { 1467 my( $self, $pack, $set, $new_value ) = @_; 1468 1469 my $ctx = $self->ctx; 1470 1471 $pack ||= $ctx->trace->package || $self->exported_to; 1472 $ctx->release; 1473 1474 return unless $pack; 1475 1476 no strict 'refs'; ## no critic 1477 no warnings 'once'; 1478 my $old_value = ${ $pack . '::TODO' }; 1479 $set and ${ $pack . '::TODO' } = $new_value; 1480 return $old_value; 1481} 1482 1483sub todo { 1484 my( $self, $pack ) = @_; 1485 1486 local $Level = $Level + 1; 1487 my $ctx = $self->ctx; 1488 $ctx->release; 1489 1490 my $meta = $ctx->hub->meta(__PACKAGE__, {todo => []})->{todo}; 1491 return $meta->[-1]->[1] if $meta && @$meta; 1492 1493 $pack ||= $ctx->trace->package; 1494 1495 return unless $pack; 1496 1497 no strict 'refs'; ## no critic 1498 no warnings 'once'; 1499 return ${ $pack . '::TODO' }; 1500} 1501 1502sub in_todo { 1503 my $self = shift; 1504 1505 local $Level = $Level + 1; 1506 my $ctx = $self->ctx; 1507 $ctx->release; 1508 1509 my $meta = $ctx->hub->meta(__PACKAGE__, {todo => []})->{todo}; 1510 return 1 if $meta && @$meta; 1511 1512 my $pack = $ctx->trace->package || return 0; 1513 1514 no strict 'refs'; ## no critic 1515 no warnings 'once'; 1516 my $todo = ${ $pack . '::TODO' }; 1517 1518 return 0 unless defined $todo; 1519 return 0 if "$todo" eq ''; 1520 return 1; 1521} 1522 1523sub todo_start { 1524 my $self = shift; 1525 my $message = @_ ? shift : ''; 1526 1527 my $ctx = $self->ctx; 1528 1529 my $hub = $ctx->hub; 1530 my $filter = $hub->pre_filter(sub { 1531 my ($active_hub, $e) = @_; 1532 1533 # Turn a diag into a todo diag 1534 return Test::Builder::TodoDiag->new(%$e) if ref($e) eq 'Test2::Event::Diag'; 1535 1536 # Set todo on ok's 1537 if ($hub == $active_hub && $e->isa('Test2::Event::Ok')) { 1538 $e->set_todo($message); 1539 $e->set_effective_pass(1); 1540 1541 if (my $result = $e->get_meta(__PACKAGE__)) { 1542 $result->{reason} ||= $message; 1543 $result->{type} ||= 'todo'; 1544 $result->{ok} = 1; 1545 } 1546 } 1547 1548 return $e; 1549 }, inherit => 1); 1550 1551 push @{$ctx->hub->meta(__PACKAGE__, {todo => []})->{todo}} => [$filter, $message]; 1552 1553 $ctx->release; 1554 1555 return; 1556} 1557 1558sub todo_end { 1559 my $self = shift; 1560 1561 my $ctx = $self->ctx; 1562 1563 my $set = pop @{$ctx->hub->meta(__PACKAGE__, {todo => []})->{todo}}; 1564 1565 $ctx->throw('todo_end() called without todo_start()') unless $set; 1566 1567 $ctx->hub->pre_unfilter($set->[0]); 1568 1569 $ctx->release; 1570 1571 return; 1572} 1573 1574 1575sub caller { ## no critic (Subroutines::ProhibitBuiltinHomonyms) 1576 my( $self ) = @_; 1577 1578 my $ctx = $self->ctx; 1579 1580 my $trace = $ctx->trace; 1581 $ctx->release; 1582 return wantarray ? $trace->call : $trace->package; 1583} 1584 1585 1586sub _try { 1587 my( $self, $code, %opts ) = @_; 1588 1589 my $error; 1590 my $return; 1591 { 1592 local $!; # eval can mess up $! 1593 local $@; # don't set $@ in the test 1594 local $SIG{__DIE__}; # don't trip an outside DIE handler. 1595 $return = eval { $code->() }; 1596 $error = $@; 1597 } 1598 1599 die $error if $error and $opts{die_on_fail}; 1600 1601 return wantarray ? ( $return, $error ) : $return; 1602} 1603 1604sub _ending { 1605 my $self = shift; 1606 my ($ctx, $real_exit_code, $new) = @_; 1607 1608 unless ($ctx) { 1609 my $octx = $self->ctx; 1610 $ctx = $octx->snapshot; 1611 $octx->release; 1612 } 1613 1614 return if $ctx->hub->no_ending; 1615 return if $ctx->hub->meta(__PACKAGE__, {})->{Ending}++; 1616 1617 # Don't bother with an ending if this is a forked copy. Only the parent 1618 # should do the ending. 1619 return unless $self->{Original_Pid} == $$; 1620 1621 my $hub = $ctx->hub; 1622 return if $hub->bailed_out; 1623 1624 my $plan = $hub->plan; 1625 my $count = $hub->count; 1626 my $failed = $hub->failed; 1627 my $passed = $hub->is_passing; 1628 return unless $plan || $count || $failed; 1629 1630 # Ran tests but never declared a plan or hit done_testing 1631 if( !$hub->plan and $hub->count ) { 1632 $self->diag("Tests were run but no plan was declared and done_testing() was not seen."); 1633 1634 if($real_exit_code) { 1635 $self->diag(<<"FAIL"); 1636Looks like your test exited with $real_exit_code just after $count. 1637FAIL 1638 $$new ||= $real_exit_code; 1639 return; 1640 } 1641 1642 # But if the tests ran, handle exit code. 1643 if($failed > 0) { 1644 my $exit_code = $failed <= 254 ? $failed : 254; 1645 $$new ||= $exit_code; 1646 return; 1647 } 1648 1649 $$new ||= 254; 1650 return; 1651 } 1652 1653 if ($real_exit_code && !$count) { 1654 $self->diag("Looks like your test exited with $real_exit_code before it could output anything."); 1655 $$new ||= $real_exit_code; 1656 return; 1657 } 1658 1659 return if $plan && "$plan" eq 'SKIP'; 1660 1661 if (!$count) { 1662 $self->diag('No tests run!'); 1663 $$new ||= 255; 1664 return; 1665 } 1666 1667 if ($real_exit_code) { 1668 $self->diag(<<"FAIL"); 1669Looks like your test exited with $real_exit_code just after $count. 1670FAIL 1671 $$new ||= $real_exit_code; 1672 return; 1673 } 1674 1675 if ($plan eq 'NO PLAN') { 1676 $ctx->plan( $count ); 1677 $plan = $hub->plan; 1678 } 1679 1680 # Figure out if we passed or failed and print helpful messages. 1681 my $num_extra = $count - $plan; 1682 1683 if ($num_extra != 0) { 1684 my $s = $plan == 1 ? '' : 's'; 1685 $self->diag(<<"FAIL"); 1686Looks like you planned $plan test$s but ran $count. 1687FAIL 1688 } 1689 1690 if ($failed) { 1691 my $s = $failed == 1 ? '' : 's'; 1692 1693 my $qualifier = $num_extra == 0 ? '' : ' run'; 1694 1695 $self->diag(<<"FAIL"); 1696Looks like you failed $failed test$s of $count$qualifier. 1697FAIL 1698 } 1699 1700 if (!$passed && !$failed && $count && !$num_extra) { 1701 $ctx->diag(<<"FAIL"); 1702All assertions passed, but errors were encountered. 1703FAIL 1704 } 1705 1706 my $exit_code = 0; 1707 if ($failed) { 1708 $exit_code = $failed <= 254 ? $failed : 254; 1709 } 1710 elsif ($num_extra != 0) { 1711 $exit_code = 255; 1712 } 1713 elsif (!$passed) { 1714 $exit_code = 255; 1715 } 1716 1717 $$new ||= $exit_code; 1718 return; 1719} 1720 1721# Some things used this even though it was private... I am looking at you 1722# Test::Builder::Prefix... 1723sub _print_comment { 1724 my( $self, $fh, @msgs ) = @_; 1725 1726 return if $self->no_diag; 1727 return unless @msgs; 1728 1729 # Prevent printing headers when compiling (i.e. -c) 1730 return if $^C; 1731 1732 # Smash args together like print does. 1733 # Convert undef to 'undef' so its readable. 1734 my $msg = join '', map { defined($_) ? $_ : 'undef' } @msgs; 1735 1736 # Escape the beginning, _print will take care of the rest. 1737 $msg =~ s/^/# /; 1738 1739 local( $\, $", $, ) = ( undef, ' ', '' ); 1740 print $fh $msg; 1741 1742 return 0; 1743} 1744 1745# This is used by Test::SharedFork to turn on IPC after the fact. Not 1746# documenting because I do not want it used. The method name is borrowed from 1747# Test::Builder 2 1748# Once Test2 stuff goes stable this method will be removed and Test::SharedFork 1749# will be made smarter. 1750sub coordinate_forks { 1751 my $self = shift; 1752 1753 { 1754 local ($@, $!); 1755 require Test2::IPC; 1756 } 1757 Test2::IPC->import; 1758 Test2::API::test2_ipc_enable_polling(); 1759 Test2::API::test2_load(); 1760 my $ipc = Test2::IPC::apply_ipc($self->{Stack}); 1761 $ipc->set_no_fatal(1); 1762 Test2::API::test2_no_wait(1); 1763} 1764 1765sub no_log_results { $_[0]->{no_log_results} = 1 } 1766 17671; 1768 1769__END__ 1770 1771=head1 NAME 1772 1773Test::Builder - Backend for building test libraries 1774 1775=head1 SYNOPSIS 1776 1777 package My::Test::Module; 1778 use base 'Test::Builder::Module'; 1779 1780 my $CLASS = __PACKAGE__; 1781 1782 sub ok { 1783 my($test, $name) = @_; 1784 my $tb = $CLASS->builder; 1785 1786 $tb->ok($test, $name); 1787 } 1788 1789 1790=head1 DESCRIPTION 1791 1792L<Test::Simple> and L<Test::More> have proven to be popular testing modules, 1793but they're not always flexible enough. Test::Builder provides a 1794building block upon which to write your own test libraries I<which can 1795work together>. 1796 1797=head2 Construction 1798 1799=over 4 1800 1801=item B<new> 1802 1803 my $Test = Test::Builder->new; 1804 1805Returns a Test::Builder object representing the current state of the 1806test. 1807 1808Since you only run one test per program C<new> always returns the same 1809Test::Builder object. No matter how many times you call C<new()>, you're 1810getting the same object. This is called a singleton. This is done so that 1811multiple modules share such global information as the test counter and 1812where test output is going. 1813 1814If you want a completely new Test::Builder object different from the 1815singleton, use C<create>. 1816 1817=item B<create> 1818 1819 my $Test = Test::Builder->create; 1820 1821Ok, so there can be more than one Test::Builder object and this is how 1822you get it. You might use this instead of C<new()> if you're testing 1823a Test::Builder based module, but otherwise you probably want C<new>. 1824 1825B<NOTE>: the implementation is not complete. C<level>, for example, is still 1826shared by B<all> Test::Builder objects, even ones created using this method. 1827Also, the method name may change in the future. 1828 1829=item B<subtest> 1830 1831 $builder->subtest($name, \&subtests, @args); 1832 1833See documentation of C<subtest> in Test::More. 1834 1835C<subtest> also, and optionally, accepts arguments which will be passed to the 1836subtests reference. 1837 1838=item B<name> 1839 1840 diag $builder->name; 1841 1842Returns the name of the current builder. Top level builders default to C<$0> 1843(the name of the executable). Child builders are named via the C<child> 1844method. If no name is supplied, will be named "Child of $parent->name". 1845 1846=item B<reset> 1847 1848 $Test->reset; 1849 1850Reinitializes the Test::Builder singleton to its original state. 1851Mostly useful for tests run in persistent environments where the same 1852test might be run multiple times in the same process. 1853 1854=back 1855 1856=head2 Setting up tests 1857 1858These methods are for setting up tests and declaring how many there 1859are. You usually only want to call one of these methods. 1860 1861=over 4 1862 1863=item B<plan> 1864 1865 $Test->plan('no_plan'); 1866 $Test->plan( skip_all => $reason ); 1867 $Test->plan( tests => $num_tests ); 1868 1869A convenient way to set up your tests. Call this and Test::Builder 1870will print the appropriate headers and take the appropriate actions. 1871 1872If you call C<plan()>, don't call any of the other methods below. 1873 1874=item B<expected_tests> 1875 1876 my $max = $Test->expected_tests; 1877 $Test->expected_tests($max); 1878 1879Gets/sets the number of tests we expect this test to run and prints out 1880the appropriate headers. 1881 1882 1883=item B<no_plan> 1884 1885 $Test->no_plan; 1886 1887Declares that this test will run an indeterminate number of tests. 1888 1889 1890=item B<done_testing> 1891 1892 $Test->done_testing(); 1893 $Test->done_testing($num_tests); 1894 1895Declares that you are done testing, no more tests will be run after this point. 1896 1897If a plan has not yet been output, it will do so. 1898 1899$num_tests is the number of tests you planned to run. If a numbered 1900plan was already declared, and if this contradicts, a failing test 1901will be run to reflect the planning mistake. If C<no_plan> was declared, 1902this will override. 1903 1904If C<done_testing()> is called twice, the second call will issue a 1905failing test. 1906 1907If C<$num_tests> is omitted, the number of tests run will be used, like 1908no_plan. 1909 1910C<done_testing()> is, in effect, used when you'd want to use C<no_plan>, but 1911safer. You'd use it like so: 1912 1913 $Test->ok($a == $b); 1914 $Test->done_testing(); 1915 1916Or to plan a variable number of tests: 1917 1918 for my $test (@tests) { 1919 $Test->ok($test); 1920 } 1921 $Test->done_testing(scalar @tests); 1922 1923 1924=item B<has_plan> 1925 1926 $plan = $Test->has_plan 1927 1928Find out whether a plan has been defined. C<$plan> is either C<undef> (no plan 1929has been set), C<no_plan> (indeterminate # of tests) or an integer (the number 1930of expected tests). 1931 1932=item B<skip_all> 1933 1934 $Test->skip_all; 1935 $Test->skip_all($reason); 1936 1937Skips all the tests, using the given C<$reason>. Exits immediately with 0. 1938 1939=item B<exported_to> 1940 1941 my $pack = $Test->exported_to; 1942 $Test->exported_to($pack); 1943 1944Tells Test::Builder what package you exported your functions to. 1945 1946This method isn't terribly useful since modules which share the same 1947Test::Builder object might get exported to different packages and only 1948the last one will be honored. 1949 1950=back 1951 1952=head2 Running tests 1953 1954These actually run the tests, analogous to the functions in Test::More. 1955 1956They all return true if the test passed, false if the test failed. 1957 1958C<$name> is always optional. 1959 1960=over 4 1961 1962=item B<ok> 1963 1964 $Test->ok($test, $name); 1965 1966Your basic test. Pass if C<$test> is true, fail if $test is false. Just 1967like Test::Simple's C<ok()>. 1968 1969=item B<is_eq> 1970 1971 $Test->is_eq($got, $expected, $name); 1972 1973Like Test::More's C<is()>. Checks if C<$got eq $expected>. This is the 1974string version. 1975 1976C<undef> only ever matches another C<undef>. 1977 1978=item B<is_num> 1979 1980 $Test->is_num($got, $expected, $name); 1981 1982Like Test::More's C<is()>. Checks if C<$got == $expected>. This is the 1983numeric version. 1984 1985C<undef> only ever matches another C<undef>. 1986 1987=item B<isnt_eq> 1988 1989 $Test->isnt_eq($got, $dont_expect, $name); 1990 1991Like L<Test::More>'s C<isnt()>. Checks if C<$got ne $dont_expect>. This is 1992the string version. 1993 1994=item B<isnt_num> 1995 1996 $Test->isnt_num($got, $dont_expect, $name); 1997 1998Like L<Test::More>'s C<isnt()>. Checks if C<$got ne $dont_expect>. This is 1999the numeric version. 2000 2001=item B<like> 2002 2003 $Test->like($thing, qr/$regex/, $name); 2004 $Test->like($thing, '/$regex/', $name); 2005 2006Like L<Test::More>'s C<like()>. Checks if $thing matches the given C<$regex>. 2007 2008=item B<unlike> 2009 2010 $Test->unlike($thing, qr/$regex/, $name); 2011 $Test->unlike($thing, '/$regex/', $name); 2012 2013Like L<Test::More>'s C<unlike()>. Checks if $thing B<does not match> the 2014given C<$regex>. 2015 2016=item B<cmp_ok> 2017 2018 $Test->cmp_ok($thing, $type, $that, $name); 2019 2020Works just like L<Test::More>'s C<cmp_ok()>. 2021 2022 $Test->cmp_ok($big_num, '!=', $other_big_num); 2023 2024=back 2025 2026=head2 Other Testing Methods 2027 2028These are methods which are used in the course of writing a test but are not themselves tests. 2029 2030=over 4 2031 2032=item B<BAIL_OUT> 2033 2034 $Test->BAIL_OUT($reason); 2035 2036Indicates to the L<Test::Harness> that things are going so badly all 2037testing should terminate. This includes running any additional test 2038scripts. 2039 2040It will exit with 255. 2041 2042=for deprecated 2043BAIL_OUT() used to be BAILOUT() 2044 2045=item B<skip> 2046 2047 $Test->skip; 2048 $Test->skip($why); 2049 2050Skips the current test, reporting C<$why>. 2051 2052=item B<todo_skip> 2053 2054 $Test->todo_skip; 2055 $Test->todo_skip($why); 2056 2057Like C<skip()>, only it will declare the test as failing and TODO. Similar 2058to 2059 2060 print "not ok $tnum # TODO $why\n"; 2061 2062=begin _unimplemented 2063 2064=item B<skip_rest> 2065 2066 $Test->skip_rest; 2067 $Test->skip_rest($reason); 2068 2069Like C<skip()>, only it skips all the rest of the tests you plan to run 2070and terminates the test. 2071 2072If you're running under C<no_plan>, it skips once and terminates the 2073test. 2074 2075=end _unimplemented 2076 2077=back 2078 2079 2080=head2 Test building utility methods 2081 2082These methods are useful when writing your own test methods. 2083 2084=over 4 2085 2086=item B<maybe_regex> 2087 2088 $Test->maybe_regex(qr/$regex/); 2089 $Test->maybe_regex('/$regex/'); 2090 2091This method used to be useful back when Test::Builder worked on Perls 2092before 5.6 which didn't have qr//. Now its pretty useless. 2093 2094Convenience method for building testing functions that take regular 2095expressions as arguments. 2096 2097Takes a quoted regular expression produced by C<qr//>, or a string 2098representing a regular expression. 2099 2100Returns a Perl value which may be used instead of the corresponding 2101regular expression, or C<undef> if its argument is not recognized. 2102 2103For example, a version of C<like()>, sans the useful diagnostic messages, 2104could be written as: 2105 2106 sub laconic_like { 2107 my ($self, $thing, $regex, $name) = @_; 2108 my $usable_regex = $self->maybe_regex($regex); 2109 die "expecting regex, found '$regex'\n" 2110 unless $usable_regex; 2111 $self->ok($thing =~ m/$usable_regex/, $name); 2112 } 2113 2114 2115=item B<is_fh> 2116 2117 my $is_fh = $Test->is_fh($thing); 2118 2119Determines if the given C<$thing> can be used as a filehandle. 2120 2121=cut 2122 2123 2124=back 2125 2126 2127=head2 Test style 2128 2129 2130=over 4 2131 2132=item B<level> 2133 2134 $Test->level($how_high); 2135 2136How far up the call stack should C<$Test> look when reporting where the 2137test failed. 2138 2139Defaults to 1. 2140 2141Setting C<$Test::Builder::Level> overrides. This is typically useful 2142localized: 2143 2144 sub my_ok { 2145 my $test = shift; 2146 2147 local $Test::Builder::Level = $Test::Builder::Level + 1; 2148 $TB->ok($test); 2149 } 2150 2151To be polite to other functions wrapping your own you usually want to increment C<$Level> rather than set it to a constant. 2152 2153=item B<use_numbers> 2154 2155 $Test->use_numbers($on_or_off); 2156 2157Whether or not the test should output numbers. That is, this if true: 2158 2159 ok 1 2160 ok 2 2161 ok 3 2162 2163or this if false 2164 2165 ok 2166 ok 2167 ok 2168 2169Most useful when you can't depend on the test output order, such as 2170when threads or forking is involved. 2171 2172Defaults to on. 2173 2174=item B<no_diag> 2175 2176 $Test->no_diag($no_diag); 2177 2178If set true no diagnostics will be printed. This includes calls to 2179C<diag()>. 2180 2181=item B<no_ending> 2182 2183 $Test->no_ending($no_ending); 2184 2185Normally, Test::Builder does some extra diagnostics when the test 2186ends. It also changes the exit code as described below. 2187 2188If this is true, none of that will be done. 2189 2190=item B<no_header> 2191 2192 $Test->no_header($no_header); 2193 2194If set to true, no "1..N" header will be printed. 2195 2196=back 2197 2198=head2 Output 2199 2200Controlling where the test output goes. 2201 2202It's ok for your test to change where STDOUT and STDERR point to, 2203Test::Builder's default output settings will not be affected. 2204 2205=over 4 2206 2207=item B<diag> 2208 2209 $Test->diag(@msgs); 2210 2211Prints out the given C<@msgs>. Like C<print>, arguments are simply 2212appended together. 2213 2214Normally, it uses the C<failure_output()> handle, but if this is for a 2215TODO test, the C<todo_output()> handle is used. 2216 2217Output will be indented and marked with a # so as not to interfere 2218with test output. A newline will be put on the end if there isn't one 2219already. 2220 2221We encourage using this rather than calling print directly. 2222 2223Returns false. Why? Because C<diag()> is often used in conjunction with 2224a failing test (C<ok() || diag()>) it "passes through" the failure. 2225 2226 return ok(...) || diag(...); 2227 2228=for blame transfer 2229Mark Fowler <mark@twoshortplanks.com> 2230 2231=item B<note> 2232 2233 $Test->note(@msgs); 2234 2235Like C<diag()>, but it prints to the C<output()> handle so it will not 2236normally be seen by the user except in verbose mode. 2237 2238=item B<explain> 2239 2240 my @dump = $Test->explain(@msgs); 2241 2242Will dump the contents of any references in a human readable format. 2243Handy for things like... 2244 2245 is_deeply($have, $want) || diag explain $have; 2246 2247or 2248 2249 is_deeply($have, $want) || note explain $have; 2250 2251=item B<output> 2252 2253=item B<failure_output> 2254 2255=item B<todo_output> 2256 2257 my $filehandle = $Test->output; 2258 $Test->output($filehandle); 2259 $Test->output($filename); 2260 $Test->output(\$scalar); 2261 2262These methods control where Test::Builder will print its output. 2263They take either an open C<$filehandle>, a C<$filename> to open and write to 2264or a C<$scalar> reference to append to. It will always return a C<$filehandle>. 2265 2266B<output> is where normal "ok/not ok" test output goes. 2267 2268Defaults to STDOUT. 2269 2270B<failure_output> is where diagnostic output on test failures and 2271C<diag()> goes. It is normally not read by Test::Harness and instead is 2272displayed to the user. 2273 2274Defaults to STDERR. 2275 2276C<todo_output> is used instead of C<failure_output()> for the 2277diagnostics of a failing TODO test. These will not be seen by the 2278user. 2279 2280Defaults to STDOUT. 2281 2282=item reset_outputs 2283 2284 $tb->reset_outputs; 2285 2286Resets all the output filehandles back to their defaults. 2287 2288=item carp 2289 2290 $tb->carp(@message); 2291 2292Warns with C<@message> but the message will appear to come from the 2293point where the original test function was called (C<< $tb->caller >>). 2294 2295=item croak 2296 2297 $tb->croak(@message); 2298 2299Dies with C<@message> but the message will appear to come from the 2300point where the original test function was called (C<< $tb->caller >>). 2301 2302 2303=back 2304 2305 2306=head2 Test Status and Info 2307 2308=over 4 2309 2310=item B<no_log_results> 2311 2312This will turn off result long-term storage. Calling this method will make 2313C<details> and C<summary> useless. You may want to use this if you are running 2314enough tests to fill up all available memory. 2315 2316 Test::Builder->new->no_log_results(); 2317 2318There is no way to turn it back on. 2319 2320=item B<current_test> 2321 2322 my $curr_test = $Test->current_test; 2323 $Test->current_test($num); 2324 2325Gets/sets the current test number we're on. You usually shouldn't 2326have to set this. 2327 2328If set forward, the details of the missing tests are filled in as 'unknown'. 2329if set backward, the details of the intervening tests are deleted. You 2330can erase history if you really want to. 2331 2332 2333=item B<is_passing> 2334 2335 my $ok = $builder->is_passing; 2336 2337Indicates if the test suite is currently passing. 2338 2339More formally, it will be false if anything has happened which makes 2340it impossible for the test suite to pass. True otherwise. 2341 2342For example, if no tests have run C<is_passing()> will be true because 2343even though a suite with no tests is a failure you can add a passing 2344test to it and start passing. 2345 2346Don't think about it too much. 2347 2348 2349=item B<summary> 2350 2351 my @tests = $Test->summary; 2352 2353A simple summary of the tests so far. True for pass, false for fail. 2354This is a logical pass/fail, so todos are passes. 2355 2356Of course, test #1 is $tests[0], etc... 2357 2358 2359=item B<details> 2360 2361 my @tests = $Test->details; 2362 2363Like C<summary()>, but with a lot more detail. 2364 2365 $tests[$test_num - 1] = 2366 { 'ok' => is the test considered a pass? 2367 actual_ok => did it literally say 'ok'? 2368 name => name of the test (if any) 2369 type => type of test (if any, see below). 2370 reason => reason for the above (if any) 2371 }; 2372 2373'ok' is true if Test::Harness will consider the test to be a pass. 2374 2375'actual_ok' is a reflection of whether or not the test literally 2376printed 'ok' or 'not ok'. This is for examining the result of 'todo' 2377tests. 2378 2379'name' is the name of the test. 2380 2381'type' indicates if it was a special test. Normal tests have a type 2382of ''. Type can be one of the following: 2383 2384 skip see skip() 2385 todo see todo() 2386 todo_skip see todo_skip() 2387 unknown see below 2388 2389Sometimes the Test::Builder test counter is incremented without it 2390printing any test output, for example, when C<current_test()> is changed. 2391In these cases, Test::Builder doesn't know the result of the test, so 2392its type is 'unknown'. These details for these tests are filled in. 2393They are considered ok, but the name and actual_ok is left C<undef>. 2394 2395For example "not ok 23 - hole count # TODO insufficient donuts" would 2396result in this structure: 2397 2398 $tests[22] = # 23 - 1, since arrays start from 0. 2399 { ok => 1, # logically, the test passed since its todo 2400 actual_ok => 0, # in absolute terms, it failed 2401 name => 'hole count', 2402 type => 'todo', 2403 reason => 'insufficient donuts' 2404 }; 2405 2406 2407=item B<todo> 2408 2409 my $todo_reason = $Test->todo; 2410 my $todo_reason = $Test->todo($pack); 2411 2412If the current tests are considered "TODO" it will return the reason, 2413if any. This reason can come from a C<$TODO> variable or the last call 2414to C<todo_start()>. 2415 2416Since a TODO test does not need a reason, this function can return an 2417empty string even when inside a TODO block. Use C<< $Test->in_todo >> 2418to determine if you are currently inside a TODO block. 2419 2420C<todo()> is about finding the right package to look for C<$TODO> in. It's 2421pretty good at guessing the right package to look at. It first looks for 2422the caller based on C<$Level + 1>, since C<todo()> is usually called inside 2423a test function. As a last resort it will use C<exported_to()>. 2424 2425Sometimes there is some confusion about where C<todo()> should be looking 2426for the C<$TODO> variable. If you want to be sure, tell it explicitly 2427what $pack to use. 2428 2429=item B<find_TODO> 2430 2431 my $todo_reason = $Test->find_TODO(); 2432 my $todo_reason = $Test->find_TODO($pack); 2433 2434Like C<todo()> but only returns the value of C<$TODO> ignoring 2435C<todo_start()>. 2436 2437Can also be used to set C<$TODO> to a new value while returning the 2438old value: 2439 2440 my $old_reason = $Test->find_TODO($pack, 1, $new_reason); 2441 2442=item B<in_todo> 2443 2444 my $in_todo = $Test->in_todo; 2445 2446Returns true if the test is currently inside a TODO block. 2447 2448=item B<todo_start> 2449 2450 $Test->todo_start(); 2451 $Test->todo_start($message); 2452 2453This method allows you declare all subsequent tests as TODO tests, up until 2454the C<todo_end> method has been called. 2455 2456The C<TODO:> and C<$TODO> syntax is generally pretty good about figuring out 2457whether or not we're in a TODO test. However, often we find that this is not 2458possible to determine (such as when we want to use C<$TODO> but 2459the tests are being executed in other packages which can't be inferred 2460beforehand). 2461 2462Note that you can use this to nest "todo" tests 2463 2464 $Test->todo_start('working on this'); 2465 # lots of code 2466 $Test->todo_start('working on that'); 2467 # more code 2468 $Test->todo_end; 2469 $Test->todo_end; 2470 2471This is generally not recommended, but large testing systems often have weird 2472internal needs. 2473 2474We've tried to make this also work with the TODO: syntax, but it's not 2475guaranteed and its use is also discouraged: 2476 2477 TODO: { 2478 local $TODO = 'We have work to do!'; 2479 $Test->todo_start('working on this'); 2480 # lots of code 2481 $Test->todo_start('working on that'); 2482 # more code 2483 $Test->todo_end; 2484 $Test->todo_end; 2485 } 2486 2487Pick one style or another of "TODO" to be on the safe side. 2488 2489 2490=item C<todo_end> 2491 2492 $Test->todo_end; 2493 2494Stops running tests as "TODO" tests. This method is fatal if called without a 2495preceding C<todo_start> method call. 2496 2497=item B<caller> 2498 2499 my $package = $Test->caller; 2500 my($pack, $file, $line) = $Test->caller; 2501 my($pack, $file, $line) = $Test->caller($height); 2502 2503Like the normal C<caller()>, except it reports according to your C<level()>. 2504 2505C<$height> will be added to the C<level()>. 2506 2507If C<caller()> winds up off the top of the stack it report the highest context. 2508 2509=back 2510 2511=head1 EXIT CODES 2512 2513If all your tests passed, Test::Builder will exit with zero (which is 2514normal). If anything failed it will exit with how many failed. If 2515you run less (or more) tests than you planned, the missing (or extras) 2516will be considered failures. If no tests were ever run Test::Builder 2517will throw a warning and exit with 255. If the test died, even after 2518having successfully completed all its tests, it will still be 2519considered a failure and will exit with 255. 2520 2521So the exit codes are... 2522 2523 0 all tests successful 2524 255 test died or all passed but wrong # of tests run 2525 any other number how many failed (including missing or extras) 2526 2527If you fail more than 254 tests, it will be reported as 254. 2528 2529=head1 THREADS 2530 2531In perl 5.8.1 and later, Test::Builder is thread-safe. The test number is 2532shared by all threads. This means if one thread sets the test number using 2533C<current_test()> they will all be effected. 2534 2535While versions earlier than 5.8.1 had threads they contain too many 2536bugs to support. 2537 2538Test::Builder is only thread-aware if threads.pm is loaded I<before> 2539Test::Builder. 2540 2541You can directly disable thread support with one of the following: 2542 2543 $ENV{T2_NO_IPC} = 1 2544 2545or 2546 2547 no Test2::IPC; 2548 2549or 2550 2551 Test2::API::test2_ipc_disable() 2552 2553=head1 MEMORY 2554 2555An informative hash, accessible via C<details()>, is stored for each 2556test you perform. So memory usage will scale linearly with each test 2557run. Although this is not a problem for most test suites, it can 2558become an issue if you do large (hundred thousands to million) 2559combinatorics tests in the same run. 2560 2561In such cases, you are advised to either split the test file into smaller 2562ones, or use a reverse approach, doing "normal" (code) compares and 2563triggering C<fail()> should anything go unexpected. 2564 2565Future versions of Test::Builder will have a way to turn history off. 2566 2567 2568=head1 EXAMPLES 2569 2570CPAN can provide the best examples. L<Test::Simple>, L<Test::More>, 2571L<Test::Exception> and L<Test::Differences> all use Test::Builder. 2572 2573=head1 SEE ALSO 2574 2575=head2 INTERNALS 2576 2577L<Test2>, L<Test2::API> 2578 2579=head2 LEGACY 2580 2581L<Test::Simple>, L<Test::More> 2582 2583=head2 EXTERNAL 2584 2585L<Test::Harness> 2586 2587=head1 AUTHORS 2588 2589Original code by chromatic, maintained by Michael G Schwern 2590E<lt>schwern@pobox.comE<gt> 2591 2592=head1 MAINTAINERS 2593 2594=over 4 2595 2596=item Chad Granum E<lt>exodist@cpan.orgE<gt> 2597 2598=back 2599 2600=head1 COPYRIGHT 2601 2602Copyright 2002-2008 by chromatic E<lt>chromatic@wgz.orgE<gt> and 2603 Michael G Schwern E<lt>schwern@pobox.comE<gt>. 2604 2605This program is free software; you can redistribute it and/or 2606modify it under the same terms as Perl itself. 2607 2608See F<http://www.perl.com/perl/misc/Artistic.html> 2609