File: 32_feature_wantarray.t

package info (click to toggle)
libaspect-perl 1.04-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 720 kB
  • sloc: perl: 6,846; makefile: 2
file content (138 lines) | stat: -rw-r--r-- 2,084 bytes parent folder | download | duplicates (5)
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',
);