my $run;
if (VMG_UVAR) {
- plan tests => 23;
+ plan tests => 33;
$run = 1;
} else {
plan skip_all => 'uvar magic is required to test symbol table hooks';
eval q{
die "ok\n";
package Hlagh;
- our $a;
+ our $thing;
{
package NotHlagh;
- our $x = @Hlagh::b;
+ our $what = @Hlagh::stuff;
}
};
is $@, "ok\n", 'stash: variables compiled fine';
is_deeply \%mg, {
- fetch => [ qw/a b/ ],
- store => [ qw/a b/ ],
+ fetch => [ qw/thing stuff/ ],
+ store => [ qw/thing stuff/ ],
}, 'stash: variables';
}
}, 'stash: valid method call';
}
+{
+ local %mg;
+
+ eval q{ my $meth = 'shoot'; Hlagh->$meth() };
+
+ is $@, '', 'stash: valid dynamic method call ran fine';
+ is_deeply \%mg, {
+ store => [ qw/shoot/ ],
+ }, 'stash: valid dynamic method call';
+}
+
{
local %mg;
is $@, '', 'inherited valid method call ran fine';
is_deeply \%mg, {
fetch => [ qw/ISA shoot/ ],
- }, 'stash: direct method call';
+ }, 'stash: inherited valid method call';
}
{
}, 'stash: invalid method call';
}
+{
+ local %mg;
+
+ eval q{ my $meth = 'unknown_too'; Hlagh->$meth() };
+
+ like $@, qr/^Can't locate object method "unknown_too" via package "Hlagh"/, 'stash: invalid dynamic method call croaked';
+ is_deeply \%mg, {
+ store => [ qw/unknown_too AUTOLOAD/ ],
+ }, 'stash: invalid dynamic method call';
+}
+
{
local %mg;
dispell %Hlagh::, $wiz;
+{
+ package AutoHlagh;
+
+ use vars qw/$AUTOLOAD/;
+
+ sub AUTOLOAD { return $AUTOLOAD }
+}
+
+cast %AutoHlagh::, $wiz;
+
+{
+ local %mg;
+
+ my $res = eval q{ AutoHlagh->autoloaded() };
+
+ is $@, '', 'stash: autoloaded method call ran fine';
+ is $res, 'AutoHlagh::autoloaded',
+ 'stash: autoloaded method call returned the right thing';
+ is_deeply \%mg, {
+ fetch => [ qw/autoloaded/ ],
+ store => [ qw/autoloaded AUTOLOAD AUTOLOAD/ ],
+ }, 'stash: autoloaded method call';
+}
+
+{
+ package AutoHlagher;
+
+ our @ISA;
+ BEGIN { @ISA = ('AutoHlagh') }
+}
+
+{
+ local %mg;
+
+ my $res = eval q{ AutoHlagher->also_autoloaded() };
+
+ is $@, '', 'stash: inherited autoloaded method call ran fine';
+ is $res, 'AutoHlagher::also_autoloaded',
+ 'stash: inherited autoloaded method returned the right thing';
+ is_deeply \%mg, {
+ fetch => [ qw/also_autoloaded AUTOLOAD/ ],
+ store => [ qw/AUTOLOAD/ ],
+ }, 'stash: inherited autoloaded method call';
+}
+
+dispell %AutoHlagh::, $wiz;
+
$code = 'wizard '
. join (', ', map { <<CB;
$_ => sub {