6 use Test::More tests => 50;
8 use Scope::Upper qw/localize/;
18 is $x, 1, 'localize *x, \1, 0 [ok]';
20 is $x, 2, 'localize *x, \1, 0 [end]';
28 localize *x, \bless({ t => 1 }, 'main'), 0;
29 is ref($x), 'main', 'localize *x, obj, 0 [ref]';
30 is $x->_t, 1, 'localize *x, obj, 0 [meth]';
32 is $x, undef, 'localize *x, obj, 0 [end]';
40 is $x, undef, 'localize *x, 1, 0 [ok]';
42 is $x, $] < 5.008009 ? undef : 2, 'localize *x, 1, 0 [end]';
50 is $x, 2, 'localize "$x", 2, 0 [ok]';
52 is $x, 7, 'localize "$x", 2, 0 [end]';
59 is $x, 3, 'localize " $x", 3, 0 [ok]';
61 is $x, 8, 'localize " $x", 3, 0 [end]';
66 skip 'Can\'t localize through a reference in 5.6' => 2 if $] < 5.008;
71 is ${''}, 4, 'localize "$", 4, 0 [ok]';
73 is ${''}, 9, 'localize "$", 4, 0 [end]';
78 skip 'Can\'t localize through a reference in 5.6' => 2 if $] < 5.008;
83 is ${''}, 5, 'localize "", 4, 0 [ok]';
85 is ${''}, 10, 'localize "", 4, 0 [end]';
92 is $x, 1, 'localize "x", \1, 0 [ok]';
94 is $x, 2, 'localize "x", \1, 0 [end]';
101 is $x, 3, 'localize "x", 3, 0 [ok]';
103 is $x, 4, 'localize "x", 3, 0 [end]';
109 localize 'x', bless({ t => 2 }, 'main'), 0;
110 is ref($x), 'main', 'localize "x", obj, 0 [ref]';
111 is $x->_t, 2, 'localize "x", obj, 0 [meth]';
113 is $x, undef, 'localize "x", obj, 0 [end]';
116 sub callthrough (*$) {
117 my ($what, $val) = @_;
120 $val = eval "\\$val";
123 localize $what, $val, 1;
124 is $x, 'x', 'localize callthrough [not yet]';
128 package Scope::Upper::Test::Mock1;
131 main::callthrough(*x, 4);
132 Test::More::is($x, 4, 'localize glob [ok - SUTM1]');
133 Test::More::is($main::x, undef, 'localize glob [ok - main]');
138 package Scope::Upper::Test::Mock2;
141 main::callthrough(*main::x, 5);
142 Test::More::is($x, undef, 'localize qualified glob [ok - SUTM2]');
143 Test::More::is($main::x, 5, 'localize qualified glob [ok - main]');
148 package Scope::Upper::Test::Mock3;
151 main::callthrough('$main::x', 6);
152 Test::More::is($x, undef, 'localize fully qualified name [ok - SUTM3]');
153 Test::More::is($main::x, 6, 'localize fully qualified name [ok - main]');
158 package Scope::Upper::Test::Mock4;
161 main::callthrough('$x', 7);
162 Test::More::is($x, 7, 'localize unqualified name [ok - SUTM4]');
163 Test::More::is($main::x, undef, 'localize unqualified name [ok - main]');
169 package Scope::Upper::Test::Mock5;
171 main::callthrough('$_', 'bar');
172 Test::More::ok(/bar/, 'localize $_ [ok]');
186 is_deeply \@a, $xa, 'localize *a, [ ], 0 [ok]';
188 is_deeply \@a, [ 4 .. 6 ], 'localize *a, [ ], 0 [end]';
197 is_deeply \@a, [ 5 .. 7 ], 'localize *a, [ ], 1 [not yet]';
199 is_deeply \@a, $xa, 'localize *a, [ ], 1 [ok]';
201 is_deeply \@a, [ 4 .. 6 ], 'localize *a, [ ], 1 [end]';
207 my $xh = { a => 5, c => 7 };
210 local %h = (a => 1, b => 2);
213 is_deeply \%h, $xh, 'localize *h, { }, 0 [ok]';
215 is_deeply \%h, { a => 1, b => 2 }, 'localize *h, { }, 0 [end]';
219 local %h = (a => 1, b => 2);
221 local %h = (b => 3, c => 4);
224 is_deeply \%h, { b => 3, c => 4 }, 'localize *h, { }, 1 [not yet]';
226 is_deeply \%h, $xh, 'localize *h, { }, 1 [ok]';
228 is_deeply \%h, { a => 1, b => 2 }, 'localize *h, { }, 1 [end]';
234 local *foo = sub { 7 };
236 localize *foo, sub { 6 }, 1;
237 is foo(), 7, 'localize *foo, sub { 6 }, 1 [not yet]';
239 is foo(), 6, 'localize *foo, sub { 6 }, 1 [ok]';
243 local *foo = sub { 9 };
245 localize '&foo', sub { 8 }, 1;
246 is foo(), 9, 'localize "&foo", sub { 8 }, 1 [not yet]';
248 is foo(), 8, 'localize "&foo", sub { 8 }, 1 [ok]';