15 'Readonly::Scalar' => 'Readonly',
16 'Readonly::Array' => 'Readonly',
17 'Readonly::Hash' => 'Readonly',
24 wanted => sub { push @pm, $_ if m/\.pm \z/xms && !m/svn/xms },
29 plan tests => scalar @pm;
34 my $doc = PPI::Document->new($file) || die 'Failed to parse '.$file;
36 my @incs = @{$doc->find('PPI::Statement::Include') || []};
37 my %deps = map {$_->module => 1} grep {$_->type eq 'use' || $_->type eq 'require'} @incs;
38 my %thispkg = map {$_->namespace => 1} @{$doc->find('PPI::Statement::Package') || []};
39 my @pkgs = @{$doc->find('PPI::Token::Word')};
44 next if $name !~ m/::/xms;
45 next if $name =~ m/::_private::/xms;
46 next if $name =~ m/List::Util::[a-z]+/xms;
48 # subroutine declaration with absolute name?
49 # (bad form, but legal)
50 my $prev_sib = $pkg->sprevious_sibling;
53 !$prev_sib->sprevious_sibling &&
54 $pkg->parent->isa('PPI::Statement::Sub'));
56 my $token = $pkg->next_sibling;
58 if ($token =~ m/\A \(/xms) {
59 $name =~ s/::\w+\z//xms;
62 if ( !match($name, \%deps, \%thispkg) ) {
67 my @failures = sort keys %failed;
69 diag("found deps @{[sort keys %deps]}");
70 diag("Missed @failures");
72 ok(@failures == 0, $file);
81 return 1 if $thispkg->{$pkg};
82 return 1 if $deps->{$pkg};
83 $pkg = $implied{$pkg};
84 return 0 if !defined $pkg;
85 return 1 if 1 eq $pkg;
86 return match($pkg, $deps, $thispkg);
89 #-----------------------------------------------------------------------------
91 # ensure we run true if this test is loaded by
92 # t/94_includes.t.t.without_optional_dependencies.t
97 # cperl-indent-level: 4
99 # indent-tabs-mode: nil
100 # c-indentation-style: bsd
102 # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :