Implement strict constructors, which will warn unkown constructor arguments
[gitmo/Mouse.git] / t / 001_mouse / 067-traits.t
1 #!perl
2 use strict;
3 use warnings;
4
5 use Test::More;
6
7 use Test::Mouse qw(does_ok);
8
9 BEGIN{
10     package MyMouseX::Foo::Method;
11     use Mouse::Role;
12
13     sub foo {}
14
15     package MyMouseX::Bar::Method;
16     use Mouse::Role;
17
18     sub bar {}
19
20     package MyMouseX::Foo;
21     use Mouse::Exporter;
22     use Mouse::Util::MetaRole;
23
24     Mouse::Exporter->setup_import_methods(
25         also => 'Mouse',
26     );
27     sub init_meta {
28         my(undef, %options) = @_;
29
30         my $meta = Mouse->init_meta(%options);
31         Mouse::Util::MetaRole::apply_metaroles(
32             for             => $options{for_class},
33             class_metaroles => {
34                 method => ['MyMouseX::Foo::Method'],
35             },
36         );
37     }
38
39     $INC{'MyMouseX/Foo.pm'} = __FILE__;
40
41     package MyMouseX::Bar;
42     use Mouse::Exporter;
43     use Mouse::Util::MetaRole;
44
45     Mouse::Exporter->setup_import_methods(
46         also => 'Mouse',
47     );
48     sub init_meta {
49         my(undef, %options) = @_;
50
51         my $meta = Mouse->init_meta(%options);
52         Mouse::Util::MetaRole::apply_metaroles(
53             for             => $options{for_class},
54             class_metaroles => {
55                 method => ['MyMouseX::Bar::Method'],
56             },
57         );
58     }
59
60     $INC{'MyMouseX/Bar.pm'} = __FILE__;
61 }
62 {
63     package ClassA;
64     use MyMouseX::Foo;
65
66     sub a {}
67
68     package ClassB;
69     use MyMouseX::Bar;
70
71     sub b {}
72 }
73
74 does_ok(ClassA->meta->get_method('a'), 'MyMouseX::Foo::Method');
75 does_ok(ClassB->meta->get_method('b'), 'MyMouseX::Bar::Method');
76
77 done_testing;