#!/usr/bin/perl
use strict;
use warnings;
use Test::More no_plan => 1;
use Test::Exception;
BEGIN {
use_ok('MooseX::MetaDescription');
}
{
package Foo;
use metaclass 'MooseX::MetaDescription::Meta::Class' => (
description => {
'Hello' => 'World',
'World' => 'Hello',
}
);
use Moose;
package Bar;
use Moose;
extends 'Foo';
# always add it *after* the extends
__PACKAGE__->meta->description->{'Hello'} = 'Earth';
package Baz;
use Moose;
extends 'Bar';
package Gorch;
use metaclass 'MooseX::MetaDescription::Meta::Class' => (
description => {
'Hello' => 'World'
}
);
use Moose;
extends 'Baz';
}
# check the meta-desc
my $foo_class = Foo->meta;
isa_ok($foo_class, 'MooseX::MetaDescription::Meta::Class');
isa_ok($foo_class->metadescription, 'MooseX::MetaDescription::Description');
is($foo_class->metadescription->descriptor, $foo_class, '... got the circular ref');
my $bar_class = Bar->meta;
isa_ok($bar_class, 'MooseX::MetaDescription::Meta::Class');
isa_ok($bar_class->metadescription, 'MooseX::MetaDescription::Description');
is($bar_class->metadescription->descriptor, $bar_class, '... got the circular ref');
my $baz_class = Baz->meta;
isa_ok($baz_class, 'MooseX::MetaDescription::Meta::Class');
isa_ok($baz_class->metadescription, 'MooseX::MetaDescription::Description');
is($baz_class->metadescription->descriptor, $baz_class, '... got the circular ref');
my $gorch_class = Gorch->meta;
isa_ok($gorch_class, 'MooseX::MetaDescription::Meta::Class');
isa_ok($gorch_class->metadescription, 'MooseX::MetaDescription::Description');
is($gorch_class->metadescription->descriptor, $gorch_class, '... got the circular ref');
foreach my $x ('Foo', Foo->new) {
is_deeply(
$x->meta->description,
{
'Hello' => 'World',
'World' => 'Hello'
},
'... got the right class description'
);
}
foreach my $x ('Bar', Bar->new) {
is_deeply(
$x->meta->description,
{
'Hello' => 'Earth',
'World' => 'Hello'
},
'... got the right class description (inherited and changed)'
);
}
foreach my $x ('Baz', Baz->new) {
is_deeply(
$x->meta->description,
{
'Hello' => 'Earth',
'World' => 'Hello'
},
'... got the right class description (inherited with changes handles correctly)'
);
}
foreach my $x ('Gorch', Gorch->new) {
is_deeply(
$x->meta->description,
{
'Hello' => 'World',
},
'... got the right class description (with completely overriden desc)'
);
}