]> git.vpit.fr Git - perl/modules/Scope-Upper.git/blobdiff - t/20-localize-target.t
Invalidate the method cache when localizing subroutines
[perl/modules/Scope-Upper.git] / t / 20-localize-target.t
index 40d8f65b160c171afe5cf0d0bcd32e66f32af482..ba77ea88a62b6f7bf677435057de5b66359501d9 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 61 + 4;
+use Test::More tests => 70 + 4;
 
 use Scope::Upper qw/localize UP HERE/;
 
@@ -294,6 +294,43 @@ my $xh = { a => 5, c => 7 };
  is foo(), 'x', 'localize *foo, sub { "y" } => UP [end]';
 }
 
+sub X::foo { 'X::foo' }
+
+{
+ {
+  {
+   localize 'X::foo', sub { 'X::foo 2' } => UP;
+   is(X->foo, 'X::foo', 'localize "X::foo", sub { "X::foo 2" } => UP [not yet]')
+  }
+  is(X->foo, 'X::foo 2', 'localize "X::foo", sub { "X::foo 2" } => UP [ok]');
+ }
+ is(X->foo, 'X::foo', 'localize "X::foo", sub { "X::foo 2" } => UP [end]');
+}
+
+@Y::ISA = 'X';
+
+{
+ {
+  {
+   localize 'X::foo', sub { 'X::foo 3' } => UP;
+   is(Y->foo, 'X::foo', 'localize "X::foo", sub { "X::foo 3" } => UP [not yet]')
+  }
+  is(Y->foo, 'X::foo 3', 'localize "X::foo", sub { "X::foo 3" } => UP [ok]');
+ }
+ is(Y->foo, 'X::foo', 'localize "X::foo", sub { "X::foo 2" } => UP [end]');
+}
+
+{
+ {
+  {
+   localize 'Y::foo', sub { 'Y::foo' } => UP;
+   is(Y->foo, 'X::foo', 'localize "Y::foo", sub { "Y::foo" } => UP [not yet]');
+  }
+  is(Y->foo, 'Y::foo', 'localize "Y::foo", sub { "Y::foo" } => UP [ok]');
+ }
+ is(Y->foo, 'X::foo', 'localize "Y::foo", sub { "Y::foo" } => UP [end]');
+}
+
 # Invalid
 
 sub invalid_ref { qr/^Invalid \Q$_[0]\E reference as the localization target/ }