8 use vars (qw($VERSION @ISA @EXPORT @EXPORT_OK $ntest $TestLevel), #public-ish
9 qw($TESTOUT $ONFAIL %todo %history $planned @FAILDETAIL)#private-ish
16 @EXPORT = qw(&plan &ok &skip);
17 @EXPORT_OK = qw($ntest $TESTOUT);
19 $TestLevel = 0; # how many extra stack frames to skip
22 $TESTOUT = *STDOUT{IO};
24 # Use of this variable is strongly discouraged. It is set mainly to
25 # help test coverage analyzers know which test is running.
26 $ENV{REGRESSION_TEST} = $0;
31 Test - provides a simple framework for writing test scripts
38 # use a BEGIN block so we print our plan before MyModule is loaded
39 BEGIN { plan tests => 14, todo => [3,4] }
47 ok(0); # ok, expected failure (see todo list, above)
48 ok(1); # surprise success!
50 ok(0,1); # failure: '0' ne '1'
51 ok('broke','fixed'); # failure: 'broke' ne 'fixed'
52 ok('fixed','fixed'); # success: 'fixed' eq 'fixed'
53 ok('fixed',qr/x/); # success: 'fixed' =~ qr/x/
55 ok(sub { 1+1 }, 2); # success: '2' eq '2'
56 ok(sub { 1+1 }, 3); # failure: '2' ne '3'
57 ok(0, int(rand(2)); # (just kidding :-)
60 ok @list, 3, "\@list=".join(',',@list); #extra diagnostics
61 ok 'segmentation fault', '/(?i)success/'; #regex match
63 skip($feature_is_missing, ...); #do platform specific test
67 B<STOP!> If you are writing a new test, we I<highly suggest> you use
68 the new Test::Simple and Test::More modules instead.
70 L<Test::Harness|Test::Harness> expects to see particular output when it
71 executes tests. This module aims to make writing proper test scripts just
72 a little bit easier (and less error prone :-).
77 All the following are exported by Test by default.
83 BEGIN { plan %theplan; }
85 This should be the first thing you call in your test script. It
86 declares your testing plan, how many there will be, if any of them
87 should be allowed to fail, etc...
89 Typical usage is just:
92 BEGIN { plan tests => 23 }
94 Things you can put in the plan:
96 tests The number of tests in your script.
97 This means all ok() and skip() calls.
98 todo A reference to a list of tests which are allowed
99 to fail. See L</TODO TESTS>.
100 onfail A subroutine reference to be run at the end of
101 the test script should any of the tests fail.
104 You must call plan() once and only once.
109 croak "Test::plan(%args): odd number of arguments" if @_ & 1;
110 croak "Test::plan(): should not be called more than once" if $planned;
112 local($\, $,); # guard against -l and other things that screw with
116 for (my $x=0; $x < @_; $x+=2) {
117 my ($k,$v) = @_[$x,$x+1];
118 if ($k =~ /^test(s)?$/) { $max = $v; }
119 elsif ($k eq 'todo' or
120 $k eq 'failok') { for (@$v) { $todo{$_}=1; }; }
121 elsif ($k eq 'onfail') {
122 ref $v eq 'CODE' or croak "Test::plan(onfail => $v): must be CODE";
125 else { carp "Test::plan(): skipping unrecognized directive '$k'" }
127 my @todo = sort { $a <=> $b } keys %todo;
129 print $TESTOUT "1..$max todo ".join(' ', @todo).";\n";
131 print $TESTOUT "1..$max\n";
144 my $value = _to_value($input);
146 Converts an ok parameter to its value. Typically this just means
147 running it if its a code reference. You should run all inputed
154 return (ref $v or '') eq 'CODE' ? $v->() : $v;
163 ok($have, $expect, $diagnostics);
165 This is the reason for Test's existance. Its the basic function that
166 handles printing "ok" or "not ok" along with the current test number.
168 In its most basic usage, it simply takes an expression. If its true,
169 the test passes, if false, the test fails. Simp.
171 ok( 1 + 1 == 2 ); # ok if 1 + 1 == 2
172 ok( $foo =~ /bar/ ); # ok if $foo contains 'bar'
173 ok( baz($x + $y) eq 'Armondo' ); # ok if baz($x + $y) returns
175 ok( @a == @b ); # ok if @a and @b are the same length
177 The expression is evaluated in scalar context. So the following will
180 ok( @stuff ); # ok if @stuff has any elements
181 ok( !grep !defined $_, @stuff ); # ok if everything in @stuff is
184 A special case is if the expression is a subroutine reference. In
185 that case, it is executed and its value (true or false) determines if
186 the test passes or fails.
188 In its two argument form it compares the two values to see if they
191 ok( "this", "that" ); # not ok, 'this' ne 'that'
193 If either is a subroutine reference, that is run and used as a
196 Should $expect either be a regex reference (ie. qr//) or a string that
197 looks like a regex (ie. '/foo/') ok() will perform a pattern match
198 against it rather than using eq.
200 ok( 'JaffO', '/Jaff/' ); # ok, 'JaffO' =~ /Jaff/
201 ok( 'JaffO', qr/Jaff/ ); # ok, 'JaffO' =~ qr/Jaff/;
202 ok( 'JaffO', '/(?i)jaff/ ); # ok, 'JaffO' =~ /jaff/i;
204 Finally, an optional set of $diagnostics will be printed should the
205 test fail. This should usually be some useful information about the
206 test pertaining to why it failed or perhaps a description of the test.
209 ok( grep($_ eq 'something unique', @stuff), 1,
210 "Something that should be unique isn't!\n".
211 '@stuff = '.join ', ', @stuff
214 Unfortunately, a diagnostic cannot be used with the single argument
217 All these special cases can cause some problems. See L</BUGS and CAVEATS>.
222 croak "ok: plan before you test!" if !$planned;
224 local($\,$,); # guard against -l and other things that screw with
227 my ($pkg,$file,$line) = caller($TestLevel);
228 my $repetition = ++$history{"$file:$line"};
229 my $context = ("$file at line $line".
230 ($repetition > 1 ? " fail \#$repetition" : ''));
232 my $result = _to_value(shift);
233 my ($expected,$diag,$isregex,$regex);
237 $expected = _to_value(shift);
238 if (!defined $expected) {
239 $ok = !defined $result;
240 } elsif (!defined $result) {
242 } elsif ((ref($expected)||'') eq 'Regexp') {
243 $ok = $result =~ /$expected/;
245 } elsif (($regex) = ($expected =~ m,^ / (.+) / $,sx) or
246 (undef, $regex) = ($expected =~ m,^ m([^\w\s]) (.+) \1 $,sx)) {
247 $ok = $result =~ /$regex/;
249 $ok = $result eq $expected;
252 my $todo = $todo{$ntest};
254 $context .= ' TODO?!' if $todo;
255 print $TESTOUT "ok $ntest # ($context)\n";
257 # Issuing two seperate prints() causes problems on VMS.
259 print $TESTOUT "not ok $ntest\n";
262 print $TESTOUT "ok $ntest\n";
266 my $detail = { 'repetition' => $repetition, 'package' => $pkg,
267 'result' => $result, 'todo' => $todo };
268 $$detail{expected} = $expected if defined $expected;
270 # Get the user's diagnostic, protecting against multi-line
272 $diag = $$detail{diagnostic} = _to_value(shift) if @_;
273 $diag =~ s/\n/\n#/g if defined $diag;
275 $context .= ' *TODO*' if $todo;
276 if (!defined $expected) {
278 print $TESTOUT "# Failed test $ntest in $context\n";
280 print $TESTOUT "# Failed test $ntest in $context: $diag\n";
283 my $prefix = "Test $ntest";
284 print $TESTOUT "# $prefix got: ".
285 (defined $result? "'$result'":'<UNDEF>')." ($context)\n";
286 $prefix = ' ' x (length($prefix) - 5);
287 if (defined $regex) {
288 $expected = 'qr{'.$regex.'}';
291 $expected = "'$expected'";
294 print $TESTOUT "# $prefix Expected: $expected\n";
296 print $TESTOUT "# $prefix Expected: $expected ($diag)\n";
299 push @FAILDETAIL, $detail;
307 local($\, $,); # guard against -l and other things that screw with
310 my $whyskip = _to_value(shift);
311 if (!@_ or $whyskip) {
312 $whyskip = '' if $whyskip =~ m/^\d+$/;
313 $whyskip =~ s/^[Ss]kip(?:\s+|$)//; # backwards compatibility, old
314 # versions required the reason
315 # to start with 'skip'
316 # We print in one shot for VMSy reasons.
317 my $ok = "ok $ntest # skip";
318 $ok .= " $whyskip" if length $whyskip;
324 # backwards compatiblity (I think). skip() used to be
325 # called like ok(), which is weird. I haven't decided what to do with
327 # warn <<WARN if $^W;
328 #This looks like a skip() using the very old interface. Please upgrade to
329 #the documented interface as this has been deprecated.
332 local($TestLevel) = $TestLevel+1; #ignore this stack frame
342 $ONFAIL->(\@FAILDETAIL) if @FAILDETAIL && $ONFAIL;
354 These tests are expected to succeed. If they don't something's
357 =item * SKIPPED TESTS
359 Skip is for tests that might or might not be possible to run depending
360 on the availability of platform specific features. The first argument
361 should evaluate to true (think "yes, please skip") if the required
362 feature is not available. After the first argument, skip works
363 exactly the same way as do normal tests.
367 TODO tests are designed for maintaining an B<executable TODO list>.
368 These tests are expected NOT to succeed. If a TODO test does succeed,
369 the feature in question should not be on the TODO list, now should it?
371 Packages should NOT be released with succeeding TODO tests. As soon
372 as a TODO test starts working, it should be promoted to a normal test
373 and the newly working feature should be documented in the release
380 BEGIN { plan test => 4, onfail => sub { warn "CALL 911!" } }
382 While test failures should be enough, extra diagnostics can be
383 triggered at the end of a test run. C<onfail> is passed an array ref
384 of hash refs that describe each test failure. Each hash will contain
385 at least the following fields: C<package>, C<repetition>, and
386 C<result>. (The file, line, and test number are not included because
387 their correspondence to a particular test is tenuous.) If the test
388 had an expected value or a diagnostic string, these will also be
391 The B<optional> C<onfail> hook might be used simply to print out the
392 version of your package and/or how to report problems. It might also
393 be used to generate extremely sophisticated diagnostics for a
394 particularly bizarre test failure. However it's not a panacea. Core
395 dumps or other unrecoverable errors prevent the C<onfail> hook from
396 running. (It is run inside an C<END> block.) Besides, C<onfail> is
397 probably over-kill in most cases. (Your test code should be simpler
398 than the code it is testing, yes?)
401 =head1 BUGS and CAVEATS
403 ok()'s special handling of subroutine references is an unfortunate
404 "feature" that can't be removed due to compatibility.
406 ok()'s use of string eq can sometimes cause odd problems when comparing
407 numbers, especially if you're casting a string to a number:
410 ok( $foo, 1 ); # not ok, "1.0" ne 1
412 Your best bet is to use the single argument form:
414 ok( $foo == 1 ); # ok "1.0" == 1
416 ok()'s special handing of strings which look like they might be
417 regexes can also cause unexpected behavior. An innocent:
419 ok( $fileglob, '/path/to/some/*stuff/' );
421 will fail since Test.pm considers the second argument to a regex.
422 Again, best bet is to use the single argument form:
424 ok( $fileglob eq '/path/to/some/*stuff/' );
438 L<Test::Simple>, L<Test::More>, L<Test::Harness>, L<Devel::Cover>
440 L<Test::Unit> is an interesting alternative testing library.
442 L<Pod::Tests> and L<SelfTest> let you embed tests in code.
447 Copyright (c) 1998-2000 Joshua Nathaniel Pritikin. All rights reserved.
448 Copyright (c) 2001 Michael G Schwern.
450 Current maintainer, Michael G Schwern <schwern@pobox.com>
452 This package is free software and is provided "as is" without express
453 or implied warranty. It may be used, redistributed and/or modified
454 under the terms of the Perl Artistic License (see
455 http://www.perl.com/perl/misc/Artistic.html)