X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2F20-localize-target.t;h=40d8f65b160c171afe5cf0d0bcd32e66f32af482;hb=053dfd24ee61e5bcae61562722bd1cb95ef84ac2;hp=9bd7a3885fcc6376122bd87515a4ef96dda79f6c;hpb=2c38cd5c99372e9ab0a91cbaedebf68bec6ed2c7;p=perl%2Fmodules%2FScope-Upper.git diff --git a/t/20-localize-target.t b/t/20-localize-target.t index 9bd7a38..40d8f65 100644 --- a/t/20-localize-target.t +++ b/t/20-localize-target.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More tests => 50 + 4; +use Test::More tests => 61 + 4; use Scope::Upper qw/localize UP HERE/; @@ -255,6 +255,45 @@ my $xh = { a => 5, c => 7 }; is foo(), 8, 'localize "&foo", sub { 8 } => UP [ok]'; } +{ + local *foo = sub { 'a' }; + { + { + localize *foo, sub { 'b' } => UP; + is foo(), 'a', 'localize *foo, sub { "b" } => UP [not yet 1]'; + { + no warnings 'redefine'; + local *foo = sub { 'c' }; + is foo(), 'c', 'localize *foo, sub { "b" } => UP [localized 1]'; + } + is foo(), 'a', 'localize *foo, sub { "b" } => UP [not yet 2]'; + } + is foo(), 'b', 'localize *foo, sub { "b" } => UP [ok 1]'; + { + no warnings 'redefine'; + local *foo = sub { 'd' }; + is foo(), 'd', 'localize *foo, sub { "b" } => UP [localized 2]'; + } + is foo(), 'b', 'localize *foo, sub { "b" } => UP [ok 2]'; + } + is foo(), 'a', 'localize *foo, sub { "b" } => UP [end]'; +} + +{ + local *foo = sub { 'x' }; + { + { + localize *foo, sub { 'y' } => UP; + is foo(), 'x', 'localize *foo, sub { "y" } => UP [not yet]'; + } + is foo(), 'y', 'localize *foo, sub { "y" } => UP [ok]'; + no warnings 'redefine'; + *foo = sub { 'z' }; + is foo(), 'z', 'localize *foo, sub { "y" } => UP [replaced]'; + } + is foo(), 'x', 'localize *foo, sub { "y" } => UP [end]'; +} + # Invalid sub invalid_ref { qr/^Invalid \Q$_[0]\E reference as the localization target/ }