This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
allow buildtoc to find libraries after chdir into pod/
[perl5.git] / t / porting / podcheck.t
1 #!/usr/bin/perl -w
2
3 require './test.pl';
4
5 use strict;
6
7 {
8     package My::Pod::Checker;
9     use strict;
10     use parent 'Pod::Checker';
11
12     use vars '@errors'; # a bad, bad hack!
13
14     sub poderror {
15         my $self = shift;
16         my $opts;
17         if (ref $_[0]) {
18             $opts = shift;
19         };
20         ++($self->{_NUM_ERRORS})
21             if(!$opts || ($opts->{-severity} && $opts->{-severity} eq 'ERROR'));
22         ++($self->{_NUM_WARNINGS})
23             if(!$opts || ($opts->{-severity} && $opts->{-severity} eq 'WARNING'));
24         push @errors, $opts;
25     };
26 }
27
28
29 use strict;
30 use File::Spec;
31 s{^\.\./lib$}{lib} for @INC;
32 chdir '..';
33 my @files;
34 my $manifest = 'MANIFEST';
35
36 open my $m, '<', $manifest or die "Can't open '$manifest': $!";
37
38 while (<$m>) {
39     chomp;
40     next unless /\s/;   # Ignore lines without whitespace (i.e., filename only)
41     my ($file, $separator) = /^(\S+)(\s+)/;
42         next if $file =~ /^cpan\//;
43         next unless ($file =~ /\.(?:pm|pod|pl)$/);
44         next if $file eq 'autodoc.pl';
45     push @files, $file;
46 };
47 @files = sort @files; # so we get consistent results
48
49 sub pod_ok {
50     my ($filename) = @_;
51     local @My::Pod::Checker::errors;
52     my $checker = My::Pod::Checker->new(-quiet => 1);
53     $checker->parse_from_file($filename, undef);
54     my $error_count = $checker->num_errors();
55
56     if(! ok($error_count <= 0, "POD of $filename")) {
57         diag( "'$filename' contains POD errors" );
58         diag(sprintf "%s %s: %s at line %s",
59              $_->{-severity}, $_->{-file}, $_->{-msg}, $_->{-line})
60             for @My::Pod::Checker::errors;
61     };
62 };
63
64 plan (tests => scalar @files);
65
66 pod_ok $_
67     for @files;
68
69 __DATA__
70 lib/
71 ext/
72 pod/
73 AUTHORS
74 Changes
75 INSTALL
76 README*
77 *.pod