1#!perl
2
3use Test::More tests => 18;
4use Attribute::Handlers;
5
6sub Args : ATTR(CODE) {
7    my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_;
8    is( $package,	'main',		'package' );
9    is( $symbol,	\*foo,		'symbol' );
10    is( $referent,	\&foo,		'referent' );
11    is( $attr,		'Args',		'attr' );
12    is( ref $data,	'ARRAY',	'data' );
13    is( $data->[0],	'bar',		'data' );
14    is( $phase,		'CHECK',	'phase' );
15    is( $filename,	__FILE__,	'filename' );
16    is( $linenum,	19,		'linenum' );
17}
18
19sub foo :Args(bar) {}
20
21my $ref;
22sub myref { $ref = shift; }
23my $b;
24#line 42
25eval "my \$bar :SArgs(grumpf); \$b = \\\$bar";
26is( $b, $ref, 'referent' );
27
28sub SArgs : ATTR(SCALAR) {
29    my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_;
30    is( $package,	'main',		'package' );
31    is( $symbol,	'LEXICAL',	'symbol' );
32    myref($referent);
33    is( $attr,		'SArgs',	'attr' );
34    is( ref $data,	'ARRAY',	'data' );
35    is( $data->[0],	'grumpf',	'data' );
36    is( $phase,		'CHECK',	'phase' );
37    TODO: {
38      local $TODO = "Doesn't work correctly" if $] < 5.008;
39      is( $filename,	__FILE__,	'filename' );
40      is( $linenum,	42,		'linenum' );
41    }
42}
43