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