I have the following perl code :
use strict;
use warnings;
use Test::Cmd::Common;
my $path = "/something/not/available";
my $test = Test::Cmd::Common->new(string => 'File system operations');
eval{
$test->unlink("$path");
};
ok(!$@, "file unlike");
print "done.\n";
The $test->unlink() line will fail and throw exception. but the problem : eval is not handling that exception and the code execution is being interrupted.
the output :
$ perl test.pl
could not unlink files (/something/not/available): No such file or directory
NO RESULT for test at line 561 of /home/y/lib/perl5/site_perl/5.8/Test/Cmd/Common.pm (Test::Cmd::Common::unlink)
from line 9 of test.pl.
Is eval doing the right job here? or I am misunderstanding something?
F.
From documentation of Test::Cmd::Common: "Removes the specified files. Exits NO RESULT if any file could not be removed for any reason.". And by looking at source, Test::Cmd::Common calls Test::Cmd->no_result, which really does
exit (2);
"exit" cannot be trapped by eval, so it is expected behavior.
This is slightly orthogonal, but if you want to test if an operation "succeeded" or died, use Test::Exception:
use strict;
use warnings;
use Test::More tests => 2;
use Test::Exception;
note 'File system operations';
dies_ok
{ some_operation_which_may_die(); }
'operation died';
throws_ok
{ some_operation_which_may_die(); }
/String we expect to see on death/,
'operation died with expected message';
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With