diff options
Diffstat (limited to 'lib/ExtUtils/t/Manifest.t')
-rw-r--r-- | lib/ExtUtils/t/Manifest.t | 90 |
1 files changed, 55 insertions, 35 deletions
diff --git a/lib/ExtUtils/t/Manifest.t b/lib/ExtUtils/t/Manifest.t index a0e84e0fc4..4929c43e0e 100644 --- a/lib/ExtUtils/t/Manifest.t +++ b/lib/ExtUtils/t/Manifest.t @@ -1,15 +1,20 @@ -#!/usr/bin/perl +#!/usr/bin/perl -w BEGIN { if( $ENV{PERL_CORE} ) { chdir 't' if -d 't'; unshift @INC, '../lib'; } + else { + unshift @INC, 't/lib'; + } } chdir 't'; +use strict; + # these files help the test run -use Test::More tests => 31; +use Test::More tests => 32; use Cwd; # these files are needed for the module itself @@ -18,13 +23,14 @@ use File::Path; use Carp::Heavy; # keep track of everything added so it can all be deleted -my @files; +my %files; sub add_file { my ($file, $data) = @_; $data ||= 'foo'; + unlink $file; # or else we'll get multiple versions on VMS open( my $T, '>', $file) or return; print $T $data; - push @files, $file; + ++$files{$file}; } sub read_manifest { @@ -44,8 +50,11 @@ sub remove_dir { } # use module, import functions -BEGIN { use_ok( 'ExtUtils::Manifest', - qw( mkmanifest manicheck filecheck fullcheck maniread manicopy) ); } +BEGIN { + use_ok( 'ExtUtils::Manifest', + qw( mkmanifest manicheck filecheck fullcheck + maniread manicopy skipcheck ) ); +} my $cwd = Cwd::getcwd(); @@ -59,9 +68,10 @@ ok( add_file('foo'), 'add a temporary file' ); # there shouldn't be a MANIFEST there my ($res, $warn) = catch_warning( \&mkmanifest ); # Canonize the order. -$warn = join("", map { "$_|" } sort { lc $a cmp lc $b } split /\r?\n/, $warn); +$warn = join("", map { "$_|" } + sort { lc($a) cmp lc($b) } split /\r?\n/, $warn); is( $warn, "Added to MANIFEST: foo|Added to MANIFEST: MANIFEST|", - "mkmanifest() displayed it's additions" ); + "mkmanifest() displayed its additions" ); # and now you see it ok( -e 'MANIFEST', 'create MANIFEST file' ); @@ -81,45 +91,49 @@ like( $warn, qr/^Not in MANIFEST: bar/, 'warning that bar has been added' ); is( $res, 'bar', 'bar reported as new' ); # now quiet the warning that bar was added and test again -{ package ExtUtils::Manifest; use vars qw($Quiet); $Quiet = 1; } -($res, $warn) = catch_warning( \&ExtUtils::Manifest::skipcheck ); -cmp_ok( $warn, ,'eq', '', 'disabled warnings' ); +($res, $warn) = do { local $ExtUtils::Manifest::Quiet = 1; + catch_warning( \&skipcheck ) + }; +cmp_ok( $warn, 'eq', '', 'disabled warnings' ); -# add a skip file with a rule to skip itself +# add a skip file with a rule to skip itself (and the nonexistent glob '*baz*') add_file( 'MANIFEST.SKIP', "baz\n.SKIP" ); # this'll skip the new file -($res, $warn) = catch_warning( \&ExtUtils::Manifest::skipcheck ); -like( $warn, qr/^Skipping MANIFEST\.SKIP/, 'got skipping warning' ); +($res, $warn) = catch_warning( \&skipcheck ); +like( $warn, qr/^Skipping MANIFEST\.SKIP/i, 'got skipping warning' ); # I'm not sure why this should be... shouldn't $missing be the only one? my ($found, $missing ); catch_warning( sub { - ( $found, $missing ) = ExtUtils::Manifest::skipcheck() + ( $found, $missing ) = skipcheck() }); # nothing new should be found, bar should be skipped is( @$found, 0, 'no output here' ); is( join( ' ', @$missing ), 'bar', 'listed skipped files' ); -is( join(' ', filecheck() ), 'bar', 'listing skipped with filecheck()' ); +{ + local $ExtUtils::Manifest::Quiet = 1; + is( join(' ', filecheck() ), 'bar', 'listing skipped with filecheck()' ); +} # add a subdirectory and a file there that should be found ok( mkdir( 'moretest', 0777 ), 'created moretest directory' ); -my $quux = File::Spec->catfile( 'moretest', 'quux' ); -$quux =~ s#\\#/#g; -$quux = VMS::Filespec::unixify($quux) if $^O eq 'VMS'; -add_file( $quux, 'quux' ); -ok( exists( ExtUtils::Manifest::manifind()->{$quux} ), "manifind found $quux" ); +add_file( File::Spec->catfile('moretest', 'quux'), 'quux' ); +ok( exists( ExtUtils::Manifest::manifind()->{'moretest/quux'} ), + "manifind found moretest/quux" ); # only MANIFEST and foo are in the manifest my $files = maniread(); is( keys %$files, 2, 'two files found' ); -is( join(' ', sort { lc($a) cmp lc($b) } keys %$files), 'foo MANIFEST', 'both files found' ); +is( join(' ', sort { lc($a) cmp lc($b) } keys %$files), 'foo MANIFEST', + 'both files found' ); # poison the manifest, and add a comment that should be reported add_file( 'MANIFEST', 'none #none' ); -is( ExtUtils::Manifest::maniread()->{none}, '#none', 'maniread found comment' ); +is( ExtUtils::Manifest::maniread()->{none}, '#none', + 'maniread found comment' ); ok( mkdir( 'copy', 0777 ), 'made copy directory' ); @@ -127,30 +141,36 @@ $files = maniread(); eval { (undef, $warn) = catch_warning( sub { manicopy( $files, 'copy', 'cp' ) }) }; +like( $@, qr/^Can't read none: /, 'carped about none' ); # a newline comes through, so get rid of it chomp($warn); # the copy should have given one warning and one error -is($warn, 'Skipping MANIFEST.SKIP', 'warned about MANIFEST.SKIP' ); -like( $@, qr/^Can't read none: /, - 'carped about none' ); +like($warn, qr/^Skipping MANIFEST.SKIP/i, 'warned about MANIFEST.SKIP' ); # tell ExtUtils::Manifest to use a different file -{ package ExtUtils::Manifest; - use vars qw($MANIFEST); - $MANIFEST = 'albatross'; +{ + local $ExtUtils::Manifest::MANIFEST = 'albatross'; + ($res, $warn) = catch_warning( \&mkmanifest ); + like( $warn, qr/Added to albatross: /, 'using a new manifest file' ); + + # add the new file to the list of files to be deleted + $files{'albatross'}++; } -($res, $warn) = catch_warning( \&mkmanifest ); -like( $warn, qr/Added to albatross: /, 'using a new manifest file' ); -# add the new file to the list of files to be deleted -push @files, 'albatross'; +# Make sure MANIFEST.SKIP is using complete relative paths +add_file( 'MANIFEST.SKIP' => "^moretest/q\n" ); + +# This'll skip moretest/quux +($res, $warn) = catch_warning( \&skipcheck ); +like( $warn, qr{^Skipping moretest/quux}i, 'got skipping warning again' ); + END { - # the arrays are evaluated in scalar context - is( unlink( @files ), @files, 'remove all added files' ); + # the args are evaluated in scalar context + is( unlink( keys %files ), keys %files, 'remove all added files' ); remove_dir( 'moretest', 'copy' ); # now get rid of the parent directory |