#!./perl -w use Test::More tests => 23; use strict; require overload; use File::CheckTree; use File::Spec; # used to get absolute paths # We assume that we start from the dist/File-CheckTree in the perl repository, # or the dist root directory for the CPAN version. #### TEST 1 -- No warnings #### # usings both relative and full paths, indented comments { my ($num_warnings, $path_to_libFileCheckTree); $path_to_libFileCheckTree = File::Spec->rel2abs( File::Spec->catfile('lib', 'File', 'CheckTree.pm'), ); 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): lib/File/CheckTree.pm -f '$path_to_libFileCheckTree' -e || warn }; }; diag($_) for @warnings; is( $@, '' ); is( scalar @warnings, 0 ); is( $num_warnings, 0 ); } #### TEST 2 -- One warning #### { my ($num_warnings, @warnings); local $SIG{__WARN__} = sub { push @warnings, "@_" }; eval { $num_warnings = validate qq{ lib -f lib/File/CheckTree.pm -f }; }; is( $@, '' ); is( scalar @warnings, 1 ); like( $warnings[0], qr/lib is not a plain file/); is( $num_warnings, 1 ); } #### 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 lib/File/CheckTree.pm -f || die lib/File/CheckTree.pm -d || warn lib -f || warn "my warning: $file\n" }; }; is( $@, '' ); is( scalar @warnings, 3 ); like( $warnings[0], qr/lib is not a plain file/); like( $warnings[1], qr{lib/File/CheckTree.pm is not a directory}); like( $warnings[2], qr/my warning: lib/); is( $num_warnings, 3 ); } #### TEST 4 -- cd directive #### # cd directive followed by relative paths, followed by full paths { my ($num_warnings, @warnings, $path_to_lib, $path_to_dist); $path_to_lib = File::Spec->rel2abs(File::Spec->catdir('lib')); $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_lib' cd File -e File -f '$path_to_dist' cd lib/File/CheckTree.pm -ef lib/File/CheckTree.pm -d || warn '$path_to_lib' -d || die }; }; is( $@, '' ); is( scalar @warnings, 2 ); like( $warnings[0], qr/File is not a plain file/); like( $warnings[1], qr/CheckTree\.pm is not a directory/); is( $num_warnings, 2 ); } #### TEST 5 -- Exception #### # test with generic "|| die" { my $num_warnings; eval { $num_warnings = validate q{ lib -ef || die lib/File/CheckTree.pm -d }; }; like($@, qr/lib is not a plain file/); } #### TEST 6 -- Exception #### # test with "|| die 'my error message'" { my $num_warnings; eval { $num_warnings = validate q{ lib -ef || die "yadda $file yadda...\n" lib/File/CheckTree.pm -d }; }; like($@, qr/yadda lib yadda/); is( $num_warnings, undef ); } #### TEST 7 -- Quoted file names #### { my $num_warnings; eval { $num_warnings = validate q{ "a file with whitespace" !-ef 'a file with whitespace' !-ef }; }; is ( $@, '', 'No errors mean we compile correctly'); } #### TEST 8 -- Malformed query #### { my $num_warnings; eval { $num_warnings = validate q{ a file with whitespace !-ef }; }; like( $@, qr/syntax error/, 'We got a syntax error for a malformed file query' ); }