merge trunk to pluggable errors
[gitmo/Moose.git] / t / 060_compat / 003_foreign_inheritence.t
CommitLineData
e522431d 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
e606ae5f 6use Test::More tests => 6;
e522431d 7use Test::Exception;
8
e606ae5f 9
e522431d 10
11{
12 package Elk;
13 use strict;
14 use warnings;
15
16 sub new {
17 my $class = shift;
18 bless { no_moose => "Elk" } => $class;
19 }
20
21 sub no_moose { $_[0]->{no_moose} }
22
c235cd98 23 package Foo::Moose;
e522431d 24 use Moose;
25
26 extends 'Elk';
27
28 has 'moose' => (is => 'ro', default => 'Foo');
29
30 sub new {
31 my $class = shift;
32 my $super = $class->SUPER::new(@_);
33 return $class->meta->new_object('__INSTANCE__' => $super, @_);
34 }
8ecb1fa0 35
5a3217de 36 __PACKAGE__->meta->make_immutable(debug => 0);
b43a4bca 37
0305961b 38 package Bucket;
39 use metaclass 'Class::MOP::Class';
40
41 __PACKAGE__->meta->add_attribute('squeegee' => (accessor => 'squeegee'));
42
43 package Old::Bucket::Nose;
44 # see http://www.moosefoundation.org/moose_facts.htm
45 use Moose;
46
47 extends 'Bucket';
2f9e53fb 48
cdeb30dc 49 package MyBase;
cdeb30dc 50 sub foo { }
51
52 package Custom::Meta1;
53 use base qw(Moose::Meta::Class);
54
55 package Custom::Meta2;
56 use base qw(Moose::Meta::Class);
57
58 package SubClass1;
59 use metaclass 'Custom::Meta1';
60 use Moose;
61
62 extends 'MyBase';
63
64 package SubClass2;
65 use metaclass 'Custom::Meta2';
66 use Moose;
67
2f9e53fb 68 # XXX FIXME subclassing meta-attrs and immutable-ing the subclass fails
e522431d 69}
70
71my $foo_moose = Foo::Moose->new();
72isa_ok($foo_moose, 'Foo::Moose');
73isa_ok($foo_moose, 'Elk');
74
75is($foo_moose->no_moose, 'Elk', '... got the right value from the Elk method');
b43a4bca 76is($foo_moose->moose, 'Foo', '... got the right value from the Foo::Moose method');
77
be771c43 78lives_ok {
79 Old::Bucket::Nose->meta->make_immutable(debug => 0);
80} 'Immutability on Moose class extending Class::MOP class ok';
ab76842e 81
a5e883ae 82lives_ok {
c93e8e7d 83 SubClass2->meta->superclasses([ 'MyBase' ]);
a5e883ae 84} 'Can subclass the same non-Moose class twice with different metaclasses';
ab76842e 85