6 use Test::More 'no_plan';
9 package My::SimpleTrait;
13 sub simple { return 5 }
19 use Moose -traits => [ 'My::SimpleTrait' ];
22 can_ok( Foo->meta(), 'simple' );
23 is( Foo->meta()->simple(), 5,
24 'Foo->meta()->simple() returns expected value' );
27 package My::SimpleTrait2;
31 # This needs to happen at compile time so it happens before we
36 default => 'something',
40 sub simple { return 5 }
46 use Moose -traits => [ 'My::SimpleTrait2' ];
49 can_ok( Bar->meta(), 'simple' );
50 is( Bar->meta()->simple(), 5,
51 'Bar->meta()->simple() returns expected value' );
52 can_ok( Bar->meta(), 'attr' );
53 is( Bar->meta()->attr(), 'something',
54 'Bar->meta()->attr() returns expected value' );
57 package My::SimpleTrait3;
64 default => 'something',
68 sub simple2 { return 55 }
74 use Moose -traits => [ 'My::SimpleTrait2', 'My::SimpleTrait3' ];
77 can_ok( Baz->meta(), 'simple' );
78 is( Baz->meta()->simple(), 5,
79 'Baz->meta()->simple() returns expected value' );
80 can_ok( Baz->meta(), 'attr' );
81 is( Baz->meta()->attr(), 'something',
82 'Baz->meta()->attr() returns expected value' );
83 can_ok( Baz->meta(), 'simple2' );
84 is( Baz->meta()->simple2(), 55,
85 'Baz->meta()->simple2() returns expected value' );
86 can_ok( Baz->meta(), 'attr2' );
87 is( Baz->meta()->attr2(), 'something',
88 'Baz->meta()->attr2() returns expected value' );
91 package My::Trait::AlwaysRO;
95 around '_process_new_attribute', '_process_inherited_attribute' =>
98 my ( $self, $name, %args ) = @_;
102 return $self->$orig( $name, %args );
109 use Moose -traits => [ 'My::Trait::AlwaysRO' ];
117 ok( Quux->meta()->has_attribute('size'),
118 'Quux has size attribute' );
119 ok( ! Quux->meta()->get_attribute('size')->writer(),
120 'size attribute does not have a writer' );
123 package My::Class::Whatever;
129 package Moose::Meta::Class::Custom::Trait::Whatever;
131 sub register_implementation {
132 return 'My::Class::Whatever';
137 package RanOutOfNames;
139 use Moose -traits => [ 'Whatever' ];
142 ok( RanOutOfNames->meta()->meta()->has_method('whatever'),
143 'RanOutOfNames->meta() has whatever method' );
148 use Moose::Role -traits => [ 'My::SimpleTrait' ];
151 can_ok( Role::Foo->meta(), 'simple' );
152 is( Role::Foo->meta()->simple(), 5,
153 'Role::Foo->meta()->simple() returns expected value' );