adding ->parent_registry to the TC registry object
[gitmo/Moose.git] / t / 020_foreign_inheritence.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 5; #6;
7 use Test::Exception;
8
9 BEGIN {
10     use_ok('Moose');           
11 }
12
13 {
14         package Elk;
15         use strict;
16         use warnings;
17         
18         sub new {
19                 my $class = shift;
20                 bless { no_moose => "Elk" } => $class;
21         }
22         
23         sub no_moose { $_[0]->{no_moose} }
24
25         package Foo::Moose;     
26         use Moose;
27         
28         extends 'Elk';
29         
30         has 'moose' => (is => 'ro', default => 'Foo');
31         
32         sub new {
33                 my $class = shift;
34                 my $super = $class->SUPER::new(@_);
35                 return $class->meta->new_object('__INSTANCE__' => $super, @_);
36         }
37         
38         __PACKAGE__->meta->make_immutable(debug => 0);
39
40     package Bucket;
41     use metaclass 'Class::MOP::Class';
42     
43     __PACKAGE__->meta->add_attribute('squeegee' => (accessor => 'squeegee'));
44     
45     package Old::Bucket::Nose;
46     # see http://www.moosefoundation.org/moose_facts.htm
47     use Moose;
48     
49     extends 'Bucket';
50
51   # XXX FIXME subclassing meta-attrs and immutable-ing the subclass fails
52 }
53
54 my $foo_moose = Foo::Moose->new();
55 isa_ok($foo_moose, 'Foo::Moose');
56 isa_ok($foo_moose, 'Elk');
57
58 is($foo_moose->no_moose, 'Elk', '... got the right value from the Elk method');
59 is($foo_moose->moose, 'Foo', '... got the right value from the Foo::Moose method');
60
61 #lives_ok { 
62 #    Old::Bucket::Nose->meta->make_immutable(debug => 0); 
63 #} 'Immutability on Moose class extending Class::MOP class ok';