3 # Check for spelling errors in POD documentation
5 # Checks all POD files in the tree for spelling problems using Pod::Spell and
6 # either aspell or ispell. aspell is preferred. This test is disabled unless
7 # RRA_MAINTAINER_TESTS is set, since spelling dictionaries vary too much
8 # between environments.
10 # Copyright 2008, 2009 Russ Allbery <rra@stanford.edu>
12 # See LICENSE for licensing terms.
17 # Skip all spelling tests unless the maintainer environment variable is set.
18 plan skip_all => 'Spelling tests only run for maintainer'
19 unless $ENV{RRA_MAINTAINER_TESTS};
21 # Load required Perl modules.
22 eval 'use Test::Pod 1.00';
23 plan skip_all => 'Test::Pod 1.00 required for testing POD' if $@;
24 eval 'use Pod::Spell';
25 plan skip_all => 'Pod::Spell required to test POD spelling' if $@;
27 # Locate a spell-checker. hunspell is not currently supported due to its lack
28 # of support for contractions (at least in the version in Debian).
30 my %options = (aspell => [ qw(-d en_US --home-dir=./ list) ],
31 ispell => [ qw(-d american -l -p /dev/null) ]);
32 SEARCH: for my $program (qw/aspell ispell/) {
33 for my $dir (split ':', $ENV{PATH}) {
34 if (-x "$dir/$program") {
35 @spell = ("$dir/$program", @{ $options{$program} });
37 last SEARCH if @spell;
40 plan skip_all => 'aspell or ispell required to test POD spelling'
43 # Prerequisites are satisfied, so we're going to do some testing. Figure out
44 # what POD files we have and from that develop our plan.
46 my @pod = map { s,[^/.][^/]*/../,,g; $_ }
47 ("$ENV{SOURCE}/../external/heimdal-strength.pod");
48 plan tests => scalar @pod;
50 # Finally, do the checks.
52 my $child = open (CHILD, '-|');
53 if (not defined $child) {
54 die "Cannot fork: $!\n";
55 } elsif ($child == 0) {
56 my $pid = open (SPELL, '|-', @spell) or die "Cannot run @spell: $!\n";
57 open (POD, '<', $pod) or die "Cannot open $pod: $!\n";
58 my $parser = Pod::Spell->new;
59 $parser->parse_from_filehandle (\*POD, \*SPELL);
67 skip "@spell failed for $pod", 1 unless $? == 0;
72 is ("@words", '', $pod);