]> git.vpit.fr Git - perl/modules/Scope-Upper.git/blob - t/40-localize_delete.t
Add slice syntax to localize_{elem,delete}
[perl/modules/Scope-Upper.git] / t / 40-localize_delete.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 30;
7
8 use Scope::Upper qw/localize_delete/;
9
10 # Arrays
11
12 our @a;
13
14 {
15  local @a = (4 .. 6);
16  {
17   localize_delete '@main::a', 1, 0;
18   is_deeply \@a, [ 4, undef, 6 ], 'localize_delete "@a", 1, 0 [ok]';
19  }
20  is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 1, 0 [end]';
21 }
22
23 {
24  local @a = (4 .. 6);
25  {
26   localize_delete '@main::a', 4, 0;
27   is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 4 (nonexistent), 0 [ok]';
28  }
29  is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 4 (nonexistent), 0 [end]';
30 }
31
32 {
33  local @a = (4 .. 6);
34  local $a[4] = 7;
35  {
36   localize_delete '@main::a', 4, 0;
37   is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 4 (exists), 0 [ok]';
38  }
39  is_deeply \@a, [ 4 .. 6, undef, 7 ], 'localize_delete "@a", 4 (exists), 0 [end]';
40 }
41
42 {
43  local @a = (4 .. 6);
44  {
45   local @a = (5 .. 7);
46   {
47    localize_delete '@main::a', 1, 1;
48    is_deeply \@a, [ 5 .. 7 ], 'localize_delete "@a", 1, 1 [not yet]';
49   }
50   is_deeply \@a, [ 5, undef, 7 ], 'localize_delete "@a", 1, 1 [ok]';
51  }
52  is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 1, 1 [end]';
53 }
54
55 {
56  local @a = (4 .. 6);
57  {
58   local @a = (5 .. 7);
59   {
60    localize_delete '@main::a', 4, 1;
61    is_deeply \@a, [ 5 .. 7 ], 'localize_delete "@a", 4 (nonexistent), 1 [not yet]';
62   }
63   is_deeply \@a, [ 5 .. 7 ], 'localize_delete "@a", 4 (nonexistent), 1 [ok]';
64  }
65  is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 4 (nonexistent), 1 [end]';
66 }
67
68 {
69  local @a = (4 .. 6);
70  {
71   local @a = (5 .. 7);
72   local $a[4] = 8;
73   {
74    localize_delete '@main::a', 4, 1;
75    is_deeply \@a, [ 5 .. 7, undef, 8 ], 'localize_delete "@a", 4 (exists), 1 [not yet]';
76   }
77   is_deeply \@a, [ 5 .. 7 ], 'localize_delete "@a", 4 (exists), 1 [ok]';
78  }
79  is_deeply \@a, [ 4 .. 6 ], 'localize_delete "@a", 4 (exists), 1 [end]';
80 }
81
82 # Hashes
83
84 our %h;
85
86 {
87  local %h = (a => 1, b => 2);
88  {
89   localize_delete '%main::h', 'a', 0;
90   is_deeply \%h, { b => 2 }, 'localize_delete "%h", "a", 0 [ok]';
91  }
92  is_deeply \%h, { a => 1, b => 2 }, 'localize_delete "%h", "a", 0 [end]';
93 }
94
95 {
96  local %h = (a => 1, b => 2);
97  {
98   localize_delete '%main::h', 'c', 0;
99   is_deeply \%h, { a => 1, b => 2 }, 'localize_delete "%h", "c", 0 [ok]';
100  }
101  is_deeply \%h, { a => 1, b => 2 }, 'localize_delete "%h", "c", 0 [end]';
102 }
103
104 {
105  local %h = (a => 1, b => 2);
106  {
107   local %h = (a => 3, c => 4);
108   {
109    localize_delete '%main::h', 'a', 1;
110    is_deeply \%h, { a => 3, c => 4 }, 'localize_delete "%h", "a", 1 [not yet]';
111   }
112   is_deeply \%h, { c => 4 }, 'localize_delete "%h", "a", 1 [ok]';
113  }
114  is_deeply \%h, { a => 1, b => 2 }, 'localize_delete "%h", "a", 1 [end]';
115 }
116
117 # Others
118
119 our $x = 1;
120 {
121  localize_delete '$x', 2, 0;
122  is $x, undef, 'localize "$x", anything, 0 [ok]';
123 }
124 is $x, 1, 'localize "$x", anything, 0 [end]';
125
126 sub x { 1 };
127 {
128  localize_delete '&x', 2, 0;
129  ok !exists(&x), 'localize "&x", anything, 0 [ok]';
130 }
131 is x(), 1, 'localize "&x", anything, 0 [end]';
132
133 {
134  localize_delete *x, sub { }, 0;
135  is !exists(&x),  1, 'localize *x, anything, 0 [ok 1]';
136  is !defined($x), 1, 'localize *x, anything, 0 [ok 2]';
137 }
138 is x(), 1, 'localize *x, anything, 0 [end 1]';
139 is $x,  1, 'localize *x, anything, 0 [end 2]';