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