use Test::Requires in tests
[gitmo/Class-MOP.git] / xt / author / pod_coverage.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7
8 use Test::Requires {
9     'Test::Pod::Coverage' => '1.04', # skip all if not installed
10 };
11
12 # This is a stripped down version of all_pod_coverage_ok which lets us
13 # vary the trustme parameter per module.
14 my @modules = all_modules();
15 plan tests => scalar @modules;
16
17 my %trustme = (
18     'Class::MOP' => [ 'HAVE_ISAREV', 'subname', 'in_global_destruction' ],
19     'Class::MOP::Attribute' => ['process_accessors'],
20     'Class::MOP::Class'     => [
21         # deprecated
22         'alias_method',
23         'compute_all_applicable_attributes',
24         'compute_all_applicable_methods',
25
26         # unfinished feature
27         'add_dependent_meta_instance',
28         'add_meta_instance_dependencies',
29         'invalidate_meta_instance',
30         'invalidate_meta_instances',
31         'remove_dependent_meta_instance',
32         'remove_meta_instance_dependencies',
33         'update_meta_instance_dependencies',
34
35         # effectively internal
36         'check_metaclass_compatibility',
37         'clone_instance',
38         'construct_class_instance',
39         'construct_instance',
40         'create_meta_instance',
41         'reset_package_cache_flag',
42         'update_package_cache_flag',
43
44         # doc'd with rebless_instance
45         'rebless_instance_away',
46
47         # deprecated
48         'get_attribute_map',
49     ],
50     'Class::MOP::Class::Immutable::Trait'             => ['.+'],
51     'Class::MOP::Class::Immutable::Class::MOP::Class' => ['.+'],
52     'Class::MOP::Deprecated'                          => ['.+'],
53     'Class::MOP::Instance'                            => [
54         qw( BUILDARGS
55             bless_instance_structure
56             is_dependent_on_superclasses ),
57     ],
58     'Class::MOP::Instance' => [
59         qw( BUILDARGS
60             bless_instance_structure
61             is_dependent_on_superclasses ),
62     ],
63     'Class::MOP::Method::Accessor' => [
64         qw( generate_accessor_method
65             generate_accessor_method_inline
66             generate_clearer_method
67             generate_clearer_method_inline
68             generate_predicate_method
69             generate_predicate_method_inline
70             generate_reader_method
71             generate_reader_method_inline
72             generate_writer_method
73             generate_writer_method_inline
74             initialize_body
75             )
76     ],
77     'Class::MOP::Method::Constructor' => [
78         qw( attributes
79             generate_constructor_method
80             generate_constructor_method_inline
81             initialize_body
82             meta_instance
83             options
84             )
85     ],
86     'Class::MOP::Method::Generated' => [
87         qw( new
88             definition_context
89             is_inline
90             initialize_body
91             )
92     ],
93     'Class::MOP::Mixin::AttributeCore' => ['.+'],
94     'Class::MOP::Mixin::HasAttributes' => ['.+'],
95     'Class::MOP::Mixin::HasMethods'    => ['.+'],
96     'Class::MOP::Module'               => ['create'],
97     'Class::MOP::Package' => [ 'get_method_map', 'wrap_method_body' ],
98 );
99
100 for my $module ( sort @modules ) {
101     my $trustme = [];
102     if ( $trustme{$module} ) {
103         my $methods = join '|', @{ $trustme{$module} };
104         $trustme = [qr/^(?:$methods)$/];
105     }
106
107     pod_coverage_ok(
108         $module, { trustme => $trustme },
109         "Pod coverage for $module"
110     );
111 }