Merged topic/metarole-distinguishes-role-meta (which includes topic/roles-have-real...
[gitmo/Moose.git] / t / 050_metaclasses / 023_easy_init_meta.t
CommitLineData
95056a1e 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
a28e50e4 6use Test::More;
95056a1e 7use 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
124done_testing;