The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More;

use 5.14.2;
use strict;
use warnings;

use Zonemaster::Engine;
use File::Find;

eval { require Pod::Coverage };
if ( $@ ) {
    plan skip_all => "Need Pod::Coverage to run these tests.";
    exit( 0 );
}

my @modules;

find(
    sub {
        if ( $File::Find::name =~ m|lib/(.*)\.pm| ) {
            my $name = $1;
            $name =~ s|/|::|g;

            push @modules, $name;
        }
    },
    'lib'
);

foreach my $name ( @modules ) {
    next if $name =~ q{Zonemaster::Engine::Constants};
    my $pc = Pod::Coverage->new( package => $name , private => [ qr/^_/ ] );
    if ( defined $pc->coverage ) {
        my @uncovered = $pc->uncovered;
        if ( @uncovered == 1 and $uncovered[0] eq 'LC_MESSAGES' ) {
            next;
        }

        is( $pc->coverage, 1.0, $name );
        if ( $pc->coverage < 1.0 ) {
            foreach my $name ( @uncovered ) {
                diag "Function '$name' not documented";
            }
        }
    }
    else {
        diag $pc->why_unrated . ' for ' . $name;
    }
}

done_testing;