#!perl use strict; use warnings; use Test::More; use MooseX::ClassCompositor; use MooseX::StrictConstructor::Trait::Class; { package Role; use Moose::Role; has xyz => ( is => 'ro', isa => 'ArrayRef', default => sub { [] }, traits => [ 'Array' ], handles => { push_xyz => 'push' }, ); after push_xyz => sub { $::after++; }; } our $after; for my $strict (0, 1) { $after = 0; my $comp = MooseX::ClassCompositor->new({ class_basename => 'X', role_prefixes => { '' => '', }, class_metaroles => { $strict ? (class => [ 'MooseX::StrictConstructor::Trait::Class' ]) : () }, }); my $class = $comp->class_for('Role'); $class->new->push_xyz(1); is($after, 1, "advice called for strict=$strict"); }; done_testing;