diff options
Diffstat (limited to 'perl/t/style/strict.t')
-rwxr-xr-x | perl/t/style/strict.t | 50 |
1 files changed, 38 insertions, 12 deletions
diff --git a/perl/t/style/strict.t b/perl/t/style/strict.t index a3d2a3e..a87c1fa 100755 --- a/perl/t/style/strict.t +++ b/perl/t/style/strict.t @@ -6,7 +6,7 @@ # which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>. # # Written by Russ Allbery <eagle@eyrie.org> -# Copyright 2016 Russ Allbery <eagle@eyrie.org> +# Copyright 2016, 2018-2019 Russ Allbery <eagle@eyrie.org> # Copyright 2013-2014 # The Board of Trustees of the Leland Stanford Junior University # @@ -30,15 +30,16 @@ # # SPDX-License-Identifier: MIT -use 5.006; +use 5.008; use strict; use warnings; use lib 't/lib'; -use File::Spec; use Test::RRA qw(skip_unless_automated use_prereq); +use File::Spec; + # Skip for normal user installs since this doesn't affect functionality. skip_unless_automated('Strictness tests'); @@ -46,15 +47,40 @@ skip_unless_automated('Strictness tests'); # use 5.012 or later automatically implies use strict. use_prereq('Test::Strict', '0.25'); -# Test everything in the distribution directory except the Build and -# Makefile.PL scripts generated by Module::Build. We also want to check use -# warnings. -$Test::Strict::TEST_SKIP = ['Build', 'Makefile.PL']; +# Directories to exclude from checks. +my %EXCLUDE = map { $_ => 1 } qw(.git blib); + +# Determine whether we want to check the given file or top-level directory. +# Assume that the only interesting files at the top level are directories or +# files ending in *.PL. +# +# $file - Name of the file or directory +# +# Returns: 1 if it should be checked, undef otherwise. +sub should_check { + my ($file) = @_; + return if $EXCLUDE{$file}; + return 1 if -d $file; + return 1 if $file =~ m{ [.] PL \z }xms; + return; +} + +# Test::Strict (as of 0.47) doesn't have a way of excluding whole directories +# from all_perl_files_ok and doesn't exclude .git, which results in false +# positives if there are Perl files unpacked under .git (which is often the +# case when using dgit). We therefore can't just point it at the root of the +# module distribution and instead have to manually construct a list of +# interesting files. +opendir(my $rootdir, File::Spec->curdir) + or die "$0: cannot open current directory: $!\n"; +my @files = File::Spec->no_upwards(readdir($rootdir)); +closedir($rootdir) or die "$0: cannot close current directory: $!\n"; +my @to_check = grep { should_check($_) } @files; + +# Test the files and top-level directories we found, including checking for +# use warnings. $Test::Strict::TEST_WARNINGS = 1; -all_perl_files_ok(File::Spec->curdir); +all_perl_files_ok(@to_check); # Hack to suppress "used only once" warnings. -END { - $Test::Strict::TEST_SKIP = []; - $Test::Strict::TEST_WARNINGS = 0; -} +END { $Test::Strict::TEST_WARNINGS = 0 } |