Commit | Line | Data |
95056a1e |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
a28e50e4 |
6 | use Test::More; |
95056a1e |
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 | metaclass_roles => ['Foo::Trait::Class'], |
f785aad8 |
30 | role_metaclass_roles => ['Foo::Trait::Class'], |
95056a1e |
31 | attribute_metaclass_roles => ['Foo::Trait::Attribute'], |
32 | base_class_roles => ['Foo::Role::Base'], |
33 | ); |
34 | } |
35 | |
36 | { |
37 | package Foo; |
38 | use Moose; |
39 | Foo::Exporter->import; |
40 | |
41 | has foo => (is => 'ro'); |
42 | |
43 | ::does_ok(Foo->meta, 'Foo::Trait::Class'); |
44 | ::does_ok(Foo->meta->get_attribute('foo'), 'Foo::Trait::Attribute'); |
45 | ::does_ok('Foo', 'Foo::Role::Base'); |
46 | } |
47 | |
48 | { |
49 | package Foo::Exporter::WithMoose; |
50 | use Moose (); |
51 | use Moose::Exporter; |
52 | |
53 | my ($import, $unimport, $init_meta) = |
54 | Moose::Exporter->build_import_methods( |
55 | also => 'Moose', |
56 | metaclass_roles => ['Foo::Trait::Class'], |
57 | attribute_metaclass_roles => ['Foo::Trait::Attribute'], |
58 | base_class_roles => ['Foo::Role::Base'], |
59 | install => [qw(import unimport)], |
60 | ); |
61 | |
62 | sub init_meta { |
63 | my $package = shift; |
64 | my %options = @_; |
65 | ::pass('custom init_meta was called'); |
66 | Moose->init_meta(%options); |
67 | return $package->$init_meta(%options); |
68 | } |
69 | } |
70 | |
71 | { |
72 | package Foo2; |
73 | Foo::Exporter::WithMoose->import; |
74 | |
75 | has(foo => (is => 'ro')); |
76 | |
77 | ::isa_ok('Foo2', 'Moose::Object'); |
78 | ::isa_ok(Foo2->meta, 'Moose::Meta::Class'); |
79 | ::does_ok(Foo2->meta, 'Foo::Trait::Class'); |
80 | ::does_ok(Foo2->meta->get_attribute('foo'), 'Foo::Trait::Attribute'); |
81 | ::does_ok('Foo2', 'Foo::Role::Base'); |
82 | } |
83 | |
84 | { |
85 | package Foo::Role; |
86 | use Moose::Role; |
87 | Foo::Exporter->import; |
88 | |
89 | ::does_ok(Foo::Role->meta, 'Foo::Trait::Class'); |
90 | } |
91 | |
92 | { |
93 | package Foo::Exporter::WithMooseRole; |
94 | use Moose::Role (); |
95 | use Moose::Exporter; |
96 | |
f785aad8 |
97 | my ( $import, $unimport, $init_meta ) |
98 | = Moose::Exporter->build_import_methods( |
99 | also => 'Moose::Role', |
100 | role_metaroles => { |
101 | role => ['Foo::Trait::Class'], |
102 | attribute => ['Foo::Trait::Attribute'], |
103 | }, |
104 | install => [qw(import unimport)], |
95056a1e |
105 | ); |
106 | |
107 | sub init_meta { |
108 | my $package = shift; |
109 | my %options = @_; |
110 | ::pass('custom init_meta was called'); |
111 | Moose::Role->init_meta(%options); |
112 | return $package->$init_meta(%options); |
113 | } |
114 | } |
115 | |
116 | { |
117 | package Foo2::Role; |
118 | Foo::Exporter::WithMooseRole->import; |
119 | |
120 | ::isa_ok(Foo2::Role->meta, 'Moose::Meta::Role'); |
121 | ::does_ok(Foo2::Role->meta, 'Foo::Trait::Class'); |
122 | } |
a28e50e4 |
123 | |
124 | done_testing; |