]> git.vpit.fr Git - perl/modules/Variable-Temp.git/blob - t/10-base.t
701ceadcb92bfeb6934dd232e82cc747a169b383
[perl/modules/Variable-Temp.git] / t / 10-base.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Variable::Temp 'set_temp';
7
8 use Test::More tests => (9 + 2 * 19) * 2 + 6 * 3;
9
10 sub describe {
11  my $h = $_[0];
12  return join ', ', map "$_:$h->{$_}", sort keys %$h;
13 }
14
15 # Lexicals
16
17 {
18  my $x = 1;
19  is $x, 1;
20  {
21   set_temp $x => 2;
22   is $x, 2;
23   $x = 3;
24   is $x, 3;
25  }
26  is $x, 1;
27  {
28   set_temp $x => 4;
29   is $x, 4;
30   set_temp $x => 5;
31   is $x, 5;
32  }
33  is $x, 1;
34  {
35   set_temp $x;
36   is $x, undef;
37  }
38  is $x, 1;
39 }
40
41 {
42  my @y = (1, 2);
43  is "@y", "1 2";
44  {
45   set_temp @y => [ 3 ];
46   is "@y", '3';
47   @y = (4, 5, 6);
48   is "@y", '4 5 6';
49   $y[3] = 7;
50   is "@y", '4 5 6 7';
51  }
52  is "@y", "1 2";
53  {
54   set_temp @y => [ 8, 9, 10 ];
55   is "@y", '8 9 10';
56   $y[1] = 11;
57   is "@y", '8 11 10';
58  }
59  is "@y", "1 2";
60  {
61   set_temp @y => [ 12, 13, 14 ];
62   is "@y", '12 13 14';
63   set_temp @y => [ 15, 16];
64   is "@y", '15 16';
65  }
66  is "@y", '1 2';
67  {
68   set_temp @y;
69   is "@y", '';
70  }
71  is "@y", '1 2';
72  {
73   set_temp @y => [ qw<a b c> ];
74   is "@y", 'a b c';
75   {
76    local $y[1] = 'd';
77    is "@y", 'a d c';
78    {
79     local @y[2, 3] = qw<e f>;
80     is "@y", 'a d e f';
81    }
82    is "@y", 'a d c';
83   }
84   is "@y", 'a b c';
85  }
86  is "@y", '1 2';
87 }
88
89 {
90  my %z = (a => 1);
91  is describe(\%z), 'a:1';
92  {
93   set_temp %z => { b => 2 };
94   is describe(\%z), 'b:2';
95   %z = (c => 3);
96   is describe(\%z), 'c:3';
97   $z{d} = 4;
98   is describe(\%z), 'c:3, d:4';
99  }
100  is describe(\%z), 'a:1';
101  {
102   set_temp %z => { a => 5 };
103   is describe(\%z), 'a:5';
104   $z{a} = 6;
105   is describe(\%z), 'a:6';
106  }
107  is describe(\%z), 'a:1';
108  {
109   set_temp %z => { a => 7, d => 8 };
110   is describe(\%z), 'a:7, d:8';
111   set_temp %z => { d => 9, e => 10 };
112   is describe(\%z), 'd:9, e:10';
113  }
114  is describe(\%z), 'a:1';
115  {
116   set_temp %z;
117   is describe(\%z), '';
118  }
119  is describe(\%z), 'a:1';
120  {
121   set_temp %z => { a => 11, f => 12 };
122   is describe(\%z), 'a:11, f:12';
123   {
124    local $z{a} = 13;
125    is describe(\%z), 'a:13, f:12';
126    {
127     local @z{qw<f g>} = (14, 15);
128     is describe(\%z), 'a:13, f:14, g:15';
129    }
130    is describe(\%z), 'a:13, f:12';
131   }
132   is describe(\%z), 'a:11, f:12';
133  }
134  is describe(\%z), 'a:1';
135 }
136
137 # Globals
138
139 {
140  our $X = 1;
141  is $X, 1;
142  {
143   set_temp $X => 2;
144   is $X, 2;
145   $X = 3;
146   is $X, 3;
147  }
148  is $X, 1;
149  {
150   set_temp $X => 4;
151   is $X, 4;
152   set_temp $X => 5;
153   is $X, 5;
154  }
155  is $X, 1;
156  {
157   set_temp $X;
158   is $X, undef;
159  }
160  is $X, 1;
161  {
162   local $X = 6;
163   is $X, 6;
164  }
165  is $X, 1;
166  {
167   local $X = 7;
168   set_temp $X => 8;
169   is $X, 8;
170  }
171  is $X, 1;
172  {
173   set_temp $X => 9;
174   local $X = 10;
175   is $X, 10;
176  }
177  is $X, 1;
178 }
179
180 {
181  our @Y = (1, 2);
182  is "@Y", "1 2";
183  {
184   set_temp @Y => [ 3 ];
185   is "@Y", '3';
186   @Y = (4, 5, 6);
187   is "@Y", '4 5 6';
188   $Y[3] = 7;
189   is "@Y", '4 5 6 7';
190  }
191  is "@Y", "1 2";
192  {
193   set_temp @Y => [ 8, 9, 10 ];
194   is "@Y", '8 9 10';
195   $Y[1] = 11;
196   is "@Y", '8 11 10';
197  }
198  is "@Y", "1 2";
199  {
200   set_temp @Y => [ 12, 13, 14 ];
201   is "@Y", '12 13 14';
202   set_temp @Y => [ 15, 16];
203   is "@Y", '15 16';
204  }
205  is "@Y", '1 2';
206  {
207   set_temp @Y;
208   is "@Y", '';
209  }
210  is "@Y", '1 2';
211  {
212   set_temp @Y => [ qw<a b c> ];
213   is "@Y", 'a b c';
214   {
215    local $Y[1] = 'd';
216    is "@Y", 'a d c';
217    {
218     local @Y[2, 3] = qw<e f>;
219     is "@Y", 'a d e f';
220    }
221    is "@Y", 'a d c';
222   }
223   is "@Y", 'a b c';
224  }
225  is "@Y", '1 2';
226  {
227   local @Y = qw<A B>;
228   is "@Y", 'A B';
229  }
230  is "@Y", '1 2';
231  {
232   local @Y = qw<C D E>;
233   set_temp @Y => [ qw<F> ];
234   is "@Y", 'F';
235  }
236  is "@Y", '1 2';
237  {
238   set_temp @Y => [ qw<G H I> ];
239   local @Y = qw<J>;
240   is "@Y", 'J';
241  }
242  is "@Y", '1 2';
243 }
244
245 {
246  our %Z = (a => 1);
247  is describe(\%Z), 'a:1';
248  {
249   set_temp %Z => { b => 2 };
250   is describe(\%Z), 'b:2';
251   %Z = (c => 3);
252   is describe(\%Z), 'c:3';
253   $Z{d} = 4;
254   is describe(\%Z), 'c:3, d:4';
255  }
256  is describe(\%Z), 'a:1';
257  {
258   set_temp %Z => { a => 5 };
259   is describe(\%Z), 'a:5';
260   $Z{a} = 6;
261   is describe(\%Z), 'a:6';
262  }
263  is describe(\%Z), 'a:1';
264  {
265   set_temp %Z => { a => 7, d => 8 };
266   is describe(\%Z), 'a:7, d:8';
267   set_temp %Z => { d => 9, e => 10 };
268   is describe(\%Z), 'd:9, e:10';
269  }
270  is describe(\%Z), 'a:1';
271  {
272   set_temp %Z;
273   is describe(\%Z), '';
274  }
275  is describe(\%Z), 'a:1';
276  {
277   set_temp %Z => { a => 11, f => 12 };
278   is describe(\%Z), 'a:11, f:12';
279   {
280    local $Z{a} = 13;
281    is describe(\%Z), 'a:13, f:12';
282    {
283     local @Z{qw<f g>} = (14, 15);
284     is describe(\%Z), 'a:13, f:14, g:15';
285    }
286    is describe(\%Z), 'a:13, f:12';
287   }
288   is describe(\%Z), 'a:11, f:12';
289  }
290  is describe(\%Z), 'a:1';
291  {
292   local %Z = (A => 1, B => 2);
293   is describe(\%Z), 'A:1, B:2';
294  }
295  is describe(\%Z), 'a:1';
296  {
297   local %Z = (A => 3, C => 4);
298   set_temp %Z => { A => 5, D => 6 };
299   is describe(\%Z), 'A:5, D:6';
300  }
301  is describe(\%Z), 'a:1';
302  {
303   set_temp %Z => { A => 7, E => 8 };
304   local %Z = (A => 9, F => 10);
305   is describe(\%Z), 'A:9, F:10';
306  }
307  is describe(\%Z), 'a:1';
308 }