1package Test::Builder;
2
3use 5.006;
4use strict;
5use warnings;
6
7our $VERSION = '1.001002';
8$VERSION = eval $VERSION;    ## no critic (BuiltinFunctions::ProhibitStringyEval)
9
10BEGIN {
11    if( $] < 5.008 ) {
12        require Test::Builder::IO::Scalar;
13    }
14}
15
16
17# Make Test::Builder thread-safe for ithreads.
18BEGIN {
19    use Config;
20    # Load threads::shared when threads are turned on.
21    # 5.8.0's threads are so busted we no longer support them.
22    if( $] >= 5.008001 && $Config{useithreads} && $INC{'threads.pm'} ) {
23        require threads::shared;
24
25        # Hack around YET ANOTHER threads::shared bug.  It would
26        # occasionally forget the contents of the variable when sharing it.
27        # So we first copy the data, then share, then put our copy back.
28        *share = sub (\[$@%]) {
29            my $type = ref $_[0];
30            my $data;
31
32            if( $type eq 'HASH' ) {
33                %$data = %{ $_[0] };
34            }
35            elsif( $type eq 'ARRAY' ) {
36                @$data = @{ $_[0] };
37            }
38            elsif( $type eq 'SCALAR' ) {
39                $$data = ${ $_[0] };
40            }
41            else {
42                die( "Unknown type: " . $type );
43            }
44
45            $_[0] = &threads::shared::share( $_[0] );
46
47            if( $type eq 'HASH' ) {
48                %{ $_[0] } = %$data;
49            }
50            elsif( $type eq 'ARRAY' ) {
51                @{ $_[0] } = @$data;
52            }
53            elsif( $type eq 'SCALAR' ) {
54                ${ $_[0] } = $$data;
55            }
56            else {
57                die( "Unknown type: " . $type );
58            }
59
60            return $_[0];
61        };
62    }
63    # 5.8.0's threads::shared is busted when threads are off
64    # and earlier Perls just don't have that module at all.
65    else {
66        *share = sub { return $_[0] };
67        *lock  = sub { 0 };
68    }
69}
70
71=head1 NAME
72
73Test::Builder - Backend for building test libraries
74
75=head1 SYNOPSIS
76
77  package My::Test::Module;
78  use base 'Test::Builder::Module';
79
80  my $CLASS = __PACKAGE__;
81
82  sub ok {
83      my($test, $name) = @_;
84      my $tb = $CLASS->builder;
85
86      $tb->ok($test, $name);
87  }
88
89
90=head1 DESCRIPTION
91
92Test::Simple and Test::More have proven to be popular testing modules,
93but they're not always flexible enough.  Test::Builder provides a
94building block upon which to write your own test libraries I<which can
95work together>.
96
97=head2 Construction
98
99=over 4
100
101=item B<new>
102
103  my $Test = Test::Builder->new;
104
105Returns a Test::Builder object representing the current state of the
106test.
107
108Since you only run one test per program C<new> always returns the same
109Test::Builder object.  No matter how many times you call C<new()>, you're
110getting the same object.  This is called a singleton.  This is done so that
111multiple modules share such global information as the test counter and
112where test output is going.
113
114If you want a completely new Test::Builder object different from the
115singleton, use C<create>.
116
117=cut
118
119our $Test = Test::Builder->new;
120
121sub new {
122    my($class) = shift;
123    $Test ||= $class->create;
124    return $Test;
125}
126
127=item B<create>
128
129  my $Test = Test::Builder->create;
130
131Ok, so there can be more than one Test::Builder object and this is how
132you get it.  You might use this instead of C<new()> if you're testing
133a Test::Builder based module, but otherwise you probably want C<new>.
134
135B<NOTE>: the implementation is not complete.  C<level>, for example, is
136still shared amongst B<all> Test::Builder objects, even ones created using
137this method.  Also, the method name may change in the future.
138
139=cut
140
141sub create {
142    my $class = shift;
143
144    my $self = bless {}, $class;
145    $self->reset;
146
147    return $self;
148}
149
150
151# Copy an object, currently a shallow.
152# This does *not* bless the destination.  This keeps the destructor from
153# firing when we're just storing a copy of the object to restore later.
154sub _copy {
155    my($src, $dest) = @_;
156
157    %$dest = %$src;
158    _share_keys($dest);
159
160    return;
161}
162
163
164=item B<child>
165
166  my $child = $builder->child($name_of_child);
167  $child->plan( tests => 4 );
168  $child->ok(some_code());
169  ...
170  $child->finalize;
171
172Returns a new instance of C<Test::Builder>.  Any output from this child will
173be indented four spaces more than the parent's indentation.  When done, the
174C<finalize> method I<must> be called explicitly.
175
176Trying to create a new child with a previous child still active (i.e.,
177C<finalize> not called) will C<croak>.
178
179Trying to run a test when you have an open child will also C<croak> and cause
180the test suite to fail.
181
182=cut
183
184sub child {
185    my( $self, $name ) = @_;
186
187    if( $self->{Child_Name} ) {
188        $self->croak("You already have a child named ($self->{Child_Name}) running");
189    }
190
191    my $parent_in_todo = $self->in_todo;
192
193    # Clear $TODO for the child.
194    my $orig_TODO = $self->find_TODO(undef, 1, undef);
195
196    my $class = ref $self;
197    my $child = $class->create;
198
199    # Add to our indentation
200    $child->_indent( $self->_indent . '    ' );
201
202    # Make the child use the same outputs as the parent
203    for my $method (qw(output failure_output todo_output)) {
204        $child->$method( $self->$method );
205    }
206
207    # Ensure the child understands if they're inside a TODO
208    if( $parent_in_todo ) {
209        $child->failure_output( $self->todo_output );
210    }
211
212    # This will be reset in finalize. We do this here lest one child failure
213    # cause all children to fail.
214    $child->{Child_Error} = $?;
215    $?                    = 0;
216    $child->{Parent}      = $self;
217    $child->{Parent_TODO} = $orig_TODO;
218    $child->{Name}        = $name || "Child of " . $self->name;
219    $self->{Child_Name}   = $child->name;
220    return $child;
221}
222
223
224=item B<subtest>
225
226    $builder->subtest($name, \&subtests);
227
228See documentation of C<subtest> in Test::More.
229
230=cut
231
232sub subtest {
233    my $self = shift;
234    my($name, $subtests) = @_;
235
236    if ('CODE' ne ref $subtests) {
237        $self->croak("subtest()'s second argument must be a code ref");
238    }
239
240    # Turn the child into the parent so anyone who has stored a copy of
241    # the Test::Builder singleton will get the child.
242    my $error;
243    my $child;
244    my $parent = {};
245    {
246        # child() calls reset() which sets $Level to 1, so we localize
247        # $Level first to limit the scope of the reset to the subtest.
248        local $Test::Builder::Level = $Test::Builder::Level + 1;
249
250        # Store the guts of $self as $parent and turn $child into $self.
251        $child  = $self->child($name);
252        _copy($self,  $parent);
253        _copy($child, $self);
254
255        my $run_the_subtests = sub {
256            # Add subtest name for clarification of starting point
257            $self->note("Subtest: $name");
258            $subtests->();
259            $self->done_testing unless $self->_plan_handled;
260            1;
261        };
262
263        if( !eval { $run_the_subtests->() } ) {
264            $error = $@;
265        }
266    }
267
268    # Restore the parent and the copied child.
269    _copy($self,   $child);
270    _copy($parent, $self);
271
272    # Restore the parent's $TODO
273    $self->find_TODO(undef, 1, $child->{Parent_TODO});
274
275    # Die *after* we restore the parent.
276    die $error if $error and !eval { $error->isa('Test::Builder::Exception') };
277
278    local $Test::Builder::Level = $Test::Builder::Level + 1;
279    my $finalize = $child->finalize;
280
281    $self->BAIL_OUT($child->{Bailed_Out_Reason}) if $child->{Bailed_Out};
282
283    return $finalize;
284}
285
286=begin _private
287
288=item B<_plan_handled>
289
290    if ( $Test->_plan_handled ) { ... }
291
292Returns true if the developer has explicitly handled the plan via:
293
294=over 4
295
296=item * Explicitly setting the number of tests
297
298=item * Setting 'no_plan'
299
300=item * Set 'skip_all'.
301
302=back
303
304This is currently used in subtests when we implicitly call C<< $Test->done_testing >>
305if the developer has not set a plan.
306
307=end _private
308
309=cut
310
311sub _plan_handled {
312    my $self = shift;
313    return $self->{Have_Plan} || $self->{No_Plan} || $self->{Skip_All};
314}
315
316
317=item B<finalize>
318
319  my $ok = $child->finalize;
320
321When your child is done running tests, you must call C<finalize> to clean up
322and tell the parent your pass/fail status.
323
324Calling finalize on a child with open children will C<croak>.
325
326If the child falls out of scope before C<finalize> is called, a failure
327diagnostic will be issued and the child is considered to have failed.
328
329No attempt to call methods on a child after C<finalize> is called is
330guaranteed to succeed.
331
332Calling this on the root builder is a no-op.
333
334=cut
335
336sub finalize {
337    my $self = shift;
338
339    return unless $self->parent;
340    if( $self->{Child_Name} ) {
341        $self->croak("Can't call finalize() with child ($self->{Child_Name}) active");
342    }
343
344    local $? = 0;     # don't fail if $subtests happened to set $? nonzero
345    $self->_ending;
346
347    # XXX This will only be necessary for TAP envelopes (we think)
348    #$self->_print( $self->is_passing ? "PASS\n" : "FAIL\n" );
349
350    local $Test::Builder::Level = $Test::Builder::Level + 1;
351    my $ok = 1;
352    $self->parent->{Child_Name} = undef;
353    unless ($self->{Bailed_Out}) {
354        if ( $self->{Skip_All} ) {
355            $self->parent->skip($self->{Skip_All});
356        }
357        elsif ( not @{ $self->{Test_Results} } ) {
358            $self->parent->ok( 0, sprintf q[No tests run for subtest "%s"], $self->name );
359        }
360        else {
361            $self->parent->ok( $self->is_passing, $self->name );
362        }
363    }
364    $? = $self->{Child_Error};
365    delete $self->{Parent};
366
367    return $self->is_passing;
368}
369
370sub _indent      {
371    my $self = shift;
372
373    if( @_ ) {
374        $self->{Indent} = shift;
375    }
376
377    return $self->{Indent};
378}
379
380=item B<parent>
381
382 if ( my $parent = $builder->parent ) {
383     ...
384 }
385
386Returns the parent C<Test::Builder> instance, if any.  Only used with child
387builders for nested TAP.
388
389=cut
390
391sub parent { shift->{Parent} }
392
393=item B<name>
394
395 diag $builder->name;
396
397Returns the name of the current builder.  Top level builders default to C<$0>
398(the name of the executable).  Child builders are named via the C<child>
399method.  If no name is supplied, will be named "Child of $parent->name".
400
401=cut
402
403sub name { shift->{Name} }
404
405sub DESTROY {
406    my $self = shift;
407    if ( $self->parent and $$ == $self->{Original_Pid} ) {
408        my $name = $self->name;
409        $self->diag(<<"FAIL");
410Child ($name) exited without calling finalize()
411FAIL
412        $self->parent->{In_Destroy} = 1;
413        $self->parent->ok(0, $name);
414    }
415}
416
417=item B<reset>
418
419  $Test->reset;
420
421Reinitializes the Test::Builder singleton to its original state.
422Mostly useful for tests run in persistent environments where the same
423test might be run multiple times in the same process.
424
425=cut
426
427our $Level;
428
429sub reset {    ## no critic (Subroutines::ProhibitBuiltinHomonyms)
430    my($self) = @_;
431
432    # We leave this a global because it has to be localized and localizing
433    # hash keys is just asking for pain.  Also, it was documented.
434    $Level = 1;
435
436    $self->{Name}         = $0;
437    $self->is_passing(1);
438    $self->{Ending}       = 0;
439    $self->{Have_Plan}    = 0;
440    $self->{No_Plan}      = 0;
441    $self->{Have_Output_Plan} = 0;
442    $self->{Done_Testing} = 0;
443
444    $self->{Original_Pid} = $$;
445    $self->{Child_Name}   = undef;
446    $self->{Indent}     ||= '';
447
448    $self->{Curr_Test} = 0;
449    $self->{Test_Results} = &share( [] );
450
451    $self->{Exported_To}    = undef;
452    $self->{Expected_Tests} = 0;
453
454    $self->{Skip_All} = 0;
455
456    $self->{Use_Nums} = 1;
457
458    $self->{No_Header} = 0;
459    $self->{No_Ending} = 0;
460
461    $self->{Todo}       = undef;
462    $self->{Todo_Stack} = [];
463    $self->{Start_Todo} = 0;
464    $self->{Opened_Testhandles} = 0;
465
466    $self->_share_keys;
467    $self->_dup_stdhandles;
468
469    return;
470}
471
472
473# Shared scalar values are lost when a hash is copied, so we have
474# a separate method to restore them.
475# Shared references are retained across copies.
476sub _share_keys {
477    my $self = shift;
478
479    share( $self->{Curr_Test} );
480
481    return;
482}
483
484
485=back
486
487=head2 Setting up tests
488
489These methods are for setting up tests and declaring how many there
490are.  You usually only want to call one of these methods.
491
492=over 4
493
494=item B<plan>
495
496  $Test->plan('no_plan');
497  $Test->plan( skip_all => $reason );
498  $Test->plan( tests => $num_tests );
499
500A convenient way to set up your tests.  Call this and Test::Builder
501will print the appropriate headers and take the appropriate actions.
502
503If you call C<plan()>, don't call any of the other methods below.
504
505If a child calls "skip_all" in the plan, a C<Test::Builder::Exception> is
506thrown.  Trap this error, call C<finalize()> and don't run any more tests on
507the child.
508
509 my $child = $Test->child('some child');
510 eval { $child->plan( $condition ? ( skip_all => $reason ) : ( tests => 3 )  ) };
511 if ( eval { $@->isa('Test::Builder::Exception') } ) {
512    $child->finalize;
513    return;
514 }
515 # run your tests
516
517=cut
518
519my %plan_cmds = (
520    no_plan     => \&no_plan,
521    skip_all    => \&skip_all,
522    tests       => \&_plan_tests,
523);
524
525sub plan {
526    my( $self, $cmd, $arg ) = @_;
527
528    return unless $cmd;
529
530    local $Level = $Level + 1;
531
532    $self->croak("You tried to plan twice") if $self->{Have_Plan};
533
534    if( my $method = $plan_cmds{$cmd} ) {
535        local $Level = $Level + 1;
536        $self->$method($arg);
537    }
538    else {
539        my @args = grep { defined } ( $cmd, $arg );
540        $self->croak("plan() doesn't understand @args");
541    }
542
543    return 1;
544}
545
546
547sub _plan_tests {
548    my($self, $arg) = @_;
549
550    if($arg) {
551        local $Level = $Level + 1;
552        return $self->expected_tests($arg);
553    }
554    elsif( !defined $arg ) {
555        $self->croak("Got an undefined number of tests");
556    }
557    else {
558        $self->croak("You said to run 0 tests");
559    }
560
561    return;
562}
563
564=item B<expected_tests>
565
566    my $max = $Test->expected_tests;
567    $Test->expected_tests($max);
568
569Gets/sets the number of tests we expect this test to run and prints out
570the appropriate headers.
571
572=cut
573
574sub expected_tests {
575    my $self = shift;
576    my($max) = @_;
577
578    if(@_) {
579        $self->croak("Number of tests must be a positive integer.  You gave it '$max'")
580          unless $max =~ /^\+?\d+$/;
581
582        $self->{Expected_Tests} = $max;
583        $self->{Have_Plan}      = 1;
584
585        $self->_output_plan($max) unless $self->no_header;
586    }
587    return $self->{Expected_Tests};
588}
589
590=item B<no_plan>
591
592  $Test->no_plan;
593
594Declares that this test will run an indeterminate number of tests.
595
596=cut
597
598sub no_plan {
599    my($self, $arg) = @_;
600
601    $self->carp("no_plan takes no arguments") if $arg;
602
603    $self->{No_Plan}   = 1;
604    $self->{Have_Plan} = 1;
605
606    return 1;
607}
608
609=begin private
610
611=item B<_output_plan>
612
613  $tb->_output_plan($max);
614  $tb->_output_plan($max, $directive);
615  $tb->_output_plan($max, $directive => $reason);
616
617Handles displaying the test plan.
618
619If a C<$directive> and/or C<$reason> are given they will be output with the
620plan.  So here's what skipping all tests looks like:
621
622    $tb->_output_plan(0, "SKIP", "Because I said so");
623
624It sets C<< $tb->{Have_Output_Plan} >> and will croak if the plan was already
625output.
626
627=end private
628
629=cut
630
631sub _output_plan {
632    my($self, $max, $directive, $reason) = @_;
633
634    $self->carp("The plan was already output") if $self->{Have_Output_Plan};
635
636    my $plan = "1..$max";
637    $plan .= " # $directive" if defined $directive;
638    $plan .= " $reason"      if defined $reason;
639
640    $self->_print("$plan\n");
641
642    $self->{Have_Output_Plan} = 1;
643
644    return;
645}
646
647
648=item B<done_testing>
649
650  $Test->done_testing();
651  $Test->done_testing($num_tests);
652
653Declares that you are done testing, no more tests will be run after this point.
654
655If a plan has not yet been output, it will do so.
656
657$num_tests is the number of tests you planned to run.  If a numbered
658plan was already declared, and if this contradicts, a failing test
659will be run to reflect the planning mistake.  If C<no_plan> was declared,
660this will override.
661
662If C<done_testing()> is called twice, the second call will issue a
663failing test.
664
665If C<$num_tests> is omitted, the number of tests run will be used, like
666no_plan.
667
668C<done_testing()> is, in effect, used when you'd want to use C<no_plan>, but
669safer. You'd use it like so:
670
671    $Test->ok($a == $b);
672    $Test->done_testing();
673
674Or to plan a variable number of tests:
675
676    for my $test (@tests) {
677        $Test->ok($test);
678    }
679    $Test->done_testing(scalar @tests);
680
681=cut
682
683sub done_testing {
684    my($self, $num_tests) = @_;
685
686    # If done_testing() specified the number of tests, shut off no_plan.
687    if( defined $num_tests ) {
688        $self->{No_Plan} = 0;
689    }
690    else {
691        $num_tests = $self->current_test;
692    }
693
694    if( $self->{Done_Testing} ) {
695        my($file, $line) = @{$self->{Done_Testing}}[1,2];
696        $self->ok(0, "done_testing() was already called at $file line $line");
697        return;
698    }
699
700    $self->{Done_Testing} = [caller];
701
702    if( $self->expected_tests && $num_tests != $self->expected_tests ) {
703        $self->ok(0, "planned to run @{[ $self->expected_tests ]} ".
704                     "but done_testing() expects $num_tests");
705    }
706    else {
707        $self->{Expected_Tests} = $num_tests;
708    }
709
710    $self->_output_plan($num_tests) unless $self->{Have_Output_Plan};
711
712    $self->{Have_Plan} = 1;
713
714    # The wrong number of tests were run
715    $self->is_passing(0) if $self->{Expected_Tests} != $self->{Curr_Test};
716
717    # No tests were run
718    $self->is_passing(0) if $self->{Curr_Test} == 0;
719
720    return 1;
721}
722
723
724=item B<has_plan>
725
726  $plan = $Test->has_plan
727
728Find out whether a plan has been defined. C<$plan> is either C<undef> (no plan
729has been set), C<no_plan> (indeterminate # of tests) or an integer (the number
730of expected tests).
731
732=cut
733
734sub has_plan {
735    my $self = shift;
736
737    return( $self->{Expected_Tests} ) if $self->{Expected_Tests};
738    return('no_plan') if $self->{No_Plan};
739    return(undef);
740}
741
742=item B<skip_all>
743
744  $Test->skip_all;
745  $Test->skip_all($reason);
746
747Skips all the tests, using the given C<$reason>.  Exits immediately with 0.
748
749=cut
750
751sub skip_all {
752    my( $self, $reason ) = @_;
753
754    $self->{Skip_All} = $self->parent ? $reason : 1;
755
756    $self->_output_plan(0, "SKIP", $reason) unless $self->no_header;
757    if ( $self->parent ) {
758        die bless {} => 'Test::Builder::Exception';
759    }
760    exit(0);
761}
762
763=item B<exported_to>
764
765  my $pack = $Test->exported_to;
766  $Test->exported_to($pack);
767
768Tells Test::Builder what package you exported your functions to.
769
770This method isn't terribly useful since modules which share the same
771Test::Builder object might get exported to different packages and only
772the last one will be honored.
773
774=cut
775
776sub exported_to {
777    my( $self, $pack ) = @_;
778
779    if( defined $pack ) {
780        $self->{Exported_To} = $pack;
781    }
782    return $self->{Exported_To};
783}
784
785=back
786
787=head2 Running tests
788
789These actually run the tests, analogous to the functions in Test::More.
790
791They all return true if the test passed, false if the test failed.
792
793C<$name> is always optional.
794
795=over 4
796
797=item B<ok>
798
799  $Test->ok($test, $name);
800
801Your basic test.  Pass if C<$test> is true, fail if $test is false.  Just
802like Test::Simple's C<ok()>.
803
804=cut
805
806sub ok {
807    my( $self, $test, $name ) = @_;
808
809    if ( $self->{Child_Name} and not $self->{In_Destroy} ) {
810        $name = 'unnamed test' unless defined $name;
811        $self->is_passing(0);
812        $self->croak("Cannot run test ($name) with active children");
813    }
814    # $test might contain an object which we don't want to accidentally
815    # store, so we turn it into a boolean.
816    $test = $test ? 1 : 0;
817
818    lock $self->{Curr_Test};
819    $self->{Curr_Test}++;
820
821    # In case $name is a string overloaded object, force it to stringify.
822    $self->_unoverload_str( \$name );
823
824    $self->diag(<<"ERR") if defined $name and $name =~ /^[\d\s]+$/;
825    You named your test '$name'.  You shouldn't use numbers for your test names.
826    Very confusing.
827ERR
828
829    # Capture the value of $TODO for the rest of this ok() call
830    # so it can more easily be found by other routines.
831    my $todo    = $self->todo();
832    my $in_todo = $self->in_todo;
833    local $self->{Todo} = $todo if $in_todo;
834
835    $self->_unoverload_str( \$todo );
836
837    my $out;
838    my $result = &share( {} );
839
840    unless($test) {
841        $out .= "not ";
842        @$result{ 'ok', 'actual_ok' } = ( ( $self->in_todo ? 1 : 0 ), 0 );
843    }
844    else {
845        @$result{ 'ok', 'actual_ok' } = ( 1, $test );
846    }
847
848    $out .= "ok";
849    $out .= " $self->{Curr_Test}" if $self->use_numbers;
850
851    if( defined $name ) {
852        $name =~ s|#|\\#|g;    # # in a name can confuse Test::Harness.
853        $out .= " - $name";
854        $result->{name} = $name;
855    }
856    else {
857        $result->{name} = '';
858    }
859
860    if( $self->in_todo ) {
861        $out .= " # TODO $todo";
862        $result->{reason} = $todo;
863        $result->{type}   = 'todo';
864    }
865    else {
866        $result->{reason} = '';
867        $result->{type}   = '';
868    }
869
870    $self->{Test_Results}[ $self->{Curr_Test} - 1 ] = $result;
871    $out .= "\n";
872
873    $self->_print($out);
874
875    unless($test) {
876        my $msg = $self->in_todo ? "Failed (TODO)" : "Failed";
877        $self->_print_to_fh( $self->_diag_fh, "\n" ) if $ENV{HARNESS_ACTIVE};
878
879        my( undef, $file, $line ) = $self->caller;
880        if( defined $name ) {
881            $self->diag(qq[  $msg test '$name'\n]);
882            $self->diag(qq[  at $file line $line.\n]);
883        }
884        else {
885            $self->diag(qq[  $msg test at $file line $line.\n]);
886        }
887    }
888
889    $self->is_passing(0) unless $test || $self->in_todo;
890
891    # Check that we haven't violated the plan
892    $self->_check_is_passing_plan();
893
894    return $test ? 1 : 0;
895}
896
897
898# Check that we haven't yet violated the plan and set
899# is_passing() accordingly
900sub _check_is_passing_plan {
901    my $self = shift;
902
903    my $plan = $self->has_plan;
904    return unless defined $plan;        # no plan yet defined
905    return unless $plan !~ /\D/;        # no numeric plan
906    $self->is_passing(0) if $plan < $self->{Curr_Test};
907}
908
909
910sub _unoverload {
911    my $self = shift;
912    my $type = shift;
913
914    $self->_try(sub { require overload; }, die_on_fail => 1);
915
916    foreach my $thing (@_) {
917        if( $self->_is_object($$thing) ) {
918            if( my $string_meth = overload::Method( $$thing, $type ) ) {
919                $$thing = $$thing->$string_meth();
920            }
921        }
922    }
923
924    return;
925}
926
927sub _is_object {
928    my( $self, $thing ) = @_;
929
930    return $self->_try( sub { ref $thing && $thing->isa('UNIVERSAL') } ) ? 1 : 0;
931}
932
933sub _unoverload_str {
934    my $self = shift;
935
936    return $self->_unoverload( q[""], @_ );
937}
938
939sub _unoverload_num {
940    my $self = shift;
941
942    $self->_unoverload( '0+', @_ );
943
944    for my $val (@_) {
945        next unless $self->_is_dualvar($$val);
946        $$val = $$val + 0;
947    }
948
949    return;
950}
951
952# This is a hack to detect a dualvar such as $!
953sub _is_dualvar {
954    my( $self, $val ) = @_;
955
956    # Objects are not dualvars.
957    return 0 if ref $val;
958
959    no warnings 'numeric';
960    my $numval = $val + 0;
961    return ($numval != 0 and $numval ne $val ? 1 : 0);
962}
963
964=item B<is_eq>
965
966  $Test->is_eq($got, $expected, $name);
967
968Like Test::More's C<is()>.  Checks if C<$got eq $expected>.  This is the
969string version.
970
971C<undef> only ever matches another C<undef>.
972
973=item B<is_num>
974
975  $Test->is_num($got, $expected, $name);
976
977Like Test::More's C<is()>.  Checks if C<$got == $expected>.  This is the
978numeric version.
979
980C<undef> only ever matches another C<undef>.
981
982=cut
983
984sub is_eq {
985    my( $self, $got, $expect, $name ) = @_;
986    local $Level = $Level + 1;
987
988    if( !defined $got || !defined $expect ) {
989        # undef only matches undef and nothing else
990        my $test = !defined $got && !defined $expect;
991
992        $self->ok( $test, $name );
993        $self->_is_diag( $got, 'eq', $expect ) unless $test;
994        return $test;
995    }
996
997    return $self->cmp_ok( $got, 'eq', $expect, $name );
998}
999
1000sub is_num {
1001    my( $self, $got, $expect, $name ) = @_;
1002    local $Level = $Level + 1;
1003
1004    if( !defined $got || !defined $expect ) {
1005        # undef only matches undef and nothing else
1006        my $test = !defined $got && !defined $expect;
1007
1008        $self->ok( $test, $name );
1009        $self->_is_diag( $got, '==', $expect ) unless $test;
1010        return $test;
1011    }
1012
1013    return $self->cmp_ok( $got, '==', $expect, $name );
1014}
1015
1016sub _diag_fmt {
1017    my( $self, $type, $val ) = @_;
1018
1019    if( defined $$val ) {
1020        if( $type eq 'eq' or $type eq 'ne' ) {
1021            # quote and force string context
1022            $$val = "'$$val'";
1023        }
1024        else {
1025            # force numeric context
1026            $self->_unoverload_num($val);
1027        }
1028    }
1029    else {
1030        $$val = 'undef';
1031    }
1032
1033    return;
1034}
1035
1036sub _is_diag {
1037    my( $self, $got, $type, $expect ) = @_;
1038
1039    $self->_diag_fmt( $type, $_ ) for \$got, \$expect;
1040
1041    local $Level = $Level + 1;
1042    return $self->diag(<<"DIAGNOSTIC");
1043         got: $got
1044    expected: $expect
1045DIAGNOSTIC
1046
1047}
1048
1049sub _isnt_diag {
1050    my( $self, $got, $type ) = @_;
1051
1052    $self->_diag_fmt( $type, \$got );
1053
1054    local $Level = $Level + 1;
1055    return $self->diag(<<"DIAGNOSTIC");
1056         got: $got
1057    expected: anything else
1058DIAGNOSTIC
1059}
1060
1061=item B<isnt_eq>
1062
1063  $Test->isnt_eq($got, $dont_expect, $name);
1064
1065Like Test::More's C<isnt()>.  Checks if C<$got ne $dont_expect>.  This is
1066the string version.
1067
1068=item B<isnt_num>
1069
1070  $Test->isnt_num($got, $dont_expect, $name);
1071
1072Like Test::More's C<isnt()>.  Checks if C<$got ne $dont_expect>.  This is
1073the numeric version.
1074
1075=cut
1076
1077sub isnt_eq {
1078    my( $self, $got, $dont_expect, $name ) = @_;
1079    local $Level = $Level + 1;
1080
1081    if( !defined $got || !defined $dont_expect ) {
1082        # undef only matches undef and nothing else
1083        my $test = defined $got || defined $dont_expect;
1084
1085        $self->ok( $test, $name );
1086        $self->_isnt_diag( $got, 'ne' ) unless $test;
1087        return $test;
1088    }
1089
1090    return $self->cmp_ok( $got, 'ne', $dont_expect, $name );
1091}
1092
1093sub isnt_num {
1094    my( $self, $got, $dont_expect, $name ) = @_;
1095    local $Level = $Level + 1;
1096
1097    if( !defined $got || !defined $dont_expect ) {
1098        # undef only matches undef and nothing else
1099        my $test = defined $got || defined $dont_expect;
1100
1101        $self->ok( $test, $name );
1102        $self->_isnt_diag( $got, '!=' ) unless $test;
1103        return $test;
1104    }
1105
1106    return $self->cmp_ok( $got, '!=', $dont_expect, $name );
1107}
1108
1109=item B<like>
1110
1111  $Test->like($thing, qr/$regex/, $name);
1112  $Test->like($thing, '/$regex/', $name);
1113
1114Like Test::More's C<like()>.  Checks if $thing matches the given C<$regex>.
1115
1116=item B<unlike>
1117
1118  $Test->unlike($thing, qr/$regex/, $name);
1119  $Test->unlike($thing, '/$regex/', $name);
1120
1121Like Test::More's C<unlike()>.  Checks if $thing B<does not match> the
1122given C<$regex>.
1123
1124=cut
1125
1126sub like {
1127    my( $self, $thing, $regex, $name ) = @_;
1128
1129    local $Level = $Level + 1;
1130    return $self->_regex_ok( $thing, $regex, '=~', $name );
1131}
1132
1133sub unlike {
1134    my( $self, $thing, $regex, $name ) = @_;
1135
1136    local $Level = $Level + 1;
1137    return $self->_regex_ok( $thing, $regex, '!~', $name );
1138}
1139
1140=item B<cmp_ok>
1141
1142  $Test->cmp_ok($thing, $type, $that, $name);
1143
1144Works just like Test::More's C<cmp_ok()>.
1145
1146    $Test->cmp_ok($big_num, '!=', $other_big_num);
1147
1148=cut
1149
1150my %numeric_cmps = map { ( $_, 1 ) } ( "<", "<=", ">", ">=", "==", "!=", "<=>" );
1151
1152# Bad, these are not comparison operators. Should we include more?
1153my %cmp_ok_bl = map { ( $_, 1 ) } ( "=", "+=", ".=", "x=", "^=", "|=", "||=", "&&=", "...");
1154
1155sub cmp_ok {
1156    my( $self, $got, $type, $expect, $name ) = @_;
1157
1158    if ($cmp_ok_bl{$type}) {
1159        $self->croak("$type is not a valid comparison operator in cmp_ok()");
1160    }
1161
1162    my $test;
1163    my $error;
1164    {
1165        ## no critic (BuiltinFunctions::ProhibitStringyEval)
1166
1167        local( $@, $!, $SIG{__DIE__} );    # isolate eval
1168
1169        my($pack, $file, $line) = $self->caller();
1170
1171        # This is so that warnings come out at the caller's level
1172        $test = eval qq[
1173#line $line "(eval in cmp_ok) $file"
1174\$got $type \$expect;
1175];
1176        $error = $@;
1177    }
1178    local $Level = $Level + 1;
1179    my $ok = $self->ok( $test, $name );
1180
1181    # Treat overloaded objects as numbers if we're asked to do a
1182    # numeric comparison.
1183    my $unoverload
1184      = $numeric_cmps{$type}
1185      ? '_unoverload_num'
1186      : '_unoverload_str';
1187
1188    $self->diag(<<"END") if $error;
1189An error occurred while using $type:
1190------------------------------------
1191$error
1192------------------------------------
1193END
1194
1195    unless($ok) {
1196        $self->$unoverload( \$got, \$expect );
1197
1198        if( $type =~ /^(eq|==)$/ ) {
1199            $self->_is_diag( $got, $type, $expect );
1200        }
1201        elsif( $type =~ /^(ne|!=)$/ ) {
1202            $self->_isnt_diag( $got, $type );
1203        }
1204        else {
1205            $self->_cmp_diag( $got, $type, $expect );
1206        }
1207    }
1208    return $ok;
1209}
1210
1211sub _cmp_diag {
1212    my( $self, $got, $type, $expect ) = @_;
1213
1214    $got    = defined $got    ? "'$got'"    : 'undef';
1215    $expect = defined $expect ? "'$expect'" : 'undef';
1216
1217    local $Level = $Level + 1;
1218    return $self->diag(<<"DIAGNOSTIC");
1219    $got
1220        $type
1221    $expect
1222DIAGNOSTIC
1223}
1224
1225sub _caller_context {
1226    my $self = shift;
1227
1228    my( $pack, $file, $line ) = $self->caller(1);
1229
1230    my $code = '';
1231    $code .= "#line $line $file\n" if defined $file and defined $line;
1232
1233    return $code;
1234}
1235
1236=back
1237
1238
1239=head2 Other Testing Methods
1240
1241These are methods which are used in the course of writing a test but are not themselves tests.
1242
1243=over 4
1244
1245=item B<BAIL_OUT>
1246
1247    $Test->BAIL_OUT($reason);
1248
1249Indicates to the Test::Harness that things are going so badly all
1250testing should terminate.  This includes running any additional test
1251scripts.
1252
1253It will exit with 255.
1254
1255=cut
1256
1257sub BAIL_OUT {
1258    my( $self, $reason ) = @_;
1259
1260    $self->{Bailed_Out} = 1;
1261
1262    if ($self->parent) {
1263        $self->{Bailed_Out_Reason} = $reason;
1264        $self->no_ending(1);
1265        die bless {} => 'Test::Builder::Exception';
1266    }
1267
1268    $self->_print("Bail out!  $reason");
1269    exit 255;
1270}
1271
1272=for deprecated
1273BAIL_OUT() used to be BAILOUT()
1274
1275=cut
1276
1277{
1278    no warnings 'once';
1279    *BAILOUT = \&BAIL_OUT;
1280}
1281
1282=item B<skip>
1283
1284    $Test->skip;
1285    $Test->skip($why);
1286
1287Skips the current test, reporting C<$why>.
1288
1289=cut
1290
1291sub skip {
1292    my( $self, $why ) = @_;
1293    $why ||= '';
1294    $self->_unoverload_str( \$why );
1295
1296    lock( $self->{Curr_Test} );
1297    $self->{Curr_Test}++;
1298
1299    $self->{Test_Results}[ $self->{Curr_Test} - 1 ] = &share(
1300        {
1301            'ok'      => 1,
1302            actual_ok => 1,
1303            name      => '',
1304            type      => 'skip',
1305            reason    => $why,
1306        }
1307    );
1308
1309    my $out = "ok";
1310    $out .= " $self->{Curr_Test}" if $self->use_numbers;
1311    $out .= " # skip";
1312    $out .= " $why"               if length $why;
1313    $out .= "\n";
1314
1315    $self->_print($out);
1316
1317    return 1;
1318}
1319
1320=item B<todo_skip>
1321
1322  $Test->todo_skip;
1323  $Test->todo_skip($why);
1324
1325Like C<skip()>, only it will declare the test as failing and TODO.  Similar
1326to
1327
1328    print "not ok $tnum # TODO $why\n";
1329
1330=cut
1331
1332sub todo_skip {
1333    my( $self, $why ) = @_;
1334    $why ||= '';
1335
1336    lock( $self->{Curr_Test} );
1337    $self->{Curr_Test}++;
1338
1339    $self->{Test_Results}[ $self->{Curr_Test} - 1 ] = &share(
1340        {
1341            'ok'      => 1,
1342            actual_ok => 0,
1343            name      => '',
1344            type      => 'todo_skip',
1345            reason    => $why,
1346        }
1347    );
1348
1349    my $out = "not ok";
1350    $out .= " $self->{Curr_Test}" if $self->use_numbers;
1351    $out .= " # TODO & SKIP $why\n";
1352
1353    $self->_print($out);
1354
1355    return 1;
1356}
1357
1358=begin _unimplemented
1359
1360=item B<skip_rest>
1361
1362  $Test->skip_rest;
1363  $Test->skip_rest($reason);
1364
1365Like C<skip()>, only it skips all the rest of the tests you plan to run
1366and terminates the test.
1367
1368If you're running under C<no_plan>, it skips once and terminates the
1369test.
1370
1371=end _unimplemented
1372
1373=back
1374
1375
1376=head2 Test building utility methods
1377
1378These methods are useful when writing your own test methods.
1379
1380=over 4
1381
1382=item B<maybe_regex>
1383
1384  $Test->maybe_regex(qr/$regex/);
1385  $Test->maybe_regex('/$regex/');
1386
1387This method used to be useful back when Test::Builder worked on Perls
1388before 5.6 which didn't have qr//.  Now its pretty useless.
1389
1390Convenience method for building testing functions that take regular
1391expressions as arguments.
1392
1393Takes a quoted regular expression produced by C<qr//>, or a string
1394representing a regular expression.
1395
1396Returns a Perl value which may be used instead of the corresponding
1397regular expression, or C<undef> if its argument is not recognised.
1398
1399For example, a version of C<like()>, sans the useful diagnostic messages,
1400could be written as:
1401
1402  sub laconic_like {
1403      my ($self, $thing, $regex, $name) = @_;
1404      my $usable_regex = $self->maybe_regex($regex);
1405      die "expecting regex, found '$regex'\n"
1406          unless $usable_regex;
1407      $self->ok($thing =~ m/$usable_regex/, $name);
1408  }
1409
1410=cut
1411
1412sub maybe_regex {
1413    my( $self, $regex ) = @_;
1414    my $usable_regex = undef;
1415
1416    return $usable_regex unless defined $regex;
1417
1418    my( $re, $opts );
1419
1420    # Check for qr/foo/
1421    if( _is_qr($regex) ) {
1422        $usable_regex = $regex;
1423    }
1424    # Check for '/foo/' or 'm,foo,'
1425    elsif(( $re, $opts )        = $regex =~ m{^ /(.*)/ (\w*) $ }sx              or
1426          ( undef, $re, $opts ) = $regex =~ m,^ m([^\w\s]) (.+) \1 (\w*) $,sx
1427    )
1428    {
1429        $usable_regex = length $opts ? "(?$opts)$re" : $re;
1430    }
1431
1432    return $usable_regex;
1433}
1434
1435sub _is_qr {
1436    my $regex = shift;
1437
1438    # is_regexp() checks for regexes in a robust manner, say if they're
1439    # blessed.
1440    return re::is_regexp($regex) if defined &re::is_regexp;
1441    return ref $regex eq 'Regexp';
1442}
1443
1444sub _regex_ok {
1445    my( $self, $thing, $regex, $cmp, $name ) = @_;
1446
1447    my $ok           = 0;
1448    my $usable_regex = $self->maybe_regex($regex);
1449    unless( defined $usable_regex ) {
1450        local $Level = $Level + 1;
1451        $ok = $self->ok( 0, $name );
1452        $self->diag("    '$regex' doesn't look much like a regex to me.");
1453        return $ok;
1454    }
1455
1456    {
1457        my $test;
1458        my $context = $self->_caller_context;
1459
1460        {
1461            ## no critic (BuiltinFunctions::ProhibitStringyEval)
1462
1463            local( $@, $!, $SIG{__DIE__} );    # isolate eval
1464
1465            # No point in issuing an uninit warning, they'll see it in the diagnostics
1466            no warnings 'uninitialized';
1467
1468            $test = eval $context . q{$test = $thing =~ /$usable_regex/ ? 1 : 0};
1469        }
1470
1471        $test = !$test if $cmp eq '!~';
1472
1473        local $Level = $Level + 1;
1474        $ok = $self->ok( $test, $name );
1475    }
1476
1477    unless($ok) {
1478        $thing = defined $thing ? "'$thing'" : 'undef';
1479        my $match = $cmp eq '=~' ? "doesn't match" : "matches";
1480
1481        local $Level = $Level + 1;
1482        $self->diag( sprintf <<'DIAGNOSTIC', $thing, $match, $regex );
1483                  %s
1484    %13s '%s'
1485DIAGNOSTIC
1486
1487    }
1488
1489    return $ok;
1490}
1491
1492# I'm not ready to publish this.  It doesn't deal with array return
1493# values from the code or context.
1494
1495=begin private
1496
1497=item B<_try>
1498
1499    my $return_from_code          = $Test->try(sub { code });
1500    my($return_from_code, $error) = $Test->try(sub { code });
1501
1502Works like eval BLOCK except it ensures it has no effect on the rest
1503of the test (ie. C<$@> is not set) nor is effected by outside
1504interference (ie. C<$SIG{__DIE__}>) and works around some quirks in older
1505Perls.
1506
1507C<$error> is what would normally be in C<$@>.
1508
1509It is suggested you use this in place of eval BLOCK.
1510
1511=cut
1512
1513sub _try {
1514    my( $self, $code, %opts ) = @_;
1515
1516    my $error;
1517    my $return;
1518    {
1519        local $!;               # eval can mess up $!
1520        local $@;               # don't set $@ in the test
1521        local $SIG{__DIE__};    # don't trip an outside DIE handler.
1522        $return = eval { $code->() };
1523        $error = $@;
1524    }
1525
1526    die $error if $error and $opts{die_on_fail};
1527
1528    return wantarray ? ( $return, $error ) : $return;
1529}
1530
1531=end private
1532
1533
1534=item B<is_fh>
1535
1536    my $is_fh = $Test->is_fh($thing);
1537
1538Determines if the given C<$thing> can be used as a filehandle.
1539
1540=cut
1541
1542sub is_fh {
1543    my $self     = shift;
1544    my $maybe_fh = shift;
1545    return 0 unless defined $maybe_fh;
1546
1547    return 1 if ref $maybe_fh  eq 'GLOB';    # its a glob ref
1548    return 1 if ref \$maybe_fh eq 'GLOB';    # its a glob
1549
1550    return eval { $maybe_fh->isa("IO::Handle") } ||
1551           eval { tied($maybe_fh)->can('TIEHANDLE') };
1552}
1553
1554=back
1555
1556
1557=head2 Test style
1558
1559
1560=over 4
1561
1562=item B<level>
1563
1564    $Test->level($how_high);
1565
1566How far up the call stack should C<$Test> look when reporting where the
1567test failed.
1568
1569Defaults to 1.
1570
1571Setting L<$Test::Builder::Level> overrides.  This is typically useful
1572localized:
1573
1574    sub my_ok {
1575        my $test = shift;
1576
1577        local $Test::Builder::Level = $Test::Builder::Level + 1;
1578        $TB->ok($test);
1579    }
1580
1581To be polite to other functions wrapping your own you usually want to increment C<$Level> rather than set it to a constant.
1582
1583=cut
1584
1585sub level {
1586    my( $self, $level ) = @_;
1587
1588    if( defined $level ) {
1589        $Level = $level;
1590    }
1591    return $Level;
1592}
1593
1594=item B<use_numbers>
1595
1596    $Test->use_numbers($on_or_off);
1597
1598Whether or not the test should output numbers.  That is, this if true:
1599
1600  ok 1
1601  ok 2
1602  ok 3
1603
1604or this if false
1605
1606  ok
1607  ok
1608  ok
1609
1610Most useful when you can't depend on the test output order, such as
1611when threads or forking is involved.
1612
1613Defaults to on.
1614
1615=cut
1616
1617sub use_numbers {
1618    my( $self, $use_nums ) = @_;
1619
1620    if( defined $use_nums ) {
1621        $self->{Use_Nums} = $use_nums;
1622    }
1623    return $self->{Use_Nums};
1624}
1625
1626=item B<no_diag>
1627
1628    $Test->no_diag($no_diag);
1629
1630If set true no diagnostics will be printed.  This includes calls to
1631C<diag()>.
1632
1633=item B<no_ending>
1634
1635    $Test->no_ending($no_ending);
1636
1637Normally, Test::Builder does some extra diagnostics when the test
1638ends.  It also changes the exit code as described below.
1639
1640If this is true, none of that will be done.
1641
1642=item B<no_header>
1643
1644    $Test->no_header($no_header);
1645
1646If set to true, no "1..N" header will be printed.
1647
1648=cut
1649
1650foreach my $attribute (qw(No_Header No_Ending No_Diag)) {
1651    my $method = lc $attribute;
1652
1653    my $code = sub {
1654        my( $self, $no ) = @_;
1655
1656        if( defined $no ) {
1657            $self->{$attribute} = $no;
1658        }
1659        return $self->{$attribute};
1660    };
1661
1662    no strict 'refs';    ## no critic
1663    *{ __PACKAGE__ . '::' . $method } = $code;
1664}
1665
1666=back
1667
1668=head2 Output
1669
1670Controlling where the test output goes.
1671
1672It's ok for your test to change where STDOUT and STDERR point to,
1673Test::Builder's default output settings will not be affected.
1674
1675=over 4
1676
1677=item B<diag>
1678
1679    $Test->diag(@msgs);
1680
1681Prints out the given C<@msgs>.  Like C<print>, arguments are simply
1682appended together.
1683
1684Normally, it uses the C<failure_output()> handle, but if this is for a
1685TODO test, the C<todo_output()> handle is used.
1686
1687Output will be indented and marked with a # so as not to interfere
1688with test output.  A newline will be put on the end if there isn't one
1689already.
1690
1691We encourage using this rather than calling print directly.
1692
1693Returns false.  Why?  Because C<diag()> is often used in conjunction with
1694a failing test (C<ok() || diag()>) it "passes through" the failure.
1695
1696    return ok(...) || diag(...);
1697
1698=for blame transfer
1699Mark Fowler <mark@twoshortplanks.com>
1700
1701=cut
1702
1703sub diag {
1704    my $self = shift;
1705
1706    $self->_print_comment( $self->_diag_fh, @_ );
1707}
1708
1709=item B<note>
1710
1711    $Test->note(@msgs);
1712
1713Like C<diag()>, but it prints to the C<output()> handle so it will not
1714normally be seen by the user except in verbose mode.
1715
1716=cut
1717
1718sub note {
1719    my $self = shift;
1720
1721    $self->_print_comment( $self->output, @_ );
1722}
1723
1724sub _diag_fh {
1725    my $self = shift;
1726
1727    local $Level = $Level + 1;
1728    return $self->in_todo ? $self->todo_output : $self->failure_output;
1729}
1730
1731sub _print_comment {
1732    my( $self, $fh, @msgs ) = @_;
1733
1734    return if $self->no_diag;
1735    return unless @msgs;
1736
1737    # Prevent printing headers when compiling (i.e. -c)
1738    return if $^C;
1739
1740    # Smash args together like print does.
1741    # Convert undef to 'undef' so its readable.
1742    my $msg = join '', map { defined($_) ? $_ : 'undef' } @msgs;
1743
1744    # Escape the beginning, _print will take care of the rest.
1745    $msg =~ s/^/# /;
1746
1747    local $Level = $Level + 1;
1748    $self->_print_to_fh( $fh, $msg );
1749
1750    return 0;
1751}
1752
1753=item B<explain>
1754
1755    my @dump = $Test->explain(@msgs);
1756
1757Will dump the contents of any references in a human readable format.
1758Handy for things like...
1759
1760    is_deeply($have, $want) || diag explain $have;
1761
1762or
1763
1764    is_deeply($have, $want) || note explain $have;
1765
1766=cut
1767
1768sub explain {
1769    my $self = shift;
1770
1771    return map {
1772        ref $_
1773          ? do {
1774            $self->_try(sub { require Data::Dumper }, die_on_fail => 1);
1775
1776            my $dumper = Data::Dumper->new( [$_] );
1777            $dumper->Indent(1)->Terse(1);
1778            $dumper->Sortkeys(1) if $dumper->can("Sortkeys");
1779            $dumper->Dump;
1780          }
1781          : $_
1782    } @_;
1783}
1784
1785=begin _private
1786
1787=item B<_print>
1788
1789    $Test->_print(@msgs);
1790
1791Prints to the C<output()> filehandle.
1792
1793=end _private
1794
1795=cut
1796
1797sub _print {
1798    my $self = shift;
1799    return $self->_print_to_fh( $self->output, @_ );
1800}
1801
1802sub _print_to_fh {
1803    my( $self, $fh, @msgs ) = @_;
1804
1805    # Prevent printing headers when only compiling.  Mostly for when
1806    # tests are deparsed with B::Deparse
1807    return if $^C;
1808
1809    my $msg = join '', @msgs;
1810    my $indent = $self->_indent;
1811
1812    local( $\, $", $, ) = ( undef, ' ', '' );
1813
1814    # Escape each line after the first with a # so we don't
1815    # confuse Test::Harness.
1816    $msg =~ s{\n(?!\z)}{\n$indent# }sg;
1817
1818    # Stick a newline on the end if it needs it.
1819    $msg .= "\n" unless $msg =~ /\n\z/;
1820
1821    return print $fh $indent, $msg;
1822}
1823
1824=item B<output>
1825
1826=item B<failure_output>
1827
1828=item B<todo_output>
1829
1830    my $filehandle = $Test->output;
1831    $Test->output($filehandle);
1832    $Test->output($filename);
1833    $Test->output(\$scalar);
1834
1835These methods control where Test::Builder will print its output.
1836They take either an open C<$filehandle>, a C<$filename> to open and write to
1837or a C<$scalar> reference to append to.  It will always return a C<$filehandle>.
1838
1839B<output> is where normal "ok/not ok" test output goes.
1840
1841Defaults to STDOUT.
1842
1843B<failure_output> is where diagnostic output on test failures and
1844C<diag()> goes.  It is normally not read by Test::Harness and instead is
1845displayed to the user.
1846
1847Defaults to STDERR.
1848
1849C<todo_output> is used instead of C<failure_output()> for the
1850diagnostics of a failing TODO test.  These will not be seen by the
1851user.
1852
1853Defaults to STDOUT.
1854
1855=cut
1856
1857sub output {
1858    my( $self, $fh ) = @_;
1859
1860    if( defined $fh ) {
1861        $self->{Out_FH} = $self->_new_fh($fh);
1862    }
1863    return $self->{Out_FH};
1864}
1865
1866sub failure_output {
1867    my( $self, $fh ) = @_;
1868
1869    if( defined $fh ) {
1870        $self->{Fail_FH} = $self->_new_fh($fh);
1871    }
1872    return $self->{Fail_FH};
1873}
1874
1875sub todo_output {
1876    my( $self, $fh ) = @_;
1877
1878    if( defined $fh ) {
1879        $self->{Todo_FH} = $self->_new_fh($fh);
1880    }
1881    return $self->{Todo_FH};
1882}
1883
1884sub _new_fh {
1885    my $self = shift;
1886    my($file_or_fh) = shift;
1887
1888    my $fh;
1889    if( $self->is_fh($file_or_fh) ) {
1890        $fh = $file_or_fh;
1891    }
1892    elsif( ref $file_or_fh eq 'SCALAR' ) {
1893        # Scalar refs as filehandles was added in 5.8.
1894        if( $] >= 5.008 ) {
1895            open $fh, ">>", $file_or_fh
1896              or $self->croak("Can't open scalar ref $file_or_fh: $!");
1897        }
1898        # Emulate scalar ref filehandles with a tie.
1899        else {
1900            $fh = Test::Builder::IO::Scalar->new($file_or_fh)
1901              or $self->croak("Can't tie scalar ref $file_or_fh");
1902        }
1903    }
1904    else {
1905        open $fh, ">", $file_or_fh
1906          or $self->croak("Can't open test output log $file_or_fh: $!");
1907        _autoflush($fh);
1908    }
1909
1910    return $fh;
1911}
1912
1913sub _autoflush {
1914    my($fh) = shift;
1915    my $old_fh = select $fh;
1916    $| = 1;
1917    select $old_fh;
1918
1919    return;
1920}
1921
1922my( $Testout, $Testerr );
1923
1924sub _dup_stdhandles {
1925    my $self = shift;
1926
1927    $self->_open_testhandles;
1928
1929    # Set everything to unbuffered else plain prints to STDOUT will
1930    # come out in the wrong order from our own prints.
1931    _autoflush($Testout);
1932    _autoflush( \*STDOUT );
1933    _autoflush($Testerr);
1934    _autoflush( \*STDERR );
1935
1936    $self->reset_outputs;
1937
1938    return;
1939}
1940
1941sub _open_testhandles {
1942    my $self = shift;
1943
1944    return if $self->{Opened_Testhandles};
1945
1946    # We dup STDOUT and STDERR so people can change them in their
1947    # test suites while still getting normal test output.
1948    open( $Testout, ">&STDOUT" ) or die "Can't dup STDOUT:  $!";
1949    open( $Testerr, ">&STDERR" ) or die "Can't dup STDERR:  $!";
1950
1951    $self->_copy_io_layers( \*STDOUT, $Testout );
1952    $self->_copy_io_layers( \*STDERR, $Testerr );
1953
1954    $self->{Opened_Testhandles} = 1;
1955
1956    return;
1957}
1958
1959sub _copy_io_layers {
1960    my( $self, $src, $dst ) = @_;
1961
1962    $self->_try(
1963        sub {
1964            require PerlIO;
1965            my @src_layers = PerlIO::get_layers($src);
1966
1967            _apply_layers($dst, @src_layers) if @src_layers;
1968        }
1969    );
1970
1971    return;
1972}
1973
1974sub _apply_layers {
1975    my ($fh, @layers) = @_;
1976    my %seen;
1977    my @unique = grep { $_ ne 'unix' and !$seen{$_}++ } @layers;
1978    binmode($fh, join(":", "", "raw", @unique));
1979}
1980
1981
1982=item reset_outputs
1983
1984  $tb->reset_outputs;
1985
1986Resets all the output filehandles back to their defaults.
1987
1988=cut
1989
1990sub reset_outputs {
1991    my $self = shift;
1992
1993    $self->output        ($Testout);
1994    $self->failure_output($Testerr);
1995    $self->todo_output   ($Testout);
1996
1997    return;
1998}
1999
2000=item carp
2001
2002  $tb->carp(@message);
2003
2004Warns with C<@message> but the message will appear to come from the
2005point where the original test function was called (C<< $tb->caller >>).
2006
2007=item croak
2008
2009  $tb->croak(@message);
2010
2011Dies with C<@message> but the message will appear to come from the
2012point where the original test function was called (C<< $tb->caller >>).
2013
2014=cut
2015
2016sub _message_at_caller {
2017    my $self = shift;
2018
2019    local $Level = $Level + 1;
2020    my( $pack, $file, $line ) = $self->caller;
2021    return join( "", @_ ) . " at $file line $line.\n";
2022}
2023
2024sub carp {
2025    my $self = shift;
2026    return warn $self->_message_at_caller(@_);
2027}
2028
2029sub croak {
2030    my $self = shift;
2031    return die $self->_message_at_caller(@_);
2032}
2033
2034
2035=back
2036
2037
2038=head2 Test Status and Info
2039
2040=over 4
2041
2042=item B<current_test>
2043
2044    my $curr_test = $Test->current_test;
2045    $Test->current_test($num);
2046
2047Gets/sets the current test number we're on.  You usually shouldn't
2048have to set this.
2049
2050If set forward, the details of the missing tests are filled in as 'unknown'.
2051if set backward, the details of the intervening tests are deleted.  You
2052can erase history if you really want to.
2053
2054=cut
2055
2056sub current_test {
2057    my( $self, $num ) = @_;
2058
2059    lock( $self->{Curr_Test} );
2060    if( defined $num ) {
2061        $self->{Curr_Test} = $num;
2062
2063        # If the test counter is being pushed forward fill in the details.
2064        my $test_results = $self->{Test_Results};
2065        if( $num > @$test_results ) {
2066            my $start = @$test_results ? @$test_results : 0;
2067            for( $start .. $num - 1 ) {
2068                $test_results->[$_] = &share(
2069                    {
2070                        'ok'      => 1,
2071                        actual_ok => undef,
2072                        reason    => 'incrementing test number',
2073                        type      => 'unknown',
2074                        name      => undef
2075                    }
2076                );
2077            }
2078        }
2079        # If backward, wipe history.  Its their funeral.
2080        elsif( $num < @$test_results ) {
2081            $#{$test_results} = $num - 1;
2082        }
2083    }
2084    return $self->{Curr_Test};
2085}
2086
2087=item B<is_passing>
2088
2089   my $ok = $builder->is_passing;
2090
2091Indicates if the test suite is currently passing.
2092
2093More formally, it will be false if anything has happened which makes
2094it impossible for the test suite to pass.  True otherwise.
2095
2096For example, if no tests have run C<is_passing()> will be true because
2097even though a suite with no tests is a failure you can add a passing
2098test to it and start passing.
2099
2100Don't think about it too much.
2101
2102=cut
2103
2104sub is_passing {
2105    my $self = shift;
2106
2107    if( @_ ) {
2108        $self->{Is_Passing} = shift;
2109    }
2110
2111    return $self->{Is_Passing};
2112}
2113
2114
2115=item B<summary>
2116
2117    my @tests = $Test->summary;
2118
2119A simple summary of the tests so far.  True for pass, false for fail.
2120This is a logical pass/fail, so todos are passes.
2121
2122Of course, test #1 is $tests[0], etc...
2123
2124=cut
2125
2126sub summary {
2127    my($self) = shift;
2128
2129    return map { $_->{'ok'} } @{ $self->{Test_Results} };
2130}
2131
2132=item B<details>
2133
2134    my @tests = $Test->details;
2135
2136Like C<summary()>, but with a lot more detail.
2137
2138    $tests[$test_num - 1] =
2139            { 'ok'       => is the test considered a pass?
2140              actual_ok  => did it literally say 'ok'?
2141              name       => name of the test (if any)
2142              type       => type of test (if any, see below).
2143              reason     => reason for the above (if any)
2144            };
2145
2146'ok' is true if Test::Harness will consider the test to be a pass.
2147
2148'actual_ok' is a reflection of whether or not the test literally
2149printed 'ok' or 'not ok'.  This is for examining the result of 'todo'
2150tests.
2151
2152'name' is the name of the test.
2153
2154'type' indicates if it was a special test.  Normal tests have a type
2155of ''.  Type can be one of the following:
2156
2157    skip        see skip()
2158    todo        see todo()
2159    todo_skip   see todo_skip()
2160    unknown     see below
2161
2162Sometimes the Test::Builder test counter is incremented without it
2163printing any test output, for example, when C<current_test()> is changed.
2164In these cases, Test::Builder doesn't know the result of the test, so
2165its type is 'unknown'.  These details for these tests are filled in.
2166They are considered ok, but the name and actual_ok is left C<undef>.
2167
2168For example "not ok 23 - hole count # TODO insufficient donuts" would
2169result in this structure:
2170
2171    $tests[22] =    # 23 - 1, since arrays start from 0.
2172      { ok        => 1,   # logically, the test passed since its todo
2173        actual_ok => 0,   # in absolute terms, it failed
2174        name      => 'hole count',
2175        type      => 'todo',
2176        reason    => 'insufficient donuts'
2177      };
2178
2179=cut
2180
2181sub details {
2182    my $self = shift;
2183    return @{ $self->{Test_Results} };
2184}
2185
2186=item B<todo>
2187
2188    my $todo_reason = $Test->todo;
2189    my $todo_reason = $Test->todo($pack);
2190
2191If the current tests are considered "TODO" it will return the reason,
2192if any.  This reason can come from a C<$TODO> variable or the last call
2193to C<todo_start()>.
2194
2195Since a TODO test does not need a reason, this function can return an
2196empty string even when inside a TODO block.  Use C<< $Test->in_todo >>
2197to determine if you are currently inside a TODO block.
2198
2199C<todo()> is about finding the right package to look for C<$TODO> in.  It's
2200pretty good at guessing the right package to look at.  It first looks for
2201the caller based on C<$Level + 1>, since C<todo()> is usually called inside
2202a test function.  As a last resort it will use C<exported_to()>.
2203
2204Sometimes there is some confusion about where todo() should be looking
2205for the C<$TODO> variable.  If you want to be sure, tell it explicitly
2206what $pack to use.
2207
2208=cut
2209
2210sub todo {
2211    my( $self, $pack ) = @_;
2212
2213    return $self->{Todo} if defined $self->{Todo};
2214
2215    local $Level = $Level + 1;
2216    my $todo = $self->find_TODO($pack);
2217    return $todo if defined $todo;
2218
2219    return '';
2220}
2221
2222=item B<find_TODO>
2223
2224    my $todo_reason = $Test->find_TODO();
2225    my $todo_reason = $Test->find_TODO($pack);
2226
2227Like C<todo()> but only returns the value of C<$TODO> ignoring
2228C<todo_start()>.
2229
2230Can also be used to set C<$TODO> to a new value while returning the
2231old value:
2232
2233    my $old_reason = $Test->find_TODO($pack, 1, $new_reason);
2234
2235=cut
2236
2237sub find_TODO {
2238    my( $self, $pack, $set, $new_value ) = @_;
2239
2240    $pack = $pack || $self->caller(1) || $self->exported_to;
2241    return unless $pack;
2242
2243    no strict 'refs';    ## no critic
2244    my $old_value = ${ $pack . '::TODO' };
2245    $set and ${ $pack . '::TODO' } = $new_value;
2246    return $old_value;
2247}
2248
2249=item B<in_todo>
2250
2251    my $in_todo = $Test->in_todo;
2252
2253Returns true if the test is currently inside a TODO block.
2254
2255=cut
2256
2257sub in_todo {
2258    my $self = shift;
2259
2260    local $Level = $Level + 1;
2261    return( defined $self->{Todo} || $self->find_TODO ) ? 1 : 0;
2262}
2263
2264=item B<todo_start>
2265
2266    $Test->todo_start();
2267    $Test->todo_start($message);
2268
2269This method allows you declare all subsequent tests as TODO tests, up until
2270the C<todo_end> method has been called.
2271
2272The C<TODO:> and C<$TODO> syntax is generally pretty good about figuring out
2273whether or not we're in a TODO test.  However, often we find that this is not
2274possible to determine (such as when we want to use C<$TODO> but
2275the tests are being executed in other packages which can't be inferred
2276beforehand).
2277
2278Note that you can use this to nest "todo" tests
2279
2280 $Test->todo_start('working on this');
2281 # lots of code
2282 $Test->todo_start('working on that');
2283 # more code
2284 $Test->todo_end;
2285 $Test->todo_end;
2286
2287This is generally not recommended, but large testing systems often have weird
2288internal needs.
2289
2290We've tried to make this also work with the TODO: syntax, but it's not
2291guaranteed and its use is also discouraged:
2292
2293 TODO: {
2294     local $TODO = 'We have work to do!';
2295     $Test->todo_start('working on this');
2296     # lots of code
2297     $Test->todo_start('working on that');
2298     # more code
2299     $Test->todo_end;
2300     $Test->todo_end;
2301 }
2302
2303Pick one style or another of "TODO" to be on the safe side.
2304
2305=cut
2306
2307sub todo_start {
2308    my $self = shift;
2309    my $message = @_ ? shift : '';
2310
2311    $self->{Start_Todo}++;
2312    if( $self->in_todo ) {
2313        push @{ $self->{Todo_Stack} } => $self->todo;
2314    }
2315    $self->{Todo} = $message;
2316
2317    return;
2318}
2319
2320=item C<todo_end>
2321
2322 $Test->todo_end;
2323
2324Stops running tests as "TODO" tests.  This method is fatal if called without a
2325preceding C<todo_start> method call.
2326
2327=cut
2328
2329sub todo_end {
2330    my $self = shift;
2331
2332    if( !$self->{Start_Todo} ) {
2333        $self->croak('todo_end() called without todo_start()');
2334    }
2335
2336    $self->{Start_Todo}--;
2337
2338    if( $self->{Start_Todo} && @{ $self->{Todo_Stack} } ) {
2339        $self->{Todo} = pop @{ $self->{Todo_Stack} };
2340    }
2341    else {
2342        delete $self->{Todo};
2343    }
2344
2345    return;
2346}
2347
2348=item B<caller>
2349
2350    my $package = $Test->caller;
2351    my($pack, $file, $line) = $Test->caller;
2352    my($pack, $file, $line) = $Test->caller($height);
2353
2354Like the normal C<caller()>, except it reports according to your C<level()>.
2355
2356C<$height> will be added to the C<level()>.
2357
2358If C<caller()> winds up off the top of the stack it report the highest context.
2359
2360=cut
2361
2362sub caller {    ## no critic (Subroutines::ProhibitBuiltinHomonyms)
2363    my( $self, $height ) = @_;
2364    $height ||= 0;
2365
2366    my $level = $self->level + $height + 1;
2367    my @caller;
2368    do {
2369        @caller = CORE::caller( $level );
2370        $level--;
2371    } until @caller;
2372    return wantarray ? @caller : $caller[0];
2373}
2374
2375=back
2376
2377=cut
2378
2379=begin _private
2380
2381=over 4
2382
2383=item B<_sanity_check>
2384
2385  $self->_sanity_check();
2386
2387Runs a bunch of end of test sanity checks to make sure reality came
2388through ok.  If anything is wrong it will die with a fairly friendly
2389error message.
2390
2391=cut
2392
2393#'#
2394sub _sanity_check {
2395    my $self = shift;
2396
2397    $self->_whoa( $self->{Curr_Test} < 0, 'Says here you ran a negative number of tests!' );
2398    $self->_whoa( $self->{Curr_Test} != @{ $self->{Test_Results} },
2399        'Somehow you got a different number of results than tests ran!' );
2400
2401    return;
2402}
2403
2404=item B<_whoa>
2405
2406  $self->_whoa($check, $description);
2407
2408A sanity check, similar to C<assert()>.  If the C<$check> is true, something
2409has gone horribly wrong.  It will die with the given C<$description> and
2410a note to contact the author.
2411
2412=cut
2413
2414sub _whoa {
2415    my( $self, $check, $desc ) = @_;
2416    if($check) {
2417        local $Level = $Level + 1;
2418        $self->croak(<<"WHOA");
2419WHOA!  $desc
2420This should never happen!  Please contact the author immediately!
2421WHOA
2422    }
2423
2424    return;
2425}
2426
2427=item B<_my_exit>
2428
2429  _my_exit($exit_num);
2430
2431Perl seems to have some trouble with exiting inside an C<END> block.
24325.6.1 does some odd things.  Instead, this function edits C<$?>
2433directly.  It should B<only> be called from inside an C<END> block.
2434It doesn't actually exit, that's your job.
2435
2436=cut
2437
2438sub _my_exit {
2439    $? = $_[0];    ## no critic (Variables::RequireLocalizedPunctuationVars)
2440
2441    return 1;
2442}
2443
2444=back
2445
2446=end _private
2447
2448=cut
2449
2450sub _ending {
2451    my $self = shift;
2452    return if $self->no_ending;
2453    return if $self->{Ending}++;
2454
2455    my $real_exit_code = $?;
2456
2457    # Don't bother with an ending if this is a forked copy.  Only the parent
2458    # should do the ending.
2459    if( $self->{Original_Pid} != $$ ) {
2460        return;
2461    }
2462
2463    # Ran tests but never declared a plan or hit done_testing
2464    if( !$self->{Have_Plan} and $self->{Curr_Test} ) {
2465        $self->is_passing(0);
2466        $self->diag("Tests were run but no plan was declared and done_testing() was not seen.");
2467
2468        if($real_exit_code) {
2469            $self->diag(<<"FAIL");
2470Looks like your test exited with $real_exit_code just after $self->{Curr_Test}.
2471FAIL
2472            $self->is_passing(0);
2473            _my_exit($real_exit_code) && return;
2474        }
2475
2476        # But if the tests ran, handle exit code.
2477        my $test_results = $self->{Test_Results};
2478        if(@$test_results) {
2479            my $num_failed = grep !$_->{'ok'}, @{$test_results}[ 0 .. $self->{Curr_Test} - 1 ];
2480            if ($num_failed > 0) {
2481
2482                my $exit_code = $num_failed <= 254 ? $num_failed : 254;
2483                _my_exit($exit_code) && return;
2484            }
2485        }
2486        _my_exit(254) && return;
2487    }
2488
2489    # Exit if plan() was never called.  This is so "require Test::Simple"
2490    # doesn't puke.
2491    if( !$self->{Have_Plan} ) {
2492        return;
2493    }
2494
2495    # Don't do an ending if we bailed out.
2496    if( $self->{Bailed_Out} ) {
2497        $self->is_passing(0);
2498        return;
2499    }
2500    # Figure out if we passed or failed and print helpful messages.
2501    my $test_results = $self->{Test_Results};
2502    if(@$test_results) {
2503        # The plan?  We have no plan.
2504        if( $self->{No_Plan} ) {
2505            $self->_output_plan($self->{Curr_Test}) unless $self->no_header;
2506            $self->{Expected_Tests} = $self->{Curr_Test};
2507        }
2508
2509        # Auto-extended arrays and elements which aren't explicitly
2510        # filled in with a shared reference will puke under 5.8.0
2511        # ithreads.  So we have to fill them in by hand. :(
2512        my $empty_result = &share( {} );
2513        for my $idx ( 0 .. $self->{Expected_Tests} - 1 ) {
2514            $test_results->[$idx] = $empty_result
2515              unless defined $test_results->[$idx];
2516        }
2517
2518        my $num_failed = grep !$_->{'ok'}, @{$test_results}[ 0 .. $self->{Curr_Test} - 1 ];
2519
2520        my $num_extra = $self->{Curr_Test} - $self->{Expected_Tests};
2521
2522        if( $num_extra != 0 ) {
2523            my $s = $self->{Expected_Tests} == 1 ? '' : 's';
2524            $self->diag(<<"FAIL");
2525Looks like you planned $self->{Expected_Tests} test$s but ran $self->{Curr_Test}.
2526FAIL
2527            $self->is_passing(0);
2528        }
2529
2530        if($num_failed) {
2531            my $num_tests = $self->{Curr_Test};
2532            my $s = $num_failed == 1 ? '' : 's';
2533
2534            my $qualifier = $num_extra == 0 ? '' : ' run';
2535
2536            $self->diag(<<"FAIL");
2537Looks like you failed $num_failed test$s of $num_tests$qualifier.
2538FAIL
2539            $self->is_passing(0);
2540        }
2541
2542        if($real_exit_code) {
2543            $self->diag(<<"FAIL");
2544Looks like your test exited with $real_exit_code just after $self->{Curr_Test}.
2545FAIL
2546            $self->is_passing(0);
2547            _my_exit($real_exit_code) && return;
2548        }
2549
2550        my $exit_code;
2551        if($num_failed) {
2552            $exit_code = $num_failed <= 254 ? $num_failed : 254;
2553        }
2554        elsif( $num_extra != 0 ) {
2555            $exit_code = 255;
2556        }
2557        else {
2558            $exit_code = 0;
2559        }
2560
2561        _my_exit($exit_code) && return;
2562    }
2563    elsif( $self->{Skip_All} ) {
2564        _my_exit(0) && return;
2565    }
2566    elsif($real_exit_code) {
2567        $self->diag(<<"FAIL");
2568Looks like your test exited with $real_exit_code before it could output anything.
2569FAIL
2570        $self->is_passing(0);
2571        _my_exit($real_exit_code) && return;
2572    }
2573    else {
2574        $self->diag("No tests run!\n");
2575        $self->is_passing(0);
2576        _my_exit(255) && return;
2577    }
2578
2579    $self->is_passing(0);
2580    $self->_whoa( 1, "We fell off the end of _ending()" );
2581}
2582
2583END {
2584    $Test->_ending if defined $Test;
2585}
2586
2587=head1 EXIT CODES
2588
2589If all your tests passed, Test::Builder will exit with zero (which is
2590normal).  If anything failed it will exit with how many failed.  If
2591you run less (or more) tests than you planned, the missing (or extras)
2592will be considered failures.  If no tests were ever run Test::Builder
2593will throw a warning and exit with 255.  If the test died, even after
2594having successfully completed all its tests, it will still be
2595considered a failure and will exit with 255.
2596
2597So the exit codes are...
2598
2599    0                   all tests successful
2600    255                 test died or all passed but wrong # of tests run
2601    any other number    how many failed (including missing or extras)
2602
2603If you fail more than 254 tests, it will be reported as 254.
2604
2605=head1 THREADS
2606
2607In perl 5.8.1 and later, Test::Builder is thread-safe.  The test
2608number is shared amongst all threads.  This means if one thread sets
2609the test number using C<current_test()> they will all be effected.
2610
2611While versions earlier than 5.8.1 had threads they contain too many
2612bugs to support.
2613
2614Test::Builder is only thread-aware if threads.pm is loaded I<before>
2615Test::Builder.
2616
2617=head1 MEMORY
2618
2619An informative hash, accessible via C<<details()>>, is stored for each
2620test you perform.  So memory usage will scale linearly with each test
2621run. Although this is not a problem for most test suites, it can
2622become an issue if you do large (hundred thousands to million)
2623combinatorics tests in the same run.
2624
2625In such cases, you are advised to either split the test file into smaller
2626ones, or use a reverse approach, doing "normal" (code) compares and
2627triggering fail() should anything go unexpected.
2628
2629Future versions of Test::Builder will have a way to turn history off.
2630
2631
2632=head1 EXAMPLES
2633
2634CPAN can provide the best examples.  Test::Simple, Test::More,
2635Test::Exception and Test::Differences all use Test::Builder.
2636
2637=head1 SEE ALSO
2638
2639Test::Simple, Test::More, Test::Harness
2640
2641=head1 AUTHORS
2642
2643Original code by chromatic, maintained by Michael G Schwern
2644E<lt>schwern@pobox.comE<gt>
2645
2646=head1 COPYRIGHT
2647
2648Copyright 2002-2008 by chromatic E<lt>chromatic@wgz.orgE<gt> and
2649                       Michael G Schwern E<lt>schwern@pobox.comE<gt>.
2650
2651This program is free software; you can redistribute it and/or
2652modify it under the same terms as Perl itself.
2653
2654See F<http://www.perl.com/perl/misc/Artistic.html>
2655
2656=cut
2657
26581;
2659
2660