ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/staticperl/perl/lib/Test/Builder.pm
Revision: 1.1
Committed: Thu Jun 30 14:27:15 2005 UTC (21 years, 4 months ago) by root
Branch: MAIN
CVS Tags: PERL-5-8-7, HEAD
Branch point for: PERL
Log Message:
*** empty log message ***

File Contents

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