8 use vars (qw($VERSION @ISA @EXPORT @EXPORT_OK $ntest $TestLevel), #public-ish
10 $ONFAIL %todo %history $planned @FAILDETAIL) #private-ish
13 # In case a test is run in a persistent environment.
19 $TestLevel = 0; # how many extra stack frames to skip
27 @EXPORT = qw(&plan &ok &skip);
28 @EXPORT_OK = qw($ntest $TESTOUT $TESTERR);
31 $TESTOUT = *STDOUT{IO};
32 $TESTERR = *STDERR{IO};
34 # Use of this variable is strongly discouraged. It is set mainly to
35 # help test coverage analyzers know which test is running.
36 $ENV{REGRESSION_TEST} = $0;
41 Test - provides a simple framework for writing test scripts
48 # use a BEGIN block so we print our plan before MyModule is loaded
49 BEGIN { plan tests => 14, todo => [3,4] }
57 ok(0); # ok, expected failure (see todo list, above)
58 ok(1); # surprise success!
60 ok(0,1); # failure: '0' ne '1'
61 ok('broke','fixed'); # failure: 'broke' ne 'fixed'
62 ok('fixed','fixed'); # success: 'fixed' eq 'fixed'
63 ok('fixed',qr/x/); # success: 'fixed' =~ qr/x/
65 ok(sub { 1+1 }, 2); # success: '2' eq '2'
66 ok(sub { 1+1 }, 3); # failure: '2' ne '3'
67 ok(0, int(rand(2)); # (just kidding :-)
70 ok @list, 3, "\@list=".join(',',@list); #extra diagnostics
71 ok 'segmentation fault', '/(?i)success/'; #regex match
73 skip($feature_is_missing, ...); #do platform specific test
77 B<STOP!> If you are writing a new test, we I<highly suggest> you use
78 the new Test::Simple and Test::More modules instead.
80 L<Test::Harness|Test::Harness> expects to see particular output when it
81 executes tests. This module aims to make writing proper test scripts just
82 a little bit easier (and less error prone :-).
87 All the following are exported by Test by default.
93 BEGIN { plan %theplan; }
95 This should be the first thing you call in your test script. It
96 declares your testing plan, how many there will be, if any of them
97 should be allowed to fail, etc...
99 Typical usage is just:
102 BEGIN { plan tests => 23 }
104 Things you can put in the plan:
106 tests The number of tests in your script.
107 This means all ok() and skip() calls.
108 todo A reference to a list of tests which are allowed
109 to fail. See L</TODO TESTS>.
110 onfail A subroutine reference to be run at the end of
111 the test script should any of the tests fail.
114 You must call plan() once and only once.
119 croak "Test::plan(%args): odd number of arguments" if @_ & 1;
120 croak "Test::plan(): should not be called more than once" if $planned;
122 local($\, $,); # guard against -l and other things that screw with
128 for (my $x=0; $x < @_; $x+=2) {
129 my ($k,$v) = @_[$x,$x+1];
130 if ($k =~ /^test(s)?$/) { $max = $v; }
131 elsif ($k eq 'todo' or
132 $k eq 'failok') { for (@$v) { $todo{$_}=1; }; }
133 elsif ($k eq 'onfail') {
134 ref $v eq 'CODE' or croak "Test::plan(onfail => $v): must be CODE";
137 else { carp "Test::plan(): skipping unrecognized directive '$k'" }
139 my @todo = sort { $a <=> $b } keys %todo;
141 print $TESTOUT "1..$max todo ".join(' ', @todo).";\n";
143 print $TESTOUT "1..$max\n";
156 my $value = _to_value($input);
158 Converts an ok parameter to its value. Typically this just means
159 running it if its a code reference. You should run all inputed
166 return (ref $v or '') eq 'CODE' ? $v->() : $v;
175 ok($have, $expect, $diagnostics);
177 This is the reason for Test's existance. Its the basic function that
178 handles printing "ok" or "not ok" along with the current test number.
180 In its most basic usage, it simply takes an expression. If its true,
181 the test passes, if false, the test fails. Simp.
183 ok( 1 + 1 == 2 ); # ok if 1 + 1 == 2
184 ok( $foo =~ /bar/ ); # ok if $foo contains 'bar'
185 ok( baz($x + $y) eq 'Armondo' ); # ok if baz($x + $y) returns
187 ok( @a == @b ); # ok if @a and @b are the same length
189 The expression is evaluated in scalar context. So the following will
192 ok( @stuff ); # ok if @stuff has any elements
193 ok( !grep !defined $_, @stuff ); # ok if everything in @stuff is
196 A special case is if the expression is a subroutine reference. In
197 that case, it is executed and its value (true or false) determines if
198 the test passes or fails.
200 In its two argument form it compares the two values to see if they
203 ok( "this", "that" ); # not ok, 'this' ne 'that'
205 If either is a subroutine reference, that is run and used as a
208 Should $expect either be a regex reference (ie. qr//) or a string that
209 looks like a regex (ie. '/foo/') ok() will perform a pattern match
210 against it rather than using eq.
212 ok( 'JaffO', '/Jaff/' ); # ok, 'JaffO' =~ /Jaff/
213 ok( 'JaffO', qr/Jaff/ ); # ok, 'JaffO' =~ qr/Jaff/;
214 ok( 'JaffO', '/(?i)jaff/ ); # ok, 'JaffO' =~ /jaff/i;
216 Finally, an optional set of $diagnostics will be printed should the
217 test fail. This should usually be some useful information about the
218 test pertaining to why it failed or perhaps a description of the test.
221 ok( grep($_ eq 'something unique', @stuff), 1,
222 "Something that should be unique isn't!\n".
223 '@stuff = '.join ', ', @stuff
226 Unfortunately, a diagnostic cannot be used with the single argument
229 All these special cases can cause some problems. See L</BUGS and CAVEATS>.
234 croak "ok: plan before you test!" if !$planned;
236 local($\,$,); # guard against -l and other things that screw with
239 my ($pkg,$file,$line) = caller($TestLevel);
240 my $repetition = ++$history{"$file:$line"};
241 my $context = ("$file at line $line".
242 ($repetition > 1 ? " fail \#$repetition" : ''));
244 my $result = _to_value(shift);
245 my ($expected,$diag,$isregex,$regex);
249 $expected = _to_value(shift);
250 if (!defined $expected) {
251 $ok = !defined $result;
252 } elsif (!defined $result) {
254 } elsif ((ref($expected)||'') eq 'Regexp') {
255 $ok = $result =~ /$expected/;
257 } elsif (($regex) = ($expected =~ m,^ / (.+) / $,sx) or
258 (undef, $regex) = ($expected =~ m,^ m([^\w\s]) (.+) \1 $,sx)) {
259 $ok = $result =~ /$regex/;
261 $ok = $result eq $expected;
264 my $todo = $todo{$ntest};
266 $context .= ' TODO?!' if $todo;
267 print $TESTOUT "ok $ntest # ($context)\n";
269 # Issuing two seperate prints() causes problems on VMS.
271 print $TESTOUT "not ok $ntest\n";
274 print $TESTOUT "ok $ntest\n";
278 my $detail = { 'repetition' => $repetition, 'package' => $pkg,
279 'result' => $result, 'todo' => $todo };
280 $$detail{expected} = $expected if defined $expected;
282 # Get the user's diagnostic, protecting against multi-line
284 $diag = $$detail{diagnostic} = _to_value(shift) if @_;
285 $diag =~ s/\n/\n#/g if defined $diag;
287 $context .= ' *TODO*' if $todo;
288 if (!defined $expected) {
290 print $TESTERR "# Failed test $ntest in $context\n";
292 print $TESTERR "# Failed test $ntest in $context: $diag\n";
295 my $prefix = "Test $ntest";
296 print $TESTERR "# $prefix got: ".
297 (defined $result? "'$result'":'<UNDEF>')." ($context)\n";
298 $prefix = ' ' x (length($prefix) - 5);
299 if (defined $regex) {
300 $expected = 'qr{'.$regex.'}';
303 $expected = "'$expected'";
306 print $TESTERR "# $prefix Expected: $expected\n";
308 print $TESTERR "# $prefix Expected: $expected ($diag)\n";
311 push @FAILDETAIL, $detail;
319 local($\, $,); # guard against -l and other things that screw with
322 my $whyskip = _to_value(shift);
323 if (!@_ or $whyskip) {
324 $whyskip = '' if $whyskip =~ m/^\d+$/;
325 $whyskip =~ s/^[Ss]kip(?:\s+|$)//; # backwards compatibility, old
326 # versions required the reason
327 # to start with 'skip'
328 # We print in one shot for VMSy reasons.
329 my $ok = "ok $ntest # skip";
330 $ok .= " $whyskip" if length $whyskip;
336 # backwards compatiblity (I think). skip() used to be
337 # called like ok(), which is weird. I haven't decided what to do with
339 # warn <<WARN if $^W;
340 #This looks like a skip() using the very old interface. Please upgrade to
341 #the documented interface as this has been deprecated.
344 local($TestLevel) = $TestLevel+1; #ignore this stack frame
354 $ONFAIL->(\@FAILDETAIL) if @FAILDETAIL && $ONFAIL;
366 These tests are expected to succeed. If they don't something's
369 =item * SKIPPED TESTS
371 Skip is for tests that might or might not be possible to run depending
372 on the availability of platform specific features. The first argument
373 should evaluate to true (think "yes, please skip") if the required
374 feature is not available. After the first argument, skip works
375 exactly the same way as do normal tests.
379 TODO tests are designed for maintaining an B<executable TODO list>.
380 These tests are expected NOT to succeed. If a TODO test does succeed,
381 the feature in question should not be on the TODO list, now should it?
383 Packages should NOT be released with succeeding TODO tests. As soon
384 as a TODO test starts working, it should be promoted to a normal test
385 and the newly working feature should be documented in the release
392 BEGIN { plan test => 4, onfail => sub { warn "CALL 911!" } }
394 While test failures should be enough, extra diagnostics can be
395 triggered at the end of a test run. C<onfail> is passed an array ref
396 of hash refs that describe each test failure. Each hash will contain
397 at least the following fields: C<package>, C<repetition>, and
398 C<result>. (The file, line, and test number are not included because
399 their correspondence to a particular test is tenuous.) If the test
400 had an expected value or a diagnostic string, these will also be
403 The B<optional> C<onfail> hook might be used simply to print out the
404 version of your package and/or how to report problems. It might also
405 be used to generate extremely sophisticated diagnostics for a
406 particularly bizarre test failure. However it's not a panacea. Core
407 dumps or other unrecoverable errors prevent the C<onfail> hook from
408 running. (It is run inside an C<END> block.) Besides, C<onfail> is
409 probably over-kill in most cases. (Your test code should be simpler
410 than the code it is testing, yes?)
413 =head1 BUGS and CAVEATS
415 ok()'s special handling of subroutine references is an unfortunate
416 "feature" that can't be removed due to compatibility.
418 ok()'s use of string eq can sometimes cause odd problems when comparing
419 numbers, especially if you're casting a string to a number:
422 ok( $foo, 1 ); # not ok, "1.0" ne 1
424 Your best bet is to use the single argument form:
426 ok( $foo == 1 ); # ok "1.0" == 1
428 ok()'s special handing of strings which look like they might be
429 regexes can also cause unexpected behavior. An innocent:
431 ok( $fileglob, '/path/to/some/*stuff/' );
433 will fail since Test.pm considers the second argument to a regex.
434 Again, best bet is to use the single argument form:
436 ok( $fileglob eq '/path/to/some/*stuff/' );
441 This module is no longer actively being developed, only bug fixes and
442 small tweaks (I'll still accept patches). If you desire additional
443 functionality, consider L<Test::More> or L<Test::Unit>.
448 L<Test::Simple>, L<Test::More>, L<Test::Harness>, L<Devel::Cover>
450 L<Test::Builder> for building your own testing library.
452 L<Test::Unit> is an interesting XUnit-style testing library.
454 L<Test::Inline> and L<SelfTest> let you embed tests in code.
459 Copyright (c) 1998-2000 Joshua Nathaniel Pritikin. All rights reserved.
460 Copyright (c) 2001-2002 Michael G Schwern.
462 Current maintainer, Michael G Schwern <schwern@pobox.com>
464 This package is free software and is provided "as is" without express
465 or implied warranty. It may be used, redistributed and/or modified
466 under the same terms as Perl itself.