5 # $^C was only introduced in 5.005-ish. We do this to prevent
6 # use of uninitialized value warnings in older perls.
10 use vars qw($VERSION);
12 $VERSION = eval $VERSION; # make the alpha version come out as a number
14 # Make Test::Builder thread-safe for ithreads.
17 # Load threads::shared when threads are turned on.
18 # 5.8.0's threads are so busted we no longer support them.
19 if( $] >= 5.008001 && $Config{useithreads} && $INC{'threads.pm'}) {
20 require threads::shared;
22 # Hack around YET ANOTHER threads::shared bug. It would
23 # occassionally forget the contents of the variable when sharing it.
24 # So we first copy the data, then share, then put our copy back.
25 *share = sub (\[$@%]) {
29 if( $type eq 'HASH' ) {
32 elsif( $type eq 'ARRAY' ) {
35 elsif( $type eq 'SCALAR' ) {
39 die("Unknown type: ".$type);
42 $_[0] = &threads::shared::share($_[0]);
44 if( $type eq 'HASH' ) {
47 elsif( $type eq 'ARRAY' ) {
50 elsif( $type eq 'SCALAR' ) {
54 die("Unknown type: ".$type);
60 # 5.8.0's threads::shared is busted when threads are off
61 # and earlier Perls just don't have that module at all.
63 *share = sub { return $_[0] };
71 Test::Builder - Backend for building test libraries
75 package My::Test::Module;
76 use base 'Test::Builder::Module';
78 my $CLASS = __PACKAGE__;
81 my($test, $name) = @_;
82 my $tb = $CLASS->builder;
84 $tb->ok($test, $name);
90 Test::Simple and Test::More have proven to be popular testing modules,
91 but they're not always flexible enough. Test::Builder provides the a
92 building block upon which to write your own test libraries I<which can
101 my $Test = Test::Builder->new;
103 Returns a Test::Builder object representing the current state of the
106 Since you only run one test per program C<new> always returns the same
107 Test::Builder object. No matter how many times you call new(), you're
108 getting the same object. This is called a singleton. This is done so that
109 multiple modules share such global information as the test counter and
110 where test output is going.
112 If you want a completely new Test::Builder object different from the
113 singleton, use C<create>.
117 my $Test = Test::Builder->new;
120 $Test ||= $class->create;
127 my $Test = Test::Builder->create;
129 Ok, so there can be more than one Test::Builder object and this is how
130 you get it. You might use this instead of C<new()> if you're testing
131 a Test::Builder based module, but otherwise you probably want C<new>.
133 B<NOTE>: the implementation is not complete. C<level>, for example, is
134 still shared amongst B<all> Test::Builder objects, even ones created using
135 this method. Also, the method name may change in the future.
142 my $self = bless {}, $class;
152 Reinitializes the Test::Builder singleton to its original state.
153 Mostly useful for tests run in persistent environments where the same
154 test might be run multiple times in the same process.
163 # We leave this a global because it has to be localized and localizing
164 # hash keys is just asking for pain. Also, it was documented.
167 $self->{Have_Plan} = 0;
168 $self->{No_Plan} = 0;
169 $self->{Original_Pid} = $$;
171 share($self->{Curr_Test});
172 $self->{Curr_Test} = 0;
173 $self->{Test_Results} = &share([]);
175 $self->{Exported_To} = undef;
176 $self->{Expected_Tests} = 0;
178 $self->{Skip_All} = 0;
180 $self->{Use_Nums} = 1;
182 $self->{No_Header} = 0;
183 $self->{No_Ending} = 0;
185 $self->{TODO} = undef;
187 $self->_dup_stdhandles unless $^C;
194 =head2 Setting up tests
196 These methods are for setting up tests and declaring how many there
197 are. You usually only want to call one of these methods.
203 $Test->plan('no_plan');
204 $Test->plan( skip_all => $reason );
205 $Test->plan( tests => $num_tests );
207 A convenient way to set up your tests. Call this and Test::Builder
208 will print the appropriate headers and take the appropriate actions.
210 If you call plan(), don't call any of the other methods below.
215 my($self, $cmd, $arg) = @_;
219 local $Level = $Level + 1;
221 if( $self->{Have_Plan} ) {
222 $self->croak("You tried to plan twice");
225 if( $cmd eq 'no_plan' ) {
228 elsif( $cmd eq 'skip_all' ) {
229 return $self->skip_all($arg);
231 elsif( $cmd eq 'tests' ) {
233 local $Level = $Level + 1;
234 return $self->expected_tests($arg);
236 elsif( !defined $arg ) {
237 $self->croak("Got an undefined number of tests");
240 $self->croak("You said to run 0 tests");
244 my @args = grep { defined } ($cmd, $arg);
245 $self->croak("plan() doesn't understand @args");
251 =item B<expected_tests>
253 my $max = $Test->expected_tests;
254 $Test->expected_tests($max);
256 Gets/sets the # of tests we expect this test to run and prints out
257 the appropriate headers.
266 $self->croak("Number of tests must be a positive integer. You gave it '$max'")
267 unless $max =~ /^\+?\d+$/ and $max > 0;
269 $self->{Expected_Tests} = $max;
270 $self->{Have_Plan} = 1;
272 $self->_print("1..$max\n") unless $self->no_header;
274 return $self->{Expected_Tests};
282 Declares that this test will run an indeterminate # of tests.
289 $self->{No_Plan} = 1;
290 $self->{Have_Plan} = 1;
295 $plan = $Test->has_plan
297 Find 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).
304 return($self->{Expected_Tests}) if $self->{Expected_Tests};
305 return('no_plan') if $self->{No_Plan};
313 $Test->skip_all($reason);
315 Skips all the tests, using the given $reason. Exits immediately with 0.
320 my($self, $reason) = @_;
323 $out .= " # Skip $reason" if $reason;
326 $self->{Skip_All} = 1;
328 $self->_print($out) unless $self->no_header;
335 my $pack = $Test->exported_to;
336 $Test->exported_to($pack);
338 Tells Test::Builder what package you exported your functions to.
340 This method isn't terribly useful since modules which share the same
341 Test::Builder object might get exported to different packages and only
342 the last one will be honored.
347 my($self, $pack) = @_;
349 if( defined $pack ) {
350 $self->{Exported_To} = $pack;
352 return $self->{Exported_To};
359 These actually run the tests, analogous to the functions in Test::More.
361 They all return true if the test passed, false if the test failed.
363 $name is always optional.
369 $Test->ok($test, $name);
371 Your basic test. Pass if $test is true, fail if $test is false. Just
372 like Test::Simple's ok().
377 my($self, $test, $name) = @_;
379 # $test might contain an object which we don't want to accidentally
380 # store, so we turn it into a boolean.
381 $test = $test ? 1 : 0;
385 lock $self->{Curr_Test};
386 $self->{Curr_Test}++;
388 # In case $name is a string overloaded object, force it to stringify.
389 $self->_unoverload_str(\$name);
391 $self->diag(<<ERR) if defined $name and $name =~ /^[\d\s]+$/;
392 You named your test '$name'. You shouldn't use numbers for your test names.
396 my $todo = $self->todo();
398 # Capture the value of $TODO for the rest of this ok() call
399 # so it can more easily be found by other routines.
400 local $self->{TODO} = $todo;
402 $self->_unoverload_str(\$todo);
405 my $result = &share({});
409 @$result{ 'ok', 'actual_ok' } = ( ( $todo ? 1 : 0 ), 0 );
412 @$result{ 'ok', 'actual_ok' } = ( 1, $test );
416 $out .= " $self->{Curr_Test}" if $self->use_numbers;
418 if( defined $name ) {
419 $name =~ s|#|\\#|g; # # in a name can confuse Test::Harness.
421 $result->{name} = $name;
424 $result->{name} = '';
428 $out .= " # TODO $todo";
429 $result->{reason} = $todo;
430 $result->{type} = 'todo';
433 $result->{reason} = '';
434 $result->{type} = '';
437 $self->{Test_Results}[$self->{Curr_Test}-1] = $result;
443 my $msg = $todo ? "Failed (TODO)" : "Failed";
444 $self->_print_diag("\n") if $ENV{HARNESS_ACTIVE};
446 my(undef, $file, $line) = $self->caller;
447 if( defined $name ) {
448 $self->diag(qq[ $msg test '$name'\n]);
449 $self->diag(qq[ at $file line $line.\n]);
452 $self->diag(qq[ $msg test at $file line $line.\n]);
456 return $test ? 1 : 0;
464 $self->_try(sub { require overload } ) || return;
466 foreach my $thing (@_) {
467 if( $self->_is_object($$thing) ) {
468 if( my $string_meth = overload::Method($$thing, $type) ) {
469 $$thing = $$thing->$string_meth();
477 my($self, $thing) = @_;
479 return $self->_try(sub { ref $thing && $thing->isa('UNIVERSAL') }) ? 1 : 0;
483 sub _unoverload_str {
486 $self->_unoverload(q[""], @_);
489 sub _unoverload_num {
492 $self->_unoverload('0+', @_);
495 next unless $self->_is_dualvar($$val);
501 # This is a hack to detect a dualvar such as $!
503 my($self, $val) = @_;
507 return 1 if $numval != 0 and $numval ne $val;
514 $Test->is_eq($got, $expected, $name);
516 Like Test::More's is(). Checks if $got eq $expected. This is the
521 $Test->is_num($got, $expected, $name);
523 Like Test::More's is(). Checks if $got == $expected. This is the
529 my($self, $got, $expect, $name) = @_;
530 local $Level = $Level + 1;
532 $self->_unoverload_str(\$got, \$expect);
534 if( !defined $got || !defined $expect ) {
535 # undef only matches undef and nothing else
536 my $test = !defined $got && !defined $expect;
538 $self->ok($test, $name);
539 $self->_is_diag($got, 'eq', $expect) unless $test;
543 return $self->cmp_ok($got, 'eq', $expect, $name);
547 my($self, $got, $expect, $name) = @_;
548 local $Level = $Level + 1;
550 $self->_unoverload_num(\$got, \$expect);
552 if( !defined $got || !defined $expect ) {
553 # undef only matches undef and nothing else
554 my $test = !defined $got && !defined $expect;
556 $self->ok($test, $name);
557 $self->_is_diag($got, '==', $expect) unless $test;
561 return $self->cmp_ok($got, '==', $expect, $name);
565 my($self, $got, $type, $expect) = @_;
567 foreach my $val (\$got, \$expect) {
568 if( defined $$val ) {
569 if( $type eq 'eq' ) {
570 # quote and force string context
574 # force numeric context
575 $self->_unoverload_num($val);
583 local $Level = $Level + 1;
584 return $self->diag(sprintf <<DIAGNOSTIC, $got, $expect);
593 $Test->isnt_eq($got, $dont_expect, $name);
595 Like Test::More's isnt(). Checks if $got ne $dont_expect. This is
600 $Test->isnt_num($got, $dont_expect, $name);
602 Like Test::More's isnt(). Checks if $got ne $dont_expect. This is
608 my($self, $got, $dont_expect, $name) = @_;
609 local $Level = $Level + 1;
611 if( !defined $got || !defined $dont_expect ) {
612 # undef only matches undef and nothing else
613 my $test = defined $got || defined $dont_expect;
615 $self->ok($test, $name);
616 $self->_cmp_diag($got, 'ne', $dont_expect) unless $test;
620 return $self->cmp_ok($got, 'ne', $dont_expect, $name);
624 my($self, $got, $dont_expect, $name) = @_;
625 local $Level = $Level + 1;
627 if( !defined $got || !defined $dont_expect ) {
628 # undef only matches undef and nothing else
629 my $test = defined $got || defined $dont_expect;
631 $self->ok($test, $name);
632 $self->_cmp_diag($got, '!=', $dont_expect) unless $test;
636 return $self->cmp_ok($got, '!=', $dont_expect, $name);
642 $Test->like($this, qr/$regex/, $name);
643 $Test->like($this, '/$regex/', $name);
645 Like Test::More's like(). Checks if $this matches the given $regex.
647 You'll want to avoid qr// if you want your tests to work before 5.005.
651 $Test->unlike($this, qr/$regex/, $name);
652 $Test->unlike($this, '/$regex/', $name);
654 Like Test::More's unlike(). Checks if $this B<does not match> the
660 my($self, $this, $regex, $name) = @_;
662 local $Level = $Level + 1;
663 $self->_regex_ok($this, $regex, '=~', $name);
667 my($self, $this, $regex, $name) = @_;
669 local $Level = $Level + 1;
670 $self->_regex_ok($this, $regex, '!~', $name);
676 $Test->cmp_ok($this, $type, $that, $name);
678 Works just like Test::More's cmp_ok().
680 $Test->cmp_ok($big_num, '!=', $other_big_num);
685 my %numeric_cmps = map { ($_, 1) }
686 ("<", "<=", ">", ">=", "==", "!=", "<=>");
689 my($self, $got, $type, $expect, $name) = @_;
691 # Treat overloaded objects as numbers if we're asked to do a
692 # numeric comparison.
693 my $unoverload = $numeric_cmps{$type} ? '_unoverload_num'
696 $self->$unoverload(\$got, \$expect);
701 local($@,$!,$SIG{__DIE__}); # isolate eval
703 my $code = $self->_caller_context;
705 # Yes, it has to look like this or 5.4.5 won't see the #line
707 # Don't ask me, man, I just work here.
709 $code" . "\$got $type \$expect;";
712 local $Level = $Level + 1;
713 my $ok = $self->ok($test, $name);
716 if( $type =~ /^(eq|==)$/ ) {
717 $self->_is_diag($got, $type, $expect);
720 $self->_cmp_diag($got, $type, $expect);
727 my($self, $got, $type, $expect) = @_;
729 $got = defined $got ? "'$got'" : 'undef';
730 $expect = defined $expect ? "'$expect'" : 'undef';
732 local $Level = $Level + 1;
733 return $self->diag(sprintf <<DIAGNOSTIC, $got, $type, $expect);
741 sub _caller_context {
744 my($pack, $file, $line) = $self->caller(1);
747 $code .= "#line $line $file\n" if defined $file and defined $line;
755 =head2 Other Testing Methods
757 These are methods which are used in the course of writing a test but are not themselves tests.
763 $Test->BAIL_OUT($reason);
765 Indicates to the Test::Harness that things are going so badly all
766 testing should terminate. This includes running any additional test
769 It will exit with 255.
774 my($self, $reason) = @_;
776 $self->{Bailed_Out} = 1;
777 $self->_print("Bail out! $reason");
782 BAIL_OUT() used to be BAILOUT()
786 *BAILOUT = \&BAIL_OUT;
794 Skips the current test, reporting $why.
799 my($self, $why) = @_;
801 $self->_unoverload_str(\$why);
805 lock($self->{Curr_Test});
806 $self->{Curr_Test}++;
808 $self->{Test_Results}[$self->{Curr_Test}-1] = &share({
817 $out .= " $self->{Curr_Test}" if $self->use_numbers;
819 $out .= " $why" if length $why;
831 $Test->todo_skip($why);
833 Like skip(), only it will declare the test as failing and TODO. Similar
836 print "not ok $tnum # TODO $why\n";
841 my($self, $why) = @_;
846 lock($self->{Curr_Test});
847 $self->{Curr_Test}++;
849 $self->{Test_Results}[$self->{Curr_Test}-1] = &share({
858 $out .= " $self->{Curr_Test}" if $self->use_numbers;
859 $out .= " # TODO & SKIP $why\n";
867 =begin _unimplemented
872 $Test->skip_rest($reason);
874 Like skip(), only it skips all the rest of the tests you plan to run
875 and terminates the test.
877 If you're running under no_plan, it skips once and terminates the
885 =head2 Test building utility methods
887 These methods are useful when writing your own test methods.
893 $Test->maybe_regex(qr/$regex/);
894 $Test->maybe_regex('/$regex/');
896 Convenience method for building testing functions that take regular
897 expressions as arguments, but need to work before perl 5.005.
899 Takes a quoted regular expression produced by qr//, or a string
900 representing a regular expression.
902 Returns a Perl value which may be used instead of the corresponding
903 regular expression, or undef if it's argument is not recognised.
905 For example, a version of like(), sans the useful diagnostic messages,
909 my ($self, $this, $regex, $name) = @_;
910 my $usable_regex = $self->maybe_regex($regex);
911 die "expecting regex, found '$regex'\n"
912 unless $usable_regex;
913 $self->ok($this =~ m/$usable_regex/, $name);
920 my ($self, $regex) = @_;
921 my $usable_regex = undef;
923 return $usable_regex unless defined $regex;
929 ? re::is_regexp($regex)
930 : ref $regex eq 'Regexp'
933 $usable_regex = $regex;
935 # Check for '/foo/' or 'm,foo,'
936 elsif( ($re, $opts) = $regex =~ m{^ /(.*)/ (\w*) $ }sx or
937 (undef, $re, $opts) = $regex =~ m,^ m([^\w\s]) (.+) \1 (\w*) $,sx
940 $usable_regex = length $opts ? "(?$opts)$re" : $re;
943 return $usable_regex;
950 # is_regexp() checks for regexes in a robust manner, say if they're
952 return re::is_regexp($regex) if defined &re::is_regexp;
953 return ref $regex eq 'Regexp';
958 my($self, $this, $regex, $cmp, $name) = @_;
961 my $usable_regex = $self->maybe_regex($regex);
962 unless (defined $usable_regex) {
963 $ok = $self->ok( 0, $name );
964 $self->diag(" '$regex' doesn't look much like a regex to me.");
970 my $code = $self->_caller_context;
972 local($@, $!, $SIG{__DIE__}); # isolate eval
974 # Yes, it has to look like this or 5.4.5 won't see the #line
976 # Don't ask me, man, I just work here.
978 $code" . q{$test = $this =~ /$usable_regex/ ? 1 : 0};
980 $test = !$test if $cmp eq '!~';
982 local $Level = $Level + 1;
983 $ok = $self->ok( $test, $name );
987 $this = defined $this ? "'$this'" : 'undef';
988 my $match = $cmp eq '=~' ? "doesn't match" : "matches";
990 local $Level = $Level + 1;
991 $self->diag(sprintf <<DIAGNOSTIC, $this, $match, $regex);
1002 # I'm not ready to publish this. It doesn't deal with array return
1003 # values from the code or context.
1009 my $return_from_code = $Test->try(sub { code });
1010 my($return_from_code, $error) = $Test->try(sub { code });
1012 Works like eval BLOCK except it ensures it has no effect on the rest of the test (ie. $@ is not set) nor is effected by outside interference (ie. $SIG{__DIE__}) and works around some quirks in older Perls.
1014 $error is what would normally be in $@.
1016 It is suggested you use this in place of eval BLOCK.
1021 my($self, $code) = @_;
1023 local $!; # eval can mess up $!
1024 local $@; # don't set $@ in the test
1025 local $SIG{__DIE__}; # don't trip an outside DIE handler.
1026 my $return = eval { $code->() };
1028 return wantarray ? ($return, $@) : $return;
1036 my $is_fh = $Test->is_fh($thing);
1038 Determines if the given $thing can be used as a filehandle.
1044 my $maybe_fh = shift;
1045 return 0 unless defined $maybe_fh;
1047 return 1 if ref $maybe_fh eq 'GLOB'; # its a glob ref
1048 return 1 if ref \$maybe_fh eq 'GLOB'; # its a glob
1050 return eval { $maybe_fh->isa("IO::Handle") } ||
1051 # 5.5.4's tied() and can() doesn't like getting undef
1052 eval { (tied($maybe_fh) || '')->can('TIEHANDLE') };
1066 $Test->level($how_high);
1068 How far up the call stack should $Test look when reporting where the
1073 Setting L<$Test::Builder::Level> overrides. This is typically useful
1079 local $Test::Builder::Level = $Test::Builder::Level + 1;
1083 To be polite to other functions wrapping your own you usually want to increment C<$Level> rather than set it to a constant.
1088 my($self, $level) = @_;
1090 if( defined $level ) {
1097 =item B<use_numbers>
1099 $Test->use_numbers($on_or_off);
1101 Whether or not the test should output numbers. That is, this if true:
1113 Most useful when you can't depend on the test output order, such as
1114 when threads or forking is involved.
1121 my($self, $use_nums) = @_;
1123 if( defined $use_nums ) {
1124 $self->{Use_Nums} = $use_nums;
1126 return $self->{Use_Nums};
1132 $Test->no_diag($no_diag);
1134 If set true no diagnostics will be printed. This includes calls to
1139 $Test->no_ending($no_ending);
1141 Normally, Test::Builder does some extra diagnostics when the test
1142 ends. It also changes the exit code as described below.
1144 If this is true, none of that will be done.
1148 $Test->no_header($no_header);
1150 If set to true, no "1..N" header will be printed.
1154 foreach my $attribute (qw(No_Header No_Ending No_Diag)) {
1155 my $method = lc $attribute;
1158 my($self, $no) = @_;
1161 $self->{$attribute} = $no;
1163 return $self->{$attribute};
1166 no strict 'refs'; ## no critic
1167 *{__PACKAGE__.'::'.$method} = $code;
1175 Controlling where the test output goes.
1177 It's ok for your test to change where STDOUT and STDERR point to,
1178 Test::Builder's default output settings will not be affected.
1186 Prints out the given @msgs. Like C<print>, arguments are simply
1189 Normally, it uses the failure_output() handle, but if this is for a
1190 TODO test, the todo_output() handle is used.
1192 Output will be indented and marked with a # so as not to interfere
1193 with test output. A newline will be put on the end if there isn't one
1196 We encourage using this rather than calling print directly.
1198 Returns false. Why? Because diag() is often used in conjunction with
1199 a failing test (C<ok() || diag()>) it "passes through" the failure.
1201 return ok(...) || diag(...);
1204 Mark Fowler <mark@twoshortplanks.com>
1209 my($self, @msgs) = @_;
1211 return if $self->no_diag;
1212 return unless @msgs;
1214 # Prevent printing headers when compiling (i.e. -c)
1217 # Smash args together like print does.
1218 # Convert undef to 'undef' so its readable.
1219 my $msg = join '', map { defined($_) ? $_ : 'undef' } @msgs;
1221 # Escape each line with a #.
1224 # Stick a newline on the end if it needs it.
1225 $msg .= "\n" unless $msg =~ /\n\Z/;
1227 local $Level = $Level + 1;
1228 $self->_print_diag($msg);
1237 $Test->_print(@msgs);
1239 Prints to the output() filehandle.
1246 my($self, @msgs) = @_;
1248 # Prevent printing headers when only compiling. Mostly for when
1249 # tests are deparsed with B::Deparse
1252 my $msg = join '', @msgs;
1254 local($\, $", $,) = (undef, ' ', '');
1255 my $fh = $self->output;
1257 # Escape each line after the first with a # so we don't
1258 # confuse Test::Harness.
1259 $msg =~ s/\n(.)/\n# $1/sg;
1261 # Stick a newline on the end if it needs it.
1262 $msg .= "\n" unless $msg =~ /\n\Z/;
1269 =item B<_print_diag>
1271 $Test->_print_diag(@msg);
1273 Like _print, but prints to the current diagnostic filehandle.
1282 local($\, $", $,) = (undef, ' ', '');
1283 my $fh = $self->todo ? $self->todo_output : $self->failure_output;
1290 $Test->output($file);
1292 Where normal "ok/not ok" test output should go.
1296 =item B<failure_output>
1298 $Test->failure_output($fh);
1299 $Test->failure_output($file);
1301 Where diagnostic output on test failures and diag() should go.
1305 =item B<todo_output>
1307 $Test->todo_output($fh);
1308 $Test->todo_output($file);
1310 Where diagnostics about todo test failures and diag() should go.
1317 my($self, $fh) = @_;
1320 $self->{Out_FH} = $self->_new_fh($fh);
1322 return $self->{Out_FH};
1325 sub failure_output {
1326 my($self, $fh) = @_;
1329 $self->{Fail_FH} = $self->_new_fh($fh);
1331 return $self->{Fail_FH};
1335 my($self, $fh) = @_;
1338 $self->{Todo_FH} = $self->_new_fh($fh);
1340 return $self->{Todo_FH};
1346 my($file_or_fh) = shift;
1349 if( $self->is_fh($file_or_fh) ) {
1353 open $fh, ">", $file_or_fh or
1354 $self->croak("Can't open test output log $file_or_fh: $!");
1364 my $old_fh = select $fh;
1370 my($Testout, $Testerr);
1371 sub _dup_stdhandles {
1374 $self->_open_testhandles;
1376 # Set everything to unbuffered else plain prints to STDOUT will
1377 # come out in the wrong order from our own prints.
1378 _autoflush($Testout);
1379 _autoflush(\*STDOUT);
1380 _autoflush($Testerr);
1381 _autoflush(\*STDERR);
1383 $self->output ($Testout);
1384 $self->failure_output($Testerr);
1385 $self->todo_output ($Testout);
1389 my $Opened_Testhandles = 0;
1390 sub _open_testhandles {
1393 return if $Opened_Testhandles;
1395 # We dup STDOUT and STDERR so people can change them in their
1396 # test suites while still getting normal test output.
1397 open( $Testout, ">&STDOUT") or die "Can't dup STDOUT: $!";
1398 open( $Testerr, ">&STDERR") or die "Can't dup STDERR: $!";
1400 # $self->_copy_io_layers( \*STDOUT, $Testout );
1401 # $self->_copy_io_layers( \*STDERR, $Testerr );
1403 $Opened_Testhandles = 1;
1407 sub _copy_io_layers {
1408 my($self, $src, $dest) = @_;
1412 my @layers = PerlIO::get_layers($src);
1414 binmode $dest, join " ", map ":$_", @layers if @layers;
1420 $tb->carp(@message);
1422 Warns with C<@message> but the message will appear to come from the
1423 point where the original test function was called (C<$tb->caller>).
1427 $tb->croak(@message);
1429 Dies with C<@message> but the message will appear to come from the
1430 point where the original test function was called (C<$tb->caller>).
1434 sub _message_at_caller {
1437 local $Level = $Level + 1;
1438 my($pack, $file, $line) = $self->caller;
1439 return join("", @_) . " at $file line $line.\n";
1444 warn $self->_message_at_caller(@_);
1449 die $self->_message_at_caller(@_);
1455 unless( $self->{Have_Plan} ) {
1456 local $Level = $Level + 2;
1457 $self->croak("You tried to run a test without a plan");
1464 =head2 Test Status and Info
1468 =item B<current_test>
1470 my $curr_test = $Test->current_test;
1471 $Test->current_test($num);
1473 Gets/sets the current test number we're on. You usually shouldn't
1476 If set forward, the details of the missing tests are filled in as 'unknown'.
1477 if set backward, the details of the intervening tests are deleted. You
1478 can erase history if you really want to.
1483 my($self, $num) = @_;
1485 lock($self->{Curr_Test});
1486 if( defined $num ) {
1487 unless( $self->{Have_Plan} ) {
1488 $self->croak("Can't change the current test number without a plan!");
1491 $self->{Curr_Test} = $num;
1493 # If the test counter is being pushed forward fill in the details.
1494 my $test_results = $self->{Test_Results};
1495 if( $num > @$test_results ) {
1496 my $start = @$test_results ? @$test_results : 0;
1497 for ($start..$num-1) {
1498 $test_results->[$_] = &share({
1501 reason => 'incrementing test number',
1507 # If backward, wipe history. Its their funeral.
1508 elsif( $num < @$test_results ) {
1509 $#{$test_results} = $num - 1;
1512 return $self->{Curr_Test};
1518 my @tests = $Test->summary;
1520 A simple summary of the tests so far. True for pass, false for fail.
1521 This is a logical pass/fail, so todos are passes.
1523 Of course, test #1 is $tests[0], etc...
1530 return map { $_->{'ok'} } @{ $self->{Test_Results} };
1535 my @tests = $Test->details;
1537 Like summary(), but with a lot more detail.
1539 $tests[$test_num - 1] =
1540 { 'ok' => is the test considered a pass?
1541 actual_ok => did it literally say 'ok'?
1542 name => name of the test (if any)
1543 type => type of test (if any, see below).
1544 reason => reason for the above (if any)
1547 'ok' is true if Test::Harness will consider the test to be a pass.
1549 'actual_ok' is a reflection of whether or not the test literally
1550 printed 'ok' or 'not ok'. This is for examining the result of 'todo'
1553 'name' is the name of the test.
1555 'type' indicates if it was a special test. Normal tests have a type
1556 of ''. Type can be one of the following:
1560 todo_skip see todo_skip()
1563 Sometimes the Test::Builder test counter is incremented without it
1564 printing any test output, for example, when current_test() is changed.
1565 In these cases, Test::Builder doesn't know the result of the test, so
1566 it's type is 'unkown'. These details for these tests are filled in.
1567 They are considered ok, but the name and actual_ok is left undef.
1569 For example "not ok 23 - hole count # TODO insufficient donuts" would
1570 result in this structure:
1572 $tests[22] = # 23 - 1, since arrays start from 0.
1573 { ok => 1, # logically, the test passed since it's todo
1574 actual_ok => 0, # in absolute terms, it failed
1575 name => 'hole count',
1577 reason => 'insufficient donuts'
1584 return @{ $self->{Test_Results} };
1589 my $todo_reason = $Test->todo;
1590 my $todo_reason = $Test->todo($pack);
1592 todo() looks for a $TODO variable in your tests. If set, all tests
1593 will be considered 'todo' (see Test::More and Test::Harness for
1594 details). Returns the reason (ie. the value of $TODO) if running as
1595 todo tests, false otherwise.
1597 todo() is about finding the right package to look for $TODO in. It's
1598 pretty good at guessing the right package to look at. It first looks for
1599 the caller based on C<$Level + 1>, since C<todo()> is usually called inside
1600 a test function. As a last resort it will use C<exported_to()>.
1602 Sometimes there is some confusion about where todo() should be looking
1603 for the $TODO variable. If you want to be sure, tell it explicitly
1609 my($self, $pack) = @_;
1611 return $self->{TODO} if defined $self->{TODO};
1613 $pack = $pack || $self->caller(1) || $self->exported_to;
1614 return 0 unless $pack;
1616 no strict 'refs'; ## no critic
1617 return defined ${$pack.'::TODO'} ? ${$pack.'::TODO'}
1623 my $package = $Test->caller;
1624 my($pack, $file, $line) = $Test->caller;
1625 my($pack, $file, $line) = $Test->caller($height);
1627 Like the normal caller(), except it reports according to your level().
1629 C<$height> will be added to the level().
1634 my($self, $height) = @_;
1637 my @caller = CORE::caller($self->level + $height + 1);
1638 return wantarray ? @caller : $caller[0];
1649 =item B<_sanity_check>
1651 $self->_sanity_check();
1653 Runs a bunch of end of test sanity checks to make sure reality came
1654 through ok. If anything is wrong it will die with a fairly friendly
1663 $self->_whoa($self->{Curr_Test} < 0, 'Says here you ran a negative number of tests!');
1664 $self->_whoa(!$self->{Have_Plan} and $self->{Curr_Test},
1665 'Somehow your tests ran without a plan!');
1666 $self->_whoa($self->{Curr_Test} != @{ $self->{Test_Results} },
1667 'Somehow you got a different number of results than tests ran!');
1672 $self->_whoa($check, $description);
1674 A sanity check, similar to assert(). If the $check is true, something
1675 has gone horribly wrong. It will die with the given $description and
1676 a note to contact the author.
1681 my($self, $check, $desc) = @_;
1683 local $Level = $Level + 1;
1684 $self->croak(<<"WHOA");
1686 This should never happen! Please contact the author immediately!
1693 _my_exit($exit_num);
1695 Perl seems to have some trouble with exiting inside an END block. 5.005_03
1696 and 5.6.1 both seem to do odd things. Instead, this function edits $?
1697 directly. It should ONLY be called from inside an END block. It
1698 doesn't actually exit, that's your job.
1718 my $real_exit_code = $?;
1719 $self->_sanity_check();
1721 # Don't bother with an ending if this is a forked copy. Only the parent
1722 # should do the ending.
1723 if( $self->{Original_Pid} != $$ ) {
1727 # Exit if plan() was never called. This is so "require Test::Simple"
1729 if( !$self->{Have_Plan} ) {
1733 # Don't do an ending if we bailed out.
1734 if( $self->{Bailed_Out} ) {
1738 # Figure out if we passed or failed and print helpful messages.
1739 my $test_results = $self->{Test_Results};
1740 if( @$test_results ) {
1741 # The plan? We have no plan.
1742 if( $self->{No_Plan} ) {
1743 $self->_print("1..$self->{Curr_Test}\n") unless $self->no_header;
1744 $self->{Expected_Tests} = $self->{Curr_Test};
1747 # Auto-extended arrays and elements which aren't explicitly
1748 # filled in with a shared reference will puke under 5.8.0
1749 # ithreads. So we have to fill them in by hand. :(
1750 my $empty_result = &share({});
1751 for my $idx ( 0..$self->{Expected_Tests}-1 ) {
1752 $test_results->[$idx] = $empty_result
1753 unless defined $test_results->[$idx];
1756 my $num_failed = grep !$_->{'ok'},
1757 @{$test_results}[0..$self->{Curr_Test}-1];
1759 my $num_extra = $self->{Curr_Test} - $self->{Expected_Tests};
1761 if( $num_extra < 0 ) {
1762 my $s = $self->{Expected_Tests} == 1 ? '' : 's';
1763 $self->diag(<<"FAIL");
1764 Looks like you planned $self->{Expected_Tests} test$s but only ran $self->{Curr_Test}.
1767 elsif( $num_extra > 0 ) {
1768 my $s = $self->{Expected_Tests} == 1 ? '' : 's';
1769 $self->diag(<<"FAIL");
1770 Looks like you planned $self->{Expected_Tests} test$s but ran $num_extra extra.
1774 if ( $num_failed ) {
1775 my $num_tests = $self->{Curr_Test};
1776 my $s = $num_failed == 1 ? '' : 's';
1778 my $qualifier = $num_extra == 0 ? '' : ' run';
1780 $self->diag(<<"FAIL");
1781 Looks like you failed $num_failed test$s of $num_tests$qualifier.
1785 if( $real_exit_code ) {
1786 $self->diag(<<"FAIL");
1787 Looks like your test died just after $self->{Curr_Test}.
1790 _my_exit( 255 ) && return;
1795 $exit_code = $num_failed <= 254 ? $num_failed : 254;
1797 elsif( $num_extra != 0 ) {
1804 _my_exit( $exit_code ) && return;
1806 elsif ( $self->{Skip_All} ) {
1807 _my_exit( 0 ) && return;
1809 elsif ( $real_exit_code ) {
1810 $self->diag(<<'FAIL');
1811 Looks like your test died before it could output anything.
1813 _my_exit( 255 ) && return;
1816 $self->diag("No tests run!\n");
1817 _my_exit( 255 ) && return;
1822 $Test->_ending if defined $Test and !$Test->no_ending;
1827 If all your tests passed, Test::Builder will exit with zero (which is
1828 normal). If anything failed it will exit with how many failed. If
1829 you run less (or more) tests than you planned, the missing (or extras)
1830 will be considered failures. If no tests were ever run Test::Builder
1831 will throw a warning and exit with 255. If the test died, even after
1832 having successfully completed all its tests, it will still be
1833 considered a failure and will exit with 255.
1835 So the exit codes are...
1837 0 all tests successful
1838 255 test died or all passed but wrong # of tests run
1839 any other number how many failed (including missing or extras)
1841 If you fail more than 254 tests, it will be reported as 254.
1846 In perl 5.8.1 and later, Test::Builder is thread-safe. The test
1847 number is shared amongst all threads. This means if one thread sets
1848 the test number using current_test() they will all be effected.
1850 While versions earlier than 5.8.1 had threads they contain too many
1853 Test::Builder is only thread-aware if threads.pm is loaded I<before>
1858 CPAN can provide the best examples. Test::Simple, Test::More,
1859 Test::Exception and Test::Differences all use Test::Builder.
1863 Test::Simple, Test::More, Test::Harness
1867 Original code by chromatic, maintained by Michael G Schwern
1868 E<lt>schwern@pobox.comE<gt>
1872 Copyright 2002, 2004 by chromatic E<lt>chromatic@wgz.orgE<gt> and
1873 Michael G Schwern E<lt>schwern@pobox.comE<gt>.
1875 This program is free software; you can redistribute it and/or
1876 modify it under the same terms as Perl itself.
1878 See F<http://www.perl.com/perl/misc/Artistic.html>