1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
#!/usr/bin/perl
use strict;
BEGIN {
$| = 1;
$^W = 1;
}
use Test::More tests => 2;
use Test::NoWarnings;
use Aspect;
my @CONTEXT = ();
SCOPE: {
package Foo;
sub before {
if ( wantarray ) {
push @CONTEXT, 'array';
} elsif ( defined wantarray ) {
push @CONTEXT, 'scalar';
} else {
push @CONTEXT, 'void';
}
}
sub after {
if ( wantarray ) {
push @CONTEXT, 'array';
} elsif ( defined wantarray ) {
push @CONTEXT, 'scalar';
} else {
push @CONTEXT, 'void';
}
}
}
# Before the aspects
SCOPE: {
() = Foo->before;
my $dummy = Foo->before;
Foo->before;
}
SCOPE: {
() = Foo->after;
my $dummy = Foo->after;
Foo->after;
}
# Enable the aspects
my $before = before {
if ( $_[0]->wantarray ) {
push @CONTEXT, 'ARRAY';
} elsif ( defined $_[0]->wantarray ) {
push @CONTEXT, 'SCALAR';
} else {
push @CONTEXT, 'VOID';
}
if ( wantarray ) {
push @CONTEXT, 'ARRAY';
} elsif ( defined wantarray ) {
push @CONTEXT, 'SCALAR';
} else {
push @CONTEXT, 'VOID';
}
} call 'Foo::before';
my $after = after {
if ( $_[0]->wantarray ) {
push @CONTEXT, 'ARRAY';
} elsif ( defined $_[0]->wantarray ) {
push @CONTEXT, 'SCALAR';
} else {
push @CONTEXT, 'VOID';
}
if ( wantarray ) {
push @CONTEXT, 'ARRAY';
} elsif ( defined wantarray ) {
push @CONTEXT, 'SCALAR';
} else {
push @CONTEXT, 'VOID';
}
} call 'Foo::after';
# During the aspects
SCOPE: {
() = Foo->before;
my $dummy = Foo->before;
Foo->before;
}
SCOPE: {
() = Foo->after;
my $dummy = Foo->after;
Foo->after;
}
# Disable the aspects
undef $before;
undef $after;
# After the aspects
SCOPE: {
() = Foo->before;
my $dummy = Foo->before;
Foo->before;
}
SCOPE: {
() = Foo->after;
my $dummy = Foo->after;
Foo->after;
}
# Check the results in aggregate
is_deeply(
\@CONTEXT,
[ qw{
array
scalar
void
array
scalar
void
ARRAY VOID array
SCALAR VOID scalar
VOID VOID void
array ARRAY VOID
scalar SCALAR VOID
void VOID VOID
array
scalar
void
array
scalar
void
} ],
'All wantarray contexts worked as expected for before',
);
|