Commit | Line | Data |
---|---|---|
3f2ec160 JH |
1 | package Test::More; |
2 | ||
d020a79a | 3 | use 5.004; |
3f2ec160 | 4 | |
d020a79a | 5 | use strict; |
33459055 | 6 | use Test::Builder; |
3f2ec160 | 7 | |
33459055 MS |
8 | |
9 | # Can't use Carp because it might cause use_ok() to accidentally succeed | |
10 | # even though the module being used forgot to use Carp. Yes, this | |
11 | # actually happened. | |
12 | sub _carp { | |
13 | my($file, $line) = (caller(1))[1,2]; | |
a9153838 | 14 | warn @_, " at $file line $line\n"; |
3f2ec160 JH |
15 | } |
16 | ||
33459055 MS |
17 | |
18 | ||
3f2ec160 | 19 | require Exporter; |
33459055 | 20 | use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS $TODO); |
60ffb308 | 21 | $VERSION = '0.47'; |
3f2ec160 JH |
22 | @ISA = qw(Exporter); |
23 | @EXPORT = qw(ok use_ok require_ok | |
a9153838 MS |
24 | is isnt like unlike is_deeply |
25 | cmp_ok | |
26 | skip todo todo_skip | |
3f2ec160 | 27 | pass fail |
de2dd90a | 28 | eq_array eq_hash eq_set |
d020a79a JH |
29 | $TODO |
30 | plan | |
31 | can_ok isa_ok | |
a9153838 | 32 | diag |
3f2ec160 JH |
33 | ); |
34 | ||
33459055 | 35 | my $Test = Test::Builder->new; |
3f2ec160 | 36 | |
3f2ec160 JH |
37 | |
38 | # 5.004's Exporter doesn't have export_to_level. | |
39 | sub _export_to_level | |
40 | { | |
41 | my $pkg = shift; | |
42 | my $level = shift; | |
a9153838 | 43 | (undef) = shift; # redundant arg |
3f2ec160 JH |
44 | my $callpkg = caller($level); |
45 | $pkg->export($callpkg, @_); | |
46 | } | |
47 | ||
48 | ||
49 | =head1 NAME | |
50 | ||
51 | Test::More - yet another framework for writing test scripts | |
52 | ||
53 | =head1 SYNOPSIS | |
54 | ||
55 | use Test::More tests => $Num_Tests; | |
56 | # or | |
57 | use Test::More qw(no_plan); | |
58 | # or | |
d020a79a | 59 | use Test::More skip_all => $reason; |
3f2ec160 JH |
60 | |
61 | BEGIN { use_ok( 'Some::Module' ); } | |
62 | require_ok( 'Some::Module' ); | |
63 | ||
64 | # Various ways to say "ok" | |
65 | ok($this eq $that, $test_name); | |
66 | ||
67 | is ($this, $that, $test_name); | |
68 | isnt($this, $that, $test_name); | |
a9153838 MS |
69 | |
70 | # Rather than print STDERR "# here's what went wrong\n" | |
71 | diag("here's what went wrong"); | |
72 | ||
73 | like ($this, qr/that/, $test_name); | |
74 | unlike($this, qr/that/, $test_name); | |
75 | ||
76 | cmp_ok($this, '==', $that, $test_name); | |
3f2ec160 | 77 | |
33459055 MS |
78 | is_deeply($complex_structure1, $complex_structure2, $test_name); |
79 | ||
d020a79a JH |
80 | SKIP: { |
81 | skip $why, $how_many unless $have_some_feature; | |
82 | ||
3f2ec160 JH |
83 | ok( foo(), $test_name ); |
84 | is( foo(42), 23, $test_name ); | |
d020a79a JH |
85 | }; |
86 | ||
87 | TODO: { | |
88 | local $TODO = $why; | |
3f2ec160 | 89 | |
3f2ec160 JH |
90 | ok( foo(), $test_name ); |
91 | is( foo(42), 23, $test_name ); | |
d020a79a JH |
92 | }; |
93 | ||
94 | can_ok($module, @methods); | |
95 | isa_ok($object, $class); | |
3f2ec160 JH |
96 | |
97 | pass($test_name); | |
98 | fail($test_name); | |
99 | ||
100 | # Utility comparison functions. | |
101 | eq_array(\@this, \@that); | |
102 | eq_hash(\%this, \%that); | |
103 | eq_set(\@this, \@that); | |
104 | ||
105 | # UNIMPLEMENTED!!! | |
106 | my @status = Test::More::status; | |
107 | ||
d020a79a JH |
108 | # UNIMPLEMENTED!!! |
109 | BAIL_OUT($why); | |
110 | ||
3f2ec160 JH |
111 | |
112 | =head1 DESCRIPTION | |
113 | ||
a9153838 | 114 | B<STOP!> If you're just getting started writing tests, have a look at |
d020a79a JH |
115 | Test::Simple first. This is a drop in replacement for Test::Simple |
116 | which you can switch to once you get the hang of basic testing. | |
3f2ec160 | 117 | |
a9153838 MS |
118 | The purpose of this module is to provide a wide range of testing |
119 | utilities. Various ways to say "ok" with better diagnostics, | |
120 | facilities to skip tests, test future features and compare complicated | |
121 | data structures. While you can do almost anything with a simple | |
122 | C<ok()> function, it doesn't provide good diagnostic output. | |
3f2ec160 JH |
123 | |
124 | ||
125 | =head2 I love it when a plan comes together | |
126 | ||
127 | Before anything else, you need a testing plan. This basically declares | |
128 | how many tests your script is going to run to protect against premature | |
129 | failure. | |
130 | ||
4bd4e70a | 131 | The preferred way to do this is to declare a plan when you C<use Test::More>. |
3f2ec160 JH |
132 | |
133 | use Test::More tests => $Num_Tests; | |
134 | ||
135 | There are rare cases when you will not know beforehand how many tests | |
136 | your script is going to run. In this case, you can declare that you | |
137 | have no plan. (Try to avoid using this as it weakens your test.) | |
138 | ||
139 | use Test::More qw(no_plan); | |
140 | ||
141 | In some cases, you'll want to completely skip an entire testing script. | |
142 | ||
d020a79a | 143 | use Test::More skip_all => $skip_reason; |
3f2ec160 | 144 | |
d020a79a JH |
145 | Your script will declare a skip with the reason why you skipped and |
146 | exit immediately with a zero (success). See L<Test::Harness> for | |
147 | details. | |
3f2ec160 | 148 | |
33459055 MS |
149 | If you want to control what functions Test::More will export, you |
150 | have to use the 'import' option. For example, to import everything | |
151 | but 'fail', you'd do: | |
152 | ||
153 | use Test::More tests => 23, import => ['!fail']; | |
154 | ||
155 | Alternatively, you can use the plan() function. Useful for when you | |
156 | have to calculate the number of tests. | |
157 | ||
158 | use Test::More; | |
159 | plan tests => keys %Stuff * 3; | |
160 | ||
161 | or for deciding between running the tests at all: | |
162 | ||
163 | use Test::More; | |
164 | if( $^O eq 'MacOS' ) { | |
4bd4e70a | 165 | plan skip_all => 'Test irrelevant on MacOS'; |
33459055 MS |
166 | } |
167 | else { | |
168 | plan tests => 42; | |
169 | } | |
170 | ||
171 | =cut | |
172 | ||
173 | sub plan { | |
174 | my(@plan) = @_; | |
175 | ||
176 | my $caller = caller; | |
177 | ||
178 | $Test->exported_to($caller); | |
33459055 MS |
179 | |
180 | my @imports = (); | |
181 | foreach my $idx (0..$#plan) { | |
182 | if( $plan[$idx] eq 'import' ) { | |
89c1e84a MS |
183 | my($tag, $imports) = splice @plan, $idx, 2; |
184 | @imports = @$imports; | |
33459055 MS |
185 | last; |
186 | } | |
187 | } | |
188 | ||
89c1e84a MS |
189 | $Test->plan(@plan); |
190 | ||
33459055 MS |
191 | __PACKAGE__->_export_to_level(1, __PACKAGE__, @imports); |
192 | } | |
193 | ||
194 | sub import { | |
195 | my($class) = shift; | |
196 | goto &plan; | |
197 | } | |
198 | ||
3f2ec160 JH |
199 | |
200 | =head2 Test names | |
201 | ||
202 | By convention, each test is assigned a number in order. This is | |
6686786d | 203 | largely done automatically for you. However, it's often very useful to |
3f2ec160 JH |
204 | assign a name to each test. Which would you rather see: |
205 | ||
206 | ok 4 | |
207 | not ok 5 | |
208 | ok 6 | |
209 | ||
210 | or | |
211 | ||
212 | ok 4 - basic multi-variable | |
213 | not ok 5 - simple exponential | |
214 | ok 6 - force == mass * acceleration | |
215 | ||
216 | The later gives you some idea of what failed. It also makes it easier | |
217 | to find the test in your script, simply search for "simple | |
218 | exponential". | |
219 | ||
6686786d | 220 | All test functions take a name argument. It's optional, but highly |
3f2ec160 JH |
221 | suggested that you use it. |
222 | ||
223 | ||
224 | =head2 I'm ok, you're not ok. | |
225 | ||
226 | The basic purpose of this module is to print out either "ok #" or "not | |
227 | ok #" depending on if a given test succeeded or failed. Everything | |
228 | else is just gravy. | |
229 | ||
230 | All of the following print "ok" or "not ok" depending on if the test | |
231 | succeeded or failed. They all also return true or false, | |
232 | respectively. | |
233 | ||
234 | =over 4 | |
235 | ||
236 | =item B<ok> | |
237 | ||
238 | ok($this eq $that, $test_name); | |
239 | ||
240 | This simply evaluates any expression (C<$this eq $that> is just a | |
241 | simple example) and uses that to determine if the test succeeded or | |
242 | failed. A true expression passes, a false one fails. Very simple. | |
243 | ||
244 | For example: | |
245 | ||
246 | ok( $exp{9} == 81, 'simple exponential' ); | |
247 | ok( Film->can('db_Main'), 'set_db()' ); | |
248 | ok( $p->tests == 4, 'saw tests' ); | |
249 | ok( !grep !defined $_, @items, 'items populated' ); | |
250 | ||
251 | (Mnemonic: "This is ok.") | |
252 | ||
253 | $test_name is a very short description of the test that will be printed | |
254 | out. It makes it very easy to find a test in your script when it fails | |
255 | and gives others an idea of your intentions. $test_name is optional, | |
256 | but we B<very> strongly encourage its use. | |
257 | ||
258 | Should an ok() fail, it will produce some diagnostics: | |
259 | ||
260 | not ok 18 - sufficient mucus | |
261 | # Failed test 18 (foo.t at line 42) | |
262 | ||
263 | This is actually Test::Simple's ok() routine. | |
264 | ||
265 | =cut | |
266 | ||
33459055 MS |
267 | sub ok ($;$) { |
268 | my($test, $name) = @_; | |
269 | $Test->ok($test, $name); | |
270 | } | |
3f2ec160 JH |
271 | |
272 | =item B<is> | |
273 | ||
274 | =item B<isnt> | |
275 | ||
276 | is ( $this, $that, $test_name ); | |
277 | isnt( $this, $that, $test_name ); | |
278 | ||
d020a79a JH |
279 | Similar to ok(), is() and isnt() compare their two arguments |
280 | with C<eq> and C<ne> respectively and use the result of that to | |
281 | determine if the test succeeded or failed. So these: | |
3f2ec160 JH |
282 | |
283 | # Is the ultimate answer 42? | |
284 | is( ultimate_answer(), 42, "Meaning of Life" ); | |
285 | ||
286 | # $foo isn't empty | |
287 | isnt( $foo, '', "Got some foo" ); | |
288 | ||
289 | are similar to these: | |
290 | ||
291 | ok( ultimate_answer() eq 42, "Meaning of Life" ); | |
292 | ok( $foo ne '', "Got some foo" ); | |
293 | ||
294 | (Mnemonic: "This is that." "This isn't that.") | |
295 | ||
296 | So why use these? They produce better diagnostics on failure. ok() | |
297 | cannot know what you are testing for (beyond the name), but is() and | |
298 | isnt() know what the test was and why it failed. For example this | |
d020a79a | 299 | test: |
3f2ec160 JH |
300 | |
301 | my $foo = 'waffle'; my $bar = 'yarblokos'; | |
302 | is( $foo, $bar, 'Is foo the same as bar?' ); | |
303 | ||
304 | Will produce something like this: | |
305 | ||
306 | not ok 17 - Is foo the same as bar? | |
60ffb308 | 307 | # Failed test (foo.t at line 139) |
3f2ec160 JH |
308 | # got: 'waffle' |
309 | # expected: 'yarblokos' | |
310 | ||
311 | So you can figure out what went wrong without rerunning the test. | |
312 | ||
313 | You are encouraged to use is() and isnt() over ok() where possible, | |
314 | however do not be tempted to use them to find out if something is | |
315 | true or false! | |
316 | ||
317 | # XXX BAD! $pope->isa('Catholic') eq 1 | |
318 | is( $pope->isa('Catholic'), 1, 'Is the Pope Catholic?' ); | |
319 | ||
320 | This does not check if C<$pope->isa('Catholic')> is true, it checks if | |
321 | it returns 1. Very different. Similar caveats exist for false and 0. | |
322 | In these cases, use ok(). | |
323 | ||
324 | ok( $pope->isa('Catholic') ), 'Is the Pope Catholic?' ); | |
325 | ||
d020a79a JH |
326 | For those grammatical pedants out there, there's an C<isn't()> |
327 | function which is an alias of isnt(). | |
3f2ec160 JH |
328 | |
329 | =cut | |
330 | ||
331 | sub is ($$;$) { | |
33459055 | 332 | $Test->is_eq(@_); |
3f2ec160 JH |
333 | } |
334 | ||
335 | sub isnt ($$;$) { | |
a9153838 | 336 | $Test->isnt_eq(@_); |
3f2ec160 JH |
337 | } |
338 | ||
339 | *isn't = \&isnt; | |
340 | ||
341 | ||
342 | =item B<like> | |
343 | ||
344 | like( $this, qr/that/, $test_name ); | |
345 | ||
346 | Similar to ok(), like() matches $this against the regex C<qr/that/>. | |
347 | ||
348 | So this: | |
349 | ||
350 | like($this, qr/that/, 'this is like that'); | |
351 | ||
352 | is similar to: | |
353 | ||
354 | ok( $this =~ /that/, 'this is like that'); | |
355 | ||
356 | (Mnemonic "This is like that".) | |
357 | ||
358 | The second argument is a regular expression. It may be given as a | |
4bd4e70a | 359 | regex reference (i.e. C<qr//>) or (for better compatibility with older |
3f2ec160 JH |
360 | perls) as a string that looks like a regex (alternative delimiters are |
361 | currently not supported): | |
362 | ||
363 | like( $this, '/that/', 'this is like that' ); | |
364 | ||
365 | Regex options may be placed on the end (C<'/that/i'>). | |
366 | ||
367 | Its advantages over ok() are similar to that of is() and isnt(). Better | |
368 | diagnostics on failure. | |
369 | ||
370 | =cut | |
371 | ||
372 | sub like ($$;$) { | |
33459055 | 373 | $Test->like(@_); |
3f2ec160 JH |
374 | } |
375 | ||
a9153838 MS |
376 | |
377 | =item B<unlike> | |
378 | ||
379 | unlike( $this, qr/that/, $test_name ); | |
380 | ||
381 | Works exactly as like(), only it checks if $this B<does not> match the | |
382 | given pattern. | |
383 | ||
384 | =cut | |
385 | ||
386 | sub unlike { | |
387 | $Test->unlike(@_); | |
388 | } | |
389 | ||
390 | ||
391 | =item B<cmp_ok> | |
392 | ||
393 | cmp_ok( $this, $op, $that, $test_name ); | |
394 | ||
395 | Halfway between ok() and is() lies cmp_ok(). This allows you to | |
396 | compare two arguments using any binary perl operator. | |
397 | ||
398 | # ok( $this eq $that ); | |
399 | cmp_ok( $this, 'eq', $that, 'this eq that' ); | |
400 | ||
401 | # ok( $this == $that ); | |
402 | cmp_ok( $this, '==', $that, 'this == that' ); | |
403 | ||
404 | # ok( $this && $that ); | |
405 | cmp_ok( $this, '&&', $that, 'this || that' ); | |
406 | ...etc... | |
407 | ||
408 | Its advantage over ok() is when the test fails you'll know what $this | |
409 | and $that were: | |
410 | ||
411 | not ok 1 | |
412 | # Failed test (foo.t at line 12) | |
413 | # '23' | |
414 | # && | |
415 | # undef | |
416 | ||
6686786d | 417 | It's also useful in those cases where you are comparing numbers and |
a9153838 MS |
418 | is()'s use of C<eq> will interfere: |
419 | ||
420 | cmp_ok( $big_hairy_number, '==', $another_big_hairy_number ); | |
421 | ||
422 | =cut | |
423 | ||
424 | sub cmp_ok($$$;$) { | |
425 | $Test->cmp_ok(@_); | |
426 | } | |
427 | ||
428 | ||
d020a79a JH |
429 | =item B<can_ok> |
430 | ||
431 | can_ok($module, @methods); | |
432 | can_ok($object, @methods); | |
433 | ||
434 | Checks to make sure the $module or $object can do these @methods | |
435 | (works with functions, too). | |
436 | ||
437 | can_ok('Foo', qw(this that whatever)); | |
438 | ||
439 | is almost exactly like saying: | |
440 | ||
441 | ok( Foo->can('this') && | |
442 | Foo->can('that') && | |
443 | Foo->can('whatever') | |
444 | ); | |
445 | ||
446 | only without all the typing and with a better interface. Handy for | |
447 | quickly testing an interface. | |
448 | ||
a9153838 MS |
449 | No matter how many @methods you check, a single can_ok() call counts |
450 | as one test. If you desire otherwise, use: | |
451 | ||
452 | foreach my $meth (@methods) { | |
453 | can_ok('Foo', $meth); | |
454 | } | |
455 | ||
d020a79a JH |
456 | =cut |
457 | ||
458 | sub can_ok ($@) { | |
459 | my($proto, @methods) = @_; | |
89c1e84a | 460 | my $class = ref $proto || $proto; |
d020a79a | 461 | |
a9153838 MS |
462 | unless( @methods ) { |
463 | my $ok = $Test->ok( 0, "$class->can(...)" ); | |
464 | $Test->diag(' can_ok() called with no methods'); | |
465 | return $ok; | |
466 | } | |
467 | ||
d020a79a JH |
468 | my @nok = (); |
469 | foreach my $method (@methods) { | |
a9153838 MS |
470 | local($!, $@); # don't interfere with caller's $@ |
471 | # eval sometimes resets $! | |
89c1e84a | 472 | eval { $proto->can($method) } || push @nok, $method; |
d020a79a JH |
473 | } |
474 | ||
475 | my $name; | |
6686786d | 476 | $name = @methods == 1 ? "$class->can('$methods[0]')" |
d020a79a JH |
477 | : "$class->can(...)"; |
478 | ||
33459055 | 479 | my $ok = $Test->ok( !@nok, $name ); |
d020a79a | 480 | |
a9153838 | 481 | $Test->diag(map " $class->can('$_') failed\n", @nok); |
d020a79a | 482 | |
33459055 | 483 | return $ok; |
d020a79a JH |
484 | } |
485 | ||
486 | =item B<isa_ok> | |
487 | ||
33459055 | 488 | isa_ok($object, $class, $object_name); |
a9153838 | 489 | isa_ok($ref, $type, $ref_name); |
d020a79a JH |
490 | |
491 | Checks to see if the given $object->isa($class). Also checks to make | |
492 | sure the object was defined in the first place. Handy for this sort | |
493 | of thing: | |
494 | ||
495 | my $obj = Some::Module->new; | |
496 | isa_ok( $obj, 'Some::Module' ); | |
497 | ||
498 | where you'd otherwise have to write | |
499 | ||
500 | my $obj = Some::Module->new; | |
501 | ok( defined $obj && $obj->isa('Some::Module') ); | |
502 | ||
503 | to safeguard against your test script blowing up. | |
504 | ||
a9153838 MS |
505 | It works on references, too: |
506 | ||
507 | isa_ok( $array_ref, 'ARRAY' ); | |
508 | ||
33459055 MS |
509 | The diagnostics of this test normally just refer to 'the object'. If |
510 | you'd like them to be more specific, you can supply an $object_name | |
511 | (for example 'Test customer'). | |
512 | ||
d020a79a JH |
513 | =cut |
514 | ||
33459055 MS |
515 | sub isa_ok ($$;$) { |
516 | my($object, $class, $obj_name) = @_; | |
d020a79a JH |
517 | |
518 | my $diag; | |
33459055 MS |
519 | $obj_name = 'The object' unless defined $obj_name; |
520 | my $name = "$obj_name isa $class"; | |
d020a79a | 521 | if( !defined $object ) { |
33459055 | 522 | $diag = "$obj_name isn't defined"; |
d020a79a JH |
523 | } |
524 | elsif( !ref $object ) { | |
33459055 | 525 | $diag = "$obj_name isn't a reference"; |
d020a79a | 526 | } |
a9153838 MS |
527 | else { |
528 | # We can't use UNIVERSAL::isa because we want to honor isa() overrides | |
529 | local($@, $!); # eval sometimes resets $! | |
530 | my $rslt = eval { $object->isa($class) }; | |
531 | if( $@ ) { | |
532 | if( $@ =~ /^Can't call method "isa" on unblessed reference/ ) { | |
533 | if( !UNIVERSAL::isa($object, $class) ) { | |
534 | my $ref = ref $object; | |
6686786d | 535 | $diag = "$obj_name isn't a '$class' it's a '$ref'"; |
a9153838 MS |
536 | } |
537 | } else { | |
538 | die <<WHOA; | |
539 | WHOA! I tried to call ->isa on your object and got some weird error. | |
540 | This should never happen. Please contact the author immediately. | |
541 | Here's the error. | |
542 | $@ | |
543 | WHOA | |
544 | } | |
545 | } | |
546 | elsif( !$rslt ) { | |
547 | my $ref = ref $object; | |
6686786d | 548 | $diag = "$obj_name isn't a '$class' it's a '$ref'"; |
a9153838 | 549 | } |
d020a79a | 550 | } |
a9153838 MS |
551 | |
552 | ||
d020a79a | 553 | |
33459055 | 554 | my $ok; |
d020a79a | 555 | if( $diag ) { |
33459055 | 556 | $ok = $Test->ok( 0, $name ); |
a9153838 | 557 | $Test->diag(" $diag\n"); |
d020a79a JH |
558 | } |
559 | else { | |
33459055 | 560 | $ok = $Test->ok( 1, $name ); |
d020a79a | 561 | } |
33459055 MS |
562 | |
563 | return $ok; | |
d020a79a JH |
564 | } |
565 | ||
566 | ||
3f2ec160 JH |
567 | =item B<pass> |
568 | ||
569 | =item B<fail> | |
570 | ||
571 | pass($test_name); | |
572 | fail($test_name); | |
573 | ||
574 | Sometimes you just want to say that the tests have passed. Usually | |
575 | the case is you've got some complicated condition that is difficult to | |
576 | wedge into an ok(). In this case, you can simply use pass() (to | |
577 | declare the test ok) or fail (for not ok). They are synonyms for | |
578 | ok(1) and ok(0). | |
579 | ||
580 | Use these very, very, very sparingly. | |
581 | ||
582 | =cut | |
583 | ||
d020a79a | 584 | sub pass (;$) { |
33459055 | 585 | $Test->ok(1, @_); |
3f2ec160 JH |
586 | } |
587 | ||
d020a79a | 588 | sub fail (;$) { |
33459055 | 589 | $Test->ok(0, @_); |
3f2ec160 JH |
590 | } |
591 | ||
592 | =back | |
593 | ||
a9153838 MS |
594 | =head2 Diagnostics |
595 | ||
596 | If you pick the right test function, you'll usually get a good idea of | |
597 | what went wrong when it failed. But sometimes it doesn't work out | |
598 | that way. So here we have ways for you to write your own diagnostic | |
599 | messages which are safer than just C<print STDERR>. | |
600 | ||
601 | =over 4 | |
602 | ||
603 | =item B<diag> | |
604 | ||
605 | diag(@diagnostic_message); | |
606 | ||
607 | Prints a diagnostic message which is guaranteed not to interfere with | |
608 | test output. Handy for this sort of thing: | |
609 | ||
610 | ok( grep(/foo/, @users), "There's a foo user" ) or | |
611 | diag("Since there's no foo, check that /etc/bar is set up right"); | |
612 | ||
613 | which would produce: | |
614 | ||
615 | not ok 42 - There's a foo user | |
616 | # Failed test (foo.t at line 52) | |
617 | # Since there's no foo, check that /etc/bar is set up right. | |
618 | ||
619 | You might remember C<ok() or diag()> with the mnemonic C<open() or | |
620 | die()>. | |
621 | ||
622 | B<NOTE> The exact formatting of the diagnostic output is still | |
623 | changing, but it is guaranteed that whatever you throw at it it won't | |
624 | interfere with the test. | |
625 | ||
626 | =cut | |
627 | ||
628 | sub diag { | |
629 | $Test->diag(@_); | |
630 | } | |
631 | ||
632 | ||
633 | =back | |
634 | ||
3f2ec160 JH |
635 | =head2 Module tests |
636 | ||
637 | You usually want to test if the module you're testing loads ok, rather | |
638 | than just vomiting if its load fails. For such purposes we have | |
639 | C<use_ok> and C<require_ok>. | |
640 | ||
641 | =over 4 | |
642 | ||
643 | =item B<use_ok> | |
644 | ||
3f2ec160 | 645 | BEGIN { use_ok($module); } |
d020a79a JH |
646 | BEGIN { use_ok($module, @imports); } |
647 | ||
648 | These simply use the given $module and test to make sure the load | |
89c1e84a | 649 | happened ok. It's recommended that you run use_ok() inside a BEGIN |
d020a79a JH |
650 | block so its functions are exported at compile-time and prototypes are |
651 | properly honored. | |
652 | ||
653 | If @imports are given, they are passed through to the use. So this: | |
654 | ||
655 | BEGIN { use_ok('Some::Module', qw(foo bar)) } | |
656 | ||
657 | is like doing this: | |
658 | ||
659 | use Some::Module qw(foo bar); | |
3f2ec160 | 660 | |
a344be10 MS |
661 | don't try to do this: |
662 | ||
663 | BEGIN { | |
664 | use_ok('Some::Module'); | |
665 | ||
666 | ...some code that depends on the use... | |
667 | ...happening at compile time... | |
668 | } | |
669 | ||
670 | instead, you want: | |
671 | ||
672 | BEGIN { use_ok('Some::Module') } | |
673 | BEGIN { ...some code that depends on the use... } | |
674 | ||
3f2ec160 JH |
675 | |
676 | =cut | |
677 | ||
d020a79a JH |
678 | sub use_ok ($;@) { |
679 | my($module, @imports) = @_; | |
680 | @imports = () unless @imports; | |
3f2ec160 JH |
681 | |
682 | my $pack = caller; | |
683 | ||
a9153838 | 684 | local($@,$!); # eval sometimes interferes with $! |
3f2ec160 JH |
685 | eval <<USE; |
686 | package $pack; | |
687 | require $module; | |
89c1e84a | 688 | '$module'->import(\@imports); |
3f2ec160 JH |
689 | USE |
690 | ||
33459055 | 691 | my $ok = $Test->ok( !$@, "use $module;" ); |
3f2ec160 JH |
692 | |
693 | unless( $ok ) { | |
0cd946aa | 694 | chomp $@; |
33459055 | 695 | $Test->diag(<<DIAGNOSTIC); |
a9153838 MS |
696 | Tried to use '$module'. |
697 | Error: $@ | |
3f2ec160 JH |
698 | DIAGNOSTIC |
699 | ||
700 | } | |
701 | ||
702 | return $ok; | |
703 | } | |
704 | ||
d020a79a JH |
705 | =item B<require_ok> |
706 | ||
707 | require_ok($module); | |
708 | ||
709 | Like use_ok(), except it requires the $module. | |
710 | ||
711 | =cut | |
3f2ec160 JH |
712 | |
713 | sub require_ok ($) { | |
714 | my($module) = shift; | |
715 | ||
716 | my $pack = caller; | |
717 | ||
a9153838 | 718 | local($!, $@); # eval sometimes interferes with $! |
3f2ec160 JH |
719 | eval <<REQUIRE; |
720 | package $pack; | |
721 | require $module; | |
722 | REQUIRE | |
723 | ||
33459055 | 724 | my $ok = $Test->ok( !$@, "require $module;" ); |
3f2ec160 JH |
725 | |
726 | unless( $ok ) { | |
0cd946aa | 727 | chomp $@; |
33459055 | 728 | $Test->diag(<<DIAGNOSTIC); |
a9153838 MS |
729 | Tried to require '$module'. |
730 | Error: $@ | |
3f2ec160 JH |
731 | DIAGNOSTIC |
732 | ||
733 | } | |
734 | ||
735 | return $ok; | |
736 | } | |
737 | ||
d020a79a | 738 | =back |
3f2ec160 JH |
739 | |
740 | =head2 Conditional tests | |
741 | ||
742 | Sometimes running a test under certain conditions will cause the | |
743 | test script to die. A certain function or method isn't implemented | |
744 | (such as fork() on MacOS), some resource isn't available (like a | |
d020a79a JH |
745 | net connection) or a module isn't available. In these cases it's |
746 | necessary to skip tests, or declare that they are supposed to fail | |
3f2ec160 JH |
747 | but will work in the future (a todo test). |
748 | ||
a9153838 MS |
749 | For more details on the mechanics of skip and todo tests see |
750 | L<Test::Harness>. | |
d020a79a JH |
751 | |
752 | The way Test::More handles this is with a named block. Basically, a | |
753 | block of tests which can be skipped over or made todo. It's best if I | |
754 | just show you... | |
3f2ec160 JH |
755 | |
756 | =over 4 | |
757 | ||
d020a79a JH |
758 | =item B<SKIP: BLOCK> |
759 | ||
760 | SKIP: { | |
761 | skip $why, $how_many if $condition; | |
3f2ec160 | 762 | |
d020a79a JH |
763 | ...normal testing code goes here... |
764 | } | |
3f2ec160 | 765 | |
a344be10 MS |
766 | This declares a block of tests that might be skipped, $how_many tests |
767 | there are, $why and under what $condition to skip them. An example is | |
768 | the easiest way to illustrate: | |
3f2ec160 | 769 | |
d020a79a | 770 | SKIP: { |
a344be10 | 771 | eval { require HTML::Lint }; |
3f2ec160 | 772 | |
a344be10 | 773 | skip "HTML::Lint not installed", 2 if $@; |
d020a79a | 774 | |
a344be10 | 775 | my $lint = new HTML::Lint; |
60ffb308 | 776 | isa_ok( $lint, "HTML::Lint" ); |
3f2ec160 | 777 | |
a344be10 | 778 | $lint->parse( $html ); |
60ffb308 | 779 | is( $lint->errors, 0, "No errors found in HTML" ); |
a344be10 | 780 | } |
d020a79a | 781 | |
a344be10 MS |
782 | If the user does not have HTML::Lint installed, the whole block of |
783 | code I<won't be run at all>. Test::More will output special ok's | |
784 | which Test::Harness interprets as skipped, but passing, tests. | |
785 | It's important that $how_many accurately reflects the number of tests | |
786 | in the SKIP block so the # of tests run will match up with your plan. | |
a9153838 | 787 | |
a344be10 MS |
788 | It's perfectly safe to nest SKIP blocks. Each SKIP block must have |
789 | the label C<SKIP>, or Test::More can't work its magic. | |
a9153838 MS |
790 | |
791 | You don't skip tests which are failing because there's a bug in your | |
a344be10 MS |
792 | program, or for which you don't yet have code written. For that you |
793 | use TODO. Read on. | |
3f2ec160 JH |
794 | |
795 | =cut | |
796 | ||
d020a79a | 797 | #'# |
1af51bd3 | 798 | sub skip { |
d020a79a | 799 | my($why, $how_many) = @_; |
33459055 MS |
800 | |
801 | unless( defined $how_many ) { | |
d020a79a | 802 | # $how_many can only be avoided when no_plan is in use. |
33459055 MS |
803 | _carp "skip() needs to know \$how_many tests are in the block" |
804 | unless $Test::Builder::No_Plan; | |
d020a79a JH |
805 | $how_many = 1; |
806 | } | |
807 | ||
808 | for( 1..$how_many ) { | |
33459055 | 809 | $Test->skip($why); |
d020a79a JH |
810 | } |
811 | ||
812 | local $^W = 0; | |
813 | last SKIP; | |
3f2ec160 JH |
814 | } |
815 | ||
3f2ec160 | 816 | |
d020a79a | 817 | =item B<TODO: BLOCK> |
3f2ec160 | 818 | |
d020a79a | 819 | TODO: { |
a9153838 | 820 | local $TODO = $why if $condition; |
3f2ec160 | 821 | |
d020a79a JH |
822 | ...normal testing code goes here... |
823 | } | |
3f2ec160 | 824 | |
d020a79a JH |
825 | Declares a block of tests you expect to fail and $why. Perhaps it's |
826 | because you haven't fixed a bug or haven't finished a new feature: | |
3f2ec160 | 827 | |
d020a79a JH |
828 | TODO: { |
829 | local $TODO = "URI::Geller not finished"; | |
3f2ec160 | 830 | |
d020a79a JH |
831 | my $card = "Eight of clubs"; |
832 | is( URI::Geller->your_card, $card, 'Is THIS your card?' ); | |
3f2ec160 | 833 | |
d020a79a JH |
834 | my $spoon; |
835 | URI::Geller->bend_spoon; | |
836 | is( $spoon, 'bent', "Spoon bending, that's original" ); | |
837 | } | |
838 | ||
839 | With a todo block, the tests inside are expected to fail. Test::More | |
840 | will run the tests normally, but print out special flags indicating | |
841 | they are "todo". Test::Harness will interpret failures as being ok. | |
842 | Should anything succeed, it will report it as an unexpected success. | |
a344be10 MS |
843 | You then know the thing you had todo is done and can remove the |
844 | TODO flag. | |
d020a79a JH |
845 | |
846 | The nice part about todo tests, as opposed to simply commenting out a | |
4bd4e70a | 847 | block of tests, is it's like having a programmatic todo list. You know |
d020a79a JH |
848 | how much work is left to be done, you're aware of what bugs there are, |
849 | and you'll know immediately when they're fixed. | |
850 | ||
851 | Once a todo test starts succeeding, simply move it outside the block. | |
852 | When the block is empty, delete it. | |
853 | ||
854 | ||
a9153838 MS |
855 | =item B<todo_skip> |
856 | ||
857 | TODO: { | |
858 | todo_skip $why, $how_many if $condition; | |
859 | ||
860 | ...normal testing code... | |
861 | } | |
862 | ||
89c1e84a | 863 | With todo tests, it's best to have the tests actually run. That way |
a9153838 MS |
864 | you'll know when they start passing. Sometimes this isn't possible. |
865 | Often a failing test will cause the whole program to die or hang, even | |
866 | inside an C<eval BLOCK> with and using C<alarm>. In these extreme | |
867 | cases you have no choice but to skip over the broken tests entirely. | |
868 | ||
869 | The syntax and behavior is similar to a C<SKIP: BLOCK> except the | |
870 | tests will be marked as failing but todo. Test::Harness will | |
871 | interpret them as passing. | |
872 | ||
873 | =cut | |
874 | ||
875 | sub todo_skip { | |
876 | my($why, $how_many) = @_; | |
877 | ||
878 | unless( defined $how_many ) { | |
879 | # $how_many can only be avoided when no_plan is in use. | |
880 | _carp "todo_skip() needs to know \$how_many tests are in the block" | |
881 | unless $Test::Builder::No_Plan; | |
882 | $how_many = 1; | |
883 | } | |
884 | ||
885 | for( 1..$how_many ) { | |
886 | $Test->todo_skip($why); | |
887 | } | |
888 | ||
889 | local $^W = 0; | |
890 | last TODO; | |
891 | } | |
892 | ||
a344be10 MS |
893 | =item When do I use SKIP vs. TODO? |
894 | ||
895 | B<If it's something the user might not be able to do>, use SKIP. | |
896 | This includes optional modules that aren't installed, running under | |
897 | an OS that doesn't have some feature (like fork() or symlinks), or maybe | |
898 | you need an Internet connection and one isn't available. | |
899 | ||
900 | B<If it's something the programmer hasn't done yet>, use TODO. This | |
901 | is for any code you haven't written yet, or bugs you have yet to fix, | |
902 | but want to put tests in your testing script (always a good idea). | |
903 | ||
a9153838 | 904 | |
d020a79a | 905 | =back |
3f2ec160 | 906 | |
4bd4e70a | 907 | =head2 Comparison functions |
3f2ec160 JH |
908 | |
909 | Not everything is a simple eq check or regex. There are times you | |
910 | need to see if two arrays are equivalent, for instance. For these | |
911 | instances, Test::More provides a handful of useful functions. | |
912 | ||
913 | B<NOTE> These are NOT well-tested on circular references. Nor am I | |
914 | quite sure what will happen with filehandles. | |
915 | ||
916 | =over 4 | |
917 | ||
33459055 MS |
918 | =item B<is_deeply> |
919 | ||
920 | is_deeply( $this, $that, $test_name ); | |
921 | ||
922 | Similar to is(), except that if $this and $that are hash or array | |
923 | references, it does a deep comparison walking each data structure to | |
924 | see if they are equivalent. If the two structures are different, it | |
925 | will display the place where they start differing. | |
926 | ||
a9153838 MS |
927 | Barrie Slaymaker's Test::Differences module provides more in-depth |
928 | functionality along these lines, and it plays well with Test::More. | |
929 | ||
4995b88c | 930 | B<NOTE> Display of scalar refs is not quite 100% |
33459055 MS |
931 | |
932 | =cut | |
933 | ||
934 | use vars qw(@Data_Stack); | |
935 | my $DNE = bless [], 'Does::Not::Exist'; | |
936 | sub is_deeply { | |
937 | my($this, $that, $name) = @_; | |
938 | ||
939 | my $ok; | |
2f71ccc2 | 940 | if( !ref $this || !ref $that ) { |
33459055 MS |
941 | $ok = $Test->is_eq($this, $that, $name); |
942 | } | |
943 | else { | |
944 | local @Data_Stack = (); | |
945 | if( _deep_check($this, $that) ) { | |
946 | $ok = $Test->ok(1, $name); | |
947 | } | |
948 | else { | |
949 | $ok = $Test->ok(0, $name); | |
950 | $ok = $Test->diag(_format_stack(@Data_Stack)); | |
951 | } | |
952 | } | |
953 | ||
954 | return $ok; | |
955 | } | |
956 | ||
957 | sub _format_stack { | |
958 | my(@Stack) = @_; | |
959 | ||
960 | my $var = '$FOO'; | |
961 | my $did_arrow = 0; | |
962 | foreach my $entry (@Stack) { | |
963 | my $type = $entry->{type} || ''; | |
964 | my $idx = $entry->{'idx'}; | |
965 | if( $type eq 'HASH' ) { | |
966 | $var .= "->" unless $did_arrow++; | |
967 | $var .= "{$idx}"; | |
968 | } | |
969 | elsif( $type eq 'ARRAY' ) { | |
970 | $var .= "->" unless $did_arrow++; | |
971 | $var .= "[$idx]"; | |
972 | } | |
973 | elsif( $type eq 'REF' ) { | |
974 | $var = "\${$var}"; | |
975 | } | |
976 | } | |
977 | ||
978 | my @vals = @{$Stack[-1]{vals}}[0,1]; | |
979 | my @vars = (); | |
980 | ($vars[0] = $var) =~ s/\$FOO/ \$got/; | |
981 | ($vars[1] = $var) =~ s/\$FOO/\$expected/; | |
982 | ||
983 | my $out = "Structures begin differing at:\n"; | |
984 | foreach my $idx (0..$#vals) { | |
985 | my $val = $vals[$idx]; | |
986 | $vals[$idx] = !defined $val ? 'undef' : | |
2f71ccc2 JH |
987 | $val eq $DNE ? "Does not exist" |
988 | : "'$val'"; | |
33459055 MS |
989 | } |
990 | ||
991 | $out .= "$vars[0] = $vals[0]\n"; | |
992 | $out .= "$vars[1] = $vals[1]\n"; | |
993 | ||
a9153838 | 994 | $out =~ s/^/ /msg; |
33459055 MS |
995 | return $out; |
996 | } | |
997 | ||
998 | ||
3f2ec160 JH |
999 | =item B<eq_array> |
1000 | ||
1001 | eq_array(\@this, \@that); | |
1002 | ||
1003 | Checks if two arrays are equivalent. This is a deep check, so | |
1004 | multi-level structures are handled correctly. | |
1005 | ||
1006 | =cut | |
1007 | ||
1008 | #'# | |
2f71ccc2 | 1009 | sub eq_array { |
3f2ec160 | 1010 | my($a1, $a2) = @_; |
3f2ec160 JH |
1011 | return 1 if $a1 eq $a2; |
1012 | ||
1013 | my $ok = 1; | |
33459055 MS |
1014 | my $max = $#$a1 > $#$a2 ? $#$a1 : $#$a2; |
1015 | for (0..$max) { | |
1016 | my $e1 = $_ > $#$a1 ? $DNE : $a1->[$_]; | |
1017 | my $e2 = $_ > $#$a2 ? $DNE : $a2->[$_]; | |
1018 | ||
1019 | push @Data_Stack, { type => 'ARRAY', idx => $_, vals => [$e1, $e2] }; | |
3f2ec160 | 1020 | $ok = _deep_check($e1,$e2); |
33459055 MS |
1021 | pop @Data_Stack if $ok; |
1022 | ||
3f2ec160 JH |
1023 | last unless $ok; |
1024 | } | |
1025 | return $ok; | |
1026 | } | |
1027 | ||
1028 | sub _deep_check { | |
1029 | my($e1, $e2) = @_; | |
1030 | my $ok = 0; | |
1031 | ||
d020a79a JH |
1032 | my $eq; |
1033 | { | |
4bd4e70a | 1034 | # Quiet uninitialized value warnings when comparing undefs. |
d020a79a JH |
1035 | local $^W = 0; |
1036 | ||
2f71ccc2 | 1037 | if( $e1 eq $e2 ) { |
d020a79a | 1038 | $ok = 1; |
3f2ec160 JH |
1039 | } |
1040 | else { | |
2f71ccc2 | 1041 | if( UNIVERSAL::isa($e1, 'ARRAY') and |
d020a79a JH |
1042 | UNIVERSAL::isa($e2, 'ARRAY') ) |
1043 | { | |
2f71ccc2 | 1044 | $ok = eq_array($e1, $e2); |
d020a79a JH |
1045 | } |
1046 | elsif( UNIVERSAL::isa($e1, 'HASH') and | |
1047 | UNIVERSAL::isa($e2, 'HASH') ) | |
1048 | { | |
2f71ccc2 | 1049 | $ok = eq_hash($e1, $e2); |
d020a79a | 1050 | } |
33459055 MS |
1051 | elsif( UNIVERSAL::isa($e1, 'REF') and |
1052 | UNIVERSAL::isa($e2, 'REF') ) | |
1053 | { | |
1054 | push @Data_Stack, { type => 'REF', vals => [$e1, $e2] }; | |
1055 | $ok = _deep_check($$e1, $$e2); | |
1056 | pop @Data_Stack if $ok; | |
1057 | } | |
1058 | elsif( UNIVERSAL::isa($e1, 'SCALAR') and | |
1059 | UNIVERSAL::isa($e2, 'SCALAR') ) | |
1060 | { | |
1061 | push @Data_Stack, { type => 'REF', vals => [$e1, $e2] }; | |
1062 | $ok = _deep_check($$e1, $$e2); | |
1063 | } | |
d020a79a | 1064 | else { |
33459055 | 1065 | push @Data_Stack, { vals => [$e1, $e2] }; |
d020a79a JH |
1066 | $ok = 0; |
1067 | } | |
3f2ec160 JH |
1068 | } |
1069 | } | |
d020a79a | 1070 | |
3f2ec160 JH |
1071 | return $ok; |
1072 | } | |
1073 | ||
1074 | ||
1075 | =item B<eq_hash> | |
1076 | ||
1077 | eq_hash(\%this, \%that); | |
1078 | ||
1079 | Determines if the two hashes contain the same keys and values. This | |
1080 | is a deep check. | |
1081 | ||
1082 | =cut | |
1083 | ||
1084 | sub eq_hash { | |
1085 | my($a1, $a2) = @_; | |
3f2ec160 JH |
1086 | return 1 if $a1 eq $a2; |
1087 | ||
1088 | my $ok = 1; | |
33459055 MS |
1089 | my $bigger = keys %$a1 > keys %$a2 ? $a1 : $a2; |
1090 | foreach my $k (keys %$bigger) { | |
1091 | my $e1 = exists $a1->{$k} ? $a1->{$k} : $DNE; | |
1092 | my $e2 = exists $a2->{$k} ? $a2->{$k} : $DNE; | |
1093 | ||
1094 | push @Data_Stack, { type => 'HASH', idx => $k, vals => [$e1, $e2] }; | |
3f2ec160 | 1095 | $ok = _deep_check($e1, $e2); |
33459055 MS |
1096 | pop @Data_Stack if $ok; |
1097 | ||
3f2ec160 JH |
1098 | last unless $ok; |
1099 | } | |
1100 | ||
1101 | return $ok; | |
1102 | } | |
1103 | ||
1104 | =item B<eq_set> | |
1105 | ||
1106 | eq_set(\@this, \@that); | |
1107 | ||
1108 | Similar to eq_array(), except the order of the elements is B<not> | |
1109 | important. This is a deep check, but the irrelevancy of order only | |
1110 | applies to the top level. | |
1111 | ||
60ffb308 MS |
1112 | B<NOTE> By historical accident, this is not a true set comparision. |
1113 | While the order of elements does not matter, duplicate elements do. | |
1114 | ||
3f2ec160 JH |
1115 | =cut |
1116 | ||
1117 | # We must make sure that references are treated neutrally. It really | |
1118 | # doesn't matter how we sort them, as long as both arrays are sorted | |
1119 | # with the same algorithm. | |
d020a79a | 1120 | sub _bogus_sort { local $^W = 0; ref $a ? 0 : $a cmp $b } |
3f2ec160 JH |
1121 | |
1122 | sub eq_set { | |
1123 | my($a1, $a2) = @_; | |
1124 | return 0 unless @$a1 == @$a2; | |
1125 | ||
1126 | # There's faster ways to do this, but this is easiest. | |
1127 | return eq_array( [sort _bogus_sort @$a1], [sort _bogus_sort @$a2] ); | |
1128 | } | |
1129 | ||
3f2ec160 JH |
1130 | =back |
1131 | ||
d020a79a | 1132 | |
a9153838 | 1133 | =head2 Extending and Embedding Test::More |
d020a79a | 1134 | |
a9153838 MS |
1135 | Sometimes the Test::More interface isn't quite enough. Fortunately, |
1136 | Test::More is built on top of Test::Builder which provides a single, | |
1137 | unified backend for any test library to use. This means two test | |
1138 | libraries which both use Test::Builder B<can be used together in the | |
1139 | same program>. | |
1140 | ||
1141 | If you simply want to do a little tweaking of how the tests behave, | |
1142 | you can access the underlying Test::Builder object like so: | |
3f2ec160 | 1143 | |
d020a79a JH |
1144 | =over 4 |
1145 | ||
a9153838 | 1146 | =item B<builder> |
d020a79a | 1147 | |
a9153838 | 1148 | my $test_builder = Test::More->builder; |
d020a79a | 1149 | |
a9153838 MS |
1150 | Returns the Test::Builder object underlying Test::More for you to play |
1151 | with. | |
1152 | ||
1153 | =cut | |
d020a79a | 1154 | |
a9153838 MS |
1155 | sub builder { |
1156 | return Test::Builder->new; | |
1157 | } | |
d020a79a | 1158 | |
a9153838 | 1159 | =back |
3f2ec160 | 1160 | |
d020a79a | 1161 | |
a9153838 MS |
1162 | =head1 NOTES |
1163 | ||
1164 | Test::More is B<explicitly> tested all the way back to perl 5.004. | |
d020a79a | 1165 | |
a344be10 MS |
1166 | Test::More is thread-safe for perl 5.8.0 and up. |
1167 | ||
a9153838 MS |
1168 | =head1 BUGS and CAVEATS |
1169 | ||
1170 | =over 4 | |
1171 | ||
1172 | =item Making your own ok() | |
1173 | ||
1174 | If you are trying to extend Test::More, don't. Use Test::Builder | |
1175 | instead. | |
1176 | ||
1177 | =item The eq_* family has some caveats. | |
d020a79a JH |
1178 | |
1179 | =item Test::Harness upgrades | |
3f2ec160 | 1180 | |
d020a79a | 1181 | no_plan and todo depend on new Test::Harness features and fixes. If |
a9153838 MS |
1182 | you're going to distribute tests that use no_plan or todo your |
1183 | end-users will have to upgrade Test::Harness to the latest one on | |
1184 | CPAN. If you avoid no_plan and TODO tests, the stock Test::Harness | |
1185 | will work fine. | |
d020a79a JH |
1186 | |
1187 | If you simply depend on Test::More, it's own dependencies will cause a | |
1188 | Test::Harness upgrade. | |
1189 | ||
1190 | =back | |
3f2ec160 | 1191 | |
3f2ec160 JH |
1192 | |
1193 | =head1 HISTORY | |
1194 | ||
1195 | This is a case of convergent evolution with Joshua Pritikin's Test | |
4bd4e70a | 1196 | module. I was largely unaware of its existence when I'd first |
3f2ec160 JH |
1197 | written my own ok() routines. This module exists because I can't |
1198 | figure out how to easily wedge test names into Test's interface (along | |
1199 | with a few other problems). | |
1200 | ||
1201 | The goal here is to have a testing utility that's simple to learn, | |
1202 | quick to use and difficult to trip yourself up with while still | |
1203 | providing more flexibility than the existing Test.pm. As such, the | |
1204 | names of the most common routines are kept tiny, special cases and | |
1205 | magic side-effects are kept to a minimum. WYSIWYG. | |
1206 | ||
1207 | ||
1208 | =head1 SEE ALSO | |
1209 | ||
1210 | L<Test::Simple> if all this confuses you and you just want to write | |
89c1e84a | 1211 | some tests. You can upgrade to Test::More later (it's forward |
3f2ec160 JH |
1212 | compatible). |
1213 | ||
a9153838 MS |
1214 | L<Test::Differences> for more ways to test complex data structures. |
1215 | And it plays well with Test::More. | |
1216 | ||
1217 | L<Test> is the old testing module. Its main benefit is that it has | |
1218 | been distributed with Perl since 5.004_05. | |
3f2ec160 JH |
1219 | |
1220 | L<Test::Harness> for details on how your test results are interpreted | |
1221 | by Perl. | |
1222 | ||
1223 | L<Test::Unit> describes a very featureful unit testing interface. | |
1224 | ||
4bd4e70a | 1225 | L<Test::Inline> shows the idea of embedded testing. |
3f2ec160 JH |
1226 | |
1227 | L<SelfTest> is another approach to embedded testing. | |
1228 | ||
4bd4e70a JH |
1229 | |
1230 | =head1 AUTHORS | |
1231 | ||
a9153838 MS |
1232 | Michael G Schwern E<lt>schwern@pobox.comE<gt> with much inspiration |
1233 | from Joshua Pritikin's Test module and lots of help from Barrie | |
1234 | Slaymaker, Tony Bowden, chromatic and the perl-qa gang. | |
4bd4e70a JH |
1235 | |
1236 | ||
1237 | =head1 COPYRIGHT | |
1238 | ||
1239 | Copyright 2001 by Michael G Schwern E<lt>schwern@pobox.comE<gt>. | |
1240 | ||
1241 | This program is free software; you can redistribute it and/or | |
1242 | modify it under the same terms as Perl itself. | |
1243 | ||
a9153838 | 1244 | See F<http://www.perl.com/perl/misc/Artistic.html> |
4bd4e70a | 1245 | |
3f2ec160 JH |
1246 | =cut |
1247 | ||
1248 | 1; |