#!/usr/bin/perl
use strict;
BEGIN {
$| = 1;
$^W = 1;
}
use Test::More 'no_plan';
use File::Remove qw{ remove trash };
# Set up the tests
my @dirs = ("$0.tmp", map { "$0.tmp/$_" } qw(a a/b c c/d e e/f g));
for my $path ( reverse @dirs ) {
if ( -e $path ) {
ok( rmdir($path), "rmdir: $path" );
ok( !-e $path, "!-e: $path" );
}
}
for my $path ( @dirs ) {
ok( ! -e $path, "!-e: $path" );
ok( mkdir($path, 0777), "mkdir: $path" );
chmod 0777, $path;
ok( -e $path, "-e: $path" );
}
for my $path (reverse @dirs) {
ok( -e $path, "-e: $path" );
ok( rmdir($path), "rmdir: $path" );
ok( !-e $path, "!-e: $path" );
}
for my $path ( @dirs ) {
ok( ! -e $path, "!-e: $path" );
ok( mkdir($path, 0777), "mkdir: $path" );
chmod 0777, $path;
ok( -e $path, "-e: $path" );
}
for my $path (reverse @dirs) {
ok( -e $path, "-e: $path" );
ok( remove(\1, $path), "remove \\1: $path" );
ok( !-e $path, "!-e: $path" );
}
for my $path (@dirs) {
ok( !-e $path, "!-e: $path" );
ok( mkdir($path, 0777), "mkdir: $path" );
chmod 0777, $path;
ok( -e $path, "-e: $path" );
}
for my $path (reverse @dirs) {
ok( -e $path, "-e: $path" );
ok( remove($path), "remove: $path" );
ok( !-e $path, "!-e: $path" );
}
for my $path (reverse @dirs) {
ok( !-e $path, "-e: $path" );
if (-e _) {
ok( rmdir($path), "rmdir: $path" );
ok( !-e $path, "!-e: $path" );
}
}
SKIP: {
if ($^O eq 'darwin') {
eval 'use Mac::Glue ();';
skip "Undelete support requires Mac::Glue", 0 if length $@;
eval 'Mac::Glue->new("Finder")';
skip "Undelete support requires Mac::Glue with Finder support", 0 if length $@;
} elsif ($^O eq 'cygwin' || $^O =~ /^MSWin/) {
eval 'use Win32::FileOp::Recycle;';
skip "Undelete support requires Win32::FileOp::Recycle", 0 if length $@;
} else {
skip "Undelete support not available by default", 0;
}
for my $path (@dirs) {
ok( !-e $path, "!-e: $path" );
ok( mkdir($path, 0777), "mkdir: $path" );
chmod 0777, $path;
ok( -e $path, "-e: $path" );
}
for my $path (reverse @dirs) {
ok( -e $path, "-e: $path" );
ok( eval { trash($path) }, "trash: $path" );
is( $@, '', "trash: \$@" );
ok( !-e $path, "!-e: $path" );
}
for my $path (reverse @dirs) {
ok( !-e $path, "-e: $path" );
if (-e _) {
ok( rmdir($path), "rmdir: $path" );
ok( !-e $path, "!-e: $path" );
}
}
for my $path (@dirs) {
ok( !-e $path, "!-e: $path" );
ok( mkdir($path, 0777), "mkdir: $path" );
chmod 0777, $path;
ok( -e $path, "-e: $path" );
}
for my $path (reverse @dirs) {
ok( -e $path, "-e: $path" );
ok( remove($path), "remove: $path" );
ok( !-e $path, "!-e: $path" );
}
for my $path (reverse @dirs) {
ok( !-e $path, "-e: $path" );
if (-e _) {
ok( rmdir($path), "rmdir: $path" );
ok( !-e $path, "!-e: $path" );
}
}
for my $path (@dirs) {
ok( !-e $path, "!-e: $path" );
ok( mkdir($path, 0777), "mkdir: $path" );
chmod 0777, $path;
ok( -e $path, "-e: $path" );
}
for my $path (reverse @dirs) {
ok( -e $path, "-e: $path" );
ok(
# Fake callbacks will not remove directories, so trash() would return empty list
eval { trash({ 'rmdir' => sub { 1 }, 'unlink' => sub { 1 } }, $path); 1 },
"trash: $path",
);
ok( -e $path, "-e: $path" );
ok( rmdir($path), "rmdir: $path" );
ok( !-e $path, "!-e: $path" );
}
UNDELETE: 1;
}