3 ##############################################################################
4 # $URL: http://perlcritic.tigris.org/svn/perlcritic/trunk/Perl-Critic/xt/author/80_policysummary.t $
5 # $Date: 2008-04-20 22:15:46 -0700 (Sun, 20 Apr 2008) $
8 ##############################################################################
13 use English qw< -no_match_vars >;
16 use List::MoreUtils qw(any);
18 use Perl::Critic::PolicyFactory ( -test => 1 );
19 use Perl::Critic::TestUtils qw{ bundled_policy_names };
23 #-----------------------------------------------------------------------------
26 File::Spec->catfile( qw< lib Perl Critic PolicySummary.pod > );
27 if (open my ($fh), '<', $summary_file) {
29 my $content = do {local $/=undef; <$fh> };
32 my @policy_names = bundled_policy_names();
33 my @summaries = $content =~ m/^=head2 [ ]+ L<([\w:]+)>/gxms;
34 plan( tests => 2 + 2 * @policy_names );
37 for my $summary (@summaries) {
38 ++$num_summaries{$summary};
40 if (!ok(@summaries == keys %num_summaries, 'right number of summaries')) {
41 for my $policy_name (sort keys %num_summaries) {
42 next if 1 == $num_summaries{$policy_name};
43 diag('Duplicate summary for ' . $policy_name);
47 my $profile = Perl::Critic::UserProfile->new();
48 my $factory = Perl::Critic::PolicyFactory->new( -profile => $profile );
49 my %found_policies = map { ref $_ => $_ } $factory->create_all_policies();
51 my %descriptions = $content =~ m/^=head2 [ ]+ L<([\w:]+)>\n\n([^\n]+)/gxms;
52 for my $policy_name (keys %descriptions) {
53 $descriptions{$policy_name} =~ s/[ ] \[Severity [ ] (\d+)\]//xms;
55 $descriptions{$policy_name} = {
56 desc => $descriptions{$policy_name},
57 severity => $severity,
61 for my $policy_name ( @policy_names ) {
62 my $label = qq{PolicySummary.pod has "$policy_name"};
63 my $has_summary = delete $num_summaries{$policy_name};
64 is( $has_summary, 1, $label );
66 my $summary_severity = $descriptions{$policy_name}->{severity};
67 my $real_severity = $found_policies{$policy_name} &&
68 $found_policies{$policy_name}->default_severity;
69 is( $summary_severity, $real_severity, "severity for $policy_name" );
72 if (!ok(0 == keys %num_summaries, 'no extra summaries')) {
73 for my $policy_name (sort keys %num_summaries) {
74 diag('Extraneous summary for ' . $policy_name);
80 fail qq<Cannot open "$summary_file": $ERRNO>;
83 #-----------------------------------------------------------------------------
85 # ensure we run true if this test is loaded by
86 # t/80_policysummary.t.without_optional_dependencies.t
91 # cperl-indent-level: 4
93 # indent-tabs-mode: nil
94 # c-indentation-style: bsd
96 # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :