fix "use MyExporter -traits => ..." (RT77974)
[gitmo/Moose.git] / t / bugs / traits_with_exporter.t
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;