Commit | Line | Data |
58c2edea |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Test::More; |
7 | use Test::Fatal; |
8 | |
9 | { |
10 | package Class::Vacuum::Innards; |
11 | use Moose; |
12 | |
13 | package Class::Vacuum; |
14 | use Moose (); |
15 | use Moose::Exporter; |
16 | |
ef487af7 |
17 | sub meta_lookup { $_[0] } |
18 | |
58c2edea |
19 | BEGIN { |
20 | Moose::Exporter->setup_import_methods( |
21 | also => 'Moose', |
22 | meta_lookup => sub { Class::MOP::class_of('Class::Vacuum::Innards') }, |
ef487af7 |
23 | with_meta => ['meta_lookup'], |
58c2edea |
24 | ); |
25 | } |
26 | } |
27 | |
28 | { |
29 | package Victim; |
30 | BEGIN { Class::Vacuum->import }; |
31 | |
32 | has star_rod => ( |
33 | is => 'ro', |
34 | ); |
ef487af7 |
35 | |
36 | ::is(meta_lookup, Class::Vacuum::Innards->meta, "right meta_lookup"); |
58c2edea |
37 | } |
38 | |
39 | ok(Class::Vacuum::Innards->can('star_rod'), 'Vacuum stole the star_rod method'); |
40 | ok(!Victim->can('star_rod'), 'Victim does not get it at all'); |
41 | |
ef487af7 |
42 | { |
43 | package Class::Vacuum::Reexport; |
44 | use Moose::Exporter; |
45 | |
46 | BEGIN { |
47 | Moose::Exporter->setup_import_methods(also => 'Class::Vacuum'); |
48 | } |
49 | } |
50 | |
51 | { |
52 | package Victim2; |
53 | BEGIN { Class::Vacuum::Reexport->import } |
54 | |
55 | has parasol => ( |
56 | is => 'ro', |
57 | ); |
58 | |
59 | ::is(meta_lookup, Class::Vacuum::Innards->meta, "right meta_lookup"); |
60 | } |
61 | |
62 | ok(Class::Vacuum::Innards->can('parasol'), 'Vacuum stole the parasol method'); |
63 | ok(!Victim2->can('parasol'), 'Victim does not get it at all'); |
64 | |
58c2edea |
65 | done_testing; |
66 | |