Doit
view release on metacpan or search on metacpan
}
$r->touch('doit-a', 'doit-b', 'doit-c');
is $r->unlink('not-existing', 'doit-a', 'doit-b', 'doit-c'), 3, 'three of four files were deleted';
######################################################################
# chmod
$r->create_file_if_nonexisting('doit-test2');
is $r->chmod(0755, "doit-test", "doit-test2"), 2; # changes expected
is $r->chmod(0644, "doit-test2"), 1; # one change expected
is $r->chmod({quiet => 1}, 0755, "doit-test2"), 1;
is $r->chmod({quiet => 1}, 0644, "doit-test2"), 1;
{
local $TODO = "No noop on Windows" if $^O eq 'MSWin32';
is $r->chmod(0755, "doit-test"), 0; # noop
}
eval { $r->chmod(0644, "does-not-exist") };
like $@, qr{chmod failed: };
eval { $r->chmod(0644, "does-not-exist-1", "does-not-exist-2") };
like $@, qr{chmod failed on all files: };
eval { $r->chmod(0644, "doit-test", "does-not-exist") };
like $@, qr{\Qchmod failed on some files (1/2): };
{
local $TODO = "No noop on Windows" if $^O eq 'MSWin32';
is $r->chmod(0644, "doit-test"), 0; # noop
}
######################################################################
# chown
is $r->chown(-1, -1, "doit-test"), 0;
is $r->chown($>, undef, "doit-test"), 0;
is $r->chown($>, -1, "doit-test"), 0;
is $r->chown($>, undef, "doit-test"), 0;
is $r->chown({quiet => 1 }, $>, undef, "doit-test"), 0;
SKIP: {
my @groups = split / /, $);
my $another_group = $groups[1];
skip "No other group available for test (we have only gids: $))", 3 if !defined $another_group || $groups[0] eq $another_group;
is $r->chown(undef, $another_group, "doit-test"), 1;
is $r->chown(undef, $another_group, "doit-test"), 0;
skip "getgrnam not available on MSWin32", 1 if $^O eq 'MSWin32';
my $another_groupname = getgrgid($another_group);
skip "Cannot get groupname for gid $another_group", 1 if !defined $another_groupname;
is $r->chown(undef, $another_groupname, 'doit-test'), 0;
}
SKIP: {
skip "chown never fails on MSWin32", 2 if $^O eq 'MSWin32';
eval { $r->chown($>, undef, "does-not-exist") };
like $@, qr{chown failed: };
eval { $r->chown($>, undef, "does-not-exist-1", "does-not-exist-2") };
like $@, qr{chown failed on all files: };
# no test case for "chown failed on some files"
}
SKIP: {
skip "getpwnam and getgrnam not available on MSWin32", 1 if $^O eq 'MSWin32';
eval { $r->chown("user-does-not-exist", undef, "doit-test") };
like $@, qr{\QUser 'user-does-not-exist' does not exist };
eval { $r->chown(undef, "group-does-not-exist", "doit-test") };
like $@, qr{\QGroup 'group-does-not-exist' does not exist };
SKIP: {
my $username = (getpwuid($>))[0];
skip "Cannot get username for uid $>", 1 if !defined $username;
is $r->chown($username, undef, "doit-test"), 0;
}
}
######################################################################
# rename, move
is $r->rename("doit-test", "doit-test3"), 1;
$r->move("doit-test3", "doit-test2");
is $r->rename("doit-test2", "doit-test"), 1;
eval { $r->rename("doit-test", "non-existent-directory/does-not-work") };
like $@, qr{ERROR.*\Q$errno_string{ENOENT}}, 'failed rename';
ok !-e "non-existent-directory/does-not-work", 'last rename really failed';
ok -e "doit-test", 'file is not renamed';
eval { $r->move("doit-test", "non-existent-directory/does-not-work") };
like $@, qr{ERROR.*\Q$errno_string{ENOENT}}, 'failed rename';
ok !-e "non-existent-directory/does-not-work", 'last rename really failed';
ok -e "doit-test", 'file is not renamed';
######################################################################
# copy
is $r->copy("doit-test", "doit-copy"), 1;
ok -e "doit-copy"
or diag qx(ls -al);
is $r->copy("doit-test", "doit-copy"), 0; # no action
$r->unlink("doit-copy");
######################################################################
# symlink, ln_nsf
TODO: {
todo_skip "symlinks not working on Windows", 11
if $^O eq 'MSWin32';
is $r->symlink("tmp/doit-test", "doit-test-symlink"), 1;
ok -l "doit-test-symlink", 'symlink created';
is readlink("doit-test-symlink"), "tmp/doit-test", 'symlink points to expected destination';
is $r->symlink("tmp/doit-test", "doit-test-symlink"), 0;
ok -l "doit-test-symlink", 'symlink still exists';
is readlink("doit-test-symlink"), "tmp/doit-test", 'symlink did not change expected destination';
$r->unlink("doit-test-symlink");
ok ! -e "doit-test-symlink", 'symlink was removed';
eval { $r->ln_nsf };
like $@, qr{oldfile was not specified for ln_nsf};
eval { $r->ln_nsf("tmp/doit-test") };
like $@, qr{newfile was not specified for ln_nsf};
is $r->ln_nsf("tmp/doit-test", "doit-test-symlink2"), 1;
ok -l "doit-test-symlink2", 'symlink created with ln -nsf';
is readlink("doit-test-symlink2"), "tmp/doit-test", 'symlink points to expected destination';
is $r->ln_nsf("tmp/doit-test", "doit-test-symlink2"), 0;
ok -l "doit-test-symlink2", 'symlink still exists (ln -nsf)';
is readlink("doit-test-symlink2"), "tmp/doit-test", 'symlink did not change expected destination';
is $r->ln_nsf("doit-test", "doit-test-symlink2"), 1;
ok -l "doit-test-symlink2", 'new symlink (ln -nsf)';
is readlink("doit-test-symlink2"), "doit-test", 'symlink was changed';
$r->unlink("doit-test-symlink2");
ok ! -e "doit-test-symlink2", 'symlink was removed';
$r->mkdir("dir-for-ln-nsf-test");
ok -d "dir-for-ln-nsf-test";
( run in 1.600 second using v1.01-cache-2.11-cpan-39bf76dae61 )