1package Test::Builder; 2 3use 5.004; 4 5# $^C was only introduced in 5.005-ish. We do this to prevent 6# use of uninitialized value warnings in older perls. 7$^C ||= 0; 8 9use strict; 10use vars qw($VERSION); 11$VERSION = '0.32'; 12$VERSION = eval $VERSION; # make the alpha version come out as a number 13 14# Make Test::Builder thread-safe for ithreads. 15BEGIN { 16 use Config; 17 # Load threads::shared when threads are turned on 18 if( $] >= 5.008 && $Config{useithreads} && $INC{'threads.pm'}) { 19 require threads::shared; 20 21 # Hack around YET ANOTHER threads::shared bug. It would 22 # occassionally forget the contents of the variable when sharing it. 23 # So we first copy the data, then share, then put our copy back. 24 *share = sub (\[$@%]) { 25 my $type = ref $_[0]; 26 my $data; 27 28 if( $type eq 'HASH' ) { 29 %$data = %{$_[0]}; 30 } 31 elsif( $type eq 'ARRAY' ) { 32 @$data = @{$_[0]}; 33 } 34 elsif( $type eq 'SCALAR' ) { 35 $$data = ${$_[0]}; 36 } 37 else { 38 die "Unknown type: ".$type; 39 } 40 41 $_[0] = &threads::shared::share($_[0]); 42 43 if( $type eq 'HASH' ) { 44 %{$_[0]} = %$data; 45 } 46 elsif( $type eq 'ARRAY' ) { 47 @{$_[0]} = @$data; 48 } 49 elsif( $type eq 'SCALAR' ) { 50 ${$_[0]} = $$data; 51 } 52 else { 53 die "Unknown type: ".$type; 54 } 55 56 return $_[0]; 57 }; 58 } 59 # 5.8.0's threads::shared is busted when threads are off. 60 # We emulate it here. 61 else { 62 *share = sub { return $_[0] }; 63 *lock = sub { 0 }; 64 } 65} 66 67 68=head1 NAME 69 70Test::Builder - Backend for building test libraries 71 72=head1 SYNOPSIS 73 74 package My::Test::Module; 75 use Test::Builder; 76 require Exporter; 77 @ISA = qw(Exporter); 78 @EXPORT = qw(ok); 79 80 my $Test = Test::Builder->new; 81 $Test->output('my_logfile'); 82 83 sub import { 84 my($self) = shift; 85 my $pack = caller; 86 87 $Test->exported_to($pack); 88 $Test->plan(@_); 89 90 $self->export_to_level(1, $self, 'ok'); 91 } 92 93 sub ok { 94 my($test, $name) = @_; 95 96 $Test->ok($test, $name); 97 } 98 99 100=head1 DESCRIPTION 101 102Test::Simple and Test::More have proven to be popular testing modules, 103but they're not always flexible enough. Test::Builder provides the a 104building block upon which to write your own test libraries I<which can 105work together>. 106 107=head2 Construction 108 109=over 4 110 111=item B<new> 112 113 my $Test = Test::Builder->new; 114 115Returns a Test::Builder object representing the current state of the 116test. 117 118Since you only run one test per program C<new> always returns the same 119Test::Builder object. No matter how many times you call new(), you're 120getting the same object. This is called a singleton. This is done so that 121multiple modules share such global information as the test counter and 122where test output is going. 123 124If you want a completely new Test::Builder object different from the 125singleton, use C<create>. 126 127=cut 128 129my $Test = Test::Builder->new; 130sub new { 131 my($class) = shift; 132 $Test ||= $class->create; 133 return $Test; 134} 135 136 137=item B<create> 138 139 my $Test = Test::Builder->create; 140 141Ok, so there can be more than one Test::Builder object and this is how 142you get it. You might use this instead of C<new()> if you're testing 143a Test::Builder based module, but otherwise you probably want C<new>. 144 145B<NOTE>: the implementation is not complete. C<level>, for example, is 146still shared amongst B<all> Test::Builder objects, even ones created using 147this method. Also, the method name may change in the future. 148 149=cut 150 151sub create { 152 my $class = shift; 153 154 my $self = bless {}, $class; 155 $self->reset; 156 157 return $self; 158} 159 160=item B<reset> 161 162 $Test->reset; 163 164Reinitializes the Test::Builder singleton to its original state. 165Mostly useful for tests run in persistent environments where the same 166test might be run multiple times in the same process. 167 168=cut 169 170use vars qw($Level); 171 172sub reset { 173 my ($self) = @_; 174 175 # We leave this a global because it has to be localized and localizing 176 # hash keys is just asking for pain. Also, it was documented. 177 $Level = 1; 178 179 $self->{Test_Died} = 0; 180 $self->{Have_Plan} = 0; 181 $self->{No_Plan} = 0; 182 $self->{Original_Pid} = $$; 183 184 share($self->{Curr_Test}); 185 $self->{Curr_Test} = 0; 186 $self->{Test_Results} = &share([]); 187 188 $self->{Exported_To} = undef; 189 $self->{Expected_Tests} = 0; 190 191 $self->{Skip_All} = 0; 192 193 $self->{Use_Nums} = 1; 194 195 $self->{No_Header} = 0; 196 $self->{No_Ending} = 0; 197 198 $self->_dup_stdhandles unless $^C; 199 200 return undef; 201} 202 203=back 204 205=head2 Setting up tests 206 207These methods are for setting up tests and declaring how many there 208are. You usually only want to call one of these methods. 209 210=over 4 211 212=item B<exported_to> 213 214 my $pack = $Test->exported_to; 215 $Test->exported_to($pack); 216 217Tells Test::Builder what package you exported your functions to. 218This is important for getting TODO tests right. 219 220=cut 221 222sub exported_to { 223 my($self, $pack) = @_; 224 225 if( defined $pack ) { 226 $self->{Exported_To} = $pack; 227 } 228 return $self->{Exported_To}; 229} 230 231=item B<plan> 232 233 $Test->plan('no_plan'); 234 $Test->plan( skip_all => $reason ); 235 $Test->plan( tests => $num_tests ); 236 237A convenient way to set up your tests. Call this and Test::Builder 238will print the appropriate headers and take the appropriate actions. 239 240If you call plan(), don't call any of the other methods below. 241 242=cut 243 244sub plan { 245 my($self, $cmd, $arg) = @_; 246 247 return unless $cmd; 248 249 if( $self->{Have_Plan} ) { 250 die sprintf "You tried to plan twice! Second plan at %s line %d\n", 251 ($self->caller)[1,2]; 252 } 253 254 if( $cmd eq 'no_plan' ) { 255 $self->no_plan; 256 } 257 elsif( $cmd eq 'skip_all' ) { 258 return $self->skip_all($arg); 259 } 260 elsif( $cmd eq 'tests' ) { 261 if( $arg ) { 262 return $self->expected_tests($arg); 263 } 264 elsif( !defined $arg ) { 265 die "Got an undefined number of tests. Looks like you tried to ". 266 "say how many tests you plan to run but made a mistake.\n"; 267 } 268 elsif( !$arg ) { 269 die "You said to run 0 tests! You've got to run something.\n"; 270 } 271 } 272 else { 273 require Carp; 274 my @args = grep { defined } ($cmd, $arg); 275 Carp::croak("plan() doesn't understand @args"); 276 } 277 278 return 1; 279} 280 281=item B<expected_tests> 282 283 my $max = $Test->expected_tests; 284 $Test->expected_tests($max); 285 286Gets/sets the # of tests we expect this test to run and prints out 287the appropriate headers. 288 289=cut 290 291sub expected_tests { 292 my $self = shift; 293 my($max) = @_; 294 295 if( @_ ) { 296 die "Number of tests must be a postive integer. You gave it '$max'.\n" 297 unless $max =~ /^\+?\d+$/ and $max > 0; 298 299 $self->{Expected_Tests} = $max; 300 $self->{Have_Plan} = 1; 301 302 $self->_print("1..$max\n") unless $self->no_header; 303 } 304 return $self->{Expected_Tests}; 305} 306 307 308=item B<no_plan> 309 310 $Test->no_plan; 311 312Declares that this test will run an indeterminate # of tests. 313 314=cut 315 316sub no_plan { 317 my $self = shift; 318 319 $self->{No_Plan} = 1; 320 $self->{Have_Plan} = 1; 321} 322 323=item B<has_plan> 324 325 $plan = $Test->has_plan 326 327Find out whether a plan has been defined. $plan is either C<undef> (no plan has been set), C<no_plan> (indeterminate # of tests) or an integer (the number of expected tests). 328 329=cut 330 331sub has_plan { 332 my $self = shift; 333 334 return($self->{Expected_Tests}) if $self->{Expected_Tests}; 335 return('no_plan') if $self->{No_Plan}; 336 return(undef); 337}; 338 339 340=item B<skip_all> 341 342 $Test->skip_all; 343 $Test->skip_all($reason); 344 345Skips all the tests, using the given $reason. Exits immediately with 0. 346 347=cut 348 349sub skip_all { 350 my($self, $reason) = @_; 351 352 my $out = "1..0"; 353 $out .= " # Skip $reason" if $reason; 354 $out .= "\n"; 355 356 $self->{Skip_All} = 1; 357 358 $self->_print($out) unless $self->no_header; 359 exit(0); 360} 361 362=back 363 364=head2 Running tests 365 366These actually run the tests, analogous to the functions in 367Test::More. 368 369$name is always optional. 370 371=over 4 372 373=item B<ok> 374 375 $Test->ok($test, $name); 376 377Your basic test. Pass if $test is true, fail if $test is false. Just 378like Test::Simple's ok(). 379 380=cut 381 382sub ok { 383 my($self, $test, $name) = @_; 384 385 # $test might contain an object which we don't want to accidentally 386 # store, so we turn it into a boolean. 387 $test = $test ? 1 : 0; 388 389 unless( $self->{Have_Plan} ) { 390 require Carp; 391 Carp::croak("You tried to run a test without a plan! Gotta have a plan."); 392 } 393 394 lock $self->{Curr_Test}; 395 $self->{Curr_Test}++; 396 397 # In case $name is a string overloaded object, force it to stringify. 398 $self->_unoverload_str(\$name); 399 400 $self->diag(<<ERR) if defined $name and $name =~ /^[\d\s]+$/; 401 You named your test '$name'. You shouldn't use numbers for your test names. 402 Very confusing. 403ERR 404 405 my($pack, $file, $line) = $self->caller; 406 407 my $todo = $self->todo($pack); 408 $self->_unoverload_str(\$todo); 409 410 my $out; 411 my $result = &share({}); 412 413 unless( $test ) { 414 $out .= "not "; 415 @$result{ 'ok', 'actual_ok' } = ( ( $todo ? 1 : 0 ), 0 ); 416 } 417 else { 418 @$result{ 'ok', 'actual_ok' } = ( 1, $test ); 419 } 420 421 $out .= "ok"; 422 $out .= " $self->{Curr_Test}" if $self->use_numbers; 423 424 if( defined $name ) { 425 $name =~ s|#|\\#|g; # # in a name can confuse Test::Harness. 426 $out .= " - $name"; 427 $result->{name} = $name; 428 } 429 else { 430 $result->{name} = ''; 431 } 432 433 if( $todo ) { 434 $out .= " # TODO $todo"; 435 $result->{reason} = $todo; 436 $result->{type} = 'todo'; 437 } 438 else { 439 $result->{reason} = ''; 440 $result->{type} = ''; 441 } 442 443 $self->{Test_Results}[$self->{Curr_Test}-1] = $result; 444 $out .= "\n"; 445 446 $self->_print($out); 447 448 unless( $test ) { 449 my $msg = $todo ? "Failed (TODO)" : "Failed"; 450 $self->_print_diag("\n") if $ENV{HARNESS_ACTIVE}; 451 452 if( defined $name ) { 453 $self->diag(qq[ $msg test '$name'\n]); 454 $self->diag(qq[ in $file at line $line.\n]); 455 } 456 else { 457 $self->diag(qq[ $msg test in $file at line $line.\n]); 458 } 459 } 460 461 return $test ? 1 : 0; 462} 463 464 465sub _unoverload { 466 my $self = shift; 467 my $type = shift; 468 469 local($@,$!); 470 471 eval { require overload } || return; 472 473 foreach my $thing (@_) { 474 eval { 475 if( _is_object($$thing) ) { 476 if( my $string_meth = overload::Method($$thing, $type) ) { 477 $$thing = $$thing->$string_meth(); 478 } 479 } 480 }; 481 } 482} 483 484 485sub _is_object { 486 my $thing = shift; 487 488 return eval { ref $thing && $thing->isa('UNIVERSAL') } ? 1 : 0; 489} 490 491 492sub _unoverload_str { 493 my $self = shift; 494 495 $self->_unoverload(q[""], @_); 496} 497 498sub _unoverload_num { 499 my $self = shift; 500 501 $self->_unoverload('0+', @_); 502 503 for my $val (@_) { 504 next unless $self->_is_dualvar($$val); 505 $$val = $$val+0; 506 } 507} 508 509 510# This is a hack to detect a dualvar such as $! 511sub _is_dualvar { 512 my($self, $val) = @_; 513 514 local $^W = 0; 515 my $numval = $val+0; 516 return 1 if $numval != 0 and $numval ne $val; 517} 518 519 520 521=item B<is_eq> 522 523 $Test->is_eq($got, $expected, $name); 524 525Like Test::More's is(). Checks if $got eq $expected. This is the 526string version. 527 528=item B<is_num> 529 530 $Test->is_num($got, $expected, $name); 531 532Like Test::More's is(). Checks if $got == $expected. This is the 533numeric version. 534 535=cut 536 537sub is_eq { 538 my($self, $got, $expect, $name) = @_; 539 local $Level = $Level + 1; 540 541 $self->_unoverload_str(\$got, \$expect); 542 543 if( !defined $got || !defined $expect ) { 544 # undef only matches undef and nothing else 545 my $test = !defined $got && !defined $expect; 546 547 $self->ok($test, $name); 548 $self->_is_diag($got, 'eq', $expect) unless $test; 549 return $test; 550 } 551 552 return $self->cmp_ok($got, 'eq', $expect, $name); 553} 554 555sub is_num { 556 my($self, $got, $expect, $name) = @_; 557 local $Level = $Level + 1; 558 559 $self->_unoverload_num(\$got, \$expect); 560 561 if( !defined $got || !defined $expect ) { 562 # undef only matches undef and nothing else 563 my $test = !defined $got && !defined $expect; 564 565 $self->ok($test, $name); 566 $self->_is_diag($got, '==', $expect) unless $test; 567 return $test; 568 } 569 570 return $self->cmp_ok($got, '==', $expect, $name); 571} 572 573sub _is_diag { 574 my($self, $got, $type, $expect) = @_; 575 576 foreach my $val (\$got, \$expect) { 577 if( defined $$val ) { 578 if( $type eq 'eq' ) { 579 # quote and force string context 580 $$val = "'$$val'" 581 } 582 else { 583 # force numeric context 584 $self->_unoverload_num($val); 585 } 586 } 587 else { 588 $$val = 'undef'; 589 } 590 } 591 592 return $self->diag(sprintf <<DIAGNOSTIC, $got, $expect); 593 got: %s 594 expected: %s 595DIAGNOSTIC 596 597} 598 599=item B<isnt_eq> 600 601 $Test->isnt_eq($got, $dont_expect, $name); 602 603Like Test::More's isnt(). Checks if $got ne $dont_expect. This is 604the string version. 605 606=item B<isnt_num> 607 608 $Test->is_num($got, $dont_expect, $name); 609 610Like Test::More's isnt(). Checks if $got ne $dont_expect. This is 611the numeric version. 612 613=cut 614 615sub isnt_eq { 616 my($self, $got, $dont_expect, $name) = @_; 617 local $Level = $Level + 1; 618 619 if( !defined $got || !defined $dont_expect ) { 620 # undef only matches undef and nothing else 621 my $test = defined $got || defined $dont_expect; 622 623 $self->ok($test, $name); 624 $self->_cmp_diag($got, 'ne', $dont_expect) unless $test; 625 return $test; 626 } 627 628 return $self->cmp_ok($got, 'ne', $dont_expect, $name); 629} 630 631sub isnt_num { 632 my($self, $got, $dont_expect, $name) = @_; 633 local $Level = $Level + 1; 634 635 if( !defined $got || !defined $dont_expect ) { 636 # undef only matches undef and nothing else 637 my $test = defined $got || defined $dont_expect; 638 639 $self->ok($test, $name); 640 $self->_cmp_diag($got, '!=', $dont_expect) unless $test; 641 return $test; 642 } 643 644 return $self->cmp_ok($got, '!=', $dont_expect, $name); 645} 646 647 648=item B<like> 649 650 $Test->like($this, qr/$regex/, $name); 651 $Test->like($this, '/$regex/', $name); 652 653Like Test::More's like(). Checks if $this matches the given $regex. 654 655You'll want to avoid qr// if you want your tests to work before 5.005. 656 657=item B<unlike> 658 659 $Test->unlike($this, qr/$regex/, $name); 660 $Test->unlike($this, '/$regex/', $name); 661 662Like Test::More's unlike(). Checks if $this B<does not match> the 663given $regex. 664 665=cut 666 667sub like { 668 my($self, $this, $regex, $name) = @_; 669 670 local $Level = $Level + 1; 671 $self->_regex_ok($this, $regex, '=~', $name); 672} 673 674sub unlike { 675 my($self, $this, $regex, $name) = @_; 676 677 local $Level = $Level + 1; 678 $self->_regex_ok($this, $regex, '!~', $name); 679} 680 681=item B<maybe_regex> 682 683 $Test->maybe_regex(qr/$regex/); 684 $Test->maybe_regex('/$regex/'); 685 686Convenience method for building testing functions that take regular 687expressions as arguments, but need to work before perl 5.005. 688 689Takes a quoted regular expression produced by qr//, or a string 690representing a regular expression. 691 692Returns a Perl value which may be used instead of the corresponding 693regular expression, or undef if it's argument is not recognised. 694 695For example, a version of like(), sans the useful diagnostic messages, 696could be written as: 697 698 sub laconic_like { 699 my ($self, $this, $regex, $name) = @_; 700 my $usable_regex = $self->maybe_regex($regex); 701 die "expecting regex, found '$regex'\n" 702 unless $usable_regex; 703 $self->ok($this =~ m/$usable_regex/, $name); 704 } 705 706=cut 707 708 709sub maybe_regex { 710 my ($self, $regex) = @_; 711 my $usable_regex = undef; 712 713 return $usable_regex unless defined $regex; 714 715 my($re, $opts); 716 717 # Check for qr/foo/ 718 if( ref $regex eq 'Regexp' ) { 719 $usable_regex = $regex; 720 } 721 # Check for '/foo/' or 'm,foo,' 722 elsif( ($re, $opts) = $regex =~ m{^ /(.*)/ (\w*) $ }sx or 723 (undef, $re, $opts) = $regex =~ m,^ m([^\w\s]) (.+) \1 (\w*) $,sx 724 ) 725 { 726 $usable_regex = length $opts ? "(?$opts)$re" : $re; 727 } 728 729 return $usable_regex; 730}; 731 732sub _regex_ok { 733 my($self, $this, $regex, $cmp, $name) = @_; 734 735 my $ok = 0; 736 my $usable_regex = $self->maybe_regex($regex); 737 unless (defined $usable_regex) { 738 $ok = $self->ok( 0, $name ); 739 $self->diag(" '$regex' doesn't look much like a regex to me."); 740 return $ok; 741 } 742 743 { 744 my $test; 745 my $code = $self->_caller_context; 746 747 local($@, $!); 748 749 # Yes, it has to look like this or 5.4.5 won't see the #line directive. 750 # Don't ask me, man, I just work here. 751 $test = eval " 752$code" . q{$test = $this =~ /$usable_regex/ ? 1 : 0}; 753 754 $test = !$test if $cmp eq '!~'; 755 756 local $Level = $Level + 1; 757 $ok = $self->ok( $test, $name ); 758 } 759 760 unless( $ok ) { 761 $this = defined $this ? "'$this'" : 'undef'; 762 my $match = $cmp eq '=~' ? "doesn't match" : "matches"; 763 $self->diag(sprintf <<DIAGNOSTIC, $this, $match, $regex); 764 %s 765 %13s '%s' 766DIAGNOSTIC 767 768 } 769 770 return $ok; 771} 772 773=item B<cmp_ok> 774 775 $Test->cmp_ok($this, $type, $that, $name); 776 777Works just like Test::More's cmp_ok(). 778 779 $Test->cmp_ok($big_num, '!=', $other_big_num); 780 781=cut 782 783 784my %numeric_cmps = map { ($_, 1) } 785 ("<", "<=", ">", ">=", "==", "!=", "<=>"); 786 787sub cmp_ok { 788 my($self, $got, $type, $expect, $name) = @_; 789 790 # Treat overloaded objects as numbers if we're asked to do a 791 # numeric comparison. 792 my $unoverload = $numeric_cmps{$type} ? '_unoverload_num' 793 : '_unoverload_str'; 794 795 $self->$unoverload(\$got, \$expect); 796 797 798 my $test; 799 { 800 local($@,$!); # don't interfere with $@ 801 # eval() sometimes resets $! 802 803 my $code = $self->_caller_context; 804 805 # Yes, it has to look like this or 5.4.5 won't see the #line directive. 806 # Don't ask me, man, I just work here. 807 $test = eval " 808$code" . "\$got $type \$expect;"; 809 810 } 811 local $Level = $Level + 1; 812 my $ok = $self->ok($test, $name); 813 814 unless( $ok ) { 815 if( $type =~ /^(eq|==)$/ ) { 816 $self->_is_diag($got, $type, $expect); 817 } 818 else { 819 $self->_cmp_diag($got, $type, $expect); 820 } 821 } 822 return $ok; 823} 824 825sub _cmp_diag { 826 my($self, $got, $type, $expect) = @_; 827 828 $got = defined $got ? "'$got'" : 'undef'; 829 $expect = defined $expect ? "'$expect'" : 'undef'; 830 return $self->diag(sprintf <<DIAGNOSTIC, $got, $type, $expect); 831 %s 832 %s 833 %s 834DIAGNOSTIC 835} 836 837 838sub _caller_context { 839 my $self = shift; 840 841 my($pack, $file, $line) = $self->caller(1); 842 843 my $code = ''; 844 $code .= "#line $line $file\n" if defined $file and defined $line; 845 846 return $code; 847} 848 849 850=item B<BAIL_OUT> 851 852 $Test->BAIL_OUT($reason); 853 854Indicates to the Test::Harness that things are going so badly all 855testing should terminate. This includes running any additional test 856scripts. 857 858It will exit with 255. 859 860=cut 861 862sub BAIL_OUT { 863 my($self, $reason) = @_; 864 865 $self->{Bailed_Out} = 1; 866 $self->_print("Bail out! $reason"); 867 exit 255; 868} 869 870=for deprecated 871BAIL_OUT() used to be BAILOUT() 872 873=cut 874 875*BAILOUT = \&BAIL_OUT; 876 877 878=item B<skip> 879 880 $Test->skip; 881 $Test->skip($why); 882 883Skips the current test, reporting $why. 884 885=cut 886 887sub skip { 888 my($self, $why) = @_; 889 $why ||= ''; 890 $self->_unoverload_str(\$why); 891 892 unless( $self->{Have_Plan} ) { 893 require Carp; 894 Carp::croak("You tried to run tests without a plan! Gotta have a plan."); 895 } 896 897 lock($self->{Curr_Test}); 898 $self->{Curr_Test}++; 899 900 $self->{Test_Results}[$self->{Curr_Test}-1] = &share({ 901 'ok' => 1, 902 actual_ok => 1, 903 name => '', 904 type => 'skip', 905 reason => $why, 906 }); 907 908 my $out = "ok"; 909 $out .= " $self->{Curr_Test}" if $self->use_numbers; 910 $out .= " # skip"; 911 $out .= " $why" if length $why; 912 $out .= "\n"; 913 914 $self->_print($out); 915 916 return 1; 917} 918 919 920=item B<todo_skip> 921 922 $Test->todo_skip; 923 $Test->todo_skip($why); 924 925Like skip(), only it will declare the test as failing and TODO. Similar 926to 927 928 print "not ok $tnum # TODO $why\n"; 929 930=cut 931 932sub todo_skip { 933 my($self, $why) = @_; 934 $why ||= ''; 935 936 unless( $self->{Have_Plan} ) { 937 require Carp; 938 Carp::croak("You tried to run tests without a plan! Gotta have a plan."); 939 } 940 941 lock($self->{Curr_Test}); 942 $self->{Curr_Test}++; 943 944 $self->{Test_Results}[$self->{Curr_Test}-1] = &share({ 945 'ok' => 1, 946 actual_ok => 0, 947 name => '', 948 type => 'todo_skip', 949 reason => $why, 950 }); 951 952 my $out = "not ok"; 953 $out .= " $self->{Curr_Test}" if $self->use_numbers; 954 $out .= " # TODO & SKIP $why\n"; 955 956 $self->_print($out); 957 958 return 1; 959} 960 961 962=begin _unimplemented 963 964=item B<skip_rest> 965 966 $Test->skip_rest; 967 $Test->skip_rest($reason); 968 969Like skip(), only it skips all the rest of the tests you plan to run 970and terminates the test. 971 972If you're running under no_plan, it skips once and terminates the 973test. 974 975=end _unimplemented 976 977=back 978 979 980=head2 Test style 981 982=over 4 983 984=item B<level> 985 986 $Test->level($how_high); 987 988How far up the call stack should $Test look when reporting where the 989test failed. 990 991Defaults to 1. 992 993Setting $Test::Builder::Level overrides. This is typically useful 994localized: 995 996 { 997 local $Test::Builder::Level = 2; 998 $Test->ok($test); 999 } 1000 1001=cut 1002 1003sub level { 1004 my($self, $level) = @_; 1005 1006 if( defined $level ) { 1007 $Level = $level; 1008 } 1009 return $Level; 1010} 1011 1012 1013=item B<use_numbers> 1014 1015 $Test->use_numbers($on_or_off); 1016 1017Whether or not the test should output numbers. That is, this if true: 1018 1019 ok 1 1020 ok 2 1021 ok 3 1022 1023or this if false 1024 1025 ok 1026 ok 1027 ok 1028 1029Most useful when you can't depend on the test output order, such as 1030when threads or forking is involved. 1031 1032Test::Harness will accept either, but avoid mixing the two styles. 1033 1034Defaults to on. 1035 1036=cut 1037 1038sub use_numbers { 1039 my($self, $use_nums) = @_; 1040 1041 if( defined $use_nums ) { 1042 $self->{Use_Nums} = $use_nums; 1043 } 1044 return $self->{Use_Nums}; 1045} 1046 1047 1048=item B<no_diag> 1049 1050 $Test->no_diag($no_diag); 1051 1052If set true no diagnostics will be printed. This includes calls to 1053diag(). 1054 1055=item B<no_ending> 1056 1057 $Test->no_ending($no_ending); 1058 1059Normally, Test::Builder does some extra diagnostics when the test 1060ends. It also changes the exit code as described below. 1061 1062If this is true, none of that will be done. 1063 1064=item B<no_header> 1065 1066 $Test->no_header($no_header); 1067 1068If set to true, no "1..N" header will be printed. 1069 1070=cut 1071 1072foreach my $attribute (qw(No_Header No_Ending No_Diag)) { 1073 my $method = lc $attribute; 1074 1075 my $code = sub { 1076 my($self, $no) = @_; 1077 1078 if( defined $no ) { 1079 $self->{$attribute} = $no; 1080 } 1081 return $self->{$attribute}; 1082 }; 1083 1084 no strict 'refs'; 1085 *{__PACKAGE__.'::'.$method} = $code; 1086} 1087 1088 1089=back 1090 1091=head2 Output 1092 1093Controlling where the test output goes. 1094 1095It's ok for your test to change where STDOUT and STDERR point to, 1096Test::Builder's default output settings will not be affected. 1097 1098=over 4 1099 1100=item B<diag> 1101 1102 $Test->diag(@msgs); 1103 1104Prints out the given @msgs. Like C<print>, arguments are simply 1105appended together. 1106 1107Normally, it uses the failure_output() handle, but if this is for a 1108TODO test, the todo_output() handle is used. 1109 1110Output will be indented and marked with a # so as not to interfere 1111with test output. A newline will be put on the end if there isn't one 1112already. 1113 1114We encourage using this rather than calling print directly. 1115 1116Returns false. Why? Because diag() is often used in conjunction with 1117a failing test (C<ok() || diag()>) it "passes through" the failure. 1118 1119 return ok(...) || diag(...); 1120 1121=for blame transfer 1122Mark Fowler <mark@twoshortplanks.com> 1123 1124=cut 1125 1126sub diag { 1127 my($self, @msgs) = @_; 1128 1129 return if $self->no_diag; 1130 return unless @msgs; 1131 1132 # Prevent printing headers when compiling (i.e. -c) 1133 return if $^C; 1134 1135 # Smash args together like print does. 1136 # Convert undef to 'undef' so its readable. 1137 my $msg = join '', map { defined($_) ? $_ : 'undef' } @msgs; 1138 1139 # Escape each line with a #. 1140 $msg =~ s/^/# /gm; 1141 1142 # Stick a newline on the end if it needs it. 1143 $msg .= "\n" unless $msg =~ /\n\Z/; 1144 1145 local $Level = $Level + 1; 1146 $self->_print_diag($msg); 1147 1148 return 0; 1149} 1150 1151=begin _private 1152 1153=item B<_print> 1154 1155 $Test->_print(@msgs); 1156 1157Prints to the output() filehandle. 1158 1159=end _private 1160 1161=cut 1162 1163sub _print { 1164 my($self, @msgs) = @_; 1165 1166 # Prevent printing headers when only compiling. Mostly for when 1167 # tests are deparsed with B::Deparse 1168 return if $^C; 1169 1170 my $msg = join '', @msgs; 1171 1172 local($\, $", $,) = (undef, ' ', ''); 1173 my $fh = $self->output; 1174 1175 # Escape each line after the first with a # so we don't 1176 # confuse Test::Harness. 1177 $msg =~ s/\n(.)/\n# $1/sg; 1178 1179 # Stick a newline on the end if it needs it. 1180 $msg .= "\n" unless $msg =~ /\n\Z/; 1181 1182 print $fh $msg; 1183} 1184 1185 1186=item B<_print_diag> 1187 1188 $Test->_print_diag(@msg); 1189 1190Like _print, but prints to the current diagnostic filehandle. 1191 1192=cut 1193 1194sub _print_diag { 1195 my $self = shift; 1196 1197 local($\, $", $,) = (undef, ' ', ''); 1198 my $fh = $self->todo ? $self->todo_output : $self->failure_output; 1199 print $fh @_; 1200} 1201 1202=item B<output> 1203 1204 $Test->output($fh); 1205 $Test->output($file); 1206 1207Where normal "ok/not ok" test output should go. 1208 1209Defaults to STDOUT. 1210 1211=item B<failure_output> 1212 1213 $Test->failure_output($fh); 1214 $Test->failure_output($file); 1215 1216Where diagnostic output on test failures and diag() should go. 1217 1218Defaults to STDERR. 1219 1220=item B<todo_output> 1221 1222 $Test->todo_output($fh); 1223 $Test->todo_output($file); 1224 1225Where diagnostics about todo test failures and diag() should go. 1226 1227Defaults to STDOUT. 1228 1229=cut 1230 1231sub output { 1232 my($self, $fh) = @_; 1233 1234 if( defined $fh ) { 1235 $self->{Out_FH} = _new_fh($fh); 1236 } 1237 return $self->{Out_FH}; 1238} 1239 1240sub failure_output { 1241 my($self, $fh) = @_; 1242 1243 if( defined $fh ) { 1244 $self->{Fail_FH} = _new_fh($fh); 1245 } 1246 return $self->{Fail_FH}; 1247} 1248 1249sub todo_output { 1250 my($self, $fh) = @_; 1251 1252 if( defined $fh ) { 1253 $self->{Todo_FH} = _new_fh($fh); 1254 } 1255 return $self->{Todo_FH}; 1256} 1257 1258 1259sub _new_fh { 1260 my($file_or_fh) = shift; 1261 1262 my $fh; 1263 if( _is_fh($file_or_fh) ) { 1264 $fh = $file_or_fh; 1265 } 1266 else { 1267 $fh = do { local *FH }; 1268 open $fh, ">$file_or_fh" or 1269 die "Can't open test output log $file_or_fh: $!"; 1270 _autoflush($fh); 1271 } 1272 1273 return $fh; 1274} 1275 1276 1277sub _is_fh { 1278 my $maybe_fh = shift; 1279 return 0 unless defined $maybe_fh; 1280 1281 return 1 if ref \$maybe_fh eq 'GLOB'; # its a glob 1282 1283 return UNIVERSAL::isa($maybe_fh, 'GLOB') || 1284 UNIVERSAL::isa($maybe_fh, 'IO::Handle') || 1285 1286 # 5.5.4's tied() and can() doesn't like getting undef 1287 UNIVERSAL::can((tied($maybe_fh) || ''), 'TIEHANDLE'); 1288} 1289 1290 1291sub _autoflush { 1292 my($fh) = shift; 1293 my $old_fh = select $fh; 1294 $| = 1; 1295 select $old_fh; 1296} 1297 1298 1299sub _dup_stdhandles { 1300 my $self = shift; 1301 1302 $self->_open_testhandles; 1303 1304 # Set everything to unbuffered else plain prints to STDOUT will 1305 # come out in the wrong order from our own prints. 1306 _autoflush(\*TESTOUT); 1307 _autoflush(\*STDOUT); 1308 _autoflush(\*TESTERR); 1309 _autoflush(\*STDERR); 1310 1311 $self->output(\*TESTOUT); 1312 $self->failure_output(\*TESTERR); 1313 $self->todo_output(\*TESTOUT); 1314} 1315 1316 1317my $Opened_Testhandles = 0; 1318sub _open_testhandles { 1319 return if $Opened_Testhandles; 1320 # We dup STDOUT and STDERR so people can change them in their 1321 # test suites while still getting normal test output. 1322 open(TESTOUT, ">&STDOUT") or die "Can't dup STDOUT: $!"; 1323 open(TESTERR, ">&STDERR") or die "Can't dup STDERR: $!"; 1324 $Opened_Testhandles = 1; 1325} 1326 1327 1328=back 1329 1330 1331=head2 Test Status and Info 1332 1333=over 4 1334 1335=item B<current_test> 1336 1337 my $curr_test = $Test->current_test; 1338 $Test->current_test($num); 1339 1340Gets/sets the current test number we're on. You usually shouldn't 1341have to set this. 1342 1343If set forward, the details of the missing tests are filled in as 'unknown'. 1344if set backward, the details of the intervening tests are deleted. You 1345can erase history if you really want to. 1346 1347=cut 1348 1349sub current_test { 1350 my($self, $num) = @_; 1351 1352 lock($self->{Curr_Test}); 1353 if( defined $num ) { 1354 unless( $self->{Have_Plan} ) { 1355 require Carp; 1356 Carp::croak("Can't change the current test number without a plan!"); 1357 } 1358 1359 $self->{Curr_Test} = $num; 1360 1361 # If the test counter is being pushed forward fill in the details. 1362 my $test_results = $self->{Test_Results}; 1363 if( $num > @$test_results ) { 1364 my $start = @$test_results ? @$test_results : 0; 1365 for ($start..$num-1) { 1366 $test_results->[$_] = &share({ 1367 'ok' => 1, 1368 actual_ok => undef, 1369 reason => 'incrementing test number', 1370 type => 'unknown', 1371 name => undef 1372 }); 1373 } 1374 } 1375 # If backward, wipe history. Its their funeral. 1376 elsif( $num < @$test_results ) { 1377 $#{$test_results} = $num - 1; 1378 } 1379 } 1380 return $self->{Curr_Test}; 1381} 1382 1383 1384=item B<summary> 1385 1386 my @tests = $Test->summary; 1387 1388A simple summary of the tests so far. True for pass, false for fail. 1389This is a logical pass/fail, so todos are passes. 1390 1391Of course, test #1 is $tests[0], etc... 1392 1393=cut 1394 1395sub summary { 1396 my($self) = shift; 1397 1398 return map { $_->{'ok'} } @{ $self->{Test_Results} }; 1399} 1400 1401=item B<details> 1402 1403 my @tests = $Test->details; 1404 1405Like summary(), but with a lot more detail. 1406 1407 $tests[$test_num - 1] = 1408 { 'ok' => is the test considered a pass? 1409 actual_ok => did it literally say 'ok'? 1410 name => name of the test (if any) 1411 type => type of test (if any, see below). 1412 reason => reason for the above (if any) 1413 }; 1414 1415'ok' is true if Test::Harness will consider the test to be a pass. 1416 1417'actual_ok' is a reflection of whether or not the test literally 1418printed 'ok' or 'not ok'. This is for examining the result of 'todo' 1419tests. 1420 1421'name' is the name of the test. 1422 1423'type' indicates if it was a special test. Normal tests have a type 1424of ''. Type can be one of the following: 1425 1426 skip see skip() 1427 todo see todo() 1428 todo_skip see todo_skip() 1429 unknown see below 1430 1431Sometimes the Test::Builder test counter is incremented without it 1432printing any test output, for example, when current_test() is changed. 1433In these cases, Test::Builder doesn't know the result of the test, so 1434it's type is 'unkown'. These details for these tests are filled in. 1435They are considered ok, but the name and actual_ok is left undef. 1436 1437For example "not ok 23 - hole count # TODO insufficient donuts" would 1438result in this structure: 1439 1440 $tests[22] = # 23 - 1, since arrays start from 0. 1441 { ok => 1, # logically, the test passed since it's todo 1442 actual_ok => 0, # in absolute terms, it failed 1443 name => 'hole count', 1444 type => 'todo', 1445 reason => 'insufficient donuts' 1446 }; 1447 1448=cut 1449 1450sub details { 1451 my $self = shift; 1452 return @{ $self->{Test_Results} }; 1453} 1454 1455=item B<todo> 1456 1457 my $todo_reason = $Test->todo; 1458 my $todo_reason = $Test->todo($pack); 1459 1460todo() looks for a $TODO variable in your tests. If set, all tests 1461will be considered 'todo' (see Test::More and Test::Harness for 1462details). Returns the reason (ie. the value of $TODO) if running as 1463todo tests, false otherwise. 1464 1465todo() is about finding the right package to look for $TODO in. It 1466uses the exported_to() package to find it. If that's not set, it's 1467pretty good at guessing the right package to look at based on $Level. 1468 1469Sometimes there is some confusion about where todo() should be looking 1470for the $TODO variable. If you want to be sure, tell it explicitly 1471what $pack to use. 1472 1473=cut 1474 1475sub todo { 1476 my($self, $pack) = @_; 1477 1478 $pack = $pack || $self->exported_to || $self->caller($Level); 1479 return 0 unless $pack; 1480 1481 no strict 'refs'; 1482 return defined ${$pack.'::TODO'} ? ${$pack.'::TODO'} 1483 : 0; 1484} 1485 1486=item B<caller> 1487 1488 my $package = $Test->caller; 1489 my($pack, $file, $line) = $Test->caller; 1490 my($pack, $file, $line) = $Test->caller($height); 1491 1492Like the normal caller(), except it reports according to your level(). 1493 1494=cut 1495 1496sub caller { 1497 my($self, $height) = @_; 1498 $height ||= 0; 1499 1500 my @caller = CORE::caller($self->level + $height + 1); 1501 return wantarray ? @caller : $caller[0]; 1502} 1503 1504=back 1505 1506=cut 1507 1508=begin _private 1509 1510=over 4 1511 1512=item B<_sanity_check> 1513 1514 $self->_sanity_check(); 1515 1516Runs a bunch of end of test sanity checks to make sure reality came 1517through ok. If anything is wrong it will die with a fairly friendly 1518error message. 1519 1520=cut 1521 1522#'# 1523sub _sanity_check { 1524 my $self = shift; 1525 1526 _whoa($self->{Curr_Test} < 0, 'Says here you ran a negative number of tests!'); 1527 _whoa(!$self->{Have_Plan} and $self->{Curr_Test}, 1528 'Somehow your tests ran without a plan!'); 1529 _whoa($self->{Curr_Test} != @{ $self->{Test_Results} }, 1530 'Somehow you got a different number of results than tests ran!'); 1531} 1532 1533=item B<_whoa> 1534 1535 _whoa($check, $description); 1536 1537A sanity check, similar to assert(). If the $check is true, something 1538has gone horribly wrong. It will die with the given $description and 1539a note to contact the author. 1540 1541=cut 1542 1543sub _whoa { 1544 my($check, $desc) = @_; 1545 if( $check ) { 1546 die <<WHOA; 1547WHOA! $desc 1548This should never happen! Please contact the author immediately! 1549WHOA 1550 } 1551} 1552 1553=item B<_my_exit> 1554 1555 _my_exit($exit_num); 1556 1557Perl seems to have some trouble with exiting inside an END block. 5.005_03 1558and 5.6.1 both seem to do odd things. Instead, this function edits $? 1559directly. It should ONLY be called from inside an END block. It 1560doesn't actually exit, that's your job. 1561 1562=cut 1563 1564sub _my_exit { 1565 $? = $_[0]; 1566 1567 return 1; 1568} 1569 1570 1571=back 1572 1573=end _private 1574 1575=cut 1576 1577$SIG{__DIE__} = sub { 1578 # We don't want to muck with death in an eval, but $^S isn't 1579 # totally reliable. 5.005_03 and 5.6.1 both do the wrong thing 1580 # with it. Instead, we use caller. This also means it runs under 1581 # 5.004! 1582 my $in_eval = 0; 1583 for( my $stack = 1; my $sub = (CORE::caller($stack))[3]; $stack++ ) { 1584 $in_eval = 1 if $sub =~ /^\(eval\)/; 1585 } 1586 $Test->{Test_Died} = 1 unless $in_eval; 1587}; 1588 1589sub _ending { 1590 my $self = shift; 1591 1592 $self->_sanity_check(); 1593 1594 # Don't bother with an ending if this is a forked copy. Only the parent 1595 # should do the ending. 1596 # Exit if plan() was never called. This is so "require Test::Simple" 1597 # doesn't puke. 1598 # Don't do an ending if we bailed out. 1599 if( ($self->{Original_Pid} != $$) or 1600 (!$self->{Have_Plan} && !$self->{Test_Died}) or 1601 $self->{Bailed_Out} 1602 ) 1603 { 1604 _my_exit($?); 1605 return; 1606 } 1607 1608 # Figure out if we passed or failed and print helpful messages. 1609 my $test_results = $self->{Test_Results}; 1610 if( @$test_results ) { 1611 # The plan? We have no plan. 1612 if( $self->{No_Plan} ) { 1613 $self->_print("1..$self->{Curr_Test}\n") unless $self->no_header; 1614 $self->{Expected_Tests} = $self->{Curr_Test}; 1615 } 1616 1617 # Auto-extended arrays and elements which aren't explicitly 1618 # filled in with a shared reference will puke under 5.8.0 1619 # ithreads. So we have to fill them in by hand. :( 1620 my $empty_result = &share({}); 1621 for my $idx ( 0..$self->{Expected_Tests}-1 ) { 1622 $test_results->[$idx] = $empty_result 1623 unless defined $test_results->[$idx]; 1624 } 1625 1626 my $num_failed = grep !$_->{'ok'}, 1627 @{$test_results}[0..$self->{Curr_Test}-1]; 1628 1629 my $num_extra = $self->{Curr_Test} - $self->{Expected_Tests}; 1630 1631 if( $num_extra < 0 ) { 1632 my $s = $self->{Expected_Tests} == 1 ? '' : 's'; 1633 $self->diag(<<"FAIL"); 1634Looks like you planned $self->{Expected_Tests} test$s but only ran $self->{Curr_Test}. 1635FAIL 1636 } 1637 elsif( $num_extra > 0 ) { 1638 my $s = $self->{Expected_Tests} == 1 ? '' : 's'; 1639 $self->diag(<<"FAIL"); 1640Looks like you planned $self->{Expected_Tests} test$s but ran $num_extra extra. 1641FAIL 1642 } 1643 1644 if ( $num_failed ) { 1645 my $num_tests = $self->{Curr_Test}; 1646 my $s = $num_failed == 1 ? '' : 's'; 1647 1648 my $qualifier = $num_extra == 0 ? '' : ' run'; 1649 1650 $self->diag(<<"FAIL"); 1651Looks like you failed $num_failed test$s of $num_tests$qualifier. 1652FAIL 1653 } 1654 1655 if( $self->{Test_Died} ) { 1656 $self->diag(<<"FAIL"); 1657Looks like your test died just after $self->{Curr_Test}. 1658FAIL 1659 1660 _my_exit( 255 ) && return; 1661 } 1662 1663 my $exit_code; 1664 if( $num_failed ) { 1665 $exit_code = $num_failed <= 254 ? $num_failed : 254; 1666 } 1667 elsif( $num_extra != 0 ) { 1668 $exit_code = 255; 1669 } 1670 else { 1671 $exit_code = 0; 1672 } 1673 1674 _my_exit( $exit_code ) && return; 1675 } 1676 elsif ( $self->{Skip_All} ) { 1677 _my_exit( 0 ) && return; 1678 } 1679 elsif ( $self->{Test_Died} ) { 1680 $self->diag(<<'FAIL'); 1681Looks like your test died before it could output anything. 1682FAIL 1683 _my_exit( 255 ) && return; 1684 } 1685 else { 1686 $self->diag("No tests run!\n"); 1687 _my_exit( 255 ) && return; 1688 } 1689} 1690 1691END { 1692 $Test->_ending if defined $Test and !$Test->no_ending; 1693} 1694 1695=head1 EXIT CODES 1696 1697If all your tests passed, Test::Builder will exit with zero (which is 1698normal). If anything failed it will exit with how many failed. If 1699you run less (or more) tests than you planned, the missing (or extras) 1700will be considered failures. If no tests were ever run Test::Builder 1701will throw a warning and exit with 255. If the test died, even after 1702having successfully completed all its tests, it will still be 1703considered a failure and will exit with 255. 1704 1705So the exit codes are... 1706 1707 0 all tests successful 1708 255 test died or all passed but wrong # of tests run 1709 any other number how many failed (including missing or extras) 1710 1711If you fail more than 254 tests, it will be reported as 254. 1712 1713 1714=head1 THREADS 1715 1716In perl 5.8.0 and later, Test::Builder is thread-safe. The test 1717number is shared amongst all threads. This means if one thread sets 1718the test number using current_test() they will all be effected. 1719 1720Test::Builder is only thread-aware if threads.pm is loaded I<before> 1721Test::Builder. 1722 1723=head1 EXAMPLES 1724 1725CPAN can provide the best examples. Test::Simple, Test::More, 1726Test::Exception and Test::Differences all use Test::Builder. 1727 1728=head1 SEE ALSO 1729 1730Test::Simple, Test::More, Test::Harness 1731 1732=head1 AUTHORS 1733 1734Original code by chromatic, maintained by Michael G Schwern 1735E<lt>schwern@pobox.comE<gt> 1736 1737=head1 COPYRIGHT 1738 1739Copyright 2002, 2004 by chromatic E<lt>chromatic@wgz.orgE<gt> and 1740 Michael G Schwern E<lt>schwern@pobox.comE<gt>. 1741 1742This program is free software; you can redistribute it and/or 1743modify it under the same terms as Perl itself. 1744 1745See F<http://www.perl.com/perl/misc/Artistic.html> 1746 1747=cut 1748 17491; 1750