1#!/usr/bin/perl 2 3use strict; 4BEGIN { 5 $| = 1; 6 $^W = 1; 7} 8 9use Test::More 'no_plan'; 10use File::Remove qw{ remove trash }; 11 12 13 14 15 16# Set up the tests 17my @dirs = ("$0.tmp", map { "$0.tmp/$_" } qw(a a/b c c/d e e/f g)); 18 19for my $path ( reverse @dirs ) { 20 if ( -e $path ) { 21 ok( rmdir($path), "rmdir: $path" ); 22 ok( !-e $path, "!-e: $path" ); 23 } 24} 25 26for my $path ( @dirs ) { 27 ok( ! -e $path, "!-e: $path" ); 28 ok( mkdir($path, 0777), "mkdir: $path" ); 29 chmod 0777, $path; 30 ok( -e $path, "-e: $path" ); 31} 32 33for my $path (reverse @dirs) { 34 ok( -e $path, "-e: $path" ); 35 ok( rmdir($path), "rmdir: $path" ); 36 ok( !-e $path, "!-e: $path" ); 37} 38 39for my $path ( @dirs ) { 40 ok( ! -e $path, "!-e: $path" ); 41 ok( mkdir($path, 0777), "mkdir: $path" ); 42 chmod 0777, $path; 43 ok( -e $path, "-e: $path" ); 44} 45 46for my $path (reverse @dirs) { 47 ok( -e $path, "-e: $path" ); 48 ok( remove(\1, $path), "remove \\1: $path" ); 49 ok( !-e $path, "!-e: $path" ); 50} 51 52for my $path (@dirs) { 53 ok( !-e $path, "!-e: $path" ); 54 ok( mkdir($path, 0777), "mkdir: $path" ); 55 chmod 0777, $path; 56 ok( -e $path, "-e: $path" ); 57} 58 59for my $path (reverse @dirs) { 60 ok( -e $path, "-e: $path" ); 61 ok( remove($path), "remove: $path" ); 62 ok( !-e $path, "!-e: $path" ); 63} 64 65for my $path (reverse @dirs) { 66 ok( !-e $path, "-e: $path" ); 67 if (-e _) { 68 ok( rmdir($path), "rmdir: $path" ); 69 ok( !-e $path, "!-e: $path" ); 70 } 71} 72 73SKIP: { 74 if ($^O eq 'darwin') { 75 eval 'use Mac::Glue ();'; 76 skip "Undelete support requires Mac::Glue", 0 if length $@; 77 eval 'Mac::Glue->new("Finder")'; 78 skip "Undelete support requires Mac::Glue with Finder support", 0 if length $@; 79 } elsif ($^O eq 'cygwin' || $^O =~ /^MSWin/) { 80 eval 'use Win32::FileOp::Recycle;'; 81 skip "Undelete support requires Win32::FileOp::Recycle", 0 if length $@; 82 } else { 83 skip "Undelete support not available by default", 0; 84 } 85 86 for my $path (@dirs) { 87 ok( !-e $path, "!-e: $path" ); 88 ok( mkdir($path, 0777), "mkdir: $path" ); 89 chmod 0777, $path; 90 ok( -e $path, "-e: $path" ); 91 } 92 93 for my $path (reverse @dirs) { 94 ok( -e $path, "-e: $path" ); 95 ok( eval { trash($path) }, "trash: $path" ); 96 is( $@, '', "trash: \$@" ); 97 ok( !-e $path, "!-e: $path" ); 98 } 99 100 for my $path (reverse @dirs) { 101 ok( !-e $path, "-e: $path" ); 102 if (-e _) { 103 ok( rmdir($path), "rmdir: $path" ); 104 ok( !-e $path, "!-e: $path" ); 105 } 106 } 107 108 for my $path (@dirs) { 109 ok( !-e $path, "!-e: $path" ); 110 ok( mkdir($path, 0777), "mkdir: $path" ); 111 chmod 0777, $path; 112 ok( -e $path, "-e: $path" ); 113 } 114 115 for my $path (reverse @dirs) { 116 ok( -e $path, "-e: $path" ); 117 ok( remove($path), "remove: $path" ); 118 ok( !-e $path, "!-e: $path" ); 119 } 120 121 for my $path (reverse @dirs) { 122 ok( !-e $path, "-e: $path" ); 123 if (-e _) { 124 ok( rmdir($path), "rmdir: $path" ); 125 ok( !-e $path, "!-e: $path" ); 126 } 127 } 128 129 for my $path (@dirs) { 130 ok( !-e $path, "!-e: $path" ); 131 ok( mkdir($path, 0777), "mkdir: $path" ); 132 chmod 0777, $path; 133 ok( -e $path, "-e: $path" ); 134 } 135 136 for my $path (reverse @dirs) { 137 ok( -e $path, "-e: $path" ); 138 ok( 139 # Fake callbacks will not remove directories, so trash() would return empty list 140 eval { trash({ 'rmdir' => sub { 1 }, 'unlink' => sub { 1 } }, $path); 1 }, 141 "trash: $path", 142 ); 143 ok( -e $path, "-e: $path" ); 144 ok( rmdir($path), "rmdir: $path" ); 145 ok( !-e $path, "!-e: $path" ); 146 } 147 148 UNDELETE: 1; 149} 150