meta_lookup needs to propagate downwards, if unspecified
[gitmo/Moose.git] / t / metaclasses / exporter_meta_lookup.t
CommitLineData
58c2edea 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More;
7use 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
39ok(Class::Vacuum::Innards->can('star_rod'), 'Vacuum stole the star_rod method');
40ok(!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
62ok(Class::Vacuum::Innards->can('parasol'), 'Vacuum stole the parasol method');
63ok(!Victim2->can('parasol'), 'Victim does not get it at all');
64
58c2edea 65done_testing;
66