|
Packit |
6427f8 |
#!/usr/bin/perl -w
|
|
Packit |
6427f8 |
use strict;
|
|
Packit |
6427f8 |
use warnings;
|
|
Packit |
6427f8 |
use autodie::hints;
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
use FindBin;
|
|
Packit |
6427f8 |
use lib "$FindBin::Bin/lib";
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
use File::Copy qw(copy move cp mv);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
use Test::More 'no_plan';
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
use constant NO_SUCH_FILE => "this_file_had_better_not_exist";
|
|
Packit |
6427f8 |
use constant NO_SUCH_FILE2 => "this_file_had_better_not_exist_xyzzy";
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
use constant PERL510 => ( $] >= 5.0100 );
|
|
Packit |
6427f8 |
use constant PERL5101 => ( $] >= 5.0101 );
|
|
Packit |
6427f8 |
use constant PERL5102 => ( $] >= 5.0102 );
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
# File::Copy states that all subroutines return '0' on failure.
|
|
Packit |
6427f8 |
# However both Windows and VMS may return other false values
|
|
Packit |
6427f8 |
# (notably empty-string) on failure. This constant indicates
|
|
Packit |
6427f8 |
# whether we should skip some tests because the return values
|
|
Packit |
6427f8 |
# from File::Copy may not be what's in the documentation.
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
use constant WEIRDO_FILE_COPY =>
|
|
Packit |
6427f8 |
( ! PERL5102 and ( $^O eq "MSWin32" or $^O eq "VMS" ));
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
use Hints_test qw(
|
|
Packit |
6427f8 |
fail_on_empty fail_on_false fail_on_undef
|
|
Packit |
6427f8 |
);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
use autodie qw(fail_on_empty fail_on_false fail_on_undef);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
diag("Sub::Identify ", exists( $INC{'Sub/Identify.pm'} ) ? "is" : "is not",
|
|
Packit |
6427f8 |
" loaded") if (! $ENV{PERL_CORE});
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
my $hints = "autodie::hints";
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
# Basic hinting tests
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
is( $hints->sub_fullname(\©), 'File::Copy::copy' , "Id: copy" );
|
|
Packit |
6427f8 |
is(
|
|
Packit |
6427f8 |
$hints->sub_fullname(\&cp),
|
|
Packit |
6427f8 |
PERL5101 ? 'File::Copy::cp' : 'File::Copy::copy' , "Id: cp"
|
|
Packit |
6427f8 |
);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
is( $hints->sub_fullname(\&move), 'File::Copy::move' , "Id: move" );
|
|
Packit |
6427f8 |
is( $hints->sub_fullname(\&mv),
|
|
Packit |
6427f8 |
PERL5101 ? 'File::Copy::mv' : 'File::Copy::move' , "Id: mv"
|
|
Packit |
6427f8 |
);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
if (PERL510) {
|
|
Packit |
6427f8 |
ok( $hints->get_hints_for(\©)->{scalar}->(0) ,
|
|
Packit |
6427f8 |
"copy() hints should fail on 0 for scalars."
|
|
Packit |
6427f8 |
);
|
|
Packit |
6427f8 |
ok( $hints->get_hints_for(\©)->{list}->(0) ,
|
|
Packit |
6427f8 |
"copy() hints should fail on 0 for lists."
|
|
Packit |
6427f8 |
);
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
# Scalar context test
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
eval {
|
|
Packit |
6427f8 |
use autodie qw(copy);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
my $scalar_context = copy(NO_SUCH_FILE, NO_SUCH_FILE2);
|
|
Packit |
6427f8 |
};
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
isnt("$@", "", "Copying in scalar context should throw an error.");
|
|
Packit |
6427f8 |
isa_ok($@, "autodie::exception");
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
is($@->function, "File::Copy::copy", "Function should be original name");
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
SKIP: {
|
|
Packit |
6427f8 |
skip("File::Copy is weird on Win32/VMS before 5.10.1", 1)
|
|
Packit |
6427f8 |
if WEIRDO_FILE_COPY;
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
is($@->return, 0, "File::Copy returns zero on failure");
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
is($@->context, "scalar", "File::Copy called in scalar context");
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
# List context test.
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
eval {
|
|
Packit |
6427f8 |
use autodie qw(copy);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
my @list_context = copy(NO_SUCH_FILE, NO_SUCH_FILE2);
|
|
Packit |
6427f8 |
};
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
isnt("$@", "", "Copying in list context should throw an error.");
|
|
Packit |
6427f8 |
isa_ok($@, "autodie::exception");
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
is($@->function, "File::Copy::copy", "Function should be original name");
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
SKIP: {
|
|
Packit |
6427f8 |
skip("File::Copy is weird on Win32/VMS before 5.10.1", 1)
|
|
Packit |
6427f8 |
if WEIRDO_FILE_COPY;
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
is_deeply($@->return, [0], "File::Copy returns zero on failure");
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
is($@->context, "list", "File::Copy called in list context");
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
# Tests on loaded funcs.
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
my %tests = (
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
# Test code # Exception expected?
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'fail_on_empty()' => 1,
|
|
Packit |
6427f8 |
'fail_on_empty(0)' => 0,
|
|
Packit |
6427f8 |
'fail_on_empty(undef)' => 0,
|
|
Packit |
6427f8 |
'fail_on_empty(1)' => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'fail_on_false()' => 1,
|
|
Packit |
6427f8 |
'fail_on_false(0)' => 1,
|
|
Packit |
6427f8 |
'fail_on_false(undef)' => 1,
|
|
Packit |
6427f8 |
'fail_on_false(1)' => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'fail_on_undef()' => 1,
|
|
Packit |
6427f8 |
'fail_on_undef(0)' => 0,
|
|
Packit |
6427f8 |
'fail_on_undef(undef)' => 1,
|
|
Packit |
6427f8 |
'fail_on_undef(1)' => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
# On Perl 5.8, autodie doesn't correctly propagate into string evals.
|
|
Packit |
6427f8 |
# The following snippet forces the use of autodie inside the eval if
|
|
Packit |
6427f8 |
# we really really have to. For 5.10+, we don't want to include this
|
|
Packit |
6427f8 |
# fix, because the tests will act as a canary if we screw up string
|
|
Packit |
6427f8 |
# eval propagation.
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
my $perl58_fix = (
|
|
Packit |
6427f8 |
$] >= 5.010 ?
|
|
Packit |
6427f8 |
"" :
|
|
Packit |
6427f8 |
"use autodie qw(fail_on_empty fail_on_false fail_on_undef); "
|
|
Packit |
6427f8 |
);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
while (my ($test, $exception_expected) = each %tests) {
|
|
Packit |
6427f8 |
eval "
|
|
Packit |
6427f8 |
$perl58_fix
|
|
Packit |
6427f8 |
my \@array = $test;
|
|
Packit |
6427f8 |
";
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
if ($exception_expected) {
|
|
Packit |
6427f8 |
isnt("$@", "", $test);
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
else {
|
|
Packit |
6427f8 |
is($@, "", $test);
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
1;
|