Skip distro which requires rpm
[gitmo/Moose.git] / t / metaclasses / easy_init_meta.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use Test::Moose qw(does_ok);
8
9 {
10     package Foo::Trait::Class;
11     use Moose::Role;
12 }
13
14 {
15     package Foo::Trait::Attribute;
16     use Moose::Role;
17 }
18
19 {
20     package Foo::Role::Base;
21     use Moose::Role;
22 }
23
24 {
25     package Foo::Exporter;
26     use Moose::Exporter;
27
28     Moose::Exporter->setup_import_methods(
29         class_metaroles => {
30             class     => ['Foo::Trait::Class'],
31             attribute => ['Foo::Trait::Attribute'],
32         },
33         role_metaroles   => { role => ['Foo::Trait::Class'] },
34         base_class_roles => ['Foo::Role::Base'],
35     );
36 }
37
38 {
39     package Foo;
40     use Moose;
41     Foo::Exporter->import;
42
43     has foo => (is => 'ro');
44
45     ::does_ok(Foo->meta, 'Foo::Trait::Class');
46     ::does_ok(Foo->meta->get_attribute('foo'), 'Foo::Trait::Attribute');
47     ::does_ok('Foo', 'Foo::Role::Base');
48 }
49
50 {
51     package Foo::Exporter::WithMoose;
52     use Moose ();
53     use Moose::Exporter;
54
55     my ( $import, $unimport, $init_meta )
56         = Moose::Exporter->build_import_methods(
57         also            => 'Moose',
58         class_metaroles => {
59             class     => ['Foo::Trait::Class'],
60             attribute => ['Foo::Trait::Attribute'],
61         },
62         base_class_roles => ['Foo::Role::Base'],
63         install          => [qw(import unimport)],
64         );
65
66     sub init_meta {
67         my $package = shift;
68         my %options = @_;
69         ::pass('custom init_meta was called');
70         Moose->init_meta(%options);
71         return $package->$init_meta(%options);
72     }
73 }
74
75 {
76     package Foo2;
77     Foo::Exporter::WithMoose->import;
78
79     has(foo => (is => 'ro'));
80
81     ::isa_ok('Foo2', 'Moose::Object');
82     ::isa_ok(Foo2->meta, 'Moose::Meta::Class');
83     ::does_ok(Foo2->meta, 'Foo::Trait::Class');
84     ::does_ok(Foo2->meta->get_attribute('foo'), 'Foo::Trait::Attribute');
85     ::does_ok('Foo2', 'Foo::Role::Base');
86 }
87
88 {
89     package Foo::Role;
90     use Moose::Role;
91     Foo::Exporter->import;
92
93     ::does_ok(Foo::Role->meta, 'Foo::Trait::Class');
94 }
95
96 {
97     package Foo::Exporter::WithMooseRole;
98     use Moose::Role ();
99     use Moose::Exporter;
100
101     my ( $import, $unimport, $init_meta )
102         = Moose::Exporter->build_import_methods(
103         also           => 'Moose::Role',
104         role_metaroles => {
105             role      => ['Foo::Trait::Class'],
106             attribute => ['Foo::Trait::Attribute'],
107         },
108         install => [qw(import unimport)],
109         );
110
111     sub init_meta {
112         my $package = shift;
113         my %options = @_;
114         ::pass('custom init_meta was called');
115         Moose::Role->init_meta(%options);
116         return $package->$init_meta(%options);
117     }
118 }
119
120 {
121     package Foo2::Role;
122     Foo::Exporter::WithMooseRole->import;
123
124     ::isa_ok(Foo2::Role->meta, 'Moose::Meta::Role');
125     ::does_ok(Foo2::Role->meta, 'Foo::Trait::Class');
126 }
127
128 done_testing;