]> git.imager.perl.org - imager.git/blob - t/t93podcover.t
0.62 goals
[imager.git] / t / t93podcover.t
1 #!perl -w
2 use strict;
3 use lib 't';
4 use Test::More;
5 use ExtUtils::Manifest qw(maniread);
6 eval "use Test::Pod::Coverage 1.08;";
7 # 1.08 required for coverage_class support
8 plan skip_all => "Test::Pod::Coverage 1.08 required for POD coverage" if $@;
9
10 # scan for a list of files to get Imager method documentation from
11 my $manifest = maniread();
12 my @pods = ( 'Imager.pm', grep /\.pod$/, keys %$manifest );
13
14 my @private = 
15   ( 
16    '^io?_',
17    '^DSO_',
18    '^Inline$',
19    '^yatf$',
20    '^m_init_log$',
21    '^malloc_state$',
22    '^init_log$',
23    '^polybezier$', # not ready for public consumption
24    '^border$', # I don't know what it is, expect it to go away
25   );
26 my @trustme = ( '^open$',  );
27
28 plan tests => 18;
29
30 {
31   pod_coverage_ok('Imager', { also_private => \@private,
32                               pod_from => \@pods,
33                               trustme => \@trustme,
34                               coverage_class => 'Pod::Coverage::Imager' });
35   pod_coverage_ok('Imager::Font');
36   my @color_private = ( '^i_', '_internal$' );
37   pod_coverage_ok('Imager::Color', 
38                   { also_private => \@color_private });
39   pod_coverage_ok('Imager::Color::Float', 
40                   { also_private => \@color_private });
41   pod_coverage_ok('Imager::Color::Table');
42   pod_coverage_ok('Imager::ExtUtils');
43   pod_coverage_ok('Imager::Expr');
44   my $trust_parents = { coverage_class => 'Pod::Coverage::CountParents' };
45   pod_coverage_ok('Imager::Expr::Assem', $trust_parents);
46   pod_coverage_ok('Imager::Fill');
47   pod_coverage_ok('Imager::Font::BBox');
48   pod_coverage_ok('Imager::Font::Wrap');
49   pod_coverage_ok('Imager::Fountain');
50   pod_coverage_ok('Imager::Matrix2d');
51   pod_coverage_ok('Imager::Regops');
52   pod_coverage_ok('Imager::Transform');
53 }
54
55 {
56   # check all documented methods/functions are in the method index
57   my $coverage = 
58     Pod::Coverage::Imager->new(package => 'Imager',
59                                pod_from => \@pods,
60                                trustme => \@trustme,
61                                also_private => \@private);
62   my %methods = map { $_ => 1 } $coverage->covered;
63   open IMAGER, "< Imager.pm"
64     or die "Cannot open Imager.pm: $!";
65   while (<IMAGER>) {
66     last if /^=head1 METHOD INDEX/;
67   }
68   my @indexed;
69   my @unknown_indexed;
70   while (<IMAGER>) {
71     last if /^=\w/;
72
73     if (/^(\w+)\(/) {
74       push @indexed, $1;
75       unless (delete $methods{$1}) {
76         push @unknown_indexed, $1;
77       }
78     }
79   }
80
81   unless (is(keys %methods, 0, "all methods in method index")) {
82     print "# the following methods are documented but not in the index:\n";
83     print "#  $_\n" for sort keys %methods;
84   }
85   unless (is(@unknown_indexed, 0, "only methods in method index")) {
86     print "# the following names are in the method index but not documented\n";
87     print "#  $_\n" for sort @unknown_indexed;
88   }
89
90   sub dict_cmp_func;
91   is_deeply(\@indexed, [ sort dict_cmp_func @indexed ],
92             "check method index is alphabetically sorted");
93 }
94
95 sub dict_cmp_func {
96   (my $tmp_a = lc $a) =~ tr/_//d;
97   (my $tmp_b = lc $b) =~ tr/_//d;
98
99   $tmp_a cmp $tmp_b;
100 }