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