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