Browse Source

t: Add POD coverage support for public perl modules

Guillem Jover 7 years ago
parent
commit
d5f3d026b8
3 changed files with 63 additions and 0 deletions
  1. 1 0
      Makefile.am
  2. 2 0
      debian/changelog
  3. 60 0
      t/pod-coverage.t

+ 1 - 0
Makefile.am

@@ -146,6 +146,7 @@ endif
 test_scripts = \
 	t/pod.t \
 	t/pod-spell.t \
+	t/pod-coverage.t \
 	t/synopsis.t \
 	t/minimum-version.t \
 	t/syntax.t \

+ 2 - 0
debian/changelog

@@ -17,6 +17,8 @@ dpkg (1.18.10) UNRELEASED; urgency=medium
     - Rename various private methods and functions with an underscore prefix
       and unified names.
     - Refactor perl modules directory list into a new function in Test::Dpkg.
+  * Test suite:
+    - Add new POD coverage author test for public perl modules.
   * Documentation:
     - Document Testsuite-Triggers in dsc(5).
     - Fix deb-changes(5) description to talk about .changes instead of .dsc.

+ 60 - 0
t/pod-coverage.t

@@ -0,0 +1,60 @@
+#!/usr/bin/perl
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use File::Find;
+
+use Test::More;
+use Test::Dpkg qw(:needs);
+
+test_needs_author();
+test_needs_module('Test::Pod::Coverage');
+test_needs_srcdir_switch();
+
+sub all_pod_modules
+{
+    my @modules;
+    my $scan_perl_modules = sub {
+        my $module = $File::Find::name;
+
+        # Only chack modules, scripts are documented in man pages.
+        return unless $module =~ s/\.pm$//;
+
+        # As a first step just check public modules (version > 0.xx).
+        return unless system('grep', '^our \$VERSION = \'[^0]\.', $File::Find::name) == 0;
+
+        $module =~ s{^\Q$File::Find::topdir\E/}{};
+
+        push @modules, $module =~ s{/}{::}gr;
+    };
+
+    my %options = (
+        wanted => $scan_perl_modules,
+        no_chdir => 1,
+    );
+    find(\%options, Test::Dpkg::test_get_perl_dirs());
+
+    return @modules;
+}
+
+my @modules = all_pod_modules();
+
+plan tests => scalar @modules;
+
+for my $module (@modules) {
+    pod_coverage_ok($module);
+}