]> git.vpit.fr Git - perl/modules/Scope-Upper.git/blob - t/30-localize_elem-target.t
fe538e40ddb7ff92cfb6be93982f0cfcee2d114f
[perl/modules/Scope-Upper.git] / t / 30-localize_elem-target.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 21;
7
8 use Scope::Upper qw/localize_elem/;
9
10 # Arrays
11
12 our @a;
13
14 {
15  local @a = (4 .. 6);
16  {
17   localize_elem '@main::a', 1, 8, 0;
18   is_deeply \@a, [ 4, 8, 6 ], 'localize_elem "@a", 1, 8, 0 [ok]';
19  }
20  is_deeply \@a, [ 4 .. 6 ], 'localize_elem "@a", 1, 8, 0 [end]';
21 }
22
23 {
24  local @a = (4 .. 6);
25  {
26   localize_elem '@main::a', 4, 8, 0;
27   is_deeply \@a, [ 4 .. 6, undef, 8 ], 'localize_elem "@a", 4, 8, 0 [ok]';
28  }
29  is_deeply \@a, [ 4 .. 6 ], 'localize_elem "@a", 4, 8, 0 [end]';
30 }
31
32 {
33  local @a = (4 .. 6);
34  {
35   localize_elem '@main::a', -2, 8, 0;
36   is_deeply \@a, [ 4, 8, 6 ], 'localize_elem "@a", -2, 8, 0 [ok]';
37  }
38  is_deeply \@a, [ 4 .. 6 ], 'localize_elem "@a", -2, 8, 0 [end]';
39 }
40
41 {
42  local @a = (4 .. 6);
43  {
44   eval { localize_elem '@main::a', -4, 8, 0 };
45   like $@, qr/Modification of non-creatable array value attempted, subscript -4/, 'localize_elem "@a", -4, 8, 0 [ok]';
46  }
47  is_deeply \@a, [ 4 .. 6 ], 'localize_elem "@a", -4, 8, 0 [end]';
48 }
49
50 {
51  local @a = (4 .. 6);
52  {
53   local @a = (5 .. 7);
54   {
55    localize_elem '@main::a', 1, 12, 1;
56    is_deeply \@a, [ 5 .. 7 ], 'localize_elem "@a", 1, 12, 1 [not yet]';
57   }
58   is_deeply \@a, [ 5, 12, 7 ], 'localize_elem "@a", 1, 12, 1 [ok]';
59  }
60  is_deeply \@a, [ 4 .. 6 ], 'localize_elem "@a", 1, 12, 1 [end]';
61 }
62
63 {
64  local @a = (4 .. 6);
65  {
66   local @a = (5 .. 7);
67   {
68    localize_elem '@main::a', 4, 12, 1;
69    is_deeply \@a, [ 5 .. 7 ], 'localize_elem "@a", 4, 12, 1 [not yet]';
70   }
71   is_deeply \@a, [ 5 .. 7, undef, 12 ], 'localize_elem "@a", 4, 12, 1 [ok]';
72  }
73  is_deeply \@a, [ 4 .. 6 ], 'localize_elem "@a", 4, 12, 1 [end]';
74 }
75
76 # Hashes
77
78 our %h;
79
80 {
81  local %h = (a => 1, b => 2);
82  {
83   localize_elem '%main::h', 'a', 3, 0;
84   is_deeply \%h, { a => 3, b => 2 }, 'localize_elem "%h", "a", 3, 0 [ok]';
85  }
86  is_deeply \%h, { a => 1, b => 2 }, 'localize_elem "%h", "a", 3, 0 [end]';
87 }
88
89 {
90  local %h = (a => 1, b => 2);
91  {
92   localize_elem '%main::h', 'c', 3, 0;
93   is_deeply \%h, { a => 1, b => 2, c => 3 }, 'localize_elem "%h", "c", 3, 0 [ok]';
94  }
95  is_deeply \%h, { a => 1, b => 2 }, 'localize_elem "%h", "c", 3, 0 [end]';
96 }
97
98 {
99  local %h = (a => 1, b => 2);
100  {
101   local %h = (a => 3, c => 4);
102   {
103    localize_elem '%main::h', 'a', 5, 1;
104    is_deeply \%h, { a => 3, c => 4 }, 'localize_elem "%h", "a", 5, 1 [not yet]';
105   }
106   is_deeply \%h, { a => 5, c => 4 }, 'localize_elem "%h", "a", 5, 1 [ok]';
107  }
108  is_deeply \%h, { a => 1, b => 2 }, 'localize_elem "%h", "a", 5, 1 [end]';
109 }
110