Import t/050_metaclass from Moose
[gitmo/Mouse.git] / t / 050_metaclasses / failing / 014_goto_moose_import.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 8;
7 use Test::Exception;
8
9 # Some packages out in the wild cooperate with Mouse by using goto
10 # &Mouse::import. we want to make sure it still works.
11
12 {
13     package MouseAlike1;
14
15     use strict;
16     use warnings;
17
18     use Mouse ();
19
20     sub import {
21         goto &Mouse::import;
22     }
23
24     sub unimport {
25         goto &Mouse::unimport;
26     }
27 }
28
29 {
30     package Foo;
31
32     MouseAlike1->import();
33
34     ::lives_ok( sub { has( 'size', is => 'bare' ) },
35                 'has was exported via MouseAlike1' );
36
37     MouseAlike1->unimport();
38 }
39
40 ok( ! Foo->can('has'),
41     'No has sub in Foo after MouseAlike1 is unimported' );
42 ok( Foo->can('meta'),
43     'Foo has a meta method' );
44 isa_ok( Foo->meta(), 'Mouse::Meta::Class' );
45
46
47 {
48     package MouseAlike2;
49
50     use strict;
51     use warnings;
52
53     use Mouse ();
54
55     my $import = \&Mouse::import;
56     sub import {
57         goto $import;
58     }
59
60     my $unimport = \&Mouse::unimport;
61     sub unimport {
62         goto $unimport;
63     }
64 }
65
66 {
67     package Bar;
68
69     MouseAlike2->import();
70
71     ::lives_ok( sub { has( 'size', is => 'bare' ) },
72                 'has was exported via MouseAlike2' );
73
74     MouseAlike2->unimport();
75 }
76
77
78 ok( ! Bar->can('has'),
79           'No has sub in Bar after MouseAlike2 is unimported' );
80 ok( Bar->can('meta'),
81     'Bar has a meta method' );
82 isa_ok( Bar->meta(), 'Mouse::Meta::Class' );