File: 06_alias_scope.t

package info (click to toggle)
libdata-alias-perl 1.29-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 372 kB
  • sloc: perl: 1,976; makefile: 3
file content (77 lines) | stat: -rw-r--r-- 2,356 bytes parent folder | download | duplicates (2)
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
#!/usr/bin/perl -w

use strict;
use warnings qw( FATAL all NONFATAL void );
use lib 'lib';
use Test::More tests => 48;

use Data::Alias;

sub refs { [map "".\$_, @_] }
sub ckvoid { ok !defined wantarray }
sub context : lvalue { my $x = defined(wantarray) ? 1 + wantarray : 0; $x }

our ($x, $y);

no warnings 'void';

# context
is alias(context), 1;
is +(alias context)[0], 2;

# do-blocks
is alias { context }, 1;
is +(alias { context })[0], 2;
is \alias { undef }, \undef;
is \alias { ckvoid; $x, $y }, \$y;
is \alias { do { ckvoid; $x, $y } }, \$y;
is_deeply refs(alias { do { ckvoid; $x, $y, undef } }), refs($x, $y, undef);
is alias { local $_ = 42 }, 42;

# verify curpm
0 =~ /(0)/;
is $1, 0;
alias { 42 =~ /(42)/; is $1, 42 };
is $1, 0;
alias { our $z; local $z = 1 =~ /(1)/ until $1; ok !$z; is $1, 1 };
is $1, 0;

# leavesub.. actually calls alias_pp_return for all the hard work
alias sub { ckvoid }->();
alias(sub { ckvoid })->();
is alias(sub { context }->()), 1;
is alias(sub { context })->(), 1;
is \alias(sub { $x, $y }->()), \$y;
is \alias(sub { $x, $y })->(), \$y;
is +(alias sub { context }->())[0], 2;
is +(alias(sub { context })->())[0], 2;
is_deeply refs(alias sub { $x, $y }->()),  refs($x, $y);
is_deeply refs(alias(sub { $x, $y })->()), refs($x, $y);

# leavesublv and leavetry call enter too... mostly tested, so keep it brief
alias(sub : lvalue { ckvoid; $x })->();
is \alias(sub : lvalue { $x, $y })->(), \$y;
is_deeply refs(alias(sub : lvalue { $x, $y })->()), refs($x, $y);
alias(eval { ckvoid });
is \alias(eval { $x, $y }), \$y;
is_deeply refs(alias eval { $x, $y }), refs($x, $y);

# entereval / leaveeval
alias(eval 'ckvoid');
is alias(eval 'context'), 1;
is \alias(eval '$x, $y'), \$y;
is +(alias eval 'context')[0], 2;
is_deeply refs(alias eval '$x, $y'), refs($x, $y);

# return itself.. mostly tested already, so keep it brief
is \sub { alias return $x, $y }->(), \$y;
is_deeply refs(sub { alias return $x, $y }->()), refs($x, $y);
is \sub : lvalue { alias return $x, $y }->(), \$y;
is_deeply refs(sub : lvalue { alias return $x, $y }->()), refs($x, $y);
is \eval { alias return $x, $y }, \$y;
is_deeply refs(eval { alias return $x, $y }), refs($x, $y);
is \eval 'alias return $x, $y', \$y;
is_deeply refs(eval 'alias return $x, $y'), refs($x, $y);
is \sub { for (1) { alias return $x, $y } }->(), \$y;

# vim: ft=perl