Upgrade to version-0.52
[p5sagit/p5-mst-13.2.git] / lib / File / CheckTree.t
index b445af4..0257f4e 100755 (executable)
-#!./perl
+#!./perl -w
 
 BEGIN {
     chdir 't' if -d 't';
     @INC = '../lib';
 }
 
-print "1..1\n";
+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);
+    }
+}
+
 
-# We assume that we run from the perl "t" directory.
+#### TEST 3 -- Multiple warnings ####
+# including first warning only from a bundle of tests,
+# generic "|| warn", default "|| warn" and "|| warn '...' "
 
-validate q{
-    lib  -d || die
-    TEST -f || die
-};
+{
+    my ($num_warnings, @warnings);
 
-print "ok 1\n";
+    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);
+    }
+}