X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F050_metaclasses%2F030_metarole_combination.t;h=31a8ed8415105e2e2881d08861a2109c2c3f07bc;hb=4e1a0020d28612ce072902bf6bc94a073eb852e2;hp=5652a745ea776a885d16f6130bb76a632b7ff2bc;hpb=87f55e332bbf7d977b22ce000fe0f669991bcef4;p=gitmo%2FMoose.git diff --git a/t/050_metaclasses/030_metarole_combination.t b/t/050_metaclasses/030_metarole_combination.t index 5652a74..31a8ed8 100644 --- a/t/050_metaclasses/030_metarole_combination.t +++ b/t/050_metaclasses/030_metarole_combination.t @@ -5,45 +5,51 @@ use Test::More; our @applications; { - package CustomApplication; - use Moose::Role; - after apply_methods => sub { - my ($self, $role, $other) = @_; - $self->apply_custom($role, $other); + package CustomApplication; + use Moose::Role; + + after apply_methods => sub { + my ( $self, $role, $other ) = @_; + $self->apply_custom( $role, $other ); }; sub apply_custom { shift; push @applications, [@_]; - } + } } { package CustomApplication::ToClass; use Moose::Role; + with 'CustomApplication'; } { package CustomApplication::ToRole; use Moose::Role; + with 'CustomApplication'; } { package CustomApplication::ToInstance; use Moose::Role; + with 'CustomApplication'; } { package CustomApplication::Composite; use Moose::Role; + with 'CustomApplication'; + around apply_custom => sub { - my ($next, $self, $composite, $other) = @_; - for my $role (@{ $composite->get_roles }) { - $self->$next($role, $other); + my ( $next, $self, $composite, $other ) = @_; + for my $role ( @{ $composite->get_roles } ) { + $self->$next( $role, $other ); } }; } @@ -51,31 +57,40 @@ our @applications; { package CustomApplication::Composite::ToClass; use Moose::Role; + with 'CustomApplication::Composite'; } { package CustomApplication::Composite::ToRole; use Moose::Role; + with 'CustomApplication::Composite'; } { package CustomApplication::Composite::ToInstance; use Moose::Role; + with 'CustomApplication::Composite'; } { package Role::Composite; use Moose::Role; + around apply_params => sub { - my ($next, $self, @args) = @_; - return Moose::Util::MetaRole::apply_metaclass_roles( - for_class => $self->$next(@args), - application_to_class_class_roles => [ 'CustomApplication::Composite::ToClass' ], - application_to_role_class_roles => [ 'CustomApplication::Composite::ToRole' ], - application_to_instance_class_roles => [ 'CustomApplication::Composite::ToInstance' ], + my ( $next, $self, @args ) = @_; + return Moose::Util::MetaRole::apply_metaroles( + for => $self->$next(@args), + role_metaroles => { + application_to_class => + ['CustomApplication::Composite::ToClass'], + application_to_role => + ['CustomApplication::Composite::ToRole'], + application_to_instance => + ['CustomApplication::Composite::ToInstance'], + }, ); }; } @@ -83,9 +98,11 @@ our @applications; { package Role::WithCustomApplication; use Moose::Role; - has '+composition_class_roles' => ( - default => [ 'Role::Composite' ], - ); + + around composition_class_roles => sub { + my ($orig, $self) = @_; + return $self->$orig, 'Role::Composite'; + }; } { @@ -95,13 +112,17 @@ our @applications; ); sub init_meta { - my ($self, %options) = @_; - return Moose::Util::MetaRole::apply_metaclass_roles( - for_class => Moose::Role->init_meta(%options), - metaclass_roles => [ 'Role::WithCustomApplication' ], - application_to_class_class_roles => [ 'CustomApplication::ToClass' ], - application_to_role_class_roles => [ 'CustomApplication::ToRole' ], - application_to_instance_class_roles => [ 'CustomApplication::ToInstance' ], + my ( $self, %options ) = @_; + return Moose::Util::MetaRole::apply_metaroles( + for => Moose::Role->init_meta(%options), + role_metaroles => { + role => ['Role::WithCustomApplication'], + application_to_class => + ['CustomApplication::ToClass'], + application_to_role => ['CustomApplication::ToRole'], + application_to_instance => + ['CustomApplication::ToInstance'], + }, ); } } @@ -116,83 +137,102 @@ our @applications; CustomRole->import; } -ok(My::Role::Normal->meta->isa('Moose::Meta::Role'), "sanity check"); -ok(My::Role::Special->meta->isa('Moose::Meta::Role'), "using custom application roles does not change the role metaobject's class"); -ok(My::Role::Special->meta->meta->does_role('Role::WithCustomApplication'), "the role's metaobject has custom applications"); -is_deeply(My::Role::Special->meta->composition_class_roles, ['Role::Composite'], "the role knows about the specified composition class"); +ok( My::Role::Normal->meta->isa('Moose::Meta::Role'), "sanity check" ); +ok( My::Role::Special->meta->isa('Moose::Meta::Role'), + "using custom application roles does not change the role metaobject's class" +); +ok( My::Role::Special->meta->meta->does_role('Role::WithCustomApplication'), + "the role's metaobject has custom applications" ); +is_deeply( [My::Role::Special->meta->composition_class_roles], + ['Role::Composite'], + "the role knows about the specified composition class" ); { package Foo; use Moose; + local @applications; with 'My::Role::Special'; - ::is(@applications, 1, 'one role application'); - ::is($applications[0]->[0]->name, 'My::Role::Special', "the application's first role was My::Role::Special'"); - ::is($applications[0]->[1]->name, 'Foo', "the application provided an additional role"); + + ::is( @applications, 1, 'one role application' ); + ::is( $applications[0]->[0]->name, 'My::Role::Special', + "the application's first role was My::Role::Special'" ); + ::is( $applications[0]->[1]->name, 'Foo', + "the application provided an additional role" ); } { package Bar; use Moose::Role; + local @applications; with 'My::Role::Special'; - ::is(@applications, 1); - ::is($applications[0]->[0]->name, 'My::Role::Special'); - ::is($applications[0]->[1]->name, 'Bar'); + + ::is( @applications, 1 ); + ::is( $applications[0]->[0]->name, 'My::Role::Special' ); + ::is( $applications[0]->[1]->name, 'Bar' ); } { package Baz; use Moose; + my $i = Baz->new; local @applications; My::Role::Special->meta->apply($i); - ::is(@applications, 1); - ::is($applications[0]->[0]->name, 'My::Role::Special'); - ::ok($applications[0]->[1]->is_anon_class); - ::ok($applications[0]->[1]->name->isa('Baz')); + + ::is( @applications, 1 ); + ::is( $applications[0]->[0]->name, 'My::Role::Special' ); + ::ok( $applications[0]->[1]->is_anon_class ); + ::ok( $applications[0]->[1]->name->isa('Baz') ); } { package Corge; use Moose; + local @applications; with 'My::Role::Normal', 'My::Role::Special'; - ::is(@applications, 2); - ::is($applications[0]->[0]->name, 'My::Role::Normal'); - ::is($applications[0]->[1]->name, 'Corge'); - ::is($applications[1]->[0]->name, 'My::Role::Special'); - ::is($applications[1]->[1]->name, 'Corge'); + + ::is( @applications, 2 ); + ::is( $applications[0]->[0]->name, 'My::Role::Normal' ); + ::is( $applications[0]->[1]->name, 'Corge' ); + ::is( $applications[1]->[0]->name, 'My::Role::Special' ); + ::is( $applications[1]->[1]->name, 'Corge' ); } { package Thud; use Moose::Role; + local @applications; with 'My::Role::Normal', 'My::Role::Special'; - ::is(@applications, 2); - ::is($applications[0]->[0]->name, 'My::Role::Normal'); - ::is($applications[0]->[1]->name, 'Thud'); - ::is($applications[1]->[0]->name, 'My::Role::Special'); - ::is($applications[1]->[1]->name, 'Thud'); + + ::is( @applications, 2 ); + ::is( $applications[0]->[0]->name, 'My::Role::Normal' ); + ::is( $applications[0]->[1]->name, 'Thud' ); + ::is( $applications[1]->[0]->name, 'My::Role::Special' ); + ::is( $applications[1]->[1]->name, 'Thud' ); } { package Garply; use Moose; + my $i = Garply->new; local @applications; Moose::Meta::Role->combine( - ['My::Role::Normal' => undef], - ['My::Role::Special' => undef], + [ 'My::Role::Normal' => undef ], + [ 'My::Role::Special' => undef ], )->apply($i); - ::is(@applications, 2); - ::is($applications[0]->[0]->name, 'My::Role::Normal'); - ::ok($applications[0]->[1]->is_anon_class); - ::ok($applications[0]->[1]->name->isa('Garply')); - ::is($applications[1]->[0]->name, 'My::Role::Special'); - ::ok($applications[1]->[1]->is_anon_class); - ::ok($applications[1]->[1]->name->isa('Garply')); + + ::is( @applications, 2 ); + ::is( $applications[0]->[0]->name, 'My::Role::Normal' ); + ::ok( $applications[0]->[1]->is_anon_class ); + ::ok( $applications[0]->[1]->name->isa('Garply') ); + ::is( $applications[1]->[0]->name, 'My::Role::Special' ); + ::ok( $applications[1]->[1]->is_anon_class ); + ::ok( $applications[1]->[1]->name->isa('Garply') ); } done_testing;