Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / Test / More.pm
CommitLineData
3fea05b9 1package Test::More;
2
3use 5.006;
4use strict;
5use warnings;
6
7#---- perlcritic exemptions. ----#
8
9# We use a lot of subroutine prototypes
10## no critic (Subroutines::ProhibitSubroutinePrototypes)
11
12# Can't use Carp because it might cause use_ok() to accidentally succeed
13# even though the module being used forgot to use Carp. Yes, this
14# actually happened.
15sub _carp {
16 my( $file, $line ) = ( caller(1) )[ 1, 2 ];
17 return warn @_, " at $file line $line\n";
18}
19
20our $VERSION = '0.94';
21$VERSION = eval $VERSION; ## no critic (BuiltinFunctions::ProhibitStringyEval)
22
23use Test::Builder::Module;
24our @ISA = qw(Test::Builder::Module);
25our @EXPORT = qw(ok use_ok require_ok
26 is isnt like unlike is_deeply
27 cmp_ok
28 skip todo todo_skip
29 pass fail
30 eq_array eq_hash eq_set
31 $TODO
32 plan
33 done_testing
34 can_ok isa_ok new_ok
35 diag note explain
36 subtest
37 BAIL_OUT
38);
39
40=head1 NAME
41
42Test::More - yet another framework for writing test scripts
43
44=head1 SYNOPSIS
45
46 use Test::More tests => 23;
47 # or
48 use Test::More skip_all => $reason;
49 # or
50 use Test::More; # see done_testing()
51
52 BEGIN { use_ok( 'Some::Module' ); }
53 require_ok( 'Some::Module' );
54
55 # Various ways to say "ok"
56 ok($got eq $expected, $test_name);
57
58 is ($got, $expected, $test_name);
59 isnt($got, $expected, $test_name);
60
61 # Rather than print STDERR "# here's what went wrong\n"
62 diag("here's what went wrong");
63
64 like ($got, qr/expected/, $test_name);
65 unlike($got, qr/expected/, $test_name);
66
67 cmp_ok($got, '==', $expected, $test_name);
68
69 is_deeply($got_complex_structure, $expected_complex_structure, $test_name);
70
71 SKIP: {
72 skip $why, $how_many unless $have_some_feature;
73
74 ok( foo(), $test_name );
75 is( foo(42), 23, $test_name );
76 };
77
78 TODO: {
79 local $TODO = $why;
80
81 ok( foo(), $test_name );
82 is( foo(42), 23, $test_name );
83 };
84
85 can_ok($module, @methods);
86 isa_ok($object, $class);
87
88 pass($test_name);
89 fail($test_name);
90
91 BAIL_OUT($why);
92
93 # UNIMPLEMENTED!!!
94 my @status = Test::More::status;
95
96
97=head1 DESCRIPTION
98
99B<STOP!> If you're just getting started writing tests, have a look at
100L<Test::Simple> first. This is a drop in replacement for Test::Simple
101which you can switch to once you get the hang of basic testing.
102
103The purpose of this module is to provide a wide range of testing
104utilities. Various ways to say "ok" with better diagnostics,
105facilities to skip tests, test future features and compare complicated
106data structures. While you can do almost anything with a simple
107C<ok()> function, it doesn't provide good diagnostic output.
108
109
110=head2 I love it when a plan comes together
111
112Before anything else, you need a testing plan. This basically declares
113how many tests your script is going to run to protect against premature
114failure.
115
116The preferred way to do this is to declare a plan when you C<use Test::More>.
117
118 use Test::More tests => 23;
119
120There are cases when you will not know beforehand how many tests your
121script is going to run. In this case, you can declare your tests at
122the end.
123
124 use Test::More;
125
126 ... run your tests ...
127
128 done_testing( $number_of_tests_run );
129
130Sometimes you really don't know how many tests were run, or it's too
131difficult to calculate. In which case you can leave off
132$number_of_tests_run.
133
134In some cases, you'll want to completely skip an entire testing script.
135
136 use Test::More skip_all => $skip_reason;
137
138Your script will declare a skip with the reason why you skipped and
139exit immediately with a zero (success). See L<Test::Harness> for
140details.
141
142If you want to control what functions Test::More will export, you
143have to use the 'import' option. For example, to import everything
144but 'fail', you'd do:
145
146 use Test::More tests => 23, import => ['!fail'];
147
148Alternatively, you can use the plan() function. Useful for when you
149have to calculate the number of tests.
150
151 use Test::More;
152 plan tests => keys %Stuff * 3;
153
154or for deciding between running the tests at all:
155
156 use Test::More;
157 if( $^O eq 'MacOS' ) {
158 plan skip_all => 'Test irrelevant on MacOS';
159 }
160 else {
161 plan tests => 42;
162 }
163
164=cut
165
166sub plan {
167 my $tb = Test::More->builder;
168
169 return $tb->plan(@_);
170}
171
172# This implements "use Test::More 'no_diag'" but the behavior is
173# deprecated.
174sub import_extra {
175 my $class = shift;
176 my $list = shift;
177
178 my @other = ();
179 my $idx = 0;
180 while( $idx <= $#{$list} ) {
181 my $item = $list->[$idx];
182
183 if( defined $item and $item eq 'no_diag' ) {
184 $class->builder->no_diag(1);
185 }
186 else {
187 push @other, $item;
188 }
189
190 $idx++;
191 }
192
193 @$list = @other;
194
195 return;
196}
197
198=over 4
199
200=item B<done_testing>
201
202 done_testing();
203 done_testing($number_of_tests);
204
205If you don't know how many tests you're going to run, you can issue
206the plan when you're done running tests.
207
208$number_of_tests is the same as plan(), it's the number of tests you
209expected to run. You can omit this, in which case the number of tests
210you ran doesn't matter, just the fact that your tests ran to
211conclusion.
212
213This is safer than and replaces the "no_plan" plan.
214
215=back
216
217=cut
218
219sub done_testing {
220 my $tb = Test::More->builder;
221 $tb->done_testing(@_);
222}
223
224=head2 Test names
225
226By convention, each test is assigned a number in order. This is
227largely done automatically for you. However, it's often very useful to
228assign a name to each test. Which would you rather see:
229
230 ok 4
231 not ok 5
232 ok 6
233
234or
235
236 ok 4 - basic multi-variable
237 not ok 5 - simple exponential
238 ok 6 - force == mass * acceleration
239
240The later gives you some idea of what failed. It also makes it easier
241to find the test in your script, simply search for "simple
242exponential".
243
244All test functions take a name argument. It's optional, but highly
245suggested that you use it.
246
247=head2 I'm ok, you're not ok.
248
249The basic purpose of this module is to print out either "ok #" or "not
250ok #" depending on if a given test succeeded or failed. Everything
251else is just gravy.
252
253All of the following print "ok" or "not ok" depending on if the test
254succeeded or failed. They all also return true or false,
255respectively.
256
257=over 4
258
259=item B<ok>
260
261 ok($got eq $expected, $test_name);
262
263This simply evaluates any expression (C<$got eq $expected> is just a
264simple example) and uses that to determine if the test succeeded or
265failed. A true expression passes, a false one fails. Very simple.
266
267For example:
268
269 ok( $exp{9} == 81, 'simple exponential' );
270 ok( Film->can('db_Main'), 'set_db()' );
271 ok( $p->tests == 4, 'saw tests' );
272 ok( !grep !defined $_, @items, 'items populated' );
273
274(Mnemonic: "This is ok.")
275
276$test_name is a very short description of the test that will be printed
277out. It makes it very easy to find a test in your script when it fails
278and gives others an idea of your intentions. $test_name is optional,
279but we B<very> strongly encourage its use.
280
281Should an ok() fail, it will produce some diagnostics:
282
283 not ok 18 - sufficient mucus
284 # Failed test 'sufficient mucus'
285 # in foo.t at line 42.
286
287This is the same as Test::Simple's ok() routine.
288
289=cut
290
291sub ok ($;$) {
292 my( $test, $name ) = @_;
293 my $tb = Test::More->builder;
294
295 return $tb->ok( $test, $name );
296}
297
298=item B<is>
299
300=item B<isnt>
301
302 is ( $got, $expected, $test_name );
303 isnt( $got, $expected, $test_name );
304
305Similar to ok(), is() and isnt() compare their two arguments
306with C<eq> and C<ne> respectively and use the result of that to
307determine if the test succeeded or failed. So these:
308
309 # Is the ultimate answer 42?
310 is( ultimate_answer(), 42, "Meaning of Life" );
311
312 # $foo isn't empty
313 isnt( $foo, '', "Got some foo" );
314
315are similar to these:
316
317 ok( ultimate_answer() eq 42, "Meaning of Life" );
318 ok( $foo ne '', "Got some foo" );
319
320(Mnemonic: "This is that." "This isn't that.")
321
322So why use these? They produce better diagnostics on failure. ok()
323cannot know what you are testing for (beyond the name), but is() and
324isnt() know what the test was and why it failed. For example this
325test:
326
327 my $foo = 'waffle'; my $bar = 'yarblokos';
328 is( $foo, $bar, 'Is foo the same as bar?' );
329
330Will produce something like this:
331
332 not ok 17 - Is foo the same as bar?
333 # Failed test 'Is foo the same as bar?'
334 # in foo.t at line 139.
335 # got: 'waffle'
336 # expected: 'yarblokos'
337
338So you can figure out what went wrong without rerunning the test.
339
340You are encouraged to use is() and isnt() over ok() where possible,
341however do not be tempted to use them to find out if something is
342true or false!
343
344 # XXX BAD!
345 is( exists $brooklyn{tree}, 1, 'A tree grows in Brooklyn' );
346
347This does not check if C<exists $brooklyn{tree}> is true, it checks if
348it returns 1. Very different. Similar caveats exist for false and 0.
349In these cases, use ok().
350
351 ok( exists $brooklyn{tree}, 'A tree grows in Brooklyn' );
352
353A simple call to isnt() usually does not provide a strong test but there
354are cases when you cannot say much more about a value than that it is
355different from some other value:
356
357 new_ok $obj, "Foo";
358
359 my $clone = $obj->clone;
360 isa_ok $obj, "Foo", "Foo->clone";
361
362 isnt $obj, $clone, "clone() produces a different object";
363
364For those grammatical pedants out there, there's an C<isn't()>
365function which is an alias of isnt().
366
367=cut
368
369sub is ($$;$) {
370 my $tb = Test::More->builder;
371
372 return $tb->is_eq(@_);
373}
374
375sub isnt ($$;$) {
376 my $tb = Test::More->builder;
377
378 return $tb->isnt_eq(@_);
379}
380
381*isn't = \&isnt;
382
383=item B<like>
384
385 like( $got, qr/expected/, $test_name );
386
387Similar to ok(), like() matches $got against the regex C<qr/expected/>.
388
389So this:
390
391 like($got, qr/expected/, 'this is like that');
392
393is similar to:
394
395 ok( $got =~ /expected/, 'this is like that');
396
397(Mnemonic "This is like that".)
398
399The second argument is a regular expression. It may be given as a
400regex reference (i.e. C<qr//>) or (for better compatibility with older
401perls) as a string that looks like a regex (alternative delimiters are
402currently not supported):
403
404 like( $got, '/expected/', 'this is like that' );
405
406Regex options may be placed on the end (C<'/expected/i'>).
407
408Its advantages over ok() are similar to that of is() and isnt(). Better
409diagnostics on failure.
410
411=cut
412
413sub like ($$;$) {
414 my $tb = Test::More->builder;
415
416 return $tb->like(@_);
417}
418
419=item B<unlike>
420
421 unlike( $got, qr/expected/, $test_name );
422
423Works exactly as like(), only it checks if $got B<does not> match the
424given pattern.
425
426=cut
427
428sub unlike ($$;$) {
429 my $tb = Test::More->builder;
430
431 return $tb->unlike(@_);
432}
433
434=item B<cmp_ok>
435
436 cmp_ok( $got, $op, $expected, $test_name );
437
438Halfway between ok() and is() lies cmp_ok(). This allows you to
439compare two arguments using any binary perl operator.
440
441 # ok( $got eq $expected );
442 cmp_ok( $got, 'eq', $expected, 'this eq that' );
443
444 # ok( $got == $expected );
445 cmp_ok( $got, '==', $expected, 'this == that' );
446
447 # ok( $got && $expected );
448 cmp_ok( $got, '&&', $expected, 'this && that' );
449 ...etc...
450
451Its advantage over ok() is when the test fails you'll know what $got
452and $expected were:
453
454 not ok 1
455 # Failed test in foo.t at line 12.
456 # '23'
457 # &&
458 # undef
459
460It's also useful in those cases where you are comparing numbers and
461is()'s use of C<eq> will interfere:
462
463 cmp_ok( $big_hairy_number, '==', $another_big_hairy_number );
464
465It's especially useful when comparing greater-than or smaller-than
466relation between values:
467
468 cmp_ok( $some_value, '<=', $upper_limit );
469
470
471=cut
472
473sub cmp_ok($$$;$) {
474 my $tb = Test::More->builder;
475
476 return $tb->cmp_ok(@_);
477}
478
479=item B<can_ok>
480
481 can_ok($module, @methods);
482 can_ok($object, @methods);
483
484Checks to make sure the $module or $object can do these @methods
485(works with functions, too).
486
487 can_ok('Foo', qw(this that whatever));
488
489is almost exactly like saying:
490
491 ok( Foo->can('this') &&
492 Foo->can('that') &&
493 Foo->can('whatever')
494 );
495
496only without all the typing and with a better interface. Handy for
497quickly testing an interface.
498
499No matter how many @methods you check, a single can_ok() call counts
500as one test. If you desire otherwise, use:
501
502 foreach my $meth (@methods) {
503 can_ok('Foo', $meth);
504 }
505
506=cut
507
508sub can_ok ($@) {
509 my( $proto, @methods ) = @_;
510 my $class = ref $proto || $proto;
511 my $tb = Test::More->builder;
512
513 unless($class) {
514 my $ok = $tb->ok( 0, "->can(...)" );
515 $tb->diag(' can_ok() called with empty class or reference');
516 return $ok;
517 }
518
519 unless(@methods) {
520 my $ok = $tb->ok( 0, "$class->can(...)" );
521 $tb->diag(' can_ok() called with no methods');
522 return $ok;
523 }
524
525 my @nok = ();
526 foreach my $method (@methods) {
527 $tb->_try( sub { $proto->can($method) } ) or push @nok, $method;
528 }
529
530 my $name = (@methods == 1) ? "$class->can('$methods[0]')" :
531 "$class->can(...)" ;
532
533 my $ok = $tb->ok( !@nok, $name );
534
535 $tb->diag( map " $class->can('$_') failed\n", @nok );
536
537 return $ok;
538}
539
540=item B<isa_ok>
541
542 isa_ok($object, $class, $object_name);
543 isa_ok($subclass, $class, $object_name);
544 isa_ok($ref, $type, $ref_name);
545
546Checks to see if the given C<< $object->isa($class) >>. Also checks to make
547sure the object was defined in the first place. Handy for this sort
548of thing:
549
550 my $obj = Some::Module->new;
551 isa_ok( $obj, 'Some::Module' );
552
553where you'd otherwise have to write
554
555 my $obj = Some::Module->new;
556 ok( defined $obj && $obj->isa('Some::Module') );
557
558to safeguard against your test script blowing up.
559
560You can also test a class, to make sure that it has the right ancestor:
561
562 isa_ok( 'Vole', 'Rodent' );
563
564It works on references, too:
565
566 isa_ok( $array_ref, 'ARRAY' );
567
568The diagnostics of this test normally just refer to 'the object'. If
569you'd like them to be more specific, you can supply an $object_name
570(for example 'Test customer').
571
572=cut
573
574sub isa_ok ($$;$) {
575 my( $object, $class, $obj_name ) = @_;
576 my $tb = Test::More->builder;
577
578 my $diag;
579
580 if( !defined $object ) {
581 $obj_name = 'The thing' unless defined $obj_name;
582 $diag = "$obj_name isn't defined";
583 }
584 else {
585 my $whatami = ref $object ? 'object' : 'class';
586 # We can't use UNIVERSAL::isa because we want to honor isa() overrides
587 my( $rslt, $error ) = $tb->_try( sub { $object->isa($class) } );
588 if($error) {
589 if( $error =~ /^Can't call method "isa" on unblessed reference/ ) {
590 # Its an unblessed reference
591 $obj_name = 'The reference' unless defined $obj_name;
592 if( !UNIVERSAL::isa( $object, $class ) ) {
593 my $ref = ref $object;
594 $diag = "$obj_name isn't a '$class' it's a '$ref'";
595 }
596 }
597 elsif( $error =~ /Can't call method "isa" without a package/ ) {
598 # It's something that can't even be a class
599 $obj_name = 'The thing' unless defined $obj_name;
600 $diag = "$obj_name isn't a class or reference";
601 }
602 else {
603 die <<WHOA;
604WHOA! I tried to call ->isa on your $whatami and got some weird error.
605Here's the error.
606$error
607WHOA
608 }
609 }
610 else {
611 $obj_name = "The $whatami" unless defined $obj_name;
612 if( !$rslt ) {
613 my $ref = ref $object;
614 $diag = "$obj_name isn't a '$class' it's a '$ref'";
615 }
616 }
617 }
618
619 my $name = "$obj_name isa $class";
620 my $ok;
621 if($diag) {
622 $ok = $tb->ok( 0, $name );
623 $tb->diag(" $diag\n");
624 }
625 else {
626 $ok = $tb->ok( 1, $name );
627 }
628
629 return $ok;
630}
631
632=item B<new_ok>
633
634 my $obj = new_ok( $class );
635 my $obj = new_ok( $class => \@args );
636 my $obj = new_ok( $class => \@args, $object_name );
637
638A convenience function which combines creating an object and calling
639isa_ok() on that object.
640
641It is basically equivalent to:
642
643 my $obj = $class->new(@args);
644 isa_ok $obj, $class, $object_name;
645
646If @args is not given, an empty list will be used.
647
648This function only works on new() and it assumes new() will return
649just a single object which isa C<$class>.
650
651=cut
652
653sub new_ok {
654 my $tb = Test::More->builder;
655 $tb->croak("new_ok() must be given at least a class") unless @_;
656
657 my( $class, $args, $object_name ) = @_;
658
659 $args ||= [];
660 $object_name = "The object" unless defined $object_name;
661
662 my $obj;
663 my( $success, $error ) = $tb->_try( sub { $obj = $class->new(@$args); 1 } );
664 if($success) {
665 local $Test::Builder::Level = $Test::Builder::Level + 1;
666 isa_ok $obj, $class, $object_name;
667 }
668 else {
669 $tb->ok( 0, "new() died" );
670 $tb->diag(" Error was: $error");
671 }
672
673 return $obj;
674}
675
676=item B<subtest>
677
678 subtest $name => \&code;
679
680subtest() runs the &code as its own little test with its own plan and
681its own result. The main test counts this as a single test using the
682result of the whole subtest to determine if its ok or not ok.
683
684For example...
685
686 use Test::More tests => 3;
687
688 pass("First test");
689
690 subtest 'An example subtest' => sub {
691 plan tests => 2;
692
693 pass("This is a subtest");
694 pass("So is this");
695 };
696
697 pass("Third test");
698
699This would produce.
700
701 1..3
702 ok 1 - First test
703 1..2
704 ok 1 - This is a subtest
705 ok 2 - So is this
706 ok 2 - An example subtest
707 ok 3 - Third test
708
709A subtest may call "skip_all". No tests will be run, but the subtest is
710considered a skip.
711
712 subtest 'skippy' => sub {
713 plan skip_all => 'cuz I said so';
714 pass('this test will never be run');
715 };
716
717Returns true if the subtest passed, false otherwise.
718
719=cut
720
721sub subtest($&) {
722 my ($name, $subtests) = @_;
723
724 my $tb = Test::More->builder;
725 return $tb->subtest(@_);
726}
727
728=item B<pass>
729
730=item B<fail>
731
732 pass($test_name);
733 fail($test_name);
734
735Sometimes you just want to say that the tests have passed. Usually
736the case is you've got some complicated condition that is difficult to
737wedge into an ok(). In this case, you can simply use pass() (to
738declare the test ok) or fail (for not ok). They are synonyms for
739ok(1) and ok(0).
740
741Use these very, very, very sparingly.
742
743=cut
744
745sub pass (;$) {
746 my $tb = Test::More->builder;
747
748 return $tb->ok( 1, @_ );
749}
750
751sub fail (;$) {
752 my $tb = Test::More->builder;
753
754 return $tb->ok( 0, @_ );
755}
756
757=back
758
759
760=head2 Module tests
761
762You usually want to test if the module you're testing loads ok, rather
763than just vomiting if its load fails. For such purposes we have
764C<use_ok> and C<require_ok>.
765
766=over 4
767
768=item B<use_ok>
769
770 BEGIN { use_ok($module); }
771 BEGIN { use_ok($module, @imports); }
772
773These simply use the given $module and test to make sure the load
774happened ok. It's recommended that you run use_ok() inside a BEGIN
775block so its functions are exported at compile-time and prototypes are
776properly honored.
777
778If @imports are given, they are passed through to the use. So this:
779
780 BEGIN { use_ok('Some::Module', qw(foo bar)) }
781
782is like doing this:
783
784 use Some::Module qw(foo bar);
785
786Version numbers can be checked like so:
787
788 # Just like "use Some::Module 1.02"
789 BEGIN { use_ok('Some::Module', 1.02) }
790
791Don't try to do this:
792
793 BEGIN {
794 use_ok('Some::Module');
795
796 ...some code that depends on the use...
797 ...happening at compile time...
798 }
799
800because the notion of "compile-time" is relative. Instead, you want:
801
802 BEGIN { use_ok('Some::Module') }
803 BEGIN { ...some code that depends on the use... }
804
805
806=cut
807
808sub use_ok ($;@) {
809 my( $module, @imports ) = @_;
810 @imports = () unless @imports;
811 my $tb = Test::More->builder;
812
813 my( $pack, $filename, $line ) = caller;
814
815 my $code;
816 if( @imports == 1 and $imports[0] =~ /^\d+(?:\.\d+)?$/ ) {
817 # probably a version check. Perl needs to see the bare number
818 # for it to work with non-Exporter based modules.
819 $code = <<USE;
820package $pack;
821use $module $imports[0];
8221;
823USE
824 }
825 else {
826 $code = <<USE;
827package $pack;
828use $module \@{\$args[0]};
8291;
830USE
831 }
832
833 my( $eval_result, $eval_error ) = _eval( $code, \@imports );
834 my $ok = $tb->ok( $eval_result, "use $module;" );
835
836 unless($ok) {
837 chomp $eval_error;
838 $@ =~ s{^BEGIN failed--compilation aborted at .*$}
839 {BEGIN failed--compilation aborted at $filename line $line.}m;
840 $tb->diag(<<DIAGNOSTIC);
841 Tried to use '$module'.
842 Error: $eval_error
843DIAGNOSTIC
844
845 }
846
847 return $ok;
848}
849
850sub _eval {
851 my( $code, @args ) = @_;
852
853 # Work around oddities surrounding resetting of $@ by immediately
854 # storing it.
855 my( $sigdie, $eval_result, $eval_error );
856 {
857 local( $@, $!, $SIG{__DIE__} ); # isolate eval
858 $eval_result = eval $code; ## no critic (BuiltinFunctions::ProhibitStringyEval)
859 $eval_error = $@;
860 $sigdie = $SIG{__DIE__} || undef;
861 }
862 # make sure that $code got a chance to set $SIG{__DIE__}
863 $SIG{__DIE__} = $sigdie if defined $sigdie;
864
865 return( $eval_result, $eval_error );
866}
867
868=item B<require_ok>
869
870 require_ok($module);
871 require_ok($file);
872
873Like use_ok(), except it requires the $module or $file.
874
875=cut
876
877sub require_ok ($) {
878 my($module) = shift;
879 my $tb = Test::More->builder;
880
881 my $pack = caller;
882
883 # Try to deterine if we've been given a module name or file.
884 # Module names must be barewords, files not.
885 $module = qq['$module'] unless _is_module_name($module);
886
887 my $code = <<REQUIRE;
888package $pack;
889require $module;
8901;
891REQUIRE
892
893 my( $eval_result, $eval_error ) = _eval($code);
894 my $ok = $tb->ok( $eval_result, "require $module;" );
895
896 unless($ok) {
897 chomp $eval_error;
898 $tb->diag(<<DIAGNOSTIC);
899 Tried to require '$module'.
900 Error: $eval_error
901DIAGNOSTIC
902
903 }
904
905 return $ok;
906}
907
908sub _is_module_name {
909 my $module = shift;
910
911 # Module names start with a letter.
912 # End with an alphanumeric.
913 # The rest is an alphanumeric or ::
914 $module =~ s/\b::\b//g;
915
916 return $module =~ /^[a-zA-Z]\w*$/ ? 1 : 0;
917}
918
919=back
920
921
922=head2 Complex data structures
923
924Not everything is a simple eq check or regex. There are times you
925need to see if two data structures are equivalent. For these
926instances Test::More provides a handful of useful functions.
927
928B<NOTE> I'm not quite sure what will happen with filehandles.
929
930=over 4
931
932=item B<is_deeply>
933
934 is_deeply( $got, $expected, $test_name );
935
936Similar to is(), except that if $got and $expected are references, it
937does a deep comparison walking each data structure to see if they are
938equivalent. If the two structures are different, it will display the
939place where they start differing.
940
941is_deeply() compares the dereferenced values of references, the
942references themselves (except for their type) are ignored. This means
943aspects such as blessing and ties are not considered "different".
944
945is_deeply() currently has very limited handling of function reference
946and globs. It merely checks if they have the same referent. This may
947improve in the future.
948
949L<Test::Differences> and L<Test::Deep> provide more in-depth functionality
950along these lines.
951
952=cut
953
954our( @Data_Stack, %Refs_Seen );
955my $DNE = bless [], 'Does::Not::Exist';
956
957sub _dne {
958 return ref $_[0] eq ref $DNE;
959}
960
961## no critic (Subroutines::RequireArgUnpacking)
962sub is_deeply {
963 my $tb = Test::More->builder;
964
965 unless( @_ == 2 or @_ == 3 ) {
966 my $msg = <<'WARNING';
967is_deeply() takes two or three args, you gave %d.
968This usually means you passed an array or hash instead
969of a reference to it
970WARNING
971 chop $msg; # clip off newline so carp() will put in line/file
972
973 _carp sprintf $msg, scalar @_;
974
975 return $tb->ok(0);
976 }
977
978 my( $got, $expected, $name ) = @_;
979
980 $tb->_unoverload_str( \$expected, \$got );
981
982 my $ok;
983 if( !ref $got and !ref $expected ) { # neither is a reference
984 $ok = $tb->is_eq( $got, $expected, $name );
985 }
986 elsif( !ref $got xor !ref $expected ) { # one's a reference, one isn't
987 $ok = $tb->ok( 0, $name );
988 $tb->diag( _format_stack({ vals => [ $got, $expected ] }) );
989 }
990 else { # both references
991 local @Data_Stack = ();
992 if( _deep_check( $got, $expected ) ) {
993 $ok = $tb->ok( 1, $name );
994 }
995 else {
996 $ok = $tb->ok( 0, $name );
997 $tb->diag( _format_stack(@Data_Stack) );
998 }
999 }
1000
1001 return $ok;
1002}
1003
1004sub _format_stack {
1005 my(@Stack) = @_;
1006
1007 my $var = '$FOO';
1008 my $did_arrow = 0;
1009 foreach my $entry (@Stack) {
1010 my $type = $entry->{type} || '';
1011 my $idx = $entry->{'idx'};
1012 if( $type eq 'HASH' ) {
1013 $var .= "->" unless $did_arrow++;
1014 $var .= "{$idx}";
1015 }
1016 elsif( $type eq 'ARRAY' ) {
1017 $var .= "->" unless $did_arrow++;
1018 $var .= "[$idx]";
1019 }
1020 elsif( $type eq 'REF' ) {
1021 $var = "\${$var}";
1022 }
1023 }
1024
1025 my @vals = @{ $Stack[-1]{vals} }[ 0, 1 ];
1026 my @vars = ();
1027 ( $vars[0] = $var ) =~ s/\$FOO/ \$got/;
1028 ( $vars[1] = $var ) =~ s/\$FOO/\$expected/;
1029
1030 my $out = "Structures begin differing at:\n";
1031 foreach my $idx ( 0 .. $#vals ) {
1032 my $val = $vals[$idx];
1033 $vals[$idx]
1034 = !defined $val ? 'undef'
1035 : _dne($val) ? "Does not exist"
1036 : ref $val ? "$val"
1037 : "'$val'";
1038 }
1039
1040 $out .= "$vars[0] = $vals[0]\n";
1041 $out .= "$vars[1] = $vals[1]\n";
1042
1043 $out =~ s/^/ /msg;
1044 return $out;
1045}
1046
1047sub _type {
1048 my $thing = shift;
1049
1050 return '' if !ref $thing;
1051
1052 for my $type (qw(ARRAY HASH REF SCALAR GLOB CODE Regexp)) {
1053 return $type if UNIVERSAL::isa( $thing, $type );
1054 }
1055
1056 return '';
1057}
1058
1059=back
1060
1061
1062=head2 Diagnostics
1063
1064If you pick the right test function, you'll usually get a good idea of
1065what went wrong when it failed. But sometimes it doesn't work out
1066that way. So here we have ways for you to write your own diagnostic
1067messages which are safer than just C<print STDERR>.
1068
1069=over 4
1070
1071=item B<diag>
1072
1073 diag(@diagnostic_message);
1074
1075Prints a diagnostic message which is guaranteed not to interfere with
1076test output. Like C<print> @diagnostic_message is simply concatenated
1077together.
1078
1079Returns false, so as to preserve failure.
1080
1081Handy for this sort of thing:
1082
1083 ok( grep(/foo/, @users), "There's a foo user" ) or
1084 diag("Since there's no foo, check that /etc/bar is set up right");
1085
1086which would produce:
1087
1088 not ok 42 - There's a foo user
1089 # Failed test 'There's a foo user'
1090 # in foo.t at line 52.
1091 # Since there's no foo, check that /etc/bar is set up right.
1092
1093You might remember C<ok() or diag()> with the mnemonic C<open() or
1094die()>.
1095
1096B<NOTE> The exact formatting of the diagnostic output is still
1097changing, but it is guaranteed that whatever you throw at it it won't
1098interfere with the test.
1099
1100=item B<note>
1101
1102 note(@diagnostic_message);
1103
1104Like diag(), except the message will not be seen when the test is run
1105in a harness. It will only be visible in the verbose TAP stream.
1106
1107Handy for putting in notes which might be useful for debugging, but
1108don't indicate a problem.
1109
1110 note("Tempfile is $tempfile");
1111
1112=cut
1113
1114sub diag {
1115 return Test::More->builder->diag(@_);
1116}
1117
1118sub note {
1119 return Test::More->builder->note(@_);
1120}
1121
1122=item B<explain>
1123
1124 my @dump = explain @diagnostic_message;
1125
1126Will dump the contents of any references in a human readable format.
1127Usually you want to pass this into C<note> or C<diag>.
1128
1129Handy for things like...
1130
1131 is_deeply($have, $want) || diag explain $have;
1132
1133or
1134
1135 note explain \%args;
1136 Some::Class->method(%args);
1137
1138=cut
1139
1140sub explain {
1141 return Test::More->builder->explain(@_);
1142}
1143
1144=back
1145
1146
1147=head2 Conditional tests
1148
1149Sometimes running a test under certain conditions will cause the
1150test script to die. A certain function or method isn't implemented
1151(such as fork() on MacOS), some resource isn't available (like a
1152net connection) or a module isn't available. In these cases it's
1153necessary to skip tests, or declare that they are supposed to fail
1154but will work in the future (a todo test).
1155
1156For more details on the mechanics of skip and todo tests see
1157L<Test::Harness>.
1158
1159The way Test::More handles this is with a named block. Basically, a
1160block of tests which can be skipped over or made todo. It's best if I
1161just show you...
1162
1163=over 4
1164
1165=item B<SKIP: BLOCK>
1166
1167 SKIP: {
1168 skip $why, $how_many if $condition;
1169
1170 ...normal testing code goes here...
1171 }
1172
1173This declares a block of tests that might be skipped, $how_many tests
1174there are, $why and under what $condition to skip them. An example is
1175the easiest way to illustrate:
1176
1177 SKIP: {
1178 eval { require HTML::Lint };
1179
1180 skip "HTML::Lint not installed", 2 if $@;
1181
1182 my $lint = new HTML::Lint;
1183 isa_ok( $lint, "HTML::Lint" );
1184
1185 $lint->parse( $html );
1186 is( $lint->errors, 0, "No errors found in HTML" );
1187 }
1188
1189If the user does not have HTML::Lint installed, the whole block of
1190code I<won't be run at all>. Test::More will output special ok's
1191which Test::Harness interprets as skipped, but passing, tests.
1192
1193It's important that $how_many accurately reflects the number of tests
1194in the SKIP block so the # of tests run will match up with your plan.
1195If your plan is C<no_plan> $how_many is optional and will default to 1.
1196
1197It's perfectly safe to nest SKIP blocks. Each SKIP block must have
1198the label C<SKIP>, or Test::More can't work its magic.
1199
1200You don't skip tests which are failing because there's a bug in your
1201program, or for which you don't yet have code written. For that you
1202use TODO. Read on.
1203
1204=cut
1205
1206## no critic (Subroutines::RequireFinalReturn)
1207sub skip {
1208 my( $why, $how_many ) = @_;
1209 my $tb = Test::More->builder;
1210
1211 unless( defined $how_many ) {
1212 # $how_many can only be avoided when no_plan is in use.
1213 _carp "skip() needs to know \$how_many tests are in the block"
1214 unless $tb->has_plan eq 'no_plan';
1215 $how_many = 1;
1216 }
1217
1218 if( defined $how_many and $how_many =~ /\D/ ) {
1219 _carp
1220 "skip() was passed a non-numeric number of tests. Did you get the arguments backwards?";
1221 $how_many = 1;
1222 }
1223
1224 for( 1 .. $how_many ) {
1225 $tb->skip($why);
1226 }
1227
1228 no warnings 'exiting';
1229 last SKIP;
1230}
1231
1232=item B<TODO: BLOCK>
1233
1234 TODO: {
1235 local $TODO = $why if $condition;
1236
1237 ...normal testing code goes here...
1238 }
1239
1240Declares a block of tests you expect to fail and $why. Perhaps it's
1241because you haven't fixed a bug or haven't finished a new feature:
1242
1243 TODO: {
1244 local $TODO = "URI::Geller not finished";
1245
1246 my $card = "Eight of clubs";
1247 is( URI::Geller->your_card, $card, 'Is THIS your card?' );
1248
1249 my $spoon;
1250 URI::Geller->bend_spoon;
1251 is( $spoon, 'bent', "Spoon bending, that's original" );
1252 }
1253
1254With a todo block, the tests inside are expected to fail. Test::More
1255will run the tests normally, but print out special flags indicating
1256they are "todo". Test::Harness will interpret failures as being ok.
1257Should anything succeed, it will report it as an unexpected success.
1258You then know the thing you had todo is done and can remove the
1259TODO flag.
1260
1261The nice part about todo tests, as opposed to simply commenting out a
1262block of tests, is it's like having a programmatic todo list. You know
1263how much work is left to be done, you're aware of what bugs there are,
1264and you'll know immediately when they're fixed.
1265
1266Once a todo test starts succeeding, simply move it outside the block.
1267When the block is empty, delete it.
1268
1269
1270=item B<todo_skip>
1271
1272 TODO: {
1273 todo_skip $why, $how_many if $condition;
1274
1275 ...normal testing code...
1276 }
1277
1278With todo tests, it's best to have the tests actually run. That way
1279you'll know when they start passing. Sometimes this isn't possible.
1280Often a failing test will cause the whole program to die or hang, even
1281inside an C<eval BLOCK> with and using C<alarm>. In these extreme
1282cases you have no choice but to skip over the broken tests entirely.
1283
1284The syntax and behavior is similar to a C<SKIP: BLOCK> except the
1285tests will be marked as failing but todo. Test::Harness will
1286interpret them as passing.
1287
1288=cut
1289
1290sub todo_skip {
1291 my( $why, $how_many ) = @_;
1292 my $tb = Test::More->builder;
1293
1294 unless( defined $how_many ) {
1295 # $how_many can only be avoided when no_plan is in use.
1296 _carp "todo_skip() needs to know \$how_many tests are in the block"
1297 unless $tb->has_plan eq 'no_plan';
1298 $how_many = 1;
1299 }
1300
1301 for( 1 .. $how_many ) {
1302 $tb->todo_skip($why);
1303 }
1304
1305 no warnings 'exiting';
1306 last TODO;
1307}
1308
1309=item When do I use SKIP vs. TODO?
1310
1311B<If it's something the user might not be able to do>, use SKIP.
1312This includes optional modules that aren't installed, running under
1313an OS that doesn't have some feature (like fork() or symlinks), or maybe
1314you need an Internet connection and one isn't available.
1315
1316B<If it's something the programmer hasn't done yet>, use TODO. This
1317is for any code you haven't written yet, or bugs you have yet to fix,
1318but want to put tests in your testing script (always a good idea).
1319
1320
1321=back
1322
1323
1324=head2 Test control
1325
1326=over 4
1327
1328=item B<BAIL_OUT>
1329
1330 BAIL_OUT($reason);
1331
1332Indicates to the harness that things are going so badly all testing
1333should terminate. This includes the running any additional test scripts.
1334
1335This is typically used when testing cannot continue such as a critical
1336module failing to compile or a necessary external utility not being
1337available such as a database connection failing.
1338
1339The test will exit with 255.
1340
1341For even better control look at L<Test::Most>.
1342
1343=cut
1344
1345sub BAIL_OUT {
1346 my $reason = shift;
1347 my $tb = Test::More->builder;
1348
1349 $tb->BAIL_OUT($reason);
1350}
1351
1352=back
1353
1354
1355=head2 Discouraged comparison functions
1356
1357The use of the following functions is discouraged as they are not
1358actually testing functions and produce no diagnostics to help figure
1359out what went wrong. They were written before is_deeply() existed
1360because I couldn't figure out how to display a useful diff of two
1361arbitrary data structures.
1362
1363These functions are usually used inside an ok().
1364
1365 ok( eq_array(\@got, \@expected) );
1366
1367C<is_deeply()> can do that better and with diagnostics.
1368
1369 is_deeply( \@got, \@expected );
1370
1371They may be deprecated in future versions.
1372
1373=over 4
1374
1375=item B<eq_array>
1376
1377 my $is_eq = eq_array(\@got, \@expected);
1378
1379Checks if two arrays are equivalent. This is a deep check, so
1380multi-level structures are handled correctly.
1381
1382=cut
1383
1384#'#
1385sub eq_array {
1386 local @Data_Stack = ();
1387 _deep_check(@_);
1388}
1389
1390sub _eq_array {
1391 my( $a1, $a2 ) = @_;
1392
1393 if( grep _type($_) ne 'ARRAY', $a1, $a2 ) {
1394 warn "eq_array passed a non-array ref";
1395 return 0;
1396 }
1397
1398 return 1 if $a1 eq $a2;
1399
1400 my $ok = 1;
1401 my $max = $#$a1 > $#$a2 ? $#$a1 : $#$a2;
1402 for( 0 .. $max ) {
1403 my $e1 = $_ > $#$a1 ? $DNE : $a1->[$_];
1404 my $e2 = $_ > $#$a2 ? $DNE : $a2->[$_];
1405
1406 push @Data_Stack, { type => 'ARRAY', idx => $_, vals => [ $e1, $e2 ] };
1407 $ok = _deep_check( $e1, $e2 );
1408 pop @Data_Stack if $ok;
1409
1410 last unless $ok;
1411 }
1412
1413 return $ok;
1414}
1415
1416sub _deep_check {
1417 my( $e1, $e2 ) = @_;
1418 my $tb = Test::More->builder;
1419
1420 my $ok = 0;
1421
1422 # Effectively turn %Refs_Seen into a stack. This avoids picking up
1423 # the same referenced used twice (such as [\$a, \$a]) to be considered
1424 # circular.
1425 local %Refs_Seen = %Refs_Seen;
1426
1427 {
1428 # Quiet uninitialized value warnings when comparing undefs.
1429 no warnings 'uninitialized';
1430
1431 $tb->_unoverload_str( \$e1, \$e2 );
1432
1433 # Either they're both references or both not.
1434 my $same_ref = !( !ref $e1 xor !ref $e2 );
1435 my $not_ref = ( !ref $e1 and !ref $e2 );
1436
1437 if( defined $e1 xor defined $e2 ) {
1438 $ok = 0;
1439 }
1440 elsif( !defined $e1 and !defined $e2 ) {
1441 # Shortcut if they're both defined.
1442 $ok = 1;
1443 }
1444 elsif( _dne($e1) xor _dne($e2) ) {
1445 $ok = 0;
1446 }
1447 elsif( $same_ref and( $e1 eq $e2 ) ) {
1448 $ok = 1;
1449 }
1450 elsif($not_ref) {
1451 push @Data_Stack, { type => '', vals => [ $e1, $e2 ] };
1452 $ok = 0;
1453 }
1454 else {
1455 if( $Refs_Seen{$e1} ) {
1456 return $Refs_Seen{$e1} eq $e2;
1457 }
1458 else {
1459 $Refs_Seen{$e1} = "$e2";
1460 }
1461
1462 my $type = _type($e1);
1463 $type = 'DIFFERENT' unless _type($e2) eq $type;
1464
1465 if( $type eq 'DIFFERENT' ) {
1466 push @Data_Stack, { type => $type, vals => [ $e1, $e2 ] };
1467 $ok = 0;
1468 }
1469 elsif( $type eq 'ARRAY' ) {
1470 $ok = _eq_array( $e1, $e2 );
1471 }
1472 elsif( $type eq 'HASH' ) {
1473 $ok = _eq_hash( $e1, $e2 );
1474 }
1475 elsif( $type eq 'REF' ) {
1476 push @Data_Stack, { type => $type, vals => [ $e1, $e2 ] };
1477 $ok = _deep_check( $$e1, $$e2 );
1478 pop @Data_Stack if $ok;
1479 }
1480 elsif( $type eq 'SCALAR' ) {
1481 push @Data_Stack, { type => 'REF', vals => [ $e1, $e2 ] };
1482 $ok = _deep_check( $$e1, $$e2 );
1483 pop @Data_Stack if $ok;
1484 }
1485 elsif($type) {
1486 push @Data_Stack, { type => $type, vals => [ $e1, $e2 ] };
1487 $ok = 0;
1488 }
1489 else {
1490 _whoa( 1, "No type in _deep_check" );
1491 }
1492 }
1493 }
1494
1495 return $ok;
1496}
1497
1498sub _whoa {
1499 my( $check, $desc ) = @_;
1500 if($check) {
1501 die <<"WHOA";
1502WHOA! $desc
1503This should never happen! Please contact the author immediately!
1504WHOA
1505 }
1506}
1507
1508=item B<eq_hash>
1509
1510 my $is_eq = eq_hash(\%got, \%expected);
1511
1512Determines if the two hashes contain the same keys and values. This
1513is a deep check.
1514
1515=cut
1516
1517sub eq_hash {
1518 local @Data_Stack = ();
1519 return _deep_check(@_);
1520}
1521
1522sub _eq_hash {
1523 my( $a1, $a2 ) = @_;
1524
1525 if( grep _type($_) ne 'HASH', $a1, $a2 ) {
1526 warn "eq_hash passed a non-hash ref";
1527 return 0;
1528 }
1529
1530 return 1 if $a1 eq $a2;
1531
1532 my $ok = 1;
1533 my $bigger = keys %$a1 > keys %$a2 ? $a1 : $a2;
1534 foreach my $k ( keys %$bigger ) {
1535 my $e1 = exists $a1->{$k} ? $a1->{$k} : $DNE;
1536 my $e2 = exists $a2->{$k} ? $a2->{$k} : $DNE;
1537
1538 push @Data_Stack, { type => 'HASH', idx => $k, vals => [ $e1, $e2 ] };
1539 $ok = _deep_check( $e1, $e2 );
1540 pop @Data_Stack if $ok;
1541
1542 last unless $ok;
1543 }
1544
1545 return $ok;
1546}
1547
1548=item B<eq_set>
1549
1550 my $is_eq = eq_set(\@got, \@expected);
1551
1552Similar to eq_array(), except the order of the elements is B<not>
1553important. This is a deep check, but the irrelevancy of order only
1554applies to the top level.
1555
1556 ok( eq_set(\@got, \@expected) );
1557
1558Is better written:
1559
1560 is_deeply( [sort @got], [sort @expected] );
1561
1562B<NOTE> By historical accident, this is not a true set comparison.
1563While the order of elements does not matter, duplicate elements do.
1564
1565B<NOTE> eq_set() does not know how to deal with references at the top
1566level. The following is an example of a comparison which might not work:
1567
1568 eq_set([\1, \2], [\2, \1]);
1569
1570L<Test::Deep> contains much better set comparison functions.
1571
1572=cut
1573
1574sub eq_set {
1575 my( $a1, $a2 ) = @_;
1576 return 0 unless @$a1 == @$a2;
1577
1578 no warnings 'uninitialized';
1579
1580 # It really doesn't matter how we sort them, as long as both arrays are
1581 # sorted with the same algorithm.
1582 #
1583 # Ensure that references are not accidentally treated the same as a
1584 # string containing the reference.
1585 #
1586 # Have to inline the sort routine due to a threading/sort bug.
1587 # See [rt.cpan.org 6782]
1588 #
1589 # I don't know how references would be sorted so we just don't sort
1590 # them. This means eq_set doesn't really work with refs.
1591 return eq_array(
1592 [ grep( ref, @$a1 ), sort( grep( !ref, @$a1 ) ) ],
1593 [ grep( ref, @$a2 ), sort( grep( !ref, @$a2 ) ) ],
1594 );
1595}
1596
1597=back
1598
1599
1600=head2 Extending and Embedding Test::More
1601
1602Sometimes the Test::More interface isn't quite enough. Fortunately,
1603Test::More is built on top of Test::Builder which provides a single,
1604unified backend for any test library to use. This means two test
1605libraries which both use Test::Builder B<can be used together in the
1606same program>.
1607
1608If you simply want to do a little tweaking of how the tests behave,
1609you can access the underlying Test::Builder object like so:
1610
1611=over 4
1612
1613=item B<builder>
1614
1615 my $test_builder = Test::More->builder;
1616
1617Returns the Test::Builder object underlying Test::More for you to play
1618with.
1619
1620
1621=back
1622
1623
1624=head1 EXIT CODES
1625
1626If all your tests passed, Test::Builder will exit with zero (which is
1627normal). If anything failed it will exit with how many failed. If
1628you run less (or more) tests than you planned, the missing (or extras)
1629will be considered failures. If no tests were ever run Test::Builder
1630will throw a warning and exit with 255. If the test died, even after
1631having successfully completed all its tests, it will still be
1632considered a failure and will exit with 255.
1633
1634So the exit codes are...
1635
1636 0 all tests successful
1637 255 test died or all passed but wrong # of tests run
1638 any other number how many failed (including missing or extras)
1639
1640If you fail more than 254 tests, it will be reported as 254.
1641
1642B<NOTE> This behavior may go away in future versions.
1643
1644
1645=head1 CAVEATS and NOTES
1646
1647=over 4
1648
1649=item Backwards compatibility
1650
1651Test::More works with Perls as old as 5.6.0.
1652
1653
1654=item utf8 / "Wide character in print"
1655
1656If you use utf8 or other non-ASCII characters with Test::More you
1657might get a "Wide character in print" warning. Using C<binmode
1658STDOUT, ":utf8"> will not fix it. Test::Builder (which powers
1659Test::More) duplicates STDOUT and STDERR. So any changes to them,
1660including changing their output disciplines, will not be seem by
1661Test::More.
1662
1663The work around is to change the filehandles used by Test::Builder
1664directly.
1665
1666 my $builder = Test::More->builder;
1667 binmode $builder->output, ":utf8";
1668 binmode $builder->failure_output, ":utf8";
1669 binmode $builder->todo_output, ":utf8";
1670
1671
1672=item Overloaded objects
1673
1674String overloaded objects are compared B<as strings> (or in cmp_ok()'s
1675case, strings or numbers as appropriate to the comparison op). This
1676prevents Test::More from piercing an object's interface allowing
1677better blackbox testing. So if a function starts returning overloaded
1678objects instead of bare strings your tests won't notice the
1679difference. This is good.
1680
1681However, it does mean that functions like is_deeply() cannot be used to
1682test the internals of string overloaded objects. In this case I would
1683suggest L<Test::Deep> which contains more flexible testing functions for
1684complex data structures.
1685
1686
1687=item Threads
1688
1689Test::More will only be aware of threads if "use threads" has been done
1690I<before> Test::More is loaded. This is ok:
1691
1692 use threads;
1693 use Test::More;
1694
1695This may cause problems:
1696
1697 use Test::More
1698 use threads;
1699
17005.8.1 and above are supported. Anything below that has too many bugs.
1701
1702=back
1703
1704
1705=head1 HISTORY
1706
1707This is a case of convergent evolution with Joshua Pritikin's Test
1708module. I was largely unaware of its existence when I'd first
1709written my own ok() routines. This module exists because I can't
1710figure out how to easily wedge test names into Test's interface (along
1711with a few other problems).
1712
1713The goal here is to have a testing utility that's simple to learn,
1714quick to use and difficult to trip yourself up with while still
1715providing more flexibility than the existing Test.pm. As such, the
1716names of the most common routines are kept tiny, special cases and
1717magic side-effects are kept to a minimum. WYSIWYG.
1718
1719
1720=head1 SEE ALSO
1721
1722L<Test::Simple> if all this confuses you and you just want to write
1723some tests. You can upgrade to Test::More later (it's forward
1724compatible).
1725
1726L<Test::Harness> is the test runner and output interpreter for Perl.
1727It's the thing that powers C<make test> and where the C<prove> utility
1728comes from.
1729
1730L<Test::Legacy> tests written with Test.pm, the original testing
1731module, do not play well with other testing libraries. Test::Legacy
1732emulates the Test.pm interface and does play well with others.
1733
1734L<Test::Differences> for more ways to test complex data structures.
1735And it plays well with Test::More.
1736
1737L<Test::Class> is like xUnit but more perlish.
1738
1739L<Test::Deep> gives you more powerful complex data structure testing.
1740
1741L<Test::Inline> shows the idea of embedded testing.
1742
1743L<Bundle::Test> installs a whole bunch of useful test modules.
1744
1745
1746=head1 AUTHORS
1747
1748Michael G Schwern E<lt>schwern@pobox.comE<gt> with much inspiration
1749from Joshua Pritikin's Test module and lots of help from Barrie
1750Slaymaker, Tony Bowden, blackstar.co.uk, chromatic, Fergal Daly and
1751the perl-qa gang.
1752
1753
1754=head1 BUGS
1755
1756See F<http://rt.cpan.org> to report and view bugs.
1757
1758
1759=head1 SOURCE
1760
1761The source code repository for Test::More can be found at
1762F<http://github.com/schwern/test-more/>.
1763
1764
1765=head1 COPYRIGHT
1766
1767Copyright 2001-2008 by Michael G Schwern E<lt>schwern@pobox.comE<gt>.
1768
1769This program is free software; you can redistribute it and/or
1770modify it under the same terms as Perl itself.
1771
1772See F<http://www.perl.com/perl/misc/Artistic.html>
1773
1774=cut
1775
17761;