#!./perl -w BEGIN { chdir 't' if -d 't'; @INC = '../lib'; } use Test; BEGIN { plan tests => 6 } use strict; use File::CheckTree; use File::Spec; # used to get absolute paths # We assume that we start from the perl "t" directory. # Will move up one level to make it easier to generate # reliable pathnames for testing File::CheckTree chdir(File::Spec->updir) or die "cannot change to parent of t/ directory: $!"; #### TEST 1 -- No warnings #### # usings both relative and full paths, indented comments { my ($num_warnings, $path_to_README); $path_to_README = File::Spec->rel2abs('README'); my @warnings; local $SIG{__WARN__} = sub { push @warnings, "@_" }; eval { $num_warnings = validate qq{ lib -d # comment, followed "blank" line (w/ whitespace): # indented comment, followed blank line (w/o whitespace): README -f $path_to_README -e || warn }; }; if ( !$@ && !@warnings && defined($num_warnings) && $num_warnings == 0 ) { ok(1); } else { ok(0); } } #### TEST 2 -- One warning #### { my ($num_warnings, @warnings); local $SIG{__WARN__} = sub { push @warnings, "@_" }; eval { $num_warnings = validate qq{ lib -f README -f }; }; if ( !$@ && @warnings == 1 && $warnings[0] =~ /lib is not a plain file/ && defined($num_warnings) && $num_warnings == 1 ) { ok(1); } else { ok(0); } } #### TEST 3 -- Multiple warnings #### # including first warning only from a bundle of tests, # generic "|| warn", default "|| warn" and "|| warn '...' " { my ($num_warnings, @warnings); local $SIG{__WARN__} = sub { push @warnings, "@_" }; eval { $num_warnings = validate q{ lib -effd README -f || die README -d || warn lib -f || warn "my warning: $file\n" }; }; if ( !$@ && @warnings == 3 && $warnings[0] =~ /lib is not a plain file/ && $warnings[1] =~ /README is not a directory/ && $warnings[2] =~ /my warning: lib/ && defined($num_warnings) && $num_warnings == 3 ) { ok(1); } else { ok(0); } } #### TEST 4 -- cd directive #### # cd directive followed by relative paths, followed by full paths { my ($num_warnings, @warnings, $path_to_libFile, $path_to_dist); $path_to_libFile = File::Spec->rel2abs(File::Spec->catdir('lib','File')); $path_to_dist = File::Spec->rel2abs(File::Spec->curdir); local $SIG{__WARN__} = sub { push @warnings, "@_" }; eval { $num_warnings = validate qq{ lib -d || die $path_to_libFile cd Spec -e Spec -f $path_to_dist cd README -ef INSTALL -d || warn $path_to_libFile -d || die }; }; if ( !$@ && @warnings == 2 && $warnings[0] =~ /Spec is not a plain file/ && $warnings[1] =~ /INSTALL is not a directory/ && defined($num_warnings) && $num_warnings == 2 ) { ok(1); } else { ok(0); } } #### TEST 5 -- Exception #### # test with generic "|| die" { my $num_warnings; eval { $num_warnings = validate q{ lib -ef || die README -d }; }; if ( $@ && $@ =~ /lib is not a plain file/ && not defined $num_warnings ) { ok(1); } else { ok(0); } } #### TEST 6 -- Exception #### # test with "|| die 'my error message'" { my $num_warnings; eval { $num_warnings = validate q{ lib -ef || die "yadda $file yadda...\n" README -d }; }; if ( $@ && $@ =~ /yadda lib yadda/ && not defined $num_warnings ) { ok(1); } else { ok(0); } }