The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!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;