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