Import t/050_metaclass from Moose
[gitmo/Mouse.git] / t / 050_metaclasses / failing / 023_easy_init_meta.t
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 }