0.03
[gitmo/Moose-Policy.git] / t / 002_dynamic.t
CommitLineData
a88576d4 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
09eff61e 6use Test::More tests => 12;
a88576d4 7
8BEGIN {
9 use_ok('Moose::Policy');
10}
11
12BEGIN {
13 package My::Plain::Attribute;
14 use Moose;
15 extends 'Moose::Meta::Attribute';
16}
17BEGIN {
18 package My::Bar::Attribute;
19 use Moose;
20 extends 'Moose::Meta::Attribute';
21}
22BEGIN {
23 package My::Plain::Class;
24 use Moose;
25 extends 'Moose::Meta::Class';
26}
27BEGIN {
28 package My::Bar::Class;
29 use Moose;
30 extends 'Moose::Meta::Class';
31}
32BEGIN {
33 package My::Moose::Policy;
34 # because writing subs is hard
35 my %pkg_map = (
36 qw(metaclass Class),
37 qw(attribute_metaclass Attribute),
38 # TODO these:
39 # qw(method_metaclass Method),
40 # qw(instance_metaclass Instance),
41 );
42 foreach my $subname (keys(%pkg_map)) {
43 my $pkg = $pkg_map{$subname};
44 my $sub = sub {
45 my $self = shift;
46 my ($caller) = @_;
47 return('My::Bar::' . $pkg)
48 if($caller =~ m/^Bar(?:::|$)/);
49 return 'My::Plain::' . $pkg;
50 };
51 no strict 'refs';
52 *{$subname} = $sub;
53 }
54}
55{
56 package Foo;
57 use Moose::Policy 'My::Moose::Policy';
58}
59{
60 package Bar;
61 use Moose::Policy 'My::Moose::Policy';
62}
63{
64 package Bars;
65 use Moose::Policy 'My::Moose::Policy';
66}
67{
68 package Bar::None;
69 use Moose::Policy 'My::Moose::Policy';
70}
71
72isa_ok(Foo->meta, 'Moose::Meta::Class');
73is(Foo->meta->attribute_metaclass, 'My::Plain::Attribute',
74 '... got our custom attr metaclass');
75
76isa_ok(Bar->meta, 'Moose::Meta::Class');
77isa_ok(Bar->meta, 'My::Bar::Class');
78is(Bar->meta->attribute_metaclass, 'My::Bar::Attribute',
79 '... got our custom attr metaclass');
80
81isa_ok(Bars->meta, 'Moose::Meta::Class');
82isa_ok(Bars->meta, 'My::Plain::Class');
83is(Bars->meta->attribute_metaclass, 'My::Plain::Attribute',
84 '... got our custom attr metaclass');
85
86isa_ok(Bar::None->meta, 'Moose::Meta::Class');
87isa_ok(Bar::None->meta, 'My::Bar::Class');
88is(Bar::None->meta->attribute_metaclass, 'My::Bar::Attribute',
89 '... got our custom attr metaclass');