6 use Test::More tests => 50;
8 use Scope::Upper qw/localize UP HERE/;
17 localize *x, \1 => HERE;
18 is $x, 1, 'localize *x, \1 => HERE [ok]';
20 is $x, 2, 'localize *x, \1 => HERE [end]';
28 localize *x, \bless({ t => 1 }, 'main') => HERE;
29 is ref($x), 'main', 'localize *x, obj => HERE [ref]';
30 is $x->_t, 1, 'localize *x, obj => HERE [meth]';
32 is $x, undef, 'localize *x, obj => HERE [end]';
39 localize *x, 1 => HERE;
40 is $x, undef, 'localize *x, 1 => HERE [ok]';
42 is $x, $] < 5.008009 ? undef : 2, 'localize *x, 1 => HERE [end]';
49 localize '$x', 2 => HERE;
50 is $x, 2, 'localize "$x", 2 => HERE [ok]';
52 is $x, 7, 'localize "$x", 2 => HERE [end]';
58 localize ' $x', 3 => HERE;
59 is $x, 3, 'localize " $x", 3 => HERE [ok]';
61 is $x, 8, 'localize " $x", 3 => HERE [end]';
66 skip 'Can\'t localize through a reference in 5.6' => 2 if $] < 5.008;
71 localize '$', 4 => HERE;
72 is ${''}, 4, 'localize "$", 4 => HERE [ok]';
74 is ${''}, 9, 'localize "$", 4 => HERE [end]';
80 skip 'Can\'t localize through a reference in 5.6' => 2 if $] < 5.008;
85 localize '', 5 => HERE;
86 is ${''}, 5, 'localize "", 4 => HERE [ok]';
88 is ${''}, 10, 'localize "", 4 => HERE [end]';
95 localize 'x', \1 => HERE;
96 is $x, 1, 'localize "x", \1 => HERE [ok]';
98 is $x, 2, 'localize "x", \1 => HERE [end]';
104 localize 'x', 3 => HERE;
105 is $x, 3, 'localize "x", 3 => HERE [ok]';
107 is $x, 4, 'localize "x", 3 => HERE [end]';
113 localize 'x', bless({ t => 2 }, 'main') => HERE;
114 is ref($x), 'main', 'localize "x", obj => HERE [ref]';
115 is $x->_t, 2, 'localize "x", obj => HERE [meth]';
117 is $x, undef, 'localize "x", obj => HERE [end]';
120 sub callthrough (*$) {
121 my ($what, $val) = @_;
124 $val = eval "\\$val";
127 localize $what, $val => UP;
128 is $x, 'x', 'localize callthrough [not yet]';
132 package Scope::Upper::Test::Mock1;
135 main::callthrough(*x, 4);
136 Test::More::is($x, 4, 'localize glob [ok - SUTM1]');
137 Test::More::is($main::x, undef, 'localize glob [ok - main]');
142 package Scope::Upper::Test::Mock2;
145 main::callthrough(*main::x, 5);
146 Test::More::is($x, undef, 'localize qualified glob [ok - SUTM2]');
147 Test::More::is($main::x, 5, 'localize qualified glob [ok - main]');
152 package Scope::Upper::Test::Mock3;
155 main::callthrough('$main::x', 6);
156 Test::More::is($x, undef, 'localize fully qualified name [ok - SUTM3]');
157 Test::More::is($main::x, 6, 'localize fully qualified name [ok - main]');
162 package Scope::Upper::Test::Mock4;
165 main::callthrough('$x', 7);
166 Test::More::is($x, 7, 'localize unqualified name [ok - SUTM4]');
167 Test::More::is($main::x, undef, 'localize unqualified name [ok - main]');
173 package Scope::Upper::Test::Mock5;
175 main::callthrough('$_', 'bar');
176 Test::More::ok(/bar/, 'localize $_ [ok]');
189 localize *a, $xa => HERE;
190 is_deeply \@a, $xa, 'localize *a, [ ] => HERE [ok]';
192 is_deeply \@a, [ 4 .. 6 ], 'localize *a, [ ] => HERE [end]';
200 localize *a, $xa => UP;
201 is_deeply \@a, [ 5 .. 7 ], 'localize *a, [ ] => UP [not yet]';
203 is_deeply \@a, $xa, 'localize *a, [ ] => UP [ok]';
205 is_deeply \@a, [ 4 .. 6 ], 'localize *a, [ ] => UP [end]';
211 my $xh = { a => 5, c => 7 };
214 local %h = (a => 1, b => 2);
216 localize *h, $xh => HERE;
217 is_deeply \%h, $xh, 'localize *h, { } => HERE [ok]';
219 is_deeply \%h, { a => 1, b => 2 }, 'localize *h, { } => HERE [end]';
223 local %h = (a => 1, b => 2);
225 local %h = (b => 3, c => 4);
227 localize *h, $xh => UP;
228 is_deeply \%h, { b => 3, c => 4 }, 'localize *h, { } => UP [not yet]';
230 is_deeply \%h, $xh, 'localize *h, { } => UP [ok]';
232 is_deeply \%h, { a => 1, b => 2 }, 'localize *h, { } => UP [end]';
238 local *foo = sub { 7 };
240 localize *foo, sub { 6 } => UP;
241 is foo(), 7, 'localize *foo, sub { 6 } => UP [not yet]';
243 is foo(), 6, 'localize *foo, sub { 6 } => UP [ok]';
247 local *foo = sub { 9 };
249 localize '&foo', sub { 8 } => UP;
250 is foo(), 9, 'localize "&foo", sub { 8 } => UP [not yet]';
252 is foo(), 8, 'localize "&foo", sub { 8 } => UP [ok]';