diff options
Diffstat (limited to 't/metaclasses/metaclass_parameterized_traits.t')
-rw-r--r-- | t/metaclasses/metaclass_parameterized_traits.t | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/t/metaclasses/metaclass_parameterized_traits.t b/t/metaclasses/metaclass_parameterized_traits.t new file mode 100644 index 0000000..ca4b5a9 --- /dev/null +++ b/t/metaclasses/metaclass_parameterized_traits.t @@ -0,0 +1,47 @@ +use strict; +use warnings; +use Test::More; + +{ + package My::Trait; + use Moose::Role; + + sub reversed_name { + my $self = shift; + scalar reverse $self->name; + } +} + +{ + package My::Class; + use Moose -traits => [ + 'My::Trait' => { + -alias => { + reversed_name => 'enam', + }, + }, + ]; +} + +{ + package My::Other::Class; + use Moose -traits => [ + 'My::Trait' => { + -alias => { + reversed_name => 'reversed', + }, + -excludes => 'reversed_name', + }, + ]; +} + +my $meta = My::Class->meta; +is($meta->enam, 'ssalC::yM', 'parameterized trait applied'); +ok(!$meta->can('reversed'), "the method was not installed under the other class' alias"); + +my $other_meta = My::Other::Class->meta; +is($other_meta->reversed, 'ssalC::rehtO::yM', 'parameterized trait applied'); +ok(!$other_meta->can('enam'), "the method was not installed under the other class' alias"); +ok(!$other_meta->can('reversed_name'), "the method was not installed under the original name when that was excluded"); + +done_testing; |