More tests & fixes for the goto &Moose::import case.
[gitmo/Moose.git] / t / 050_metaclasses / 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 Moose by using goto
10 # &Moose::import. we want to make sure it still works.
11
12 {
13     package MooseAlike1;
14
15     use strict;
16     use warnings;
17
18     use Moose ();
19
20     sub import {
21         goto &Moose::import;
22     }
23
24     sub unimport {
25         goto &Moose::unimport;
26     }
27 }
28
29 {
30     package Foo;
31
32     MooseAlike1->import();
33
34     ::lives_ok( sub { has( 'size' ) },
35                 'has was exported via MooseAlike1' );
36
37     MooseAlike1->unimport();
38 }
39
40 ok( ! Foo->can('has'),
41     'No has sub in Foo after MooseAlike1 is unimported' );
42 ok( Foo->can('meta'),
43     'Foo has a meta method' );
44 isa_ok( Foo->meta(), 'Moose::Meta::Class' );
45
46
47 {
48     package MooseAlike2;
49
50     use strict;
51     use warnings;
52
53     use Moose ();
54
55     my $import = \&Moose::import;
56     sub import {
57         goto $import;
58     }
59
60     my $unimport = \&Moose::unimport;
61     sub unimport {
62         goto $unimport;
63     }
64 }
65
66 {
67     package Bar;
68
69     MooseAlike2->import();
70
71     ::lives_ok( sub { has( 'size' ) },
72                 'has was exported via MooseAlike2' );
73
74     MooseAlike2->unimport();
75 }
76
77
78 ok( ! Bar->can('has'),
79           'No has sub in Bar after MooseAlike2 is unimported' );
80 ok( Bar->can('meta'),
81     'Bar has a meta method' );
82 isa_ok( Bar->meta(), 'Moose::Meta::Class' );