foldable: make more understandable
[gnu-stow.git] / t / foldable.t
blobe52872301f404842f4b841acedef0ade55675130
1 #!/usr/bin/perl
3 # This file is part of GNU Stow.
5 # GNU Stow is free software: you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
10 # GNU Stow is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see https://www.gnu.org/licenses/.
19 # Testing foldable()
22 use strict;
23 use warnings;
25 use testutil;
27 use Test::More tests => 4;
28 use English qw(-no_match_vars);
30 init_test_dirs();
31 cd("$TEST_DIR/target");
33 my $stow = new_Stow(dir => '../stow');
35 # Note that each of the following tests use a distinct set of files
38 # can fold a simple tree
41 make_path('../stow/pkg1/bin1');
42 make_file('../stow/pkg1/bin1/file1');
43 make_path('bin1');
44 make_link('bin1/file1','../../stow/pkg1/bin1/file1');
46 is( $stow->foldable('bin1'), '../stow/pkg1/bin1' => q(can fold a simple tree) );
49 # can't fold an empty directory
52 make_path('../stow/pkg2/bin2');
53 make_file('../stow/pkg2/bin2/file2');
54 make_path('bin2');
56 is( $stow->foldable('bin2'), '' => q(can't fold an empty directory) );
59 # can't fold if dir contains a non-link
62 make_path('../stow/pkg3/bin3');
63 make_file('../stow/pkg3/bin3/file3');
64 make_path('bin3');
65 make_link('bin3/file3','../../stow/pkg3/bin3/file3');
66 make_file('bin3/non-link');
68 is( $stow->foldable('bin3'), '' => q(can't fold a dir containing non-links) );
71 # can't fold if links point to different directories
74 make_path('bin4');
75 make_path('../stow/pkg4a/bin4');
76 make_file('../stow/pkg4a/bin4/file4a');
77 make_link('bin4/file4a','../../stow/pkg4a/bin4/file4a');
78 make_path('../stow/pkg4b/bin4');
79 make_file('../stow/pkg4b/bin4/file4b');
80 make_link('bin4/file4b','../../stow/pkg4b/bin4/file4b');
82 is( $stow->foldable('bin4'), '' => q(can't fold if links point to different dirs) );