Commit | Line | Data |
e2a758ad |
1 | #!/usr/bin/perl |
2 | |
3 | use lib "t/lib"; |
4 | use strict; |
5 | use warnings; |
6 | |
7 | use Test::More; |
8 | |
9 | BEGIN { |
10 | package MyExporterRole; |
11 | |
12 | use Moose (); |
13 | use Moose::Exporter; |
14 | |
15 | Moose::Exporter->setup_import_methods( |
16 | also => 'Moose', |
17 | ); |
18 | |
19 | sub init_meta { |
20 | my ($class,%args) = @_; |
21 | |
22 | my $meta = Moose->init_meta( %args ); |
23 | |
24 | Moose::Util::MetaRole::apply_metaroles( |
25 | for => $meta, |
26 | class_metaroles => { |
27 | class => ['MyMetaRole'], |
28 | }, |
29 | ); |
30 | |
31 | return $meta; |
32 | } |
33 | |
34 | $INC{'MyExporterRole.pm'} = __FILE__; |
35 | } |
36 | |
37 | { |
38 | package MyMetaRole; |
39 | use Moose::Role; |
40 | |
41 | sub some_meta_class_method { |
42 | return "HEY" |
43 | } |
44 | } |
45 | |
46 | { |
47 | package MyTrait; |
48 | use Moose::Role; |
49 | |
50 | sub some_meta_class_method_defined_by_trait { |
51 | return "HO" |
52 | } |
53 | |
54 | { |
55 | package Moose::Meta::Class::Custom::Trait::MyClassTrait; |
56 | use strict; |
57 | use warnings; |
58 | sub register_implementation { return 'MyTrait' } |
59 | } |
60 | } |
61 | |
62 | { |
63 | package MyClass; |
64 | use MyExporterRole -traits => 'MyClassTrait'; |
65 | } |
66 | |
67 | |
68 | |
69 | my $my_class = MyClass->new; |
70 | |
71 | isa_ok($my_class,'MyClass'); |
72 | |
73 | my $meta = $my_class->meta(); |
74 | # Check if MyMetaRole has been applied |
75 | ok($meta->can('some_meta_class_method'),'Meta class has some_meta_class_method'); |
76 | # Check if MyTrait has been applied |
77 | ok($meta->can('some_meta_class_method_defined_by_trait'),'Meta class has some_meta_class_method_defined_by_trait'); |
78 | |
79 | done_testing; |