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( |
3b400403 |
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'], |
95056a1e |
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 | |
3b400403 |
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)], |
95056a1e |
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 | |
f785aad8 |
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)], |
95056a1e |
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 | } |
a28e50e4 |
127 | |
128 | done_testing; |