Add failing test from Catalyst
[gitmo/Moose.git] / t / 050_metaclasses / 023_easy_init_meta.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
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(
29         metaclass_roles           => ['Foo::Trait::Class'],
30         role_metaclass_roles      => ['Foo::Trait::Class'],
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
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)],
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 }
123
124 done_testing;