test that perl.pod, pod.lst, MANIFEST and the file system are consistent
authorTony Cook <tony@develop-help.com>
Thu, 13 Jan 2011 12:29:38 +0000 (23:29 +1100)
committerJesse Vincent <jesse@bestpractical.com>
Sat, 15 Jan 2011 00:05:38 +0000 (19:05 -0500)
Possibly this is too strict.

MANIFEST
pod/buildtoc
t/porting/buildtoc.t [new file with mode: 0644]

index 9139d6b..2c333a9 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -4876,6 +4876,7 @@ t/op/yadayada.t                   See if ... works
 t/perl.supp                    Perl valgrind suppressions
 t/porting/args_assert.t                Check that all PERL_ARGS_ASSERT* macros are used
 t/porting/authors.t            Check that all authors have been acknowledged
+t/porting/buildtoc.t           Check that various pod lists are consistent
 t/porting/checkcase.t          Check whether we are case-insensitive-fs-friendly
 t/porting/diag.t               Test completeness of perldiag.pod
 t/porting/dual-life.t          Check that dual-life bins are in utils/
index 401201f..50fc892 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use vars qw($masterpodfile %Build %Targets $Verbose $Quiet $Up %Ignore
            @Master %Readmes %Pods %Aux %Readmepods %Pragmata %Modules
-           %Copies %Generated);
+           %Copies %Generated $Test);
 use File::Spec;
 use File::Find;
 use FindBin;
@@ -23,6 +23,8 @@ $masterpodfile = File::Spec->catfile($Up, "pod.lst");
 # --build-all tries to build everything
 # --build-foo updates foo as follows
 # --showfiles shows the files to be changed
+# --test exit early, exit if perl.pod, pod.lst, MANIFEST are
+#   consistent, die otherwise.
 
 %Targets
   = (
@@ -49,6 +51,7 @@ __USAGE__
        && GetOptions (verbose => \$Verbose,
                       quiet => \$Quiet,
                       showfiles => \$showfiles,
+                      test => \$Test,
                       map {+"build-$_", \$Build{$_}} @files, 'all');
   # Set them all to true
   @Build{@files} = @files if ($Build{all});
@@ -199,12 +202,13 @@ close MASTER;
     unless @perlpods;
   @perlpods{@perlpods} = @perlpods;
 
+  my @inconsistent;
   foreach my $i (sort keys %disk_pods) {
-    warn "$0: $i exists but is unknown by buildtoc\n"
+    push @inconsistent, "$0: $i exists but is unknown by buildtoc\n"
       unless $our_pods{$i};
-    warn "$0: $i exists but is unknown by ../MANIFEST\n"
+    push @inconsistent, "$0: $i exists but is unknown by ../MANIFEST\n"
       if !$manipods{$i} && !$manireadmes{$i} && !$Copies{$i} && !$Generated{$i};
-    warn "$0: $i exists but is unknown by perl.pod\n"
+    push @inconsistent, "$0: $i exists but is unknown by perl.pod\n"
        if !$perlpods{$i} && !exists $Copies{$i};
   }
   my @BuildTargets = grep {defined} @Targets{grep $_ ne 'all', keys %Build};
@@ -212,19 +216,31 @@ close MASTER;
   @BuildFiles{@BuildTargets} = @BuildTargets;
 
   foreach my $i (sort keys %our_pods) {
-    warn "$0: $i is known by buildtoc but does not exist\n"
+    push @inconsistent, "$0: $i is known by buildtoc but does not exist\n"
       unless $disk_pods{$i} or $BuildFiles{$i};
   }
   foreach my $i (sort keys %manipods) {
-    warn "$0: $i is known by ../MANIFEST but does not exist\n"
+    push @inconsistent, "$0: $i is known by ../MANIFEST but does not exist\n"
       unless $disk_pods{$i};
-    warn "$0: $i is known by ../MANIFEST but is marked as generated\n"
+    push @inconsistent, "$0: $i is known by ../MANIFEST but is marked as generated\n"
       if $Generated{$i};
   }
   foreach my $i (sort keys %perlpods) {
-    warn "$0: $i is known by perl.pod but does not exist\n"
+    push @inconsistent, "$0: $i is known by perl.pod but does not exist\n"
       unless $disk_pods{$i} or $BuildFiles{$i};
   }
+  if ($Test) {
+    print "1..1\n";
+    if (@inconsistent) {
+      print "not ok 1\n";
+      die @inconsistent
+    }
+    print "ok 1\n";
+    exit;
+  }
+  else {
+    warn @inconsistent if @inconsistent;
+  }
 }
 
 # Find all the modules
diff --git a/t/porting/buildtoc.t b/t/porting/buildtoc.t
new file mode 100644 (file)
index 0000000..d717e77
--- /dev/null
@@ -0,0 +1,11 @@
+#!./perl
+
+BEGIN {
+    chdir '..' unless -d 't';
+    unshift @INC, 'lib';
+}
+
+use strict;
+
+my $dotslash = $^O eq "MSWin32" ? ".\\" : "./";
+system("${dotslash}perl -f -Ilib pod/buildtoc --build-toc -q --test");