This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
b6f66942db8531de52770d1e544418b050e4425e
[perl5.git] / t / porting / dual-life.t
1 #!/perl -w
2 use 5.010;
3 use strict;
4
5 # This tests properties of dual-life modules:
6 #
7 # * Are all dual-life programs being generated in utils/?
8
9 require './test.pl';
10
11 plan('no_plan');
12
13 use File::Basename;
14 use File::Find;
15 use File::Spec::Functions;
16
17 # Exceptions that are found in dual-life bin dirs but aren't
18 # installed by default; some occur only during testing:
19 my $not_installed = qr{^(?:
20   \.\./cpan/Encode/bin/u(?:cm(?:2table|lint|sort)|nidump)
21    |
22   \.\./cpan/Module-Build/MB-[\w\d]+/Simple/bin/foo(?:\.PL)?
23 )\z}ix;
24
25 my %dist_dir_exe;
26
27 foreach (qw (podchecker podselect pod2usage)) {
28     $dist_dir_exe{lc "$_.PL"} = "../cpan/Pod-Parser/$_";
29 };
30 foreach (qw (pod2man pod2text)) {
31     $dist_dir_exe{lc "$_.PL"} = "../cpan/podlators/$_";
32 };
33 $dist_dir_exe{'pod2html.pl'} = '../ext/Pod-Html';
34
35 my @programs;
36
37 find(
38   sub {
39     my $name = $File::Find::name;
40     return if $name =~ /blib/;
41     return unless $name =~ m{/(?:bin|scripts?)/\S+\z} && $name !~ m{/t/};
42
43     push @programs, $name;
44   },
45   qw( ../cpan ../dist ../ext ),
46 );
47
48 my $ext = $^O eq 'VMS' ? '.com' : '';
49
50 for my $f ( @programs ) {
51   $f =~ s/\.\z// if $^O eq 'VMS';
52   next if $f =~ $not_installed;
53   my $bn = basename($f);
54   if(qr/\A(?i:$bn)\z/ ~~ %dist_dir_exe) {
55     ok( -f "$dist_dir_exe{lc $bn}$ext", "$f$ext");
56   } else {
57     ok( -f catfile('..', 'utils', "$bn$ext"), "$f$ext" );
58   }
59 }
60