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;
81 my $Test = Test::Builder->new;
82 $Test->output('my_logfile');
88 $Test->exported_to($pack);
91 $self->export_to_level(1, $self, 'ok');
95 my($test, $name) = @_;
97 $Test->ok($test, $name);
103 Test::Simple and Test::More have proven to be popular testing modules,
104 but they're not always flexible enough. Test::Builder provides the a
105 building block upon which to write your own test libraries I<which can
114 my $Test = Test::Builder->new;
116 Returns a Test::Builder object representing the current state of the
119 Since you only run one test per program C<new> always returns the same
120 Test::Builder object. No matter how many times you call new(), you're
121 getting the same object. This is called a singleton. This is done so that
122 multiple modules share such global information as the test counter and
123 where test output is going.
125 If you want a completely new Test::Builder object different from the
126 singleton, use C<create>.
130 my $Test = Test::Builder->new;
133 $Test ||= $class->create;
140 my $Test = Test::Builder->create;
142 Ok, so there can be more than one Test::Builder object and this is how
143 you get it. You might use this instead of C<new()> if you're testing
144 a Test::Builder based module, but otherwise you probably want C<new>.
146 B<NOTE>: the implementation is not complete. C<level>, for example, is
147 still shared amongst B<all> Test::Builder objects, even ones created using
148 this method. Also, the method name may change in the future.
155 my $self = bless {}, $class;
165 Reinitializes the Test::Builder singleton to its original state.
166 Mostly useful for tests run in persistent environments where the same
167 test might be run multiple times in the same process.
176 # We leave this a global because it has to be localized and localizing
177 # hash keys is just asking for pain. Also, it was documented.
180 $self->{Test_Died} = 0;
181 $self->{Have_Plan} = 0;
182 $self->{No_Plan} = 0;
183 $self->{Original_Pid} = $$;
185 share($self->{Curr_Test});
186 $self->{Curr_Test} = 0;
187 $self->{Test_Results} = &share([]);
189 $self->{Exported_To} = undef;
190 $self->{Expected_Tests} = 0;
192 $self->{Skip_All} = 0;
194 $self->{Use_Nums} = 1;
196 $self->{No_Header} = 0;
197 $self->{No_Ending} = 0;
199 $self->_dup_stdhandles unless $^C;
206 =head2 Setting up tests
208 These methods are for setting up tests and declaring how many there
209 are. You usually only want to call one of these methods.
215 my $pack = $Test->exported_to;
216 $Test->exported_to($pack);
218 Tells Test::Builder what package you exported your functions to.
219 This is important for getting TODO tests right.
224 my($self, $pack) = @_;
226 if( defined $pack ) {
227 $self->{Exported_To} = $pack;
229 return $self->{Exported_To};
234 $Test->plan('no_plan');
235 $Test->plan( skip_all => $reason );
236 $Test->plan( tests => $num_tests );
238 A convenient way to set up your tests. Call this and Test::Builder
239 will print the appropriate headers and take the appropriate actions.
241 If you call plan(), don't call any of the other methods below.
246 my($self, $cmd, $arg) = @_;
250 local $Level = $Level + 1;
252 if( $self->{Have_Plan} ) {
253 $self->croak("You tried to plan twice");
256 if( $cmd eq 'no_plan' ) {
259 elsif( $cmd eq 'skip_all' ) {
260 return $self->skip_all($arg);
262 elsif( $cmd eq 'tests' ) {
264 local $Level = $Level + 1;
265 return $self->expected_tests($arg);
267 elsif( !defined $arg ) {
268 $self->croak("Got an undefined number of tests");
271 $self->croak("You said to run 0 tests");
275 my @args = grep { defined } ($cmd, $arg);
276 $self->croak("plan() doesn't understand @args");
282 =item B<expected_tests>
284 my $max = $Test->expected_tests;
285 $Test->expected_tests($max);
287 Gets/sets the # of tests we expect this test to run and prints out
288 the appropriate headers.
297 $self->croak("Number of tests must be a positive integer. You gave it '$max'")
298 unless $max =~ /^\+?\d+$/ and $max > 0;
300 $self->{Expected_Tests} = $max;
301 $self->{Have_Plan} = 1;
303 $self->_print("1..$max\n") unless $self->no_header;
305 return $self->{Expected_Tests};
313 Declares that this test will run an indeterminate # of tests.
320 $self->{No_Plan} = 1;
321 $self->{Have_Plan} = 1;
326 $plan = $Test->has_plan
328 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).
335 return($self->{Expected_Tests}) if $self->{Expected_Tests};
336 return('no_plan') if $self->{No_Plan};
344 $Test->skip_all($reason);
346 Skips all the tests, using the given $reason. Exits immediately with 0.
351 my($self, $reason) = @_;
354 $out .= " # Skip $reason" if $reason;
357 $self->{Skip_All} = 1;
359 $self->_print($out) unless $self->no_header;
367 These actually run the tests, analogous to the functions in Test::More.
369 They all return true if the test passed, false if the test failed.
371 $name is always optional.
377 $Test->ok($test, $name);
379 Your basic test. Pass if $test is true, fail if $test is false. Just
380 like Test::Simple's ok().
385 my($self, $test, $name) = @_;
387 # $test might contain an object which we don't want to accidentally
388 # store, so we turn it into a boolean.
389 $test = $test ? 1 : 0;
393 lock $self->{Curr_Test};
394 $self->{Curr_Test}++;
396 # In case $name is a string overloaded object, force it to stringify.
397 $self->_unoverload_str(\$name);
399 $self->diag(<<ERR) if defined $name and $name =~ /^[\d\s]+$/;
400 You named your test '$name'. You shouldn't use numbers for your test names.
404 my($pack, $file, $line) = $self->caller;
406 my $todo = $self->todo($pack);
407 $self->_unoverload_str(\$todo);
410 my $result = &share({});
414 @$result{ 'ok', 'actual_ok' } = ( ( $todo ? 1 : 0 ), 0 );
417 @$result{ 'ok', 'actual_ok' } = ( 1, $test );
421 $out .= " $self->{Curr_Test}" if $self->use_numbers;
423 if( defined $name ) {
424 $name =~ s|#|\\#|g; # # in a name can confuse Test::Harness.
426 $result->{name} = $name;
429 $result->{name} = '';
433 $out .= " # TODO $todo";
434 $result->{reason} = $todo;
435 $result->{type} = 'todo';
438 $result->{reason} = '';
439 $result->{type} = '';
442 $self->{Test_Results}[$self->{Curr_Test}-1] = $result;
448 my $msg = $todo ? "Failed (TODO)" : "Failed";
449 $self->_print_diag("\n") if $ENV{HARNESS_ACTIVE};
451 if( defined $name ) {
452 $self->diag(qq[ $msg test '$name'\n]);
453 $self->diag(qq[ at $file line $line.\n]);
456 $self->diag(qq[ $msg test at $file line $line.\n]);
460 return $test ? 1 : 0;
468 $self->_try(sub { require overload } ) || return;
470 foreach my $thing (@_) {
471 if( $self->_is_object($$thing) ) {
472 if( my $string_meth = overload::Method($$thing, $type) ) {
473 $$thing = $$thing->$string_meth();
481 my($self, $thing) = @_;
483 return $self->_try(sub { ref $thing && $thing->isa('UNIVERSAL') }) ? 1 : 0;
487 sub _unoverload_str {
490 $self->_unoverload(q[""], @_);
493 sub _unoverload_num {
496 $self->_unoverload('0+', @_);
499 next unless $self->_is_dualvar($$val);
505 # This is a hack to detect a dualvar such as $!
507 my($self, $val) = @_;
511 return 1 if $numval != 0 and $numval ne $val;
518 $Test->is_eq($got, $expected, $name);
520 Like Test::More's is(). Checks if $got eq $expected. This is the
525 $Test->is_num($got, $expected, $name);
527 Like Test::More's is(). Checks if $got == $expected. This is the
533 my($self, $got, $expect, $name) = @_;
534 local $Level = $Level + 1;
536 $self->_unoverload_str(\$got, \$expect);
538 if( !defined $got || !defined $expect ) {
539 # undef only matches undef and nothing else
540 my $test = !defined $got && !defined $expect;
542 $self->ok($test, $name);
543 $self->_is_diag($got, 'eq', $expect) unless $test;
547 return $self->cmp_ok($got, 'eq', $expect, $name);
551 my($self, $got, $expect, $name) = @_;
552 local $Level = $Level + 1;
554 $self->_unoverload_num(\$got, \$expect);
556 if( !defined $got || !defined $expect ) {
557 # undef only matches undef and nothing else
558 my $test = !defined $got && !defined $expect;
560 $self->ok($test, $name);
561 $self->_is_diag($got, '==', $expect) unless $test;
565 return $self->cmp_ok($got, '==', $expect, $name);
569 my($self, $got, $type, $expect) = @_;
571 foreach my $val (\$got, \$expect) {
572 if( defined $$val ) {
573 if( $type eq 'eq' ) {
574 # quote and force string context
578 # force numeric context
579 $self->_unoverload_num($val);
587 return $self->diag(sprintf <<DIAGNOSTIC, $got, $expect);
596 $Test->isnt_eq($got, $dont_expect, $name);
598 Like Test::More's isnt(). Checks if $got ne $dont_expect. This is
603 $Test->isnt_num($got, $dont_expect, $name);
605 Like Test::More's isnt(). Checks if $got ne $dont_expect. This is
611 my($self, $got, $dont_expect, $name) = @_;
612 local $Level = $Level + 1;
614 if( !defined $got || !defined $dont_expect ) {
615 # undef only matches undef and nothing else
616 my $test = defined $got || defined $dont_expect;
618 $self->ok($test, $name);
619 $self->_cmp_diag($got, 'ne', $dont_expect) unless $test;
623 return $self->cmp_ok($got, 'ne', $dont_expect, $name);
627 my($self, $got, $dont_expect, $name) = @_;
628 local $Level = $Level + 1;
630 if( !defined $got || !defined $dont_expect ) {
631 # undef only matches undef and nothing else
632 my $test = defined $got || defined $dont_expect;
634 $self->ok($test, $name);
635 $self->_cmp_diag($got, '!=', $dont_expect) unless $test;
639 return $self->cmp_ok($got, '!=', $dont_expect, $name);
645 $Test->like($this, qr/$regex/, $name);
646 $Test->like($this, '/$regex/', $name);
648 Like Test::More's like(). Checks if $this matches the given $regex.
650 You'll want to avoid qr// if you want your tests to work before 5.005.
654 $Test->unlike($this, qr/$regex/, $name);
655 $Test->unlike($this, '/$regex/', $name);
657 Like Test::More's unlike(). Checks if $this B<does not match> the
663 my($self, $this, $regex, $name) = @_;
665 local $Level = $Level + 1;
666 $self->_regex_ok($this, $regex, '=~', $name);
670 my($self, $this, $regex, $name) = @_;
672 local $Level = $Level + 1;
673 $self->_regex_ok($this, $regex, '!~', $name);
679 $Test->cmp_ok($this, $type, $that, $name);
681 Works just like Test::More's cmp_ok().
683 $Test->cmp_ok($big_num, '!=', $other_big_num);
688 my %numeric_cmps = map { ($_, 1) }
689 ("<", "<=", ">", ">=", "==", "!=", "<=>");
692 my($self, $got, $type, $expect, $name) = @_;
694 # Treat overloaded objects as numbers if we're asked to do a
695 # numeric comparison.
696 my $unoverload = $numeric_cmps{$type} ? '_unoverload_num'
699 $self->$unoverload(\$got, \$expect);
704 local($@,$!,$SIG{__DIE__}); # isolate eval
706 my $code = $self->_caller_context;
708 # Yes, it has to look like this or 5.4.5 won't see the #line directive.
709 # Don't ask me, man, I just work here.
711 $code" . "\$got $type \$expect;";
714 local $Level = $Level + 1;
715 my $ok = $self->ok($test, $name);
718 if( $type =~ /^(eq|==)$/ ) {
719 $self->_is_diag($got, $type, $expect);
722 $self->_cmp_diag($got, $type, $expect);
729 my($self, $got, $type, $expect) = @_;
731 $got = defined $got ? "'$got'" : 'undef';
732 $expect = defined $expect ? "'$expect'" : 'undef';
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;
947 my($self, $this, $regex, $cmp, $name) = @_;
950 my $usable_regex = $self->maybe_regex($regex);
951 unless (defined $usable_regex) {
952 $ok = $self->ok( 0, $name );
953 $self->diag(" '$regex' doesn't look much like a regex to me.");
959 my $code = $self->_caller_context;
961 local($@, $!, $SIG{__DIE__}); # isolate eval
963 # Yes, it has to look like this or 5.4.5 won't see the #line directive.
964 # Don't ask me, man, I just work here.
966 $code" . q{$test = $this =~ /$usable_regex/ ? 1 : 0};
968 $test = !$test if $cmp eq '!~';
970 local $Level = $Level + 1;
971 $ok = $self->ok( $test, $name );
975 $this = defined $this ? "'$this'" : 'undef';
976 my $match = $cmp eq '=~' ? "doesn't match" : "matches";
977 $self->diag(sprintf <<DIAGNOSTIC, $this, $match, $regex);
988 # I'm not ready to publish this. It doesn't deal with array return
989 # values from the code or context.
995 my $return_from_code = $Test->try(sub { code });
996 my($return_from_code, $error) = $Test->try(sub { code });
998 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.
1000 $error is what would normally be in $@.
1002 It is suggested you use this in place of eval BLOCK.
1007 my($self, $code) = @_;
1009 local $!; # eval can mess up $!
1010 local $@; # don't set $@ in the test
1011 local $SIG{__DIE__}; # don't trip an outside DIE handler.
1012 my $return = eval { $code->() };
1014 return wantarray ? ($return, $@) : $return;
1022 my $is_fh = $Test->is_fh($thing);
1024 Determines if the given $thing can be used as a filehandle.
1030 my $maybe_fh = shift;
1031 return 0 unless defined $maybe_fh;
1033 return 1 if ref $maybe_fh eq 'GLOB'; # its a glob ref
1034 return 1 if ref \$maybe_fh eq 'GLOB'; # its a glob
1036 return eval { $maybe_fh->isa("IO::Handle") } ||
1037 # 5.5.4's tied() and can() doesn't like getting undef
1038 eval { (tied($maybe_fh) || '')->can('TIEHANDLE') };
1052 $Test->level($how_high);
1054 How far up the call stack should $Test look when reporting where the
1059 Setting L<$Test::Builder::Level> overrides. This is typically useful
1065 local $Test::Builder::Level = $Test::Builder::Level + 1;
1069 To be polite to other functions wrapping your own you usually want to increment C<$Level> rather than set it to a constant.
1074 my($self, $level) = @_;
1076 if( defined $level ) {
1083 =item B<use_numbers>
1085 $Test->use_numbers($on_or_off);
1087 Whether or not the test should output numbers. That is, this if true:
1099 Most useful when you can't depend on the test output order, such as
1100 when threads or forking is involved.
1107 my($self, $use_nums) = @_;
1109 if( defined $use_nums ) {
1110 $self->{Use_Nums} = $use_nums;
1112 return $self->{Use_Nums};
1118 $Test->no_diag($no_diag);
1120 If set true no diagnostics will be printed. This includes calls to
1125 $Test->no_ending($no_ending);
1127 Normally, Test::Builder does some extra diagnostics when the test
1128 ends. It also changes the exit code as described below.
1130 If this is true, none of that will be done.
1134 $Test->no_header($no_header);
1136 If set to true, no "1..N" header will be printed.
1140 foreach my $attribute (qw(No_Header No_Ending No_Diag)) {
1141 my $method = lc $attribute;
1144 my($self, $no) = @_;
1147 $self->{$attribute} = $no;
1149 return $self->{$attribute};
1153 *{__PACKAGE__.'::'.$method} = $code;
1161 Controlling where the test output goes.
1163 It's ok for your test to change where STDOUT and STDERR point to,
1164 Test::Builder's default output settings will not be affected.
1172 Prints out the given @msgs. Like C<print>, arguments are simply
1175 Normally, it uses the failure_output() handle, but if this is for a
1176 TODO test, the todo_output() handle is used.
1178 Output will be indented and marked with a # so as not to interfere
1179 with test output. A newline will be put on the end if there isn't one
1182 We encourage using this rather than calling print directly.
1184 Returns false. Why? Because diag() is often used in conjunction with
1185 a failing test (C<ok() || diag()>) it "passes through" the failure.
1187 return ok(...) || diag(...);
1190 Mark Fowler <mark@twoshortplanks.com>
1195 my($self, @msgs) = @_;
1197 return if $self->no_diag;
1198 return unless @msgs;
1200 # Prevent printing headers when compiling (i.e. -c)
1203 # Smash args together like print does.
1204 # Convert undef to 'undef' so its readable.
1205 my $msg = join '', map { defined($_) ? $_ : 'undef' } @msgs;
1207 # Escape each line with a #.
1210 # Stick a newline on the end if it needs it.
1211 $msg .= "\n" unless $msg =~ /\n\Z/;
1213 local $Level = $Level + 1;
1214 $self->_print_diag($msg);
1223 $Test->_print(@msgs);
1225 Prints to the output() filehandle.
1232 my($self, @msgs) = @_;
1234 # Prevent printing headers when only compiling. Mostly for when
1235 # tests are deparsed with B::Deparse
1238 my $msg = join '', @msgs;
1240 local($\, $", $,) = (undef, ' ', '');
1241 my $fh = $self->output;
1243 # Escape each line after the first with a # so we don't
1244 # confuse Test::Harness.
1245 $msg =~ s/\n(.)/\n# $1/sg;
1247 # Stick a newline on the end if it needs it.
1248 $msg .= "\n" unless $msg =~ /\n\Z/;
1255 =item B<_print_diag>
1257 $Test->_print_diag(@msg);
1259 Like _print, but prints to the current diagnostic filehandle.
1268 local($\, $", $,) = (undef, ' ', '');
1269 my $fh = $self->todo ? $self->todo_output : $self->failure_output;
1276 $Test->output($file);
1278 Where normal "ok/not ok" test output should go.
1282 =item B<failure_output>
1284 $Test->failure_output($fh);
1285 $Test->failure_output($file);
1287 Where diagnostic output on test failures and diag() should go.
1291 =item B<todo_output>
1293 $Test->todo_output($fh);
1294 $Test->todo_output($file);
1296 Where diagnostics about todo test failures and diag() should go.
1303 my($self, $fh) = @_;
1306 $self->{Out_FH} = $self->_new_fh($fh);
1308 return $self->{Out_FH};
1311 sub failure_output {
1312 my($self, $fh) = @_;
1315 $self->{Fail_FH} = $self->_new_fh($fh);
1317 return $self->{Fail_FH};
1321 my($self, $fh) = @_;
1324 $self->{Todo_FH} = $self->_new_fh($fh);
1326 return $self->{Todo_FH};
1332 my($file_or_fh) = shift;
1335 if( $self->is_fh($file_or_fh) ) {
1339 $fh = do { local *FH };
1340 open $fh, ">$file_or_fh" or
1341 $self->croak("Can't open test output log $file_or_fh: $!");
1351 my $old_fh = select $fh;
1357 sub _dup_stdhandles {
1360 $self->_open_testhandles;
1362 # Set everything to unbuffered else plain prints to STDOUT will
1363 # come out in the wrong order from our own prints.
1364 _autoflush(\*TESTOUT);
1365 _autoflush(\*STDOUT);
1366 _autoflush(\*TESTERR);
1367 _autoflush(\*STDERR);
1369 $self->output(\*TESTOUT);
1370 $self->failure_output(\*TESTERR);
1371 $self->todo_output(\*TESTOUT);
1375 my $Opened_Testhandles = 0;
1376 sub _open_testhandles {
1377 return if $Opened_Testhandles;
1378 # We dup STDOUT and STDERR so people can change them in their
1379 # test suites while still getting normal test output.
1380 open(TESTOUT, ">&STDOUT") or die "Can't dup STDOUT: $!";
1381 open(TESTERR, ">&STDERR") or die "Can't dup STDERR: $!";
1382 $Opened_Testhandles = 1;
1388 $tb->carp(@message);
1390 Warns with C<@message> but the message will appear to come from the
1391 point where the original test function was called (C<$tb->caller>).
1395 $tb->croak(@message);
1397 Dies with C<@message> but the message will appear to come from the
1398 point where the original test function was called (C<$tb->caller>).
1402 sub _message_at_caller {
1405 local $Level = $Level + 1;
1406 my($pack, $file, $line) = $self->caller;
1407 return join("", @_) . " at $file line $line.\n";
1412 warn $self->_message_at_caller(@_);
1417 die $self->_message_at_caller(@_);
1423 unless( $self->{Have_Plan} ) {
1424 local $Level = $Level + 2;
1425 $self->croak("You tried to run a test without a plan");
1432 =head2 Test Status and Info
1436 =item B<current_test>
1438 my $curr_test = $Test->current_test;
1439 $Test->current_test($num);
1441 Gets/sets the current test number we're on. You usually shouldn't
1444 If set forward, the details of the missing tests are filled in as 'unknown'.
1445 if set backward, the details of the intervening tests are deleted. You
1446 can erase history if you really want to.
1451 my($self, $num) = @_;
1453 lock($self->{Curr_Test});
1454 if( defined $num ) {
1455 unless( $self->{Have_Plan} ) {
1456 $self->croak("Can't change the current test number without a plan!");
1459 $self->{Curr_Test} = $num;
1461 # If the test counter is being pushed forward fill in the details.
1462 my $test_results = $self->{Test_Results};
1463 if( $num > @$test_results ) {
1464 my $start = @$test_results ? @$test_results : 0;
1465 for ($start..$num-1) {
1466 $test_results->[$_] = &share({
1469 reason => 'incrementing test number',
1475 # If backward, wipe history. Its their funeral.
1476 elsif( $num < @$test_results ) {
1477 $#{$test_results} = $num - 1;
1480 return $self->{Curr_Test};
1486 my @tests = $Test->summary;
1488 A simple summary of the tests so far. True for pass, false for fail.
1489 This is a logical pass/fail, so todos are passes.
1491 Of course, test #1 is $tests[0], etc...
1498 return map { $_->{'ok'} } @{ $self->{Test_Results} };
1503 my @tests = $Test->details;
1505 Like summary(), but with a lot more detail.
1507 $tests[$test_num - 1] =
1508 { 'ok' => is the test considered a pass?
1509 actual_ok => did it literally say 'ok'?
1510 name => name of the test (if any)
1511 type => type of test (if any, see below).
1512 reason => reason for the above (if any)
1515 'ok' is true if Test::Harness will consider the test to be a pass.
1517 'actual_ok' is a reflection of whether or not the test literally
1518 printed 'ok' or 'not ok'. This is for examining the result of 'todo'
1521 'name' is the name of the test.
1523 'type' indicates if it was a special test. Normal tests have a type
1524 of ''. Type can be one of the following:
1528 todo_skip see todo_skip()
1531 Sometimes the Test::Builder test counter is incremented without it
1532 printing any test output, for example, when current_test() is changed.
1533 In these cases, Test::Builder doesn't know the result of the test, so
1534 it's type is 'unkown'. These details for these tests are filled in.
1535 They are considered ok, but the name and actual_ok is left undef.
1537 For example "not ok 23 - hole count # TODO insufficient donuts" would
1538 result in this structure:
1540 $tests[22] = # 23 - 1, since arrays start from 0.
1541 { ok => 1, # logically, the test passed since it's todo
1542 actual_ok => 0, # in absolute terms, it failed
1543 name => 'hole count',
1545 reason => 'insufficient donuts'
1552 return @{ $self->{Test_Results} };
1557 my $todo_reason = $Test->todo;
1558 my $todo_reason = $Test->todo($pack);
1560 todo() looks for a $TODO variable in your tests. If set, all tests
1561 will be considered 'todo' (see Test::More and Test::Harness for
1562 details). Returns the reason (ie. the value of $TODO) if running as
1563 todo tests, false otherwise.
1565 todo() is about finding the right package to look for $TODO in. It
1566 uses the exported_to() package to find it. If that's not set, it's
1567 pretty good at guessing the right package to look at based on $Level.
1569 Sometimes there is some confusion about where todo() should be looking
1570 for the $TODO variable. If you want to be sure, tell it explicitly
1576 my($self, $pack) = @_;
1578 $pack = $pack || $self->exported_to || $self->caller($Level);
1579 return 0 unless $pack;
1582 return defined ${$pack.'::TODO'} ? ${$pack.'::TODO'}
1588 my $package = $Test->caller;
1589 my($pack, $file, $line) = $Test->caller;
1590 my($pack, $file, $line) = $Test->caller($height);
1592 Like the normal caller(), except it reports according to your level().
1597 my($self, $height) = @_;
1600 my @caller = CORE::caller($self->level + $height + 1);
1601 return wantarray ? @caller : $caller[0];
1612 =item B<_sanity_check>
1614 $self->_sanity_check();
1616 Runs a bunch of end of test sanity checks to make sure reality came
1617 through ok. If anything is wrong it will die with a fairly friendly
1626 $self->_whoa($self->{Curr_Test} < 0, 'Says here you ran a negative number of tests!');
1627 $self->_whoa(!$self->{Have_Plan} and $self->{Curr_Test},
1628 'Somehow your tests ran without a plan!');
1629 $self->_whoa($self->{Curr_Test} != @{ $self->{Test_Results} },
1630 'Somehow you got a different number of results than tests ran!');
1635 $self->_whoa($check, $description);
1637 A sanity check, similar to assert(). If the $check is true, something
1638 has gone horribly wrong. It will die with the given $description and
1639 a note to contact the author.
1644 my($self, $check, $desc) = @_;
1646 local $Level = $Level + 1;
1647 $self->croak(<<"WHOA");
1649 This should never happen! Please contact the author immediately!
1656 _my_exit($exit_num);
1658 Perl seems to have some trouble with exiting inside an END block. 5.005_03
1659 and 5.6.1 both seem to do odd things. Instead, this function edits $?
1660 directly. It should ONLY be called from inside an END block. It
1661 doesn't actually exit, that's your job.
1678 $SIG{__DIE__} = sub {
1679 # We don't want to muck with death in an eval, but $^S isn't
1680 # totally reliable. 5.005_03 and 5.6.1 both do the wrong thing
1681 # with it. Instead, we use caller. This also means it runs under
1684 for( my $stack = 1; my $sub = (CORE::caller($stack))[3]; $stack++ ) {
1685 $in_eval = 1 if $sub =~ /^\(eval\)/;
1687 $Test->{Test_Died} = 1 unless $in_eval;
1693 $self->_sanity_check();
1695 # Don't bother with an ending if this is a forked copy. Only the parent
1696 # should do the ending.
1697 # Exit if plan() was never called. This is so "require Test::Simple"
1699 # Don't do an ending if we bailed out.
1700 if( ($self->{Original_Pid} != $$) or
1701 (!$self->{Have_Plan} && !$self->{Test_Died}) or
1709 # Figure out if we passed or failed and print helpful messages.
1710 my $test_results = $self->{Test_Results};
1711 if( @$test_results ) {
1712 # The plan? We have no plan.
1713 if( $self->{No_Plan} ) {
1714 $self->_print("1..$self->{Curr_Test}\n") unless $self->no_header;
1715 $self->{Expected_Tests} = $self->{Curr_Test};
1718 # Auto-extended arrays and elements which aren't explicitly
1719 # filled in with a shared reference will puke under 5.8.0
1720 # ithreads. So we have to fill them in by hand. :(
1721 my $empty_result = &share({});
1722 for my $idx ( 0..$self->{Expected_Tests}-1 ) {
1723 $test_results->[$idx] = $empty_result
1724 unless defined $test_results->[$idx];
1727 my $num_failed = grep !$_->{'ok'},
1728 @{$test_results}[0..$self->{Curr_Test}-1];
1730 my $num_extra = $self->{Curr_Test} - $self->{Expected_Tests};
1732 if( $num_extra < 0 ) {
1733 my $s = $self->{Expected_Tests} == 1 ? '' : 's';
1734 $self->diag(<<"FAIL");
1735 Looks like you planned $self->{Expected_Tests} test$s but only ran $self->{Curr_Test}.
1738 elsif( $num_extra > 0 ) {
1739 my $s = $self->{Expected_Tests} == 1 ? '' : 's';
1740 $self->diag(<<"FAIL");
1741 Looks like you planned $self->{Expected_Tests} test$s but ran $num_extra extra.
1745 if ( $num_failed ) {
1746 my $num_tests = $self->{Curr_Test};
1747 my $s = $num_failed == 1 ? '' : 's';
1749 my $qualifier = $num_extra == 0 ? '' : ' run';
1751 $self->diag(<<"FAIL");
1752 Looks like you failed $num_failed test$s of $num_tests$qualifier.
1756 if( $self->{Test_Died} ) {
1757 $self->diag(<<"FAIL");
1758 Looks like your test died just after $self->{Curr_Test}.
1761 _my_exit( 255 ) && return;
1766 $exit_code = $num_failed <= 254 ? $num_failed : 254;
1768 elsif( $num_extra != 0 ) {
1775 _my_exit( $exit_code ) && return;
1777 elsif ( $self->{Skip_All} ) {
1778 _my_exit( 0 ) && return;
1780 elsif ( $self->{Test_Died} ) {
1781 $self->diag(<<'FAIL');
1782 Looks like your test died before it could output anything.
1784 _my_exit( 255 ) && return;
1787 $self->diag("No tests run!\n");
1788 _my_exit( 255 ) && return;
1793 $Test->_ending if defined $Test and !$Test->no_ending;
1798 If all your tests passed, Test::Builder will exit with zero (which is
1799 normal). If anything failed it will exit with how many failed. If
1800 you run less (or more) tests than you planned, the missing (or extras)
1801 will be considered failures. If no tests were ever run Test::Builder
1802 will throw a warning and exit with 255. If the test died, even after
1803 having successfully completed all its tests, it will still be
1804 considered a failure and will exit with 255.
1806 So the exit codes are...
1808 0 all tests successful
1809 255 test died or all passed but wrong # of tests run
1810 any other number how many failed (including missing or extras)
1812 If you fail more than 254 tests, it will be reported as 254.
1817 In perl 5.8.1 and later, Test::Builder is thread-safe. The test
1818 number is shared amongst all threads. This means if one thread sets
1819 the test number using current_test() they will all be effected.
1821 While versions earlier than 5.8.1 had threads they contain too many
1824 Test::Builder is only thread-aware if threads.pm is loaded I<before>
1829 CPAN can provide the best examples. Test::Simple, Test::More,
1830 Test::Exception and Test::Differences all use Test::Builder.
1834 Test::Simple, Test::More, Test::Harness
1838 Original code by chromatic, maintained by Michael G Schwern
1839 E<lt>schwern@pobox.comE<gt>
1843 Copyright 2002, 2004 by chromatic E<lt>chromatic@wgz.orgE<gt> and
1844 Michael G Schwern E<lt>schwern@pobox.comE<gt>.
1846 This program is free software; you can redistribute it and/or
1847 modify it under the same terms as Perl itself.
1849 See F<http://www.perl.com/perl/misc/Artistic.html>