use
if
$ENV
{AUTHOR_TESTING},
'Test::Warnings'
;
my
@seen
;
my
@expected
=
qw/ before
around-before
orig
around-after
after /
;
my
$child
= Child->new();
$child
->orig();
is_deeply(\
@seen
, \
@expected
,
"multiple modifiers in one class"
);
@seen
= ();
@expected
=
qw/ beforer around-beforer
before around-before
orig
around-after after
around-afterer afterer /
;
my
$childer
= Childer->new();
$childer
->orig();
is_deeply(\
@seen
, \
@expected
,
"multiple modifiers subclassed with multiple modifiers"
);
BEGIN
{
sub
new {
bless
{},
shift
}
sub
orig
{
push
@seen
,
'orig'
;
}
}
BEGIN
{
our
@ISA
=
'MyParent'
;
after
'orig'
=>
sub
{
push
@seen
,
'after'
;
};
around
'orig'
=>
sub
{
my
$orig
=
shift
;
push
@seen
,
'around-before'
;
$orig
->();
push
@seen
,
'around-after'
;
};
before
'orig'
=>
sub
{
push
@seen
,
'before'
;
};
}
BEGIN
{
our
@ISA
=
'Child'
;
after
'orig'
=>
sub
{
push
@seen
,
'afterer'
;
};
around
'orig'
=>
sub
{
my
$orig
=
shift
;
push
@seen
,
'around-beforer'
;
$orig
->();
push
@seen
,
'around-afterer'
;
};
before
'orig'
=>
sub
{
push
@seen
,
'beforer'
;
};
}
done_testing;