Upgrade to version-0.52
[p5sagit/p5-mst-13.2.git] / lib / Test / Builder.pm
CommitLineData
33459055 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;
30e302f8 10use vars qw($VERSION);
845d7e37 11$VERSION = '0.32';
7483b81c 12$VERSION = eval $VERSION; # make the alpha version come out as a number
33459055 13
a344be10 14# Make Test::Builder thread-safe for ithreads.
15BEGIN {
16 use Config;
30e302f8 17 # Load threads::shared when threads are turned on
18 if( $] >= 5.008 && $Config{useithreads} && $INC{'threads.pm'}) {
a344be10 19 require threads::shared;
7483b81c 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 };
a344be10 58 }
30e302f8 59 # 5.8.0's threads::shared is busted when threads are off.
60 # We emulate it here.
a344be10 61 else {
30e302f8 62 *share = sub { return $_[0] };
60ffb308 63 *lock = sub { 0 };
a344be10 64 }
65}
66
33459055 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
33459055 102Test::Simple and Test::More have proven to be popular testing modules,
a9153838 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>.
33459055 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
5143c659 118Since you only run one test per program C<new> always returns the same
33459055 119Test::Builder object. No matter how many times you call new(), you're
5143c659 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>.
33459055 126
127=cut
128
30e302f8 129my $Test = Test::Builder->new;
33459055 130sub new {
131 my($class) = shift;
5143c659 132 $Test ||= $class->create;
33459055 133 return $Test;
134}
135
5143c659 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
30e302f8 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
30e302f8 170use vars qw($Level);
30e302f8 171
172sub reset {
173 my ($self) = @_;
174
5143c659 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} = $$;
30e302f8 183
5143c659 184 share($self->{Curr_Test});
185 $self->{Curr_Test} = 0;
186 $self->{Test_Results} = &share([]);
30e302f8 187
5143c659 188 $self->{Exported_To} = undef;
189 $self->{Expected_Tests} = 0;
30e302f8 190
5143c659 191 $self->{Skip_All} = 0;
30e302f8 192
5143c659 193 $self->{Use_Nums} = 1;
194
195 $self->{No_Header} = 0;
196 $self->{No_Ending} = 0;
30e302f8 197
198 $self->_dup_stdhandles unless $^C;
199
200 return undef;
201}
202
33459055 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
33459055 222sub exported_to {
223 my($self, $pack) = @_;
224
225 if( defined $pack ) {
5143c659 226 $self->{Exported_To} = $pack;
33459055 227 }
5143c659 228 return $self->{Exported_To};
33459055 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
5143c659 249 if( $self->{Have_Plan} ) {
a344be10 250 die sprintf "You tried to plan twice! Second plan at %s line %d\n",
251 ($self->caller)[1,2];
252 }
253
33459055 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 }
89c1e84a 272 else {
273 require Carp;
274 my @args = grep { defined } ($cmd, $arg);
275 Carp::croak("plan() doesn't understand @args");
276 }
a344be10 277
278 return 1;
33459055 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
33459055 291sub expected_tests {
7483b81c 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;
33459055 298
5143c659 299 $self->{Expected_Tests} = $max;
300 $self->{Have_Plan} = 1;
33459055 301
302 $self->_print("1..$max\n") unless $self->no_header;
303 }
5143c659 304 return $self->{Expected_Tests};
33459055 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
33459055 316sub no_plan {
5143c659 317 my $self = shift;
318
319 $self->{No_Plan} = 1;
320 $self->{Have_Plan} = 1;
33459055 321}
322
60ffb308 323=item B<has_plan>
324
325 $plan = $Test->has_plan
5143c659 326
60ffb308 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 {
5143c659 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);
60ffb308 337};
338
339
33459055 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
33459055 349sub skip_all {
350 my($self, $reason) = @_;
351
352 my $out = "1..0";
353 $out .= " # Skip $reason" if $reason;
354 $out .= "\n";
355
5143c659 356 $self->{Skip_All} = 1;
33459055 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
60ffb308 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
5143c659 389 unless( $self->{Have_Plan} ) {
89c1e84a 390 require Carp;
391 Carp::croak("You tried to run a test without a plan! Gotta have a plan.");
33459055 392 }
393
5143c659 394 lock $self->{Curr_Test};
395 $self->{Curr_Test}++;
a344be10 396
30e302f8 397 # In case $name is a string overloaded object, force it to stringify.
b1ddf169 398 $self->_unoverload_str(\$name);
30e302f8 399
33459055 400 $self->diag(<<ERR) if defined $name and $name =~ /^[\d\s]+$/;
a9153838 401 You named your test '$name'. You shouldn't use numbers for your test names.
402 Very confusing.
33459055 403ERR
404
405 my($pack, $file, $line) = $self->caller;
406
407 my $todo = $self->todo($pack);
b1ddf169 408 $self->_unoverload_str(\$todo);
33459055 409
410 my $out;
30e302f8 411 my $result = &share({});
60ffb308 412
33459055 413 unless( $test ) {
414 $out .= "not ";
60ffb308 415 @$result{ 'ok', 'actual_ok' } = ( ( $todo ? 1 : 0 ), 0 );
33459055 416 }
417 else {
60ffb308 418 @$result{ 'ok', 'actual_ok' } = ( 1, $test );
33459055 419 }
420
421 $out .= "ok";
5143c659 422 $out .= " $self->{Curr_Test}" if $self->use_numbers;
33459055 423
424 if( defined $name ) {
425 $name =~ s|#|\\#|g; # # in a name can confuse Test::Harness.
426 $out .= " - $name";
7483b81c 427 $result->{name} = $name;
60ffb308 428 }
429 else {
430 $result->{name} = '';
33459055 431 }
432
433 if( $todo ) {
7483b81c 434 $out .= " # TODO $todo";
435 $result->{reason} = $todo;
60ffb308 436 $result->{type} = 'todo';
437 }
438 else {
439 $result->{reason} = '';
440 $result->{type} = '';
33459055 441 }
442
5143c659 443 $self->{Test_Results}[$self->{Curr_Test}-1] = $result;
33459055 444 $out .= "\n";
445
446 $self->_print($out);
447
448 unless( $test ) {
449 my $msg = $todo ? "Failed (TODO)" : "Failed";
30e302f8 450 $self->_print_diag("\n") if $ENV{HARNESS_ACTIVE};
b1ddf169 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 }
33459055 459 }
460
461 return $test ? 1 : 0;
462}
463
7483b81c 464
465sub _unoverload {
466 my $self = shift;
b1ddf169 467 my $type = shift;
7483b81c 468
469 local($@,$!);
470
471 eval { require overload } || return;
472
473 foreach my $thing (@_) {
474 eval {
b1ddf169 475 if( _is_object($$thing) ) {
476 if( my $string_meth = overload::Method($$thing, $type) ) {
7483b81c 477 $$thing = $$thing->$string_meth();
478 }
479 }
480 };
481 }
482}
483
484
b1ddf169 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
33459055 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
a9153838 530 $Test->is_num($got, $expected, $name);
33459055 531
532Like Test::More's is(). Checks if $got == $expected. This is the
533numeric version.
534
535=cut
536
537sub is_eq {
a9153838 538 my($self, $got, $expect, $name) = @_;
33459055 539 local $Level = $Level + 1;
a9153838 540
b1ddf169 541 $self->_unoverload_str(\$got, \$expect);
542
a9153838 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);
33459055 553}
554
555sub is_num {
a9153838 556 my($self, $got, $expect, $name) = @_;
33459055 557 local $Level = $Level + 1;
a9153838 558
b1ddf169 559 $self->_unoverload_num(\$got, \$expect);
560
a9153838 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);
33459055 571}
572
a9153838 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
b1ddf169 584 $self->_unoverload_num($val);
a9153838 585 }
586 }
587 else {
588 $$val = 'undef';
589 }
590 }
33459055 591
89c1e84a 592 return $self->diag(sprintf <<DIAGNOSTIC, $got, $expect);
a9153838 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);
30e302f8 624 $self->_cmp_diag($got, 'ne', $dont_expect) unless $test;
a9153838 625 return $test;
33459055 626 }
a9153838 627
628 return $self->cmp_ok($got, 'ne', $dont_expect, $name);
629}
630
631sub isnt_num {
632 my($self, $got, $dont_expect, $name) = @_;
33459055 633 local $Level = $Level + 1;
33459055 634
a9153838 635 if( !defined $got || !defined $dont_expect ) {
636 # undef only matches undef and nothing else
637 my $test = defined $got || defined $dont_expect;
33459055 638
a9153838 639 $self->ok($test, $name);
30e302f8 640 $self->_cmp_diag($got, '!=', $dont_expect) unless $test;
a9153838 641 return $test;
642 }
643
644 return $self->cmp_ok($got, '!=', $dont_expect, $name);
33459055 645}
646
a9153838 647
33459055 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
a9153838 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
33459055 665=cut
666
667sub like {
668 my($self, $this, $regex, $name) = @_;
669
670 local $Level = $Level + 1;
a9153838 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
89c1e84a 681=item B<maybe_regex>
a9153838 682
89c1e84a 683 $Test->maybe_regex(qr/$regex/);
684 $Test->maybe_regex('/$regex/');
33459055 685
89c1e84a 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 {
0257f296 710 my ($self, $regex) = @_;
89c1e84a 711 my $usable_regex = undef;
0257f296 712
713 return $usable_regex unless defined $regex;
714
715 my($re, $opts);
716
717 # Check for qr/foo/
33459055 718 if( ref $regex eq 'Regexp' ) {
a9153838 719 $usable_regex = $regex;
33459055 720 }
0257f296 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 {
89c1e84a 726 $usable_regex = length $opts ? "(?$opts)$re" : $re;
0257f296 727 }
728
729 return $usable_regex;
89c1e84a 730};
33459055 731
89c1e84a 732sub _regex_ok {
733 my($self, $this, $regex, $cmp, $name) = @_;
33459055 734
89c1e84a 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.");
33459055 740 return $ok;
741 }
742
a9153838 743 {
b1ddf169 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
a9153838 754 $test = !$test if $cmp eq '!~';
b1ddf169 755
756 local $Level = $Level + 1;
a9153838 757 $ok = $self->ok( $test, $name );
758 }
759
33459055 760 unless( $ok ) {
761 $this = defined $this ? "'$this'" : 'undef';
a9153838 762 my $match = $cmp eq '=~' ? "doesn't match" : "matches";
763 $self->diag(sprintf <<DIAGNOSTIC, $this, $match, $regex);
764 %s
765 %13s '%s'
33459055 766DIAGNOSTIC
767
768 }
769
770 return $ok;
771}
772
a9153838 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
b1ddf169 783
784my %numeric_cmps = map { ($_, 1) }
785 ("<", "<=", ">", ">=", "==", "!=", "<=>");
786
a9153838 787sub cmp_ok {
788 my($self, $got, $type, $expect, $name) = @_;
789
b1ddf169 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
a9153838 798 my $test;
799 {
a9153838 800 local($@,$!); # don't interfere with $@
801 # eval() sometimes resets $!
b1ddf169 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
a9153838 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';
89c1e84a 830 return $self->diag(sprintf <<DIAGNOSTIC, $got, $type, $expect);
a9153838 831 %s
832 %s
833 %s
834DIAGNOSTIC
835}
836
a9153838 837
b1ddf169 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);
a9153838 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
b1ddf169 862sub BAIL_OUT {
a9153838 863 my($self, $reason) = @_;
864
b1ddf169 865 $self->{Bailed_Out} = 1;
a9153838 866 $self->_print("Bail out! $reason");
867 exit 255;
868}
869
b1ddf169 870=for deprecated
871BAIL_OUT() used to be BAILOUT()
872
845d7e37 873=cut
874
b1ddf169 875*BAILOUT = \&BAIL_OUT;
876
877
33459055 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 ||= '';
b1ddf169 890 $self->_unoverload_str(\$why);
33459055 891
5143c659 892 unless( $self->{Have_Plan} ) {
89c1e84a 893 require Carp;
894 Carp::croak("You tried to run tests without a plan! Gotta have a plan.");
33459055 895 }
896
5143c659 897 lock($self->{Curr_Test});
898 $self->{Curr_Test}++;
33459055 899
5143c659 900 $self->{Test_Results}[$self->{Curr_Test}-1] = &share({
60ffb308 901 'ok' => 1,
902 actual_ok => 1,
903 name => '',
904 type => 'skip',
905 reason => $why,
30e302f8 906 });
33459055 907
908 my $out = "ok";
5143c659 909 $out .= " $self->{Curr_Test}" if $self->use_numbers;
0257f296 910 $out .= " # skip";
911 $out .= " $why" if length $why;
912 $out .= "\n";
33459055 913
5143c659 914 $self->_print($out);
33459055 915
916 return 1;
917}
918
a9153838 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
5143c659 936 unless( $self->{Have_Plan} ) {
89c1e84a 937 require Carp;
938 Carp::croak("You tried to run tests without a plan! Gotta have a plan.");
a9153838 939 }
940
5143c659 941 lock($self->{Curr_Test});
942 $self->{Curr_Test}++;
a9153838 943
5143c659 944 $self->{Test_Results}[$self->{Curr_Test}-1] = &share({
60ffb308 945 'ok' => 1,
946 actual_ok => 0,
947 name => '',
948 type => 'todo_skip',
949 reason => $why,
30e302f8 950 });
a9153838 951
952 my $out = "not ok";
5143c659 953 $out .= " $self->{Curr_Test}" if $self->use_numbers;
89c1e84a 954 $out .= " # TODO & SKIP $why\n";
a9153838 955
5143c659 956 $self->_print($out);
a9153838 957
958 return 1;
959}
960
961
33459055 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
33459055 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
33459055 1038sub use_numbers {
1039 my($self, $use_nums) = @_;
1040
1041 if( defined $use_nums ) {
5143c659 1042 $self->{Use_Nums} = $use_nums;
33459055 1043 }
5143c659 1044 return $self->{Use_Nums};
33459055 1045}
1046
33459055 1047
b1ddf169 1048=item B<no_diag>
33459055 1049
b1ddf169 1050 $Test->no_diag($no_diag);
1051
1052If set true no diagnostics will be printed. This includes calls to
1053diag().
33459055 1054
1055=item B<no_ending>
1056
1057 $Test->no_ending($no_ending);
1058
1059Normally, Test::Builder does some extra diagnostics when the test
30e302f8 1060ends. It also changes the exit code as described below.
33459055 1061
1062If this is true, none of that will be done.
1063
b1ddf169 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
33459055 1070=cut
1071
b1ddf169 1072foreach my $attribute (qw(No_Header No_Ending No_Diag)) {
1073 my $method = lc $attribute;
33459055 1074
b1ddf169 1075 my $code = sub {
1076 my($self, $no) = @_;
33459055 1077
b1ddf169 1078 if( defined $no ) {
1079 $self->{$attribute} = $no;
1080 }
1081 return $self->{$attribute};
1082 };
33459055 1083
b1ddf169 1084 no strict 'refs';
1085 *{__PACKAGE__.'::'.$method} = $code;
33459055 1086}
1087
1088
1089=back
1090
1091=head2 Output
1092
1093Controlling where the test output goes.
1094
4bd4e70a 1095It's ok for your test to change where STDOUT and STDERR point to,
71373de2 1096Test::Builder's default output settings will not be affected.
4bd4e70a 1097
33459055 1098=over 4
1099
1100=item B<diag>
1101
1102 $Test->diag(@msgs);
1103
7483b81c 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.
33459055 1109
71373de2 1110Output will be indented and marked with a # so as not to interfere
a9153838 1111with test output. A newline will be put on the end if there isn't one
1112already.
33459055 1113
1114We encourage using this rather than calling print directly.
1115
89c1e84a 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
33459055 1124=cut
1125
1126sub diag {
1127 my($self, @msgs) = @_;
b1ddf169 1128
1129 return if $self->no_diag;
a9153838 1130 return unless @msgs;
33459055 1131
4bd4e70a 1132 # Prevent printing headers when compiling (i.e. -c)
33459055 1133 return if $^C;
1134
7483b81c 1135 # Smash args together like print does.
1136 # Convert undef to 'undef' so its readable.
1137 my $msg = join '', map { defined($_) ? $_ : 'undef' } @msgs;
1138
33459055 1139 # Escape each line with a #.
7483b81c 1140 $msg =~ s/^/# /gm;
33459055 1141
7483b81c 1142 # Stick a newline on the end if it needs it.
1143 $msg .= "\n" unless $msg =~ /\n\Z/;
a9153838 1144
33459055 1145 local $Level = $Level + 1;
7483b81c 1146 $self->_print_diag($msg);
89c1e84a 1147
1148 return 0;
33459055 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
7483b81c 1170 my $msg = join '', @msgs;
1171
33459055 1172 local($\, $", $,) = (undef, ' ', '');
1173 my $fh = $self->output;
89c1e84a 1174
1175 # Escape each line after the first with a # so we don't
1176 # confuse Test::Harness.
7483b81c 1177 $msg =~ s/\n(.)/\n# $1/sg;
89c1e84a 1178
7483b81c 1179 # Stick a newline on the end if it needs it.
1180 $msg .= "\n" unless $msg =~ /\n\Z/;
89c1e84a 1181
7483b81c 1182 print $fh $msg;
33459055 1183}
1184
1185
30e302f8 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
33459055 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
33459055 1231sub output {
1232 my($self, $fh) = @_;
1233
1234 if( defined $fh ) {
5143c659 1235 $self->{Out_FH} = _new_fh($fh);
33459055 1236 }
5143c659 1237 return $self->{Out_FH};
33459055 1238}
1239
1240sub failure_output {
1241 my($self, $fh) = @_;
1242
1243 if( defined $fh ) {
5143c659 1244 $self->{Fail_FH} = _new_fh($fh);
33459055 1245 }
5143c659 1246 return $self->{Fail_FH};
33459055 1247}
1248
1249sub todo_output {
1250 my($self, $fh) = @_;
1251
1252 if( defined $fh ) {
5143c659 1253 $self->{Todo_FH} = _new_fh($fh);
33459055 1254 }
5143c659 1255 return $self->{Todo_FH};
33459055 1256}
1257
0257f296 1258
33459055 1259sub _new_fh {
1260 my($file_or_fh) = shift;
1261
1262 my $fh;
0257f296 1263 if( _is_fh($file_or_fh) ) {
1264 $fh = $file_or_fh;
1265 }
1266 else {
33459055 1267 $fh = do { local *FH };
1268 open $fh, ">$file_or_fh" or
1269 die "Can't open test output log $file_or_fh: $!";
5143c659 1270 _autoflush($fh);
33459055 1271 }
33459055 1272
1273 return $fh;
1274}
1275
0257f296 1276
1277sub _is_fh {
1278 my $maybe_fh = shift;
b1ddf169 1279 return 0 unless defined $maybe_fh;
0257f296 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
30e302f8 1291sub _autoflush {
1292 my($fh) = shift;
1293 my $old_fh = select $fh;
1294 $| = 1;
1295 select $old_fh;
1296}
1297
1298
30e302f8 1299sub _dup_stdhandles {
1300 my $self = shift;
1301
5143c659 1302 $self->_open_testhandles;
a9153838 1303
1304 # Set everything to unbuffered else plain prints to STDOUT will
1305 # come out in the wrong order from our own prints.
33459055 1306 _autoflush(\*TESTOUT);
a9153838 1307 _autoflush(\*STDOUT);
33459055 1308 _autoflush(\*TESTERR);
a9153838 1309 _autoflush(\*STDERR);
1310
5143c659 1311 $self->output(\*TESTOUT);
1312 $self->failure_output(\*TESTERR);
1313 $self->todo_output(\*TESTOUT);
33459055 1314}
1315
5143c659 1316
1317my $Opened_Testhandles = 0;
30e302f8 1318sub _open_testhandles {
5143c659 1319 return if $Opened_Testhandles;
30e302f8 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;
33459055 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
0257f296 1340Gets/sets the current test number we're on. You usually shouldn't
1341have to set this.
33459055 1342
0257f296 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.
33459055 1346
1347=cut
1348
1349sub current_test {
1350 my($self, $num) = @_;
1351
5143c659 1352 lock($self->{Curr_Test});
33459055 1353 if( defined $num ) {
5143c659 1354 unless( $self->{Have_Plan} ) {
89c1e84a 1355 require Carp;
1356 Carp::croak("Can't change the current test number without a plan!");
1357 }
1358
5143c659 1359 $self->{Curr_Test} = $num;
0257f296 1360
1361 # If the test counter is being pushed forward fill in the details.
5143c659 1362 my $test_results = $self->{Test_Results};
1363 if( $num > @$test_results ) {
1364 my $start = @$test_results ? @$test_results : 0;
89c1e84a 1365 for ($start..$num-1) {
5143c659 1366 $test_results->[$_] = &share({
30e302f8 1367 'ok' => 1,
1368 actual_ok => undef,
1369 reason => 'incrementing test number',
1370 type => 'unknown',
1371 name => undef
1372 });
6686786d 1373 }
1374 }
0257f296 1375 # If backward, wipe history. Its their funeral.
5143c659 1376 elsif( $num < @$test_results ) {
1377 $#{$test_results} = $num - 1;
0257f296 1378 }
33459055 1379 }
5143c659 1380 return $self->{Curr_Test};
33459055 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
5143c659 1398 return map { $_->{'ok'} } @{ $self->{Test_Results} };
33459055 1399}
1400
60ffb308 1401=item B<details>
33459055 1402
1403 my @tests = $Test->details;
1404
1405Like summary(), but with a lot more detail.
1406
1407 $tests[$test_num - 1] =
60ffb308 1408 { 'ok' => is the test considered a pass?
33459055 1409 actual_ok => did it literally say 'ok'?
1410 name => name of the test (if any)
60ffb308 1411 type => type of test (if any, see below).
33459055 1412 reason => reason for the above (if any)
1413 };
1414
60ffb308 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 {
5143c659 1451 my $self = shift;
1452 return @{ $self->{Test_Results} };
60ffb308 1453}
1454
33459055 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
5143c659 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.
33459055 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
5143c659 1478 $pack = $pack || $self->exported_to || $self->caller($Level);
1479 return 0 unless $pack;
33459055 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;
a344be10 1499
33459055 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
5143c659 1514 $self->_sanity_check();
33459055 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 {
5143c659 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},
33459055 1528 'Somehow your tests ran without a plan!');
5143c659 1529 _whoa($self->{Curr_Test} != @{ $self->{Test_Results} },
33459055 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 }
5143c659 1586 $Test->{Test_Died} = 1 unless $in_eval;
33459055 1587};
1588
1589sub _ending {
1590 my $self = shift;
1591
5143c659 1592 $self->_sanity_check();
33459055 1593
60ffb308 1594 # Don't bother with an ending if this is a forked copy. Only the parent
1595 # should do the ending.
5143c659 1596 # Exit if plan() was never called. This is so "require Test::Simple"
1597 # doesn't puke.
b1ddf169 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 )
5143c659 1603 {
1604 _my_exit($?);
1605 return;
1606 }
33459055 1607
1608 # Figure out if we passed or failed and print helpful messages.
5143c659 1609 my $test_results = $self->{Test_Results};
1610 if( @$test_results ) {
33459055 1611 # The plan? We have no plan.
5143c659 1612 if( $self->{No_Plan} ) {
1613 $self->_print("1..$self->{Curr_Test}\n") unless $self->no_header;
1614 $self->{Expected_Tests} = $self->{Curr_Test};
33459055 1615 }
1616
30e302f8 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({});
5143c659 1621 for my $idx ( 0..$self->{Expected_Tests}-1 ) {
1622 $test_results->[$idx] = $empty_result
1623 unless defined $test_results->[$idx];
60ffb308 1624 }
a344be10 1625
5143c659 1626 my $num_failed = grep !$_->{'ok'},
b1ddf169 1627 @{$test_results}[0..$self->{Curr_Test}-1];
33459055 1628
b1ddf169 1629 my $num_extra = $self->{Curr_Test} - $self->{Expected_Tests};
1630
1631 if( $num_extra < 0 ) {
5143c659 1632 my $s = $self->{Expected_Tests} == 1 ? '' : 's';
33459055 1633 $self->diag(<<"FAIL");
5143c659 1634Looks like you planned $self->{Expected_Tests} test$s but only ran $self->{Curr_Test}.
33459055 1635FAIL
1636 }
b1ddf169 1637 elsif( $num_extra > 0 ) {
5143c659 1638 my $s = $self->{Expected_Tests} == 1 ? '' : 's';
33459055 1639 $self->diag(<<"FAIL");
5143c659 1640Looks like you planned $self->{Expected_Tests} test$s but ran $num_extra extra.
33459055 1641FAIL
1642 }
b1ddf169 1643
1644 if ( $num_failed ) {
1645 my $num_tests = $self->{Curr_Test};
30e302f8 1646 my $s = $num_failed == 1 ? '' : 's';
b1ddf169 1647
1648 my $qualifier = $num_extra == 0 ? '' : ' run';
1649
33459055 1650 $self->diag(<<"FAIL");
b1ddf169 1651Looks like you failed $num_failed test$s of $num_tests$qualifier.
33459055 1652FAIL
1653 }
1654
5143c659 1655 if( $self->{Test_Died} ) {
33459055 1656 $self->diag(<<"FAIL");
5143c659 1657Looks like your test died just after $self->{Curr_Test}.
33459055 1658FAIL
1659
1660 _my_exit( 255 ) && return;
1661 }
1662
b1ddf169 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;
33459055 1675 }
5143c659 1676 elsif ( $self->{Skip_All} ) {
33459055 1677 _my_exit( 0 ) && return;
1678 }
5143c659 1679 elsif ( $self->{Test_Died} ) {
60ffb308 1680 $self->diag(<<'FAIL');
1681Looks like your test died before it could output anything.
1682FAIL
30e302f8 1683 _my_exit( 255 ) && return;
60ffb308 1684 }
33459055 1685 else {
a9153838 1686 $self->diag("No tests run!\n");
33459055 1687 _my_exit( 255 ) && return;
1688 }
1689}
1690
1691END {
1692 $Test->_ending if defined $Test and !$Test->no_ending;
1693}
1694
30e302f8 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
b1ddf169 1708 255 test died or all passed but wrong # of tests run
30e302f8 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
a344be10 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
30e302f8 1720Test::Builder is only thread-aware if threads.pm is loaded I<before>
1721Test::Builder.
1722
33459055 1723=head1 EXAMPLES
1724
a344be10 1725CPAN can provide the best examples. Test::Simple, Test::More,
1726Test::Exception and Test::Differences all use Test::Builder.
33459055 1727
4bd4e70a 1728=head1 SEE ALSO
1729
1730Test::Simple, Test::More, Test::Harness
1731
1732=head1 AUTHORS
33459055 1733
1734Original code by chromatic, maintained by Michael G Schwern
1735E<lt>schwern@pobox.comE<gt>
1736
4bd4e70a 1737=head1 COPYRIGHT
33459055 1738
7483b81c 1739Copyright 2002, 2004 by chromatic E<lt>chromatic@wgz.orgE<gt> and
1740 Michael G Schwern E<lt>schwern@pobox.comE<gt>.
4bd4e70a 1741
1742This program is free software; you can redistribute it and/or
1743modify it under the same terms as Perl itself.
1744
a9153838 1745See F<http://www.perl.com/perl/misc/Artistic.html>
33459055 1746
1747=cut
1748
17491;