summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorJames E Keenan <jkeenan@cpan.org>2013-11-11 21:11:14 +0100
committerJames E Keenan <jkeenan@cpan.org>2013-11-17 14:46:25 +0100
commit2a0c00d3b1ecb7d6387a0d33b82acf318b1823bd (patch)
tree1abd399956d10d4260759023fe164772b96e2295 /ext
parente2aa288a0f563ddb8e6f5bb400a8e1f82e623b4e (diff)
downloadperl-2a0c00d3b1ecb7d6387a0d33b82acf318b1823bd.tar.gz
Convert to using Test::More. Provide each test with a description.
For: RT #120503. This entailed: Replacing each instance of Check() and CheckDie() with appropriate Test::More functions. Replacing MkDir() and touch() with mkdir_ok() and create_file_ok() to create a more Test::More-ish interface; create symlink_ok() to handle similar circumstances. Providing those three wrapper subroutines with default descriptions, but allowing a custom description to be passed as an argument. Highlighting more important unit tests found at the end of subsections and blocks by prepending 'COMPLETE:' to their descriptions. More inline comments to guide future maintainers. Some repositioning of code in order to narrow the scope of variables. Replacement of hard tabs with spaces; some regularization of indents and other code tidying. No tests were added or removed, so the planned number of tests on a given platform will be unchanged. TODO: Some descriptions still need improvement. There are quite a few File-Find features mentioned in the POD which are not referenced at all in this test file. They need to have new tests written for them. Coverage analysis.
Diffstat (limited to 'ext')
-rw-r--r--ext/File-Find/t/find.t790
1 files changed, 433 insertions, 357 deletions
diff --git a/ext/File-Find/t/find.t b/ext/File-Find/t/find.t
index 62ec81e947..db44ccd5cc 100644
--- a/ext/File-Find/t/find.t
+++ b/ext/File-Find/t/find.t
@@ -2,12 +2,7 @@
use strict;
use Cwd;
-my %Expect_File = (); # what we expect for $_
-my %Expect_Name = (); # what we expect for $File::Find::name/fullname
-my %Expect_Dir = (); # what we expect for $File::Find::dir
-my $symlink_exists = eval { symlink("",""); 1 };
-my ($warn_msg, @files, $file);
-
+my $warn_msg;
BEGIN {
require File::Spec;
@@ -28,22 +23,27 @@ BEGIN {
import File::Find;
}
+my $symlink_exists = eval { symlink("",""); 1 };
my $test_count = 98;
$test_count += 119 if $symlink_exists;
$test_count += 26 if $^O eq 'MSWin32';
$test_count += 2 if $^O eq 'MSWin32' and $symlink_exists;
-print "1..$test_count\n";
-#if ( $symlink_exists ) { print "1..199\n"; }
-#else { print "1..85\n"; }
+use Test::More;
+plan tests => $test_count;
+
+my %Expect_File = (); # what we expect for $_
+my %Expect_Name = (); # what we expect for $File::Find::name/fullname
+my %Expect_Dir = (); # what we expect for $File::Find::dir
+my (@files);
my $orig_dir = cwd();
-# Uncomment this to see where File::Find is chdir'ing to. Helpful for
+# Uncomment this to see where File::Find is chdir-ing to. Helpful for
# debugging its little jaunts around the filesystem.
# BEGIN {
# use Cwd;
-# *CORE::GLOBAL::chdir = sub ($) {
+# *CORE::GLOBAL::chdir = sub ($) {
# my($file, $line) = (caller)[1,2];
#
# printf "# cwd: %s\n", cwd();
@@ -57,25 +57,21 @@ my $orig_dir = cwd();
cleanup();
+##### Sanity checks #####
+# Do find() and finddepth() work correctly in the directory
+# from which we start? (Test presumes the presence of 'taint.t' in same
+# directory as this test file.)
+
$::count_taint = 0;
find({wanted => sub { ++$::count_taint if $_ eq 'taint.t'; } },
File::Spec->curdir);
-if ($::count_taint == 1) {
- print "ok 1\n";
-} else {
- print "not ok 1 # found $::count_taint files named 'taint.t'\n";
-}
+is($::count_taint, 1, "'find' found exactly 1 file named 'taint.t'");
$::count_taint = 0;
finddepth({wanted => sub { ++$::count_taint if $_ eq 'taint.t'; } },
- File::Spec->curdir);
-if ($::count_taint == 1) {
- print "ok 2\n";
-} else {
- print "not ok 2 # found $::count_taint files named 'taint.t'\n";
-}
+ File::Spec->curdir);
+is($::count_taint, 1, "'finddepth' found exactly 1 file named 'taint.t'");
-my $case = 2;
my $FastFileTests_OK = 0;
sub cleanup {
@@ -85,23 +81,23 @@ sub cleanup {
$need_updir = 1 if chdir(dir_path('for_find'));
}
if (-d dir_path('fa')) {
- unlink file_path('fa', 'fa_ord'),
- file_path('fa', 'fsl'),
- file_path('fa', 'faa', 'faa_ord'),
- file_path('fa', 'fab', 'fab_ord'),
- file_path('fa', 'fab', 'faba', 'faba_ord'),
- file_path('fa', 'fac', 'faca'),
- file_path('fb', 'fb_ord'),
- file_path('fb', 'fba', 'fba_ord'),
- file_path('fb', 'fbc', 'fbca');
- rmdir dir_path('fa', 'faa');
- rmdir dir_path('fa', 'fab', 'faba');
- rmdir dir_path('fa', 'fab');
- rmdir dir_path('fa', 'fac');
- rmdir dir_path('fa');
- rmdir dir_path('fb', 'fba');
- rmdir dir_path('fb', 'fbc');
- rmdir dir_path('fb');
+ unlink file_path('fa', 'fa_ord'),
+ file_path('fa', 'fsl'),
+ file_path('fa', 'faa', 'faa_ord'),
+ file_path('fa', 'fab', 'fab_ord'),
+ file_path('fa', 'fab', 'faba', 'faba_ord'),
+ file_path('fa', 'fac', 'faca'),
+ file_path('fb', 'fb_ord'),
+ file_path('fb', 'fba', 'fba_ord'),
+ file_path('fb', 'fbc', 'fbca');
+ rmdir dir_path('fa', 'faa');
+ rmdir dir_path('fa', 'fab', 'faba');
+ rmdir dir_path('fa', 'fab');
+ rmdir dir_path('fa', 'fac');
+ rmdir dir_path('fa');
+ rmdir dir_path('fb', 'fba');
+ rmdir dir_path('fb', 'fbc');
+ rmdir dir_path('fb');
}
if (-d dir_path('fc')) {
unlink (
@@ -123,7 +119,7 @@ sub cleanup {
chdir($updir);
}
if (-d dir_path('for_find')) {
- rmdir dir_path('for_find') or print "# Can't rmdir for_find: $!\n";
+ rmdir dir_path('for_find') or print "# Can't rmdir for_find: $!\n";
}
}
@@ -131,67 +127,72 @@ END {
cleanup();
}
-sub Check($) {
- $case++;
- if ($_[0]) { print "ok $case\n"; }
- else { print "not ok $case\n"; }
-}
+# Wrappers around Test::More::ok() for creation of files, directories and
+# symlinks used in testing
-sub CheckDie($) {
- $case++;
- if ($_[0]) { print "ok $case\n"; }
- else { print "not ok $case\n $!\n"; exit 0; }
+sub create_file_ok($;$) {
+ my $file = $_[0];
+ my $msg = $_[2] || "able to create file: $file";
+ ok( open(my $T,'>',$file), $msg )
+ or die("Unable to create file: $file");
}
-sub touch {
- CheckDie( open(my $T,'>',$_[0]) );
+sub mkdir_ok($$;$) {
+ my ($dir, $mask) = @_[0..1];
+ my $msg = $_[2] || "able to mkdir: $dir";
+ ok( mkdir($dir, $mask), $msg )
+ or die("Unable to mkdir: $dir");
}
-sub MkDir($$) {
- CheckDie( mkdir($_[0],$_[1]) );
+sub symlink_ok($$;$) {
+ my ($oldfile, $newfile) = @_[0..1];
+ my $msg = $_[2] || "able to symlink from $oldfile to $newfile";
+ ok( symlink( $oldfile, $newfile ), $msg)
+ or die("Unable to symlink from $oldfile to $newfile");
}
sub wanted_File_Dir {
printf "# \$File::Find::dir => '$File::Find::dir'\t\$_ => '$_'\n";
- s#\.$## if ($^O eq 'VMS' && $_ ne '.');
+ s#\.$## if ($^O eq 'VMS' && $_ ne '.'); #
s/(.dir)?$//i if ($^O eq 'VMS' && -d _);
- Check( $Expect_File{$_} );
+ ok( $Expect_File{$_}, "found $_ for \$_, as expected" );
if ( $FastFileTests_OK ) {
- delete $Expect_File{ $_}
+ delete $Expect_File{$_}
unless ( $Expect_Dir{$_} && ! -d _ );
- } else {
- delete $Expect_File{$_}
+ }
+ else {
+ delete $Expect_File{$_}
unless ( $Expect_Dir{$_} && ! -d $_ );
}
}
sub wanted_File_Dir_prune {
&wanted_File_Dir;
- $File::Find::prune=1 if $_ eq 'faba';
+ $File::Find::prune = 1 if $_ eq 'faba';
}
sub wanted_Name {
my $n = $File::Find::name;
- $n =~ s#\.$## if ($^O eq 'VMS' && $n ne '.');
+ $n =~ s#\.$## if ($^O eq 'VMS' && $n ne '.'); #
print "# \$File::Find::name => '$n'\n";
my $i = rindex($n,'/');
my $OK = exists($Expect_Name{$n});
if ( $OK ) {
- $OK= exists($Expect_Name{substr($n,0,$i)}) if $i >= 0;
+ $OK= exists($Expect_Name{substr($n,0,$i)}) if $i >= 0;
}
- Check($OK);
+ ok( $OK, "found $n for \$File::Find::name, as expected" );
delete $Expect_Name{$n};
}
sub wanted_File {
print "# \$_ => '$_'\n";
- s#\.$## if ($^O eq 'VMS' && $_ ne '.');
+ s#\.$## if ($^O eq 'VMS' && $_ ne '.'); #
my $i = rindex($_,'/');
my $OK = exists($Expect_File{ $_});
if ( $OK ) {
- $OK= exists($Expect_File{ substr($_,0,$i)}) if $i >= 0;
+ $OK= exists($Expect_File{ substr($_,0,$i)}) if $i >= 0;
}
- Check($OK);
+ ok( $OK, "found $_ for \$_, as expected" );
delete $Expect_File{ $_};
}
@@ -206,13 +207,14 @@ sub my_preprocess {
@files = @_;
print "# --preprocess--\n";
print "# \$File::Find::dir => '$File::Find::dir' \n";
- foreach $file (@files) {
+ foreach my $file (@files) {
$file =~ s/\.(dir)?$//i if $^O eq 'VMS';
print "# $file \n";
delete $Expect_Dir{ $File::Find::dir }->{$file};
}
print "# --end preprocess--\n";
- Check(scalar(keys %{$Expect_Dir{ $File::Find::dir }}) == 0);
+ is(scalar(keys %{$Expect_Dir{ $File::Find::dir }}), 0,
+ "my_preprocess: got 0, as expected");
if (scalar(keys %{$Expect_Dir{ $File::Find::dir }}) == 0) {
delete $Expect_Dir{ $File::Find::dir }
}
@@ -224,97 +226,102 @@ sub my_postprocess {
delete $Expect_Dir{ $File::Find::dir};
}
-
-# Use dir_path() to specify a directory path that's expected for
+# Use dir_path() to specify a directory path that is expected for
# $File::Find::dir (%Expect_Dir). Also use it in file operations like
# chdir, rmdir etc.
#
# dir_path() concatenates directory names to form a *relative*
-# directory path, independent from the platform it's run on, although
-# there are limitations. Don't try to create an absolute path,
+# directory path, independent from the platform it is run on, although
+# there are limitations. Do not try to create an absolute path,
# because that may fail on operating systems that have the concept of
-# volume names (e.g. Mac OS). As a special case, you can pass it a "."
-# as first argument, to create a directory path like "./fa/dir". If there's
+# volume names (e.g. Mac OS). As a special case, you can pass it a "."
+# as first argument, to create a directory path like "./fa/dir". If there is
# no second argument, this function will return "./"
sub dir_path {
my $first_arg = shift @_;
if ($first_arg eq '.') {
- return './' unless @_;
- my $path = File::Spec->catdir(@_);
- # add leading "./"
- $path = "./$path";
- return $path;
- } else { # $first_arg ne '.'
+ return './' unless @_;
+ my $path = File::Spec->catdir(@_);
+ # add leading "./"
+ $path = "./$path";
+ return $path;
+ }
+ else { # $first_arg ne '.'
return $first_arg unless @_; # return plain filename
return File::Spec->catdir($first_arg, @_); # relative path
}
}
-
# Use topdir() to specify a directory path that you want to pass to
# find/finddepth. Historically topdir() differed on Mac OS classic.
*topdir = \&dir_path;
-
-# Use file_path() to specify a file path that's expected for $_
+# Use file_path() to specify a file path that is expected for $_
# (%Expect_File). Also suitable for file operations like unlink etc.
#
# file_path() concatenates directory names (if any) and a filename to
# form a *relative* file path (the last argument is assumed to be a
-# file). It's independent from the platform it's run on, although
-# there are limitations. As a special case, you can pass it a "." as
-# first argument, to create a file path like "./fa/file" on operating
-# systems. If there's no second argument, this function will return the
-# string "./"
+# file). It is independent from the platform it is run on, although
+# there are limitations. As a special case, you can pass it a "." as
+# first argument, to create a file path like "./fa/file" on operating
+# systems. If there is no second argument, this function will return the
+# string "./"
sub file_path {
my $first_arg = shift @_;
if ($first_arg eq '.') {
- return './' unless @_;
- my $path = File::Spec->catfile(@_);
- # add leading "./"
- $path = "./$path";
- return $path;
- } else { # $first_arg ne '.'
+ return './' unless @_;
+ my $path = File::Spec->catfile(@_);
+ # add leading "./"
+ $path = "./$path";
+ return $path;
+ }
+ else { # $first_arg ne '.'
return $first_arg unless @_; # return plain filename
return File::Spec->catfile($first_arg, @_); # relative path
}
}
-
-# Use file_path_name() to specify a file path that's expected for
+# Use file_path_name() to specify a file path that is expected for
# $File::Find::Name (%Expect_Name). Note: When the no_chdir => 1
# option is in effect, $_ is the same as $File::Find::Name. In that
-# case, also use this function to specify a file path that's expected
+# case, also use this function to specify a file path that is expected
# for $_.
#
# Historically file_path_name differed on Mac OS classic.
*file_path_name = \&file_path;
+##### Create directories, files and symlinks used in testing #####
+
+mkdir_ok( dir_path('for_find'), 0770 );
+ok( chdir( dir_path('for_find')), "Able to chdir to 'for_find'")
+ or die("Unable to chdir to 'for_find'");
+mkdir_ok( dir_path('fa'), 0770 );
+mkdir_ok( dir_path('fb'), 0770 );
+create_file_ok( file_path('fb', 'fb_ord') );
+mkdir_ok( dir_path('fb', 'fba'), 0770 );
+create_file_ok( file_path('fb', 'fba', 'fba_ord') );
+if ($symlink_exists) {
+ symlink_ok('../fb','fa/fsl');
+}
+create_file_ok( file_path('fa', 'fa_ord') );
+mkdir_ok( dir_path('fa', 'faa'), 0770 );
+create_file_ok( file_path('fa', 'faa', 'faa_ord') );
+mkdir_ok( dir_path('fa', 'fab'), 0770 );
+create_file_ok( file_path('fa', 'fab', 'fab_ord') );
+mkdir_ok( dir_path('fa', 'fab', 'faba'), 0770 );
+create_file_ok( file_path('fa', 'fab', 'faba', 'faba_ord') );
-MkDir( dir_path('for_find'), 0770 );
-CheckDie(chdir( dir_path('for_find')));
-MkDir( dir_path('fa'), 0770 );
-MkDir( dir_path('fb'), 0770 );
-touch( file_path('fb', 'fb_ord') );
-MkDir( dir_path('fb', 'fba'), 0770 );
-touch( file_path('fb', 'fba', 'fba_ord') );
-CheckDie( symlink('../fb','fa/fsl') ) if $symlink_exists;
-touch( file_path('fa', 'fa_ord') );
-
-MkDir( dir_path('fa', 'faa'), 0770 );
-touch( file_path('fa', 'faa', 'faa_ord') );
-MkDir( dir_path('fa', 'fab'), 0770 );
-touch( file_path('fa', 'fab', 'fab_ord') );
-MkDir( dir_path('fa', 'fab', 'faba'), 0770 );
-touch( file_path('fa', 'fab', 'faba', 'faba_ord') );
-
+##### Basic tests for find() #####
+# Set up list of files we expect to find.
+# Run find(), removing a file from the list once we have found it.
+# The list should be empty once we are done.
%Expect_File = (File::Spec->curdir => 1, file_path('fsl') => 1,
file_path('fa_ord') => 1, file_path('fab') => 1,
@@ -329,9 +336,10 @@ delete $Expect_File{ file_path('fsl') } unless $symlink_exists;
dir_path('fb') => 1, dir_path('fba') => 1);
delete @Expect_Dir{ dir_path('fb'), dir_path('fba') } unless $symlink_exists;
-File::Find::find( {wanted => \&wanted_File_Dir_prune}, topdir('fa') );
-Check( scalar(keys %Expect_File) == 0 );
+File::Find::find( {wanted => \&wanted_File_Dir_prune}, topdir('fa') );
+is( scalar(keys %Expect_File), 0, "COMPLETE: Basic test of find()" );
+##### Re-entrancy #####
print "# check re-entrancy\n";
@@ -354,126 +362,133 @@ File::Find::find( {wanted => sub { wanted_File_Dir_prune();
{} }, File::Spec->curdir ); } },
topdir('fa') );
-Check( scalar(keys %Expect_File) == 0 );
-
+is( scalar(keys %Expect_File), 0, "COMPLETE: Test of find() for re-entrancy" );
+##### 'no_chdir' option #####
# no_chdir is in effect, hence we use file_path_name to specify the expected paths for %Expect_File
%Expect_File = (file_path_name('fa') => 1,
- file_path_name('fa', 'fsl') => 1,
- file_path_name('fa', 'fa_ord') => 1,
- file_path_name('fa', 'fab') => 1,
- file_path_name('fa', 'fab', 'fab_ord') => 1,
- file_path_name('fa', 'fab', 'faba') => 1,
- file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
- file_path_name('fa', 'faa') => 1,
- file_path_name('fa', 'faa', 'faa_ord') => 1,);
+ file_path_name('fa', 'fsl') => 1,
+ file_path_name('fa', 'fa_ord') => 1,
+ file_path_name('fa', 'fab') => 1,
+ file_path_name('fa', 'fab', 'fab_ord') => 1,
+ file_path_name('fa', 'fab', 'faba') => 1,
+ file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
+ file_path_name('fa', 'faa') => 1,
+ file_path_name('fa', 'faa', 'faa_ord') => 1,);
delete $Expect_File{ file_path_name('fa', 'fsl') } unless $symlink_exists;
%Expect_Name = ();
%Expect_Dir = (dir_path('fa') => 1,
- dir_path('fa', 'faa') => 1,
- dir_path('fa', 'fab') => 1,
- dir_path('fa', 'fab', 'faba') => 1,
- dir_path('fb') => 1,
- dir_path('fb', 'fba') => 1);
+ dir_path('fa', 'faa') => 1,
+ dir_path('fa', 'fab') => 1,
+ dir_path('fa', 'fab', 'faba') => 1,
+ dir_path('fb') => 1,
+ dir_path('fb', 'fba') => 1);
delete @Expect_Dir{ dir_path('fb'), dir_path('fb', 'fba') }
unless $symlink_exists;
File::Find::find( {wanted => \&wanted_File_Dir, no_chdir => 1},
- topdir('fa') ); Check( scalar(keys %Expect_File) == 0 );
+ topdir('fa') );
+is( scalar(keys %Expect_File), 0, "COMPLETE: Test of 'no_chdir' option" );
+##### Test for $File::Find::name #####
%Expect_File = ();
%Expect_Name = (File::Spec->curdir => 1,
- file_path_name('.', 'fa') => 1,
- file_path_name('.', 'fa', 'fsl') => 1,
- file_path_name('.', 'fa', 'fa_ord') => 1,
- file_path_name('.', 'fa', 'fab') => 1,
- file_path_name('.', 'fa', 'fab', 'fab_ord') => 1,
- file_path_name('.', 'fa', 'fab', 'faba') => 1,
- file_path_name('.', 'fa', 'fab', 'faba', 'faba_ord') => 1,
- file_path_name('.', 'fa', 'faa') => 1,
- file_path_name('.', 'fa', 'faa', 'faa_ord') => 1,
- file_path_name('.', 'fb') => 1,
- file_path_name('.', 'fb', 'fba') => 1,
- file_path_name('.', 'fb', 'fba', 'fba_ord') => 1,
- file_path_name('.', 'fb', 'fb_ord') => 1);
+ file_path_name('.', 'fa') => 1,
+ file_path_name('.', 'fa', 'fsl') => 1,
+ file_path_name('.', 'fa', 'fa_ord') => 1,
+ file_path_name('.', 'fa', 'fab') => 1,
+ file_path_name('.', 'fa', 'fab', 'fab_ord') => 1,
+ file_path_name('.', 'fa', 'fab', 'faba') => 1,
+ file_path_name('.', 'fa', 'fab', 'faba', 'faba_ord') => 1,
+ file_path_name('.', 'fa', 'faa') => 1,
+ file_path_name('.', 'fa', 'faa', 'faa_ord') => 1,
+ file_path_name('.', 'fb') => 1,
+ file_path_name('.', 'fb', 'fba') => 1,
+ file_path_name('.', 'fb', 'fba', 'fba_ord') => 1,
+ file_path_name('.', 'fb', 'fb_ord') => 1);
delete $Expect_Name{ file_path('.', 'fa', 'fsl') } unless $symlink_exists;
-%Expect_Dir = ();
+%Expect_Dir = ();
File::Find::finddepth( {wanted => \&wanted_Name}, File::Spec->curdir );
-Check( scalar(keys %Expect_Name) == 0 );
+is( scalar(keys %Expect_Name), 0, "COMPLETE: Test for \$File::Find::name" );
+##### #####
# no_chdir is in effect, hence we use file_path_name to specify the
# expected paths for %Expect_File
%Expect_File = (File::Spec->curdir => 1,
- file_path_name('.', 'fa') => 1,
- file_path_name('.', 'fa', 'fsl') => 1,
- file_path_name('.', 'fa', 'fa_ord') => 1,
- file_path_name('.', 'fa', 'fab') => 1,
- file_path_name('.', 'fa', 'fab', 'fab_ord') => 1,
- file_path_name('.', 'fa', 'fab', 'faba') => 1,
- file_path_name('.', 'fa', 'fab', 'faba', 'faba_ord') => 1,
- file_path_name('.', 'fa', 'faa') => 1,
- file_path_name('.', 'fa', 'faa', 'faa_ord') => 1,
- file_path_name('.', 'fb') => 1,
- file_path_name('.', 'fb', 'fba') => 1,
- file_path_name('.', 'fb', 'fba', 'fba_ord') => 1,
- file_path_name('.', 'fb', 'fb_ord') => 1);
+ file_path_name('.', 'fa') => 1,
+ file_path_name('.', 'fa', 'fsl') => 1,
+ file_path_name('.', 'fa', 'fa_ord') => 1,
+ file_path_name('.', 'fa', 'fab') => 1,
+ file_path_name('.', 'fa', 'fab', 'fab_ord') => 1,
+ file_path_name('.', 'fa', 'fab', 'faba') => 1,
+ file_path_name('.', 'fa', 'fab', 'faba', 'faba_ord') => 1,
+ file_path_name('.', 'fa', 'faa') => 1,
+ file_path_name('.', 'fa', 'faa', 'faa_ord') => 1,
+ file_path_name('.', 'fb') => 1,
+ file_path_name('.', 'fb', 'fba') => 1,
+ file_path_name('.', 'fb', 'fba', 'fba_ord') => 1,
+ file_path_name('.', 'fb', 'fb_ord') => 1);
delete $Expect_File{ file_path_name('.', 'fa', 'fsl') } unless $symlink_exists;
%Expect_Name = ();
-%Expect_Dir = ();
+%Expect_Dir = ();
File::Find::finddepth( {wanted => \&wanted_File, no_chdir => 1},
- File::Spec->curdir );
+ File::Spec->curdir );
-Check( scalar(keys %Expect_File) == 0 );
+is( scalar(keys %Expect_File), 0,
+ "COMPLETE: Equivalency of \$_ and \$File::Find::Name with 'no_chdir'" );
+##### #####
print "# check preprocess\n";
%Expect_File = ();
%Expect_Name = ();
%Expect_Dir = (
- File::Spec->curdir => {fa => 1, fb => 1},
- dir_path('.', 'fa') => {faa => 1, fab => 1, fa_ord => 1},
- dir_path('.', 'fa', 'faa') => {faa_ord => 1},
- dir_path('.', 'fa', 'fab') => {faba => 1, fab_ord => 1},
- dir_path('.', 'fa', 'fab', 'faba') => {faba_ord => 1},
- dir_path('.', 'fb') => {fba => 1, fb_ord => 1},
- dir_path('.', 'fb', 'fba') => {fba_ord => 1}
- );
+ File::Spec->curdir => {fa => 1, fb => 1},
+ dir_path('.', 'fa') => {faa => 1, fab => 1, fa_ord => 1},
+ dir_path('.', 'fa', 'faa') => {faa_ord => 1},
+ dir_path('.', 'fa', 'fab') => {faba => 1, fab_ord => 1},
+ dir_path('.', 'fa', 'fab', 'faba') => {faba_ord => 1},
+ dir_path('.', 'fb') => {fba => 1, fb_ord => 1},
+ dir_path('.', 'fb', 'fba') => {fba_ord => 1}
+ );
File::Find::find( {wanted => \&noop_wanted,
- preprocess => \&my_preprocess}, File::Spec->curdir );
+ preprocess => \&my_preprocess}, File::Spec->curdir );
-Check( scalar(keys %Expect_Dir) == 0 );
+is( scalar(keys %Expect_Dir), 0, "Got no files, as expected" );
+##### #####
print "# check postprocess\n";
%Expect_File = ();
%Expect_Name = ();
%Expect_Dir = (
- File::Spec->curdir => 1,
- dir_path('.', 'fa') => 1,
- dir_path('.', 'fa', 'faa') => 1,
- dir_path('.', 'fa', 'fab') => 1,
- dir_path('.', 'fa', 'fab', 'faba') => 1,
- dir_path('.', 'fb') => 1,
- dir_path('.', 'fb', 'fba') => 1
- );
+ File::Spec->curdir => 1,
+ dir_path('.', 'fa') => 1,
+ dir_path('.', 'fa', 'faa') => 1,
+ dir_path('.', 'fa', 'fab') => 1,
+ dir_path('.', 'fa', 'fab', 'faba') => 1,
+ dir_path('.', 'fb') => 1,
+ dir_path('.', 'fb', 'fba') => 1
+ );
File::Find::find( {wanted => \&noop_wanted,
- postprocess => \&my_postprocess}, File::Spec->curdir );
+ postprocess => \&my_postprocess}, File::Spec->curdir );
-Check( scalar(keys %Expect_Dir) == 0 );
+is( scalar(keys %Expect_Dir), 0, "Got no files, as expected" );
+##### #####
{
print "# checking argument localization\n";
@@ -484,59 +499,67 @@ Check( scalar(keys %Expect_Dir) == 0 );
File::Find::find( sub { } , 'fa' ) for @foo;
delete $pre{$_} for @foo;
- Check( scalar( keys %pre ) == 0 );
+ is( scalar(keys %pre), 0, "Got no files, as expected" );
}
+##### #####
# see thread starting
# http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2004-02/msg00351.html
{
print "# checking that &_ and %_ are still accessible and that\n",
- "# tie magic on \$_ is not triggered\n";
-
+ "# tie magic on \$_ is not triggered\n";
+
my $true_count;
my $sub = 0;
sub _ {
- ++$sub;
+ ++$sub;
}
my $tie_called = 0;
package Foo;
sub STORE {
- ++$tie_called;
+ ++$tie_called;
}
sub FETCH {return 'N'};
sub TIESCALAR {bless []};
package main;
- Check( scalar( keys %_ ) == 0 );
+ is( scalar(keys %_), 0, "Got no files, as expected" );
my @foo = 'n';
tie $foo[0], "Foo";
File::Find::find( sub { $true_count++; $_{$_}++; &_; } , 'fa' ) for @foo;
untie $_;
- Check( $tie_called == 0);
- Check( scalar( keys %_ ) == $true_count );
- Check( $sub == $true_count );
- Check( scalar( @foo ) == 1);
- Check( $foo[0] eq 'N' );
+ is( $tie_called, 0, "Got no files tie_called, as expected" );
+ is( scalar(keys %_), $true_count, "Got true count, as expected" );
+ is( $sub, $true_count, "Got true count, as expected" );
+ is( scalar( @foo), 1, "Got one file, as expected" );
+ is( $foo[0], 'N', "Got 'N', as expected" );
}
+##### #####
if ( $symlink_exists ) {
print "# --- symbolic link tests --- \n";
$FastFileTests_OK= 1;
+ # 'follow', 'follow_fast' and 'follow_skip' options only apply when a
+ # platform supports symlinks.
- # Verify that File::Find::find will call wanted even if the topdir of
- # is a symlink to a directory, and it shouldn't follow the link
- # unless follow is set, which it isn't in this case
+ ##### #####
+
+ # Verify that File::Find::find will call wanted even if the topdir
+ # is a symlink to a directory, and it should not follow the link
+ # unless follow is set, which it is not in this case
%Expect_File = ( file_path('fsl') => 1 );
%Expect_Name = ();
%Expect_Dir = ();
File::Find::find( {wanted => \&wanted_File_Dir}, topdir('fa', 'fsl') );
- Check( scalar(keys %Expect_File) == 0 );
+ is( scalar(keys %Expect_File), 0,
+ "COMPLETE: top dir can be symlink to dir; link not followed without 'follow' option" );
+
+ ##### #####
-
%Expect_File = (File::Spec->curdir => 1, file_path('fa_ord') => 1,
file_path('fsl') => 1, file_path('fb_ord') => 1,
file_path('fba') => 1, file_path('fba_ord') => 1,
@@ -552,144 +575,162 @@ if ( $symlink_exists ) {
dir_path('fba') => 1);
File::Find::find( {wanted => \&wanted_File_Dir_prune,
- follow_fast => 1}, topdir('fa') );
+ follow_fast => 1}, topdir('fa') );
- Check( scalar(keys %Expect_File) == 0 );
+ is( scalar(keys %Expect_File), 0,
+ "COMPLETE: test of 'follow_fast' option: \$_ case" );
+ ##### #####
# no_chdir is in effect, hence we use file_path_name to specify
# the expected paths for %Expect_File
%Expect_File = (file_path_name('fa') => 1,
- file_path_name('fa', 'fa_ord') => 1,
- file_path_name('fa', 'fsl') => 1,
- file_path_name('fa', 'fsl', 'fb_ord') => 1,
- file_path_name('fa', 'fsl', 'fba') => 1,
- file_path_name('fa', 'fsl', 'fba', 'fba_ord') => 1,
- file_path_name('fa', 'fab') => 1,
- file_path_name('fa', 'fab', 'fab_ord') => 1,
- file_path_name('fa', 'fab', 'faba') => 1,
- file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
- file_path_name('fa', 'faa') => 1,
- file_path_name('fa', 'faa', 'faa_ord') => 1);
+ file_path_name('fa', 'fa_ord') => 1,
+ file_path_name('fa', 'fsl') => 1,
+ file_path_name('fa', 'fsl', 'fb_ord') => 1,
+ file_path_name('fa', 'fsl', 'fba') => 1,
+ file_path_name('fa', 'fsl', 'fba', 'fba_ord') => 1,
+ file_path_name('fa', 'fab') => 1,
+ file_path_name('fa', 'fab', 'fab_ord') => 1,
+ file_path_name('fa', 'fab', 'faba') => 1,
+ file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
+ file_path_name('fa', 'faa') => 1,
+ file_path_name('fa', 'faa', 'faa_ord') => 1);
%Expect_Name = ();
%Expect_Dir = (dir_path('fa') => 1,
- dir_path('fa', 'faa') => 1,
- dir_path('fa', 'fab') => 1,
- dir_path('fa', 'fab', 'faba') => 1,
- dir_path('fb') => 1,
- dir_path('fb', 'fba') => 1);
+ dir_path('fa', 'faa') => 1,
+ dir_path('fa', 'fab') => 1,
+ dir_path('fa', 'fab', 'faba') => 1,
+ dir_path('fb') => 1,
+ dir_path('fb', 'fba') => 1);
File::Find::find( {wanted => \&wanted_File_Dir, follow_fast => 1,
- no_chdir => 1}, topdir('fa') );
+ no_chdir => 1}, topdir('fa') );
+
+ is( scalar(keys %Expect_File), 0,
+ "COMPLETE: Test of 'follow_fast' and 'no_chdir' options together: \$_ case" );
- Check( scalar(keys %Expect_File) == 0 );
+ ##### #####
%Expect_File = ();
%Expect_Name = (file_path_name('fa') => 1,
- file_path_name('fa', 'fa_ord') => 1,
- file_path_name('fa', 'fsl') => 1,
- file_path_name('fa', 'fsl', 'fb_ord') => 1,
- file_path_name('fa', 'fsl', 'fba') => 1,
- file_path_name('fa', 'fsl', 'fba', 'fba_ord') => 1,
- file_path_name('fa', 'fab') => 1,
- file_path_name('fa', 'fab', 'fab_ord') => 1,
- file_path_name('fa', 'fab', 'faba') => 1,
- file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
- file_path_name('fa', 'faa') => 1,
- file_path_name('fa', 'faa', 'faa_ord') => 1);
+ file_path_name('fa', 'fa_ord') => 1,
+ file_path_name('fa', 'fsl') => 1,
+ file_path_name('fa', 'fsl', 'fb_ord') => 1,
+ file_path_name('fa', 'fsl', 'fba') => 1,
+ file_path_name('fa', 'fsl', 'fba', 'fba_ord') => 1,
+ file_path_name('fa', 'fab') => 1,
+ file_path_name('fa', 'fab', 'fab_ord') => 1,
+ file_path_name('fa', 'fab', 'faba') => 1,
+ file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
+ file_path_name('fa', 'faa') => 1,
+ file_path_name('fa', 'faa', 'faa_ord') => 1);
%Expect_Dir = ();
File::Find::finddepth( {wanted => \&wanted_Name,
- follow_fast => 1}, topdir('fa') );
+ follow_fast => 1}, topdir('fa') );
- Check( scalar(keys %Expect_Name) == 0 );
+ is( scalar(keys %Expect_Name), 0,
+ "COMPLETE: test of 'follow_fast' option: \$File::Find::name case" );
+
+ ##### #####
# no_chdir is in effect, hence we use file_path_name to specify
# the expected paths for %Expect_File
%Expect_File = (file_path_name('fa') => 1,
- file_path_name('fa', 'fa_ord') => 1,
- file_path_name('fa', 'fsl') => 1,
- file_path_name('fa', 'fsl', 'fb_ord') => 1,
- file_path_name('fa', 'fsl', 'fba') => 1,
- file_path_name('fa', 'fsl', 'fba', 'fba_ord') => 1,
- file_path_name('fa', 'fab') => 1,
- file_path_name('fa', 'fab', 'fab_ord') => 1,
- file_path_name('fa', 'fab', 'faba') => 1,
- file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
- file_path_name('fa', 'faa') => 1,
- file_path_name('fa', 'faa', 'faa_ord') => 1);
+ file_path_name('fa', 'fa_ord') => 1,
+ file_path_name('fa', 'fsl') => 1,
+ file_path_name('fa', 'fsl', 'fb_ord') => 1,
+ file_path_name('fa', 'fsl', 'fba') => 1,
+ file_path_name('fa', 'fsl', 'fba', 'fba_ord') => 1,
+ file_path_name('fa', 'fab') => 1,
+ file_path_name('fa', 'fab', 'fab_ord') => 1,
+ file_path_name('fa', 'fab', 'faba') => 1,
+ file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
+ file_path_name('fa', 'faa') => 1,
+ file_path_name('fa', 'faa', 'faa_ord') => 1);
%Expect_Name = ();
%Expect_Dir = ();
File::Find::finddepth( {wanted => \&wanted_File, follow_fast => 1,
- no_chdir => 1}, topdir('fa') );
+ no_chdir => 1}, topdir('fa') );
+
+ is( scalar(keys %Expect_File), 0,
+ "COMPLETE: Test of 'follow_fast' and 'no_chdir' options together: \$File::Find::name case" );
- Check( scalar(keys %Expect_File) == 0 );
+ ##### #####
-
print "# check dangling symbolic links\n";
- MkDir( dir_path('dangling_dir'), 0770 );
- CheckDie( symlink( dir_path('dangling_dir'),
- file_path('dangling_dir_sl') ) );
+ mkdir_ok( dir_path('dangling_dir'), 0770 );
+ symlink_ok( dir_path('dangling_dir'), file_path('dangling_dir_sl'),
+ "Check dangling directory" );
rmdir dir_path('dangling_dir');
- touch(file_path('dangling_file'));
- CheckDie( symlink('../dangling_file','fa/dangling_file_sl') );
+ create_file_ok(file_path('dangling_file'));
+ symlink_ok('../dangling_file','fa/dangling_file_sl',
+ "Check dangling file" );
unlink file_path('dangling_file');
- {
+ {
# these tests should also emit a warning
- use warnings;
+ use warnings;
%Expect_File = (File::Spec->curdir => 1,
- file_path('dangling_file_sl') => 1,
- file_path('fa_ord') => 1,
- file_path('fsl') => 1,
- file_path('fb_ord') => 1,
- file_path('fba') => 1,
- file_path('fba_ord') => 1,
- file_path('fab') => 1,
- file_path('fab_ord') => 1,
- file_path('faba') => 1,
- file_path('faba_ord') => 1,
- file_path('faa') => 1,
- file_path('faa_ord') => 1);
+ file_path('dangling_file_sl') => 1,
+ file_path('fa_ord') => 1,
+ file_path('fsl') => 1,
+ file_path('fb_ord') => 1,
+ file_path('fba') => 1,
+ file_path('fba_ord') => 1,
+ file_path('fab') => 1,
+ file_path('fab_ord') => 1,
+ file_path('faba') => 1,
+ file_path('faba_ord') => 1,
+ file_path('faa') => 1,
+ file_path('faa_ord') => 1);
%Expect_Name = ();
%Expect_Dir = ();
undef $warn_msg;
File::Find::find( {wanted => \&wanted_File, follow => 1,
- dangling_symlinks =>
- sub { $warn_msg = "$_[0] is a dangling symbolic link" }
+ dangling_symlinks =>
+ sub { $warn_msg = "$_[0] is a dangling symbolic link" }
},
topdir('dangling_dir_sl'), topdir('fa') );
- Check( scalar(keys %Expect_File) == 0 );
- Check( $warn_msg =~ m|dangling_file_sl is a dangling symbolic link| );
+ is( scalar(keys %Expect_File), 0,
+ "COMPLETE: test of 'follow' and 'dangling_symlinks' options" );
+ like( $warn_msg, qr/dangling_file_sl is a dangling symbolic link/,
+ "Got expected warning message re dangling symbolic link" );
unlink file_path('fa', 'dangling_file_sl'),
- file_path('dangling_dir_sl');
+ file_path('dangling_dir_sl');
}
+ ##### #####
print "# check recursion\n";
- CheckDie( symlink('../faa','fa/faa/faa_sl') );
+ symlink_ok('../faa','fa/faa/faa_sl');
undef $@;
eval {File::Find::find( {wanted => \&simple_wanted, follow => 1,
no_chdir => 1}, topdir('fa') ); };
- Check( $@ =~ m|for_find[:/]fa[:/]faa[:/]faa_sl is a recursive symbolic link|i );
- unlink file_path('fa', 'faa', 'faa_sl');
+ like(
+ $@,
+ qr{for_find[:/]fa[:/]faa[:/]faa_sl is a recursive symbolic link}i,
+ "Got expected error message for recursive symbolic link"
+ );
+ unlink file_path('fa', 'faa', 'faa_sl');
print "# check follow_skip (file)\n";
- CheckDie( symlink('./fa_ord','fa/fa_ord_sl') ); # symlink to a file
+ symlink_ok('./fa_ord','fa/fa_ord_sl');
undef $@;
eval {File::Find::finddepth( {wanted => \&simple_wanted,
@@ -697,111 +738,136 @@ if ( $symlink_exists ) {
follow_skip => 0, no_chdir => 1},
topdir('fa') );};
- Check( $@ =~ m|for_find[:/]fa[:/]fa_ord encountered a second time|i );
+ like(
+ $@,
+ qr{for_find[:/]fa[:/]fa_ord encountered a second time}i,
+ "'follow_skip==0': got error message when file encountered a second time"
+ );
+ ##### #####
# no_chdir is in effect, hence we use file_path_name to specify
# the expected paths for %Expect_File
%Expect_File = (file_path_name('fa') => 1,
- file_path_name('fa', 'fa_ord') => 2,
- # We may encounter the symlink first
- file_path_name('fa', 'fa_ord_sl') => 2,
- file_path_name('fa', 'fsl') => 1,
- file_path_name('fa', 'fsl', 'fb_ord') => 1,
- file_path_name('fa', 'fsl', 'fba') => 1,
- file_path_name('fa', 'fsl', 'fba', 'fba_ord') => 1,
- file_path_name('fa', 'fab') => 1,
- file_path_name('fa', 'fab', 'fab_ord') => 1,
- file_path_name('fa', 'fab', 'faba') => 1,
- file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
- file_path_name('fa', 'faa') => 1,
- file_path_name('fa', 'faa', 'faa_ord') => 1);
+ file_path_name('fa', 'fa_ord') => 2,
+ # We may encounter the symlink first
+ file_path_name('fa', 'fa_ord_sl') => 2,
+ file_path_name('fa', 'fsl') => 1,
+ file_path_name('fa', 'fsl', 'fb_ord') => 1,
+ file_path_name('fa', 'fsl', 'fba') => 1,
+ file_path_name('fa', 'fsl', 'fba', 'fba_ord') => 1,
+ file_path_name('fa', 'fab') => 1,
+ file_path_name('fa', 'fab', 'fab_ord') => 1,
+ file_path_name('fa', 'fab', 'faba') => 1,
+ file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
+ file_path_name('fa', 'faa') => 1,
+ file_path_name('fa', 'faa', 'faa_ord') => 1);
%Expect_Name = ();
%Expect_Dir = (dir_path('fa') => 1,
- dir_path('fa', 'faa') => 1,
- dir_path('fa', 'fab') => 1,
- dir_path('fa', 'fab', 'faba') => 1,
- dir_path('fb') => 1,
- dir_path('fb','fba') => 1);
+ dir_path('fa', 'faa') => 1,
+ dir_path('fa', 'fab') => 1,
+ dir_path('fa', 'fab', 'faba') => 1,
+ dir_path('fb') => 1,
+ dir_path('fb','fba') => 1);
File::Find::finddepth( {wanted => \&wanted_File_Dir, follow => 1,
follow_skip => 1, no_chdir => 1},
topdir('fa') );
- Check( scalar(keys %Expect_File) == 0 );
+ is( scalar(keys %Expect_File), 0,
+ "COMPLETE: Test of 'follow', 'follow_skip==1' and 'no_chdir' options" );
unlink file_path('fa', 'fa_ord_sl');
-
+ ##### #####
print "# check follow_skip (directory)\n";
- CheckDie( symlink('./faa','fa/faa_sl') ); # symlink to a directory
+ symlink_ok('./faa','fa/faa_sl');
undef $@;
eval {File::Find::find( {wanted => \&simple_wanted, follow => 1,
follow_skip => 0, no_chdir => 1},
topdir('fa') );};
- Check( $@ =~ m|for_find[:/]fa[:/]faa[:/]? encountered a second time|i );
+ like(
+ $@,
+ qr{for_find[:/]fa[:/]faa[:/]? encountered a second time}i,
+ "'follow_skip==0': got error message when directory encountered a second time"
+ );
+
-
undef $@;
eval {File::Find::find( {wanted => \&simple_wanted, follow => 1,
follow_skip => 1, no_chdir => 1},
topdir('fa') );};
- Check( $@ =~ m|for_find[:/]fa[:/]faa[:/]? encountered a second time|i );
+ like(
+ $@,
+ qr{for_find[:/]fa[:/]faa[:/]? encountered a second time}i,
+ "'follow_skip==1': got error message when directory encountered a second time"
+ );
+
+ ##### #####
# no_chdir is in effect, hence we use file_path_name to specify
# the expected paths for %Expect_File
%Expect_File = (file_path_name('fa') => 1,
- file_path_name('fa', 'fa_ord') => 1,
- file_path_name('fa', 'fsl') => 1,
- file_path_name('fa', 'fsl', 'fb_ord') => 1,
- file_path_name('fa', 'fsl', 'fba') => 1,
- file_path_name('fa', 'fsl', 'fba', 'fba_ord') => 1,
- file_path_name('fa', 'fab') => 1,
- file_path_name('fa', 'fab', 'fab_ord') => 1,
- file_path_name('fa', 'fab', 'faba') => 1,
- file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
- file_path_name('fa', 'faa') => 1,
- file_path_name('fa', 'faa', 'faa_ord') => 1,
- # We may actually encounter the symlink first.
- file_path_name('fa', 'faa_sl') => 1,
- file_path_name('fa', 'faa_sl', 'faa_ord') => 1);
+ file_path_name('fa', 'fa_ord') => 1,
+ file_path_name('fa', 'fsl') => 1,
+ file_path_name('fa', 'fsl', 'fb_ord') => 1,
+ file_path_name('fa', 'fsl', 'fba') => 1,
+ file_path_name('fa', 'fsl', 'fba', 'fba_ord') => 1,
+ file_path_name('fa', 'fab') => 1,
+ file_path_name('fa', 'fab', 'fab_ord') => 1,
+ file_path_name('fa', 'fab', 'faba') => 1,
+ file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
+ file_path_name('fa', 'faa') => 1,
+ file_path_name('fa', 'faa', 'faa_ord') => 1,
+ # We may actually encounter the symlink first.
+ file_path_name('fa', 'faa_sl') => 1,
+ file_path_name('fa', 'faa_sl', 'faa_ord') => 1);
%Expect_Name = ();
%Expect_Dir = (dir_path('fa') => 1,
- dir_path('fa', 'faa') => 1,
- dir_path('fa', 'fab') => 1,
- dir_path('fa', 'fab', 'faba') => 1,
- dir_path('fb') => 1,
- dir_path('fb', 'fba') => 1);
+ dir_path('fa', 'faa') => 1,
+ dir_path('fa', 'fab') => 1,
+ dir_path('fa', 'fab', 'faba') => 1,
+ dir_path('fb') => 1,
+ dir_path('fb', 'fba') => 1);
File::Find::find( {wanted => \&wanted_File_Dir, follow => 1,
- follow_skip => 2, no_chdir => 1}, topdir('fa') );
+ follow_skip => 2, no_chdir => 1}, topdir('fa') );
+
+ ##### #####
# If we encountered the symlink first, then the entries corresponding to
# the real name remain, if the real name first then the symlink
my @names = sort keys %Expect_File;
- Check( @names == 1 );
+ is( scalar(@names), 1,
+ "'follow_skip==2'" );
# Normalise both to the original name
s/_sl// foreach @names;
- Check ($names[0] eq file_path_name('fa', 'faa', 'faa_ord'));
+ is(
+ $names[0],
+ file_path_name('fa', 'faa', 'faa_ord'),
+ "Got file_path_name, as expected"
+ );
unlink file_path('fa', 'faa_sl');
}
+##### Win32 checks - [perl #41555] #####
-# Win32 checks - [perl #41555]
if ($^O eq 'MSWin32') {
require File::Spec::Win32;
my ($volume) = File::Spec::Win32->splitpath($orig_dir, 1);
print STDERR "VOLUME = $volume\n";
-
+
+ ##### #####
+
# with chdir
%Expect_File = (File::Spec->curdir => 1,
file_path('fsl') => 1,
@@ -822,12 +888,12 @@ if ($^O eq 'MSWin32') {
dir_path('faba') => 1,
dir_path('fb') => 1,
dir_path('fba') => 1);
-
-
-
+
File::Find::find( {wanted => \&wanted_File_Dir}, topdir('fa'));
- Check( scalar(keys %Expect_File) == 0 );
-
+ is( scalar(keys %Expect_File), 0, "Got no files, as expected" );
+
+ ##### #####
+
# no_chdir
%Expect_File = ($volume . file_path_name('fa') => 1,
$volume . file_path_name('fa', 'fsl') => 1,
@@ -838,7 +904,7 @@ if ($^O eq 'MSWin32') {
$volume . file_path_name('fa', 'fab', 'faba', 'faba_ord') => 1,
$volume . file_path_name('fa', 'faa') => 1,
$volume . file_path_name('fa', 'faa', 'faa_ord') => 1);
-
+
delete $Expect_File{ $volume . file_path_name('fa', 'fsl') } unless $symlink_exists;
%Expect_Name = ();
@@ -847,23 +913,26 @@ if ($^O eq 'MSWin32') {
$volume . dir_path('fa', 'faa') => 1,
$volume . dir_path('fa', 'fab') => 1,
$volume . dir_path('fa', 'fab', 'faba') => 1);
-
+
File::Find::find( {wanted => \&wanted_File_Dir, no_chdir => 1}, $volume . topdir('fa'));
- Check( scalar(keys %Expect_File) == 0 );
+ is( scalar(keys %Expect_File), 0, "Got no files, as expected" );
}
-if ($symlink_exists) { # Issue 68260
+##### Issue 68260 #####
+
+if ($symlink_exists) {
print "# BUG 68260\n";
- MkDir (dir_path ('fa', 'fac'), 0770);
- MkDir (dir_path ('fb', 'fbc'), 0770);
- touch (file_path ('fa', 'fac', 'faca'));
- CheckDie (symlink ('..////../fa/fac/faca', 'fb/fbc/fbca'));
+ mkdir_ok(dir_path ('fa', 'fac'), 0770);
+ mkdir_ok(dir_path ('fb', 'fbc'), 0770);
+ create_file_ok(file_path ('fa', 'fac', 'faca'));
+ symlink_ok('..////../fa/fac/faca', 'fb/fbc/fbca',
+ "RT 68260: able to symlink");
use warnings;
my $dangling_symlink;
local $SIG {__WARN__} = sub {
- local $" = " ";
+ local $" = " "; # "
$dangling_symlink ++ if "@_" =~ /dangling symbolic link/;
};
@@ -877,21 +946,23 @@ if ($symlink_exists) { # Issue 68260
File::Spec -> curdir
);
- Check (!$dangling_symlink);
+ ok(!$dangling_symlink, "Found no dangling symlink");
}
+##### Issue 59750 #####
+
print "# RT 59750\n";
-MkDir( dir_path('fc'), 0770 );
-MkDir( dir_path('fc', 'fca'), 0770 );
-MkDir( dir_path('fc', 'fcb'), 0770 );
-MkDir( dir_path('fc', 'fcc'), 0770 );
-touch( file_path('fc', 'fca', 'match_alpha') );
-touch( file_path('fc', 'fca', 'match_beta') );
-touch( file_path('fc', 'fcb', 'match_gamma') );
-touch( file_path('fc', 'fcb', 'delta') );
-touch( file_path('fc', 'fcc', 'match_epsilon') );
-touch( file_path('fc', 'fcc', 'match_zeta') );
-touch( file_path('fc', 'fcc', 'eta') );
+mkdir_ok( dir_path('fc'), 0770 );
+mkdir_ok( dir_path('fc', 'fca'), 0770 );
+mkdir_ok( dir_path('fc', 'fcb'), 0770 );
+mkdir_ok( dir_path('fc', 'fcc'), 0770 );
+create_file_ok( file_path('fc', 'fca', 'match_alpha') );
+create_file_ok( file_path('fc', 'fca', 'match_beta') );
+create_file_ok( file_path('fc', 'fcb', 'match_gamma') );
+create_file_ok( file_path('fc', 'fcb', 'delta') );
+create_file_ok( file_path('fc', 'fcc', 'match_epsilon') );
+create_file_ok( file_path('fc', 'fcc', 'match_zeta') );
+create_file_ok( file_path('fc', 'fcc', 'eta') );
my @files_from_mixed = ();
sub wantmatch {
@@ -905,7 +976,8 @@ find( \&wantmatch, (
dir_path('fc', 'fcb'),
dir_path('fc', 'fcc'),
) );
-Check( scalar(@files_from_mixed) == 5 );
+is( scalar(@files_from_mixed), 5,
+ "Prepare test for RT #59750: got 5 'match' files as expected" );
@files_from_mixed = ();
find( \&wantmatch, (
@@ -914,7 +986,10 @@ find( \&wantmatch, (
file_path('fc', 'fcc', 'match_epsilon'),
file_path('fc', 'fcc', 'eta'),
) );
-Check( scalar(@files_from_mixed) == 4 );
+is( scalar(@files_from_mixed), 4,
+ "Can mix directories and (non-directory) files in list of directories searched by wanted()" );
+
+##### More Win32 checks#####
if ($^O eq 'MSWin32') {
# Check F:F:f correctly handles a root directory path.
@@ -926,14 +1001,14 @@ if ($^O eq 'MSWin32') {
# Determine the file in the root directory which would be
# first if processed in sorted order. Create one if necessary.
my $expected_first_file;
- opendir(ROOT_DIR, "/") or die "cannot opendir /: $!\n";
- foreach my $f (sort readdir ROOT_DIR) {
+ opendir(my $ROOT_DIR, "/") or die "cannot opendir /: $!\n";
+ foreach my $f (sort readdir $ROOT_DIR) {
if (-f "/$f") {
$expected_first_file = $f;
last;
}
}
- closedir ROOT_DIR;
+ closedir $ROOT_DIR;
my $created_file;
unless (defined $expected_first_file) {
$expected_first_file = '__perl_File_Find_test.tmp';
@@ -957,8 +1032,9 @@ if ($^O eq 'MSWin32') {
my $got = $File::Find::name;
my $exp = "$root_dir$expected_first_file";
print "# no_chdir=$no_chdir $root_dir '$got'\n";
- Check($got eq $exp);
- die "done"; # don't process the entire drive!
+ is($got, $exp,
+ "Win32: Run 'find' with 'no_chdir' set to $no_chdir" );
+ die "done"; # do not process the entire drive!
},
}, $root_dir);
};
@@ -966,7 +1042,7 @@ if ($^O eq 'MSWin32') {
unless ($@ and $@ =~ /done/) {
print "# no_chdir=$no_chdir $root_dir ",
($@ ? "error: $@" : "no files found"), "\n";
- Check(0);
+ ok(0, "Win32: 0");
}
}
}