aboutsummaryrefslogtreecommitdiff
path: root/perl/t/style/strict.t
diff options
context:
space:
mode:
Diffstat (limited to 'perl/t/style/strict.t')
-rwxr-xr-xperl/t/style/strict.t50
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 }