6 use Test::More tests => 36;
8 use Scope::Upper qw/localize_delete/;
17 localize_delete '@main::a', 1, 0;
18 is_deeply \@a, [ 4, undef, 6 ], 'localize_delete "@a", 1, 0 [ok]';
20 is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 1, 0 [end]';
26 localize_delete '@main::a', 4, 0;
27 is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 4 (nonexistent), 0 [ok]';
29 is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 4 (nonexistent), 0 [end]';
36 localize_delete '@main::a', 4, 0;
37 is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 4 (exists), 0 [ok]';
39 is_deeply \@a, [ 4 .. 6, undef, 7 ], 'localize_delete "@a", 4 (exists), 0 [end]';
45 localize_delete '@main::a', -2, 0;
46 is_deeply \@a, [ 4, undef, 6 ], 'localize_delete "@a", -2, 0 [ok]';
48 is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", -2, 0 [end]';
55 localize_delete '@main::a', -1, 0;
56 is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", -1 (exists), 0 [ok]';
58 is_deeply \@a, [ 4 .. 6, undef, 7 ], 'localize_delete "@a", -1 (exists), 0 [end]';
64 eval { localize_delete '@main::a', -4, 0 };
65 like $@, qr/Modification of non-creatable array value attempted, subscript -4/, 'localize_delete "@a", -4 (out of bounds), 0 [ok]';
67 is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", -4 (out of bounds), 0 [end]';
75 localize_delete '@main::a', 1, 1;
76 is_deeply \@a, [ 5 .. 7 ], 'localize_delete "@a", 1, 1 [not yet]';
78 is_deeply \@a, [ 5, undef, 7 ], 'localize_delete "@a", 1, 1 [ok]';
80 is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 1, 1 [end]';
88 localize_delete '@main::a', 4, 1;
89 is_deeply \@a, [ 5 .. 7 ], 'localize_delete "@a", 4 (nonexistent), 1 [not yet]';
91 is_deeply \@a, [ 5 .. 7 ], 'localize_delete "@a", 4 (nonexistent), 1 [ok]';
93 is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 4 (nonexistent), 1 [end]';
102 localize_delete '@main::a', 4, 1;
103 is_deeply \@a, [ 5 .. 7, undef, 8 ], 'localize_delete "@a", 4 (exists), 1 [not yet]';
105 is_deeply \@a, [ 5 .. 7 ], 'localize_delete "@a", 4 (exists), 1 [ok]';
107 is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 4 (exists), 1 [end]';
115 local %h = (a => 1, b => 2);
117 localize_delete '%main::h', 'a', 0;
118 is_deeply \%h, { b => 2 }, 'localize_delete "%h", "a", 0 [ok]';
120 is_deeply \%h, { a => 1, b => 2 }, 'localize_delete "%h", "a", 0 [end]';
124 local %h = (a => 1, b => 2);
126 localize_delete '%main::h', 'c', 0;
127 is_deeply \%h, { a => 1, b => 2 }, 'localize_delete "%h", "c", 0 [ok]';
129 is_deeply \%h, { a => 1, b => 2 }, 'localize_delete "%h", "c", 0 [end]';
133 local %h = (a => 1, b => 2);
135 local %h = (a => 3, c => 4);
137 localize_delete '%main::h', 'a', 1;
138 is_deeply \%h, { a => 3, c => 4 }, 'localize_delete "%h", "a", 1 [not yet]';
140 is_deeply \%h, { c => 4 }, 'localize_delete "%h", "a", 1 [ok]';
142 is_deeply \%h, { a => 1, b => 2 }, 'localize_delete "%h", "a", 1 [end]';
149 localize_delete '$x', 2, 0;
150 is $x, undef, 'localize "$x", anything, 0 [ok]';
152 is $x, 1, 'localize "$x", anything, 0 [end]';
156 localize_delete '&x', 2, 0;
157 ok !exists(&x), 'localize "&x", anything, 0 [ok]';
159 is x(), 1, 'localize "&x", anything, 0 [end]';
162 localize_delete *x, sub { }, 0;
163 is !exists(&x), 1, 'localize *x, anything, 0 [ok 1]';
164 is !defined($x), 1, 'localize *x, anything, 0 [ok 2]';
166 is x(), 1, 'localize *x, anything, 0 [end 1]';
167 is $x, 1, 'localize *x, anything, 0 [end 2]';