This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re: [perl #36502] File::Copy::mv fails to replicate behavior of Unix mv
[perl5.git] / lib / File / CheckTree.t
CommitLineData
849d5e34 1#!./perl -w
1a3850a5
GA
2
3BEGIN {
4 chdir 't' if -d 't';
20822f61 5 @INC = '../lib';
1a3850a5
GA
6}
7
849d5e34
JH
8use Test;
9
10BEGIN { plan tests => 6 }
11
12use strict;
1a3850a5
GA
13
14use File::CheckTree;
849d5e34
JH
15use File::Spec; # used to get absolute paths
16
17# We assume that we start from the perl "t" directory.
18# Will move up one level to make it easier to generate
19# reliable pathnames for testing File::CheckTree
20
86dc4f03 21chdir(File::Spec->updir) or die "cannot change to parent of t/ directory: $!";
849d5e34
JH
22
23
24#### TEST 1 -- No warnings ####
25# usings both relative and full paths, indented comments
26
27{
28 my ($num_warnings, $path_to_README);
29 $path_to_README = File::Spec->rel2abs('README');
30
31 my @warnings;
32 local $SIG{__WARN__} = sub { push @warnings, "@_" };
33
34 eval {
35 $num_warnings = validate qq{
36 lib -d
37# comment, followed "blank" line (w/ whitespace):
38
39 # indented comment, followed blank line (w/o whitespace):
40
41 README -f
42 $path_to_README -e || warn
43 };
44 };
45
46 if ( !$@ && !@warnings && defined($num_warnings) && $num_warnings == 0 ) {
47 ok(1);
48 }
49 else {
50 ok(0);
51 }
52}
53
54
55#### TEST 2 -- One warning ####
56
57{
58 my ($num_warnings, @warnings);
59
60 local $SIG{__WARN__} = sub { push @warnings, "@_" };
61
62 eval {
63 $num_warnings = validate qq{
64 lib -f
65 README -f
66 };
67 };
68
69 if ( !$@ && @warnings == 1
70 && $warnings[0] =~ /lib is not a plain file/
71 && defined($num_warnings)
72 && $num_warnings == 1 )
73 {
74 ok(1);
75 }
76 else {
77 ok(0);
78 }
79}
80
1a3850a5 81
849d5e34
JH
82#### TEST 3 -- Multiple warnings ####
83# including first warning only from a bundle of tests,
84# generic "|| warn", default "|| warn" and "|| warn '...' "
1a3850a5 85
849d5e34
JH
86{
87 my ($num_warnings, @warnings);
1a3850a5 88
849d5e34
JH
89 local $SIG{__WARN__} = sub { push @warnings, "@_" };
90
91 eval {
92 $num_warnings = validate q{
93 lib -effd
94 README -f || die
95 README -d || warn
96 lib -f || warn "my warning: $file\n"
97 };
98 };
99
100 if ( !$@ && @warnings == 3
101 && $warnings[0] =~ /lib is not a plain file/
102 && $warnings[1] =~ /README is not a directory/
103 && $warnings[2] =~ /my warning: lib/
104 && defined($num_warnings)
105 && $num_warnings == 3 )
106 {
107 ok(1);
108 }
109 else {
110 ok(0);
111 }
112}
113
114
115#### TEST 4 -- cd directive ####
116# cd directive followed by relative paths, followed by full paths
117{
118 my ($num_warnings, @warnings, $path_to_libFile, $path_to_dist);
026a9d8a 119 $path_to_libFile = File::Spec->rel2abs(File::Spec->catdir('lib','File'));
849d5e34
JH
120 $path_to_dist = File::Spec->rel2abs(File::Spec->curdir);
121
122 local $SIG{__WARN__} = sub { push @warnings, "@_" };
123
124 eval {
125 $num_warnings = validate qq{
126 lib -d || die
127 $path_to_libFile cd
128 Spec -e
129 Spec -f
130 $path_to_dist cd
131 README -ef
132 INSTALL -d || warn
133 $path_to_libFile -d || die
134 };
135 };
136
137 if ( !$@ && @warnings == 2
138 && $warnings[0] =~ /Spec is not a plain file/
139 && $warnings[1] =~ /INSTALL is not a directory/
140 && defined($num_warnings)
141 && $num_warnings == 2 )
142 {
143 ok(1);
144 }
145 else {
146 ok(0);
147 }
148}
149
150
151#### TEST 5 -- Exception ####
152# test with generic "|| die"
153{
154 my $num_warnings;
155
156 eval {
157 $num_warnings = validate q{
158 lib -ef || die
159 README -d
160 };
161 };
162
163 if ( $@ && $@ =~ /lib is not a plain file/
164 && not defined $num_warnings )
165 {
166 ok(1);
167 }
168 else {
169 ok(0);
170 }
171}
172
173
174#### TEST 6 -- Exception ####
175# test with "|| die 'my error message'"
176{
177 my $num_warnings;
178
179 eval {
180 $num_warnings = validate q{
181 lib -ef || die "yadda $file yadda...\n"
182 README -d
183 };
184 };
185
186 if ( $@ && $@ =~ /yadda lib yadda/
187 && not defined $num_warnings )
188 {
189 ok(1);
190 }
191 else {
192 ok(0);
193 }
194}