5
# $^C was only introduced in 5.005-ish. We do this to prevent
6
# use of uninitialized value warnings in older perls.
10
use vars qw($VERSION);
12
$VERSION = eval $VERSION; # make the alpha version come out as a number
14
# Make Test::Builder thread-safe for ithreads.
17
# Load threads::shared when threads are turned on
18
if( $] >= 5.008 && $Config{useithreads} && $INC{'threads.pm'}) {
19
require threads::shared;
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 (\[$@%]) {
28
if( $type eq 'HASH' ) {
31
elsif( $type eq 'ARRAY' ) {
34
elsif( $type eq 'SCALAR' ) {
38
die "Unknown type: ".$type;
41
$_[0] = &threads::shared::share($_[0]);
43
if( $type eq 'HASH' ) {
46
elsif( $type eq 'ARRAY' ) {
49
elsif( $type eq 'SCALAR' ) {
53
die "Unknown type: ".$type;
59
# 5.8.0's threads::shared is busted when threads are off.
62
*share = sub { return $_[0] };
70
Test::Builder - Backend for building test libraries
74
package My::Test::Module;
80
my $Test = Test::Builder->new;
81
$Test->output('my_logfile');
87
$Test->exported_to($pack);
90
$self->export_to_level(1, $self, 'ok');
94
my($test, $name) = @_;
96
$Test->ok($test, $name);
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
113
my $Test = Test::Builder->new;
115
Returns a Test::Builder object representing the current state of the
118
Since you only run one test per program C<new> always returns the same
119
Test::Builder object. No matter how many times you call new(), you're
120
getting the same object. This is called a singleton. This is done so that
121
multiple modules share such global information as the test counter and
122
where test output is going.
124
If you want a completely new Test::Builder object different from the
125
singleton, use C<create>.
129
my $Test = Test::Builder->new;
132
$Test ||= $class->create;
139
my $Test = Test::Builder->create;
141
Ok, so there can be more than one Test::Builder object and this is how
142
you get it. You might use this instead of C<new()> if you're testing
143
a Test::Builder based module, but otherwise you probably want C<new>.
145
B<NOTE>: the implementation is not complete. C<level>, for example, is
146
still shared amongst B<all> Test::Builder objects, even ones created using
147
this method. Also, the method name may change in the future.
154
my $self = bless {}, $class;
164
Reinitializes the Test::Builder singleton to its original state.
165
Mostly useful for tests run in persistent environments where the same
166
test might be run multiple times in the same process.
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.
179
$self->{Test_Died} = 0;
180
$self->{Have_Plan} = 0;
181
$self->{No_Plan} = 0;
182
$self->{Original_Pid} = $$;
184
share($self->{Curr_Test});
185
$self->{Curr_Test} = 0;
186
$self->{Test_Results} = &share([]);
188
$self->{Exported_To} = undef;
189
$self->{Expected_Tests} = 0;
191
$self->{Skip_All} = 0;
193
$self->{Use_Nums} = 1;
195
$self->{No_Header} = 0;
196
$self->{No_Ending} = 0;
198
$self->_dup_stdhandles unless $^C;
205
=head2 Setting up tests
207
These methods are for setting up tests and declaring how many there
208
are. You usually only want to call one of these methods.
214
my $pack = $Test->exported_to;
215
$Test->exported_to($pack);
217
Tells Test::Builder what package you exported your functions to.
218
This is important for getting TODO tests right.
223
my($self, $pack) = @_;
225
if( defined $pack ) {
226
$self->{Exported_To} = $pack;
228
return $self->{Exported_To};
233
$Test->plan('no_plan');
234
$Test->plan( skip_all => $reason );
235
$Test->plan( tests => $num_tests );
237
A convenient way to set up your tests. Call this and Test::Builder
238
will print the appropriate headers and take the appropriate actions.
240
If you call plan(), don't call any of the other methods below.
245
my($self, $cmd, $arg) = @_;
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];
254
if( $cmd eq 'no_plan' ) {
257
elsif( $cmd eq 'skip_all' ) {
258
return $self->skip_all($arg);
260
elsif( $cmd eq 'tests' ) {
262
return $self->expected_tests($arg);
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";
269
die "You said to run 0 tests! You've got to run something.\n";
274
my @args = grep { defined } ($cmd, $arg);
275
Carp::croak("plan() doesn't understand @args");
281
=item B<expected_tests>
283
my $max = $Test->expected_tests;
284
$Test->expected_tests($max);
286
Gets/sets the # of tests we expect this test to run and prints out
287
the appropriate headers.
296
die "Number of tests must be a postive integer. You gave it '$max'.\n"
297
unless $max =~ /^\+?\d+$/ and $max > 0;
299
$self->{Expected_Tests} = $max;
300
$self->{Have_Plan} = 1;
302
$self->_print("1..$max\n") unless $self->no_header;
304
return $self->{Expected_Tests};
312
Declares that this test will run an indeterminate # of tests.
319
$self->{No_Plan} = 1;
320
$self->{Have_Plan} = 1;
325
$plan = $Test->has_plan
327
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).
334
return($self->{Expected_Tests}) if $self->{Expected_Tests};
335
return('no_plan') if $self->{No_Plan};
343
$Test->skip_all($reason);
345
Skips all the tests, using the given $reason. Exits immediately with 0.
350
my($self, $reason) = @_;
353
$out .= " # Skip $reason" if $reason;
356
$self->{Skip_All} = 1;
358
$self->_print($out) unless $self->no_header;
366
These actually run the tests, analogous to the functions in
369
$name is always optional.
375
$Test->ok($test, $name);
377
Your basic test. Pass if $test is true, fail if $test is false. Just
378
like Test::Simple's ok().
383
my($self, $test, $name) = @_;
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;
389
unless( $self->{Have_Plan} ) {
391
Carp::croak("You tried to run a test without a plan! Gotta have a plan.");
394
lock $self->{Curr_Test};
395
$self->{Curr_Test}++;
397
# In case $name is a string overloaded object, force it to stringify.
398
$self->_unoverload_str(\$name);
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.
405
my($pack, $file, $line) = $self->caller;
407
my $todo = $self->todo($pack);
408
$self->_unoverload_str(\$todo);
411
my $result = &share({});
415
@$result{ 'ok', 'actual_ok' } = ( ( $todo ? 1 : 0 ), 0 );
418
@$result{ 'ok', 'actual_ok' } = ( 1, $test );
422
$out .= " $self->{Curr_Test}" if $self->use_numbers;
424
if( defined $name ) {
425
$name =~ s|#|\\#|g; # # in a name can confuse Test::Harness.
427
$result->{name} = $name;
430
$result->{name} = '';
434
$out .= " # TODO $todo";
435
$result->{reason} = $todo;
436
$result->{type} = 'todo';
439
$result->{reason} = '';
440
$result->{type} = '';
443
$self->{Test_Results}[$self->{Curr_Test}-1] = $result;
449
my $msg = $todo ? "Failed (TODO)" : "Failed";
450
$self->_print_diag("\n") if $ENV{HARNESS_ACTIVE};
452
if( defined $name ) {
453
$self->diag(qq[ $msg test '$name'\n]);
454
$self->diag(qq[ in $file at line $line.\n]);
457
$self->diag(qq[ $msg test in $file at line $line.\n]);
461
return $test ? 1 : 0;
471
eval { require overload } || return;
473
foreach my $thing (@_) {
475
if( _is_object($$thing) ) {
476
if( my $string_meth = overload::Method($$thing, $type) ) {
477
$$thing = $$thing->$string_meth();
488
return eval { ref $thing && $thing->isa('UNIVERSAL') } ? 1 : 0;
492
sub _unoverload_str {
495
$self->_unoverload(q[""], @_);
498
sub _unoverload_num {
501
$self->_unoverload('0+', @_);
504
next unless $self->_is_dualvar($$val);
510
# This is a hack to detect a dualvar such as $!
512
my($self, $val) = @_;
516
return 1 if $numval != 0 and $numval ne $val;
523
$Test->is_eq($got, $expected, $name);
525
Like Test::More's is(). Checks if $got eq $expected. This is the
530
$Test->is_num($got, $expected, $name);
532
Like Test::More's is(). Checks if $got == $expected. This is the
538
my($self, $got, $expect, $name) = @_;
539
local $Level = $Level + 1;
541
$self->_unoverload_str(\$got, \$expect);
543
if( !defined $got || !defined $expect ) {
544
# undef only matches undef and nothing else
545
my $test = !defined $got && !defined $expect;
547
$self->ok($test, $name);
548
$self->_is_diag($got, 'eq', $expect) unless $test;
552
return $self->cmp_ok($got, 'eq', $expect, $name);
556
my($self, $got, $expect, $name) = @_;
557
local $Level = $Level + 1;
559
$self->_unoverload_num(\$got, \$expect);
561
if( !defined $got || !defined $expect ) {
562
# undef only matches undef and nothing else
563
my $test = !defined $got && !defined $expect;
565
$self->ok($test, $name);
566
$self->_is_diag($got, '==', $expect) unless $test;
570
return $self->cmp_ok($got, '==', $expect, $name);
574
my($self, $got, $type, $expect) = @_;
576
foreach my $val (\$got, \$expect) {
577
if( defined $$val ) {
578
if( $type eq 'eq' ) {
579
# quote and force string context
583
# force numeric context
584
$self->_unoverload_num($val);
592
return $self->diag(sprintf <<DIAGNOSTIC, $got, $expect);
601
$Test->isnt_eq($got, $dont_expect, $name);
603
Like Test::More's isnt(). Checks if $got ne $dont_expect. This is
608
$Test->isnt_num($got, $dont_expect, $name);
610
Like Test::More's isnt(). Checks if $got ne $dont_expect. This is
616
my($self, $got, $dont_expect, $name) = @_;
617
local $Level = $Level + 1;
619
if( !defined $got || !defined $dont_expect ) {
620
# undef only matches undef and nothing else
621
my $test = defined $got || defined $dont_expect;
623
$self->ok($test, $name);
624
$self->_cmp_diag($got, 'ne', $dont_expect) unless $test;
628
return $self->cmp_ok($got, 'ne', $dont_expect, $name);
632
my($self, $got, $dont_expect, $name) = @_;
633
local $Level = $Level + 1;
635
if( !defined $got || !defined $dont_expect ) {
636
# undef only matches undef and nothing else
637
my $test = defined $got || defined $dont_expect;
639
$self->ok($test, $name);
640
$self->_cmp_diag($got, '!=', $dont_expect) unless $test;
644
return $self->cmp_ok($got, '!=', $dont_expect, $name);
650
$Test->like($this, qr/$regex/, $name);
651
$Test->like($this, '/$regex/', $name);
653
Like Test::More's like(). Checks if $this matches the given $regex.
655
You'll want to avoid qr// if you want your tests to work before 5.005.
659
$Test->unlike($this, qr/$regex/, $name);
660
$Test->unlike($this, '/$regex/', $name);
662
Like Test::More's unlike(). Checks if $this B<does not match> the
668
my($self, $this, $regex, $name) = @_;
670
local $Level = $Level + 1;
671
$self->_regex_ok($this, $regex, '=~', $name);
675
my($self, $this, $regex, $name) = @_;
677
local $Level = $Level + 1;
678
$self->_regex_ok($this, $regex, '!~', $name);
683
$Test->maybe_regex(qr/$regex/);
684
$Test->maybe_regex('/$regex/');
686
Convenience method for building testing functions that take regular
687
expressions as arguments, but need to work before perl 5.005.
689
Takes a quoted regular expression produced by qr//, or a string
690
representing a regular expression.
692
Returns a Perl value which may be used instead of the corresponding
693
regular expression, or undef if it's argument is not recognised.
695
For example, a version of like(), sans the useful diagnostic messages,
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);
710
my ($self, $regex) = @_;
711
my $usable_regex = undef;
713
return $usable_regex unless defined $regex;
718
if( ref $regex eq 'Regexp' ) {
719
$usable_regex = $regex;
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
726
$usable_regex = length $opts ? "(?$opts)$re" : $re;
729
return $usable_regex;
733
my($self, $this, $regex, $cmp, $name) = @_;
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.");
745
my $code = $self->_caller_context;
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.
752
$code" . q{$test = $this =~ /$usable_regex/ ? 1 : 0};
754
$test = !$test if $cmp eq '!~';
756
local $Level = $Level + 1;
757
$ok = $self->ok( $test, $name );
761
$this = defined $this ? "'$this'" : 'undef';
762
my $match = $cmp eq '=~' ? "doesn't match" : "matches";
763
$self->diag(sprintf <<DIAGNOSTIC, $this, $match, $regex);
775
$Test->cmp_ok($this, $type, $that, $name);
777
Works just like Test::More's cmp_ok().
779
$Test->cmp_ok($big_num, '!=', $other_big_num);
784
my %numeric_cmps = map { ($_, 1) }
785
("<", "<=", ">", ">=", "==", "!=", "<=>");
788
my($self, $got, $type, $expect, $name) = @_;
790
# Treat overloaded objects as numbers if we're asked to do a
791
# numeric comparison.
792
my $unoverload = $numeric_cmps{$type} ? '_unoverload_num'
795
$self->$unoverload(\$got, \$expect);
800
local($@,$!); # don't interfere with $@
801
# eval() sometimes resets $!
803
my $code = $self->_caller_context;
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.
808
$code" . "\$got $type \$expect;";
811
local $Level = $Level + 1;
812
my $ok = $self->ok($test, $name);
815
if( $type =~ /^(eq|==)$/ ) {
816
$self->_is_diag($got, $type, $expect);
819
$self->_cmp_diag($got, $type, $expect);
826
my($self, $got, $type, $expect) = @_;
828
$got = defined $got ? "'$got'" : 'undef';
829
$expect = defined $expect ? "'$expect'" : 'undef';
830
return $self->diag(sprintf <<DIAGNOSTIC, $got, $type, $expect);
838
sub _caller_context {
841
my($pack, $file, $line) = $self->caller(1);
844
$code .= "#line $line $file\n" if defined $file and defined $line;
852
$Test->BAIL_OUT($reason);
854
Indicates to the Test::Harness that things are going so badly all
855
testing should terminate. This includes running any additional test
858
It will exit with 255.
863
my($self, $reason) = @_;
865
$self->{Bailed_Out} = 1;
866
$self->_print("Bail out! $reason");
871
BAIL_OUT() used to be BAILOUT()
875
*BAILOUT = \&BAIL_OUT;
883
Skips the current test, reporting $why.
888
my($self, $why) = @_;
890
$self->_unoverload_str(\$why);
892
unless( $self->{Have_Plan} ) {
894
Carp::croak("You tried to run tests without a plan! Gotta have a plan.");
897
lock($self->{Curr_Test});
898
$self->{Curr_Test}++;
900
$self->{Test_Results}[$self->{Curr_Test}-1] = &share({
909
$out .= " $self->{Curr_Test}" if $self->use_numbers;
911
$out .= " $why" if length $why;
923
$Test->todo_skip($why);
925
Like skip(), only it will declare the test as failing and TODO. Similar
928
print "not ok $tnum # TODO $why\n";
933
my($self, $why) = @_;
936
unless( $self->{Have_Plan} ) {
938
Carp::croak("You tried to run tests without a plan! Gotta have a plan.");
941
lock($self->{Curr_Test});
942
$self->{Curr_Test}++;
944
$self->{Test_Results}[$self->{Curr_Test}-1] = &share({
953
$out .= " $self->{Curr_Test}" if $self->use_numbers;
954
$out .= " # TODO & SKIP $why\n";
962
=begin _unimplemented
967
$Test->skip_rest($reason);
969
Like skip(), only it skips all the rest of the tests you plan to run
970
and terminates the test.
972
If you're running under no_plan, it skips once and terminates the
986
$Test->level($how_high);
988
How far up the call stack should $Test look when reporting where the
993
Setting $Test::Builder::Level overrides. This is typically useful
997
local $Test::Builder::Level = 2;
1004
my($self, $level) = @_;
1006
if( defined $level ) {
1013
=item B<use_numbers>
1015
$Test->use_numbers($on_or_off);
1017
Whether or not the test should output numbers. That is, this if true:
1029
Most useful when you can't depend on the test output order, such as
1030
when threads or forking is involved.
1032
Test::Harness will accept either, but avoid mixing the two styles.
1039
my($self, $use_nums) = @_;
1041
if( defined $use_nums ) {
1042
$self->{Use_Nums} = $use_nums;
1044
return $self->{Use_Nums};
1050
$Test->no_diag($no_diag);
1052
If set true no diagnostics will be printed. This includes calls to
1057
$Test->no_ending($no_ending);
1059
Normally, Test::Builder does some extra diagnostics when the test
1060
ends. It also changes the exit code as described below.
1062
If this is true, none of that will be done.
1066
$Test->no_header($no_header);
1068
If set to true, no "1..N" header will be printed.
1072
foreach my $attribute (qw(No_Header No_Ending No_Diag)) {
1073
my $method = lc $attribute;
1076
my($self, $no) = @_;
1079
$self->{$attribute} = $no;
1081
return $self->{$attribute};
1085
*{__PACKAGE__.'::'.$method} = $code;
1093
Controlling where the test output goes.
1095
It's ok for your test to change where STDOUT and STDERR point to,
1096
Test::Builder's default output settings will not be affected.
1104
Prints out the given @msgs. Like C<print>, arguments are simply
1107
Normally, it uses the failure_output() handle, but if this is for a
1108
TODO test, the todo_output() handle is used.
1110
Output will be indented and marked with a # so as not to interfere
1111
with test output. A newline will be put on the end if there isn't one
1114
We encourage using this rather than calling print directly.
1116
Returns false. Why? Because diag() is often used in conjunction with
1117
a failing test (C<ok() || diag()>) it "passes through" the failure.
1119
return ok(...) || diag(...);
1122
Mark Fowler <mark@twoshortplanks.com>
1127
my($self, @msgs) = @_;
1129
return if $self->no_diag;
1130
return unless @msgs;
1132
# Prevent printing headers when compiling (i.e. -c)
1135
# Smash args together like print does.
1136
# Convert undef to 'undef' so its readable.
1137
my $msg = join '', map { defined($_) ? $_ : 'undef' } @msgs;
1139
# Escape each line with a #.
1142
# Stick a newline on the end if it needs it.
1143
$msg .= "\n" unless $msg =~ /\n\Z/;
1145
local $Level = $Level + 1;
1146
$self->_print_diag($msg);
1155
$Test->_print(@msgs);
1157
Prints to the output() filehandle.
1164
my($self, @msgs) = @_;
1166
# Prevent printing headers when only compiling. Mostly for when
1167
# tests are deparsed with B::Deparse
1170
my $msg = join '', @msgs;
1172
local($\, $", $,) = (undef, ' ', '');
1173
my $fh = $self->output;
1175
# Escape each line after the first with a # so we don't
1176
# confuse Test::Harness.
1177
$msg =~ s/\n(.)/\n# $1/sg;
1179
# Stick a newline on the end if it needs it.
1180
$msg .= "\n" unless $msg =~ /\n\Z/;
1186
=item B<_print_diag>
1188
$Test->_print_diag(@msg);
1190
Like _print, but prints to the current diagnostic filehandle.
1197
local($\, $", $,) = (undef, ' ', '');
1198
my $fh = $self->todo ? $self->todo_output : $self->failure_output;
1205
$Test->output($file);
1207
Where normal "ok/not ok" test output should go.
1211
=item B<failure_output>
1213
$Test->failure_output($fh);
1214
$Test->failure_output($file);
1216
Where diagnostic output on test failures and diag() should go.
1220
=item B<todo_output>
1222
$Test->todo_output($fh);
1223
$Test->todo_output($file);
1225
Where diagnostics about todo test failures and diag() should go.
1232
my($self, $fh) = @_;
1235
$self->{Out_FH} = _new_fh($fh);
1237
return $self->{Out_FH};
1240
sub failure_output {
1241
my($self, $fh) = @_;
1244
$self->{Fail_FH} = _new_fh($fh);
1246
return $self->{Fail_FH};
1250
my($self, $fh) = @_;
1253
$self->{Todo_FH} = _new_fh($fh);
1255
return $self->{Todo_FH};
1260
my($file_or_fh) = shift;
1263
if( _is_fh($file_or_fh) ) {
1267
$fh = do { local *FH };
1268
open $fh, ">$file_or_fh" or
1269
die "Can't open test output log $file_or_fh: $!";
1278
my $maybe_fh = shift;
1279
return 0 unless defined $maybe_fh;
1281
return 1 if ref \$maybe_fh eq 'GLOB'; # its a glob
1283
return UNIVERSAL::isa($maybe_fh, 'GLOB') ||
1284
UNIVERSAL::isa($maybe_fh, 'IO::Handle') ||
1286
# 5.5.4's tied() and can() doesn't like getting undef
1287
UNIVERSAL::can((tied($maybe_fh) || ''), 'TIEHANDLE');
1293
my $old_fh = select $fh;
1299
sub _dup_stdhandles {
1302
$self->_open_testhandles;
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);
1311
$self->output(\*TESTOUT);
1312
$self->failure_output(\*TESTERR);
1313
$self->todo_output(\*TESTOUT);
1317
my $Opened_Testhandles = 0;
1318
sub _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;
1331
=head2 Test Status and Info
1335
=item B<current_test>
1337
my $curr_test = $Test->current_test;
1338
$Test->current_test($num);
1340
Gets/sets the current test number we're on. You usually shouldn't
1343
If set forward, the details of the missing tests are filled in as 'unknown'.
1344
if set backward, the details of the intervening tests are deleted. You
1345
can erase history if you really want to.
1350
my($self, $num) = @_;
1352
lock($self->{Curr_Test});
1353
if( defined $num ) {
1354
unless( $self->{Have_Plan} ) {
1356
Carp::croak("Can't change the current test number without a plan!");
1359
$self->{Curr_Test} = $num;
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({
1369
reason => 'incrementing test number',
1375
# If backward, wipe history. Its their funeral.
1376
elsif( $num < @$test_results ) {
1377
$#{$test_results} = $num - 1;
1380
return $self->{Curr_Test};
1386
my @tests = $Test->summary;
1388
A simple summary of the tests so far. True for pass, false for fail.
1389
This is a logical pass/fail, so todos are passes.
1391
Of course, test #1 is $tests[0], etc...
1398
return map { $_->{'ok'} } @{ $self->{Test_Results} };
1403
my @tests = $Test->details;
1405
Like summary(), but with a lot more detail.
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)
1415
'ok' is true if Test::Harness will consider the test to be a pass.
1417
'actual_ok' is a reflection of whether or not the test literally
1418
printed 'ok' or 'not ok'. This is for examining the result of 'todo'
1421
'name' is the name of the test.
1423
'type' indicates if it was a special test. Normal tests have a type
1424
of ''. Type can be one of the following:
1428
todo_skip see todo_skip()
1431
Sometimes the Test::Builder test counter is incremented without it
1432
printing any test output, for example, when current_test() is changed.
1433
In these cases, Test::Builder doesn't know the result of the test, so
1434
it's type is 'unkown'. These details for these tests are filled in.
1435
They are considered ok, but the name and actual_ok is left undef.
1437
For example "not ok 23 - hole count # TODO insufficient donuts" would
1438
result in this structure:
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',
1445
reason => 'insufficient donuts'
1452
return @{ $self->{Test_Results} };
1457
my $todo_reason = $Test->todo;
1458
my $todo_reason = $Test->todo($pack);
1460
todo() looks for a $TODO variable in your tests. If set, all tests
1461
will be considered 'todo' (see Test::More and Test::Harness for
1462
details). Returns the reason (ie. the value of $TODO) if running as
1463
todo tests, false otherwise.
1465
todo() is about finding the right package to look for $TODO in. It
1466
uses the exported_to() package to find it. If that's not set, it's
1467
pretty good at guessing the right package to look at based on $Level.
1469
Sometimes there is some confusion about where todo() should be looking
1470
for the $TODO variable. If you want to be sure, tell it explicitly
1476
my($self, $pack) = @_;
1478
$pack = $pack || $self->exported_to || $self->caller($Level);
1479
return 0 unless $pack;
1482
return defined ${$pack.'::TODO'} ? ${$pack.'::TODO'}
1488
my $package = $Test->caller;
1489
my($pack, $file, $line) = $Test->caller;
1490
my($pack, $file, $line) = $Test->caller($height);
1492
Like the normal caller(), except it reports according to your level().
1497
my($self, $height) = @_;
1500
my @caller = CORE::caller($self->level + $height + 1);
1501
return wantarray ? @caller : $caller[0];
1512
=item B<_sanity_check>
1514
$self->_sanity_check();
1516
Runs a bunch of end of test sanity checks to make sure reality came
1517
through ok. If anything is wrong it will die with a fairly friendly
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!');
1535
_whoa($check, $description);
1537
A sanity check, similar to assert(). If the $check is true, something
1538
has gone horribly wrong. It will die with the given $description and
1539
a note to contact the author.
1544
my($check, $desc) = @_;
1548
This should never happen! Please contact the author immediately!
1555
_my_exit($exit_num);
1557
Perl seems to have some trouble with exiting inside an END block. 5.005_03
1558
and 5.6.1 both seem to do odd things. Instead, this function edits $?
1559
directly. It should ONLY be called from inside an END block. It
1560
doesn't actually exit, that's your job.
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
1583
for( my $stack = 1; my $sub = (CORE::caller($stack))[3]; $stack++ ) {
1584
$in_eval = 1 if $sub =~ /^\(eval\)/;
1586
$Test->{Test_Died} = 1 unless $in_eval;
1592
$self->_sanity_check();
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"
1598
# Don't do an ending if we bailed out.
1599
if( ($self->{Original_Pid} != $$) or
1600
(!$self->{Have_Plan} && !$self->{Test_Died}) or
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};
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];
1626
my $num_failed = grep !$_->{'ok'},
1627
@{$test_results}[0..$self->{Curr_Test}-1];
1629
my $num_extra = $self->{Curr_Test} - $self->{Expected_Tests};
1631
if( $num_extra < 0 ) {
1632
my $s = $self->{Expected_Tests} == 1 ? '' : 's';
1633
$self->diag(<<"FAIL");
1634
Looks like you planned $self->{Expected_Tests} test$s but only ran $self->{Curr_Test}.
1637
elsif( $num_extra > 0 ) {
1638
my $s = $self->{Expected_Tests} == 1 ? '' : 's';
1639
$self->diag(<<"FAIL");
1640
Looks like you planned $self->{Expected_Tests} test$s but ran $num_extra extra.
1644
if ( $num_failed ) {
1645
my $num_tests = $self->{Curr_Test};
1646
my $s = $num_failed == 1 ? '' : 's';
1648
my $qualifier = $num_extra == 0 ? '' : ' run';
1650
$self->diag(<<"FAIL");
1651
Looks like you failed $num_failed test$s of $num_tests$qualifier.
1655
if( $self->{Test_Died} ) {
1656
$self->diag(<<"FAIL");
1657
Looks like your test died just after $self->{Curr_Test}.
1660
_my_exit( 255 ) && return;
1665
$exit_code = $num_failed <= 254 ? $num_failed : 254;
1667
elsif( $num_extra != 0 ) {
1674
_my_exit( $exit_code ) && return;
1676
elsif ( $self->{Skip_All} ) {
1677
_my_exit( 0 ) && return;
1679
elsif ( $self->{Test_Died} ) {
1680
$self->diag(<<'FAIL');
1681
Looks like your test died before it could output anything.
1683
_my_exit( 255 ) && return;
1686
$self->diag("No tests run!\n");
1687
_my_exit( 255 ) && return;
1692
$Test->_ending if defined $Test and !$Test->no_ending;
1697
If all your tests passed, Test::Builder will exit with zero (which is
1698
normal). If anything failed it will exit with how many failed. If
1699
you run less (or more) tests than you planned, the missing (or extras)
1700
will be considered failures. If no tests were ever run Test::Builder
1701
will throw a warning and exit with 255. If the test died, even after
1702
having successfully completed all its tests, it will still be
1703
considered a failure and will exit with 255.
1705
So the exit codes are...
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)
1711
If you fail more than 254 tests, it will be reported as 254.
1716
In perl 5.8.0 and later, Test::Builder is thread-safe. The test
1717
number is shared amongst all threads. This means if one thread sets
1718
the test number using current_test() they will all be effected.
1720
Test::Builder is only thread-aware if threads.pm is loaded I<before>
1725
CPAN can provide the best examples. Test::Simple, Test::More,
1726
Test::Exception and Test::Differences all use Test::Builder.
1730
Test::Simple, Test::More, Test::Harness
1734
Original code by chromatic, maintained by Michael G Schwern
1735
E<lt>schwern@pobox.comE<gt>
1739
Copyright 2002, 2004 by chromatic E<lt>chromatic@wgz.orgE<gt> and
1740
Michael G Schwern E<lt>schwern@pobox.comE<gt>.
1742
This program is free software; you can redistribute it and/or
1743
modify it under the same terms as Perl itself.
1745
See F<http://www.perl.com/perl/misc/Artistic.html>