{
BEGIN {
+ my $stash = Package::Stash->new('Code');
+ my $val = $stash->get_package_symbol('&foo');
+ is($val, undef, "got nothing yet");
+ }
+ {
+ no warnings 'void', 'once';
+ sub Code::foo { }
+ }
+ BEGIN {
+ my $stash = Package::Stash->new('Code');
+ my $val = $stash->get_package_symbol('&foo');
+ is(ref($val), 'CODE', "got something");
+ is(prototype($val), undef, "got the right variable");
+ &Scalar::Util::set_prototype($val, '&');
+ is($stash->get_package_symbol('&foo'), $val,
+ "got the right variable");
+ is(prototype($stash->get_package_symbol('&foo')), '&',
+ "got the right variable");
+ is(prototype(\&Code::foo), '&',
+ "stash has the right variable");
+ }
+}
+
+{
+ BEGIN {
my $stash = Package::Stash->new('Io');
my $val = $stash->get_package_symbol('FOO');
is($val, undef, "got nothing yet");
open $val, '<', \$str;
is(readline($stash->get_package_symbol('FOO')), "foo",
"got the right variable");
+ seek($stash->get_package_symbol('FOO'), 0, 0);
{
package Io;
::isa_ok(*FOO{IO}, 'IO');
+ ::is(<FOO>, "foo",
+ "stash has the right variable");
}
}
}
-TODO: {
- # making TODO tests at a mixture of BEGIN and runtime is irritating
- my $_TODO;
- BEGIN { $_TODO = "obviously I don't understand this well enough"; }
- BEGIN { $TODO = $_TODO; }
- $TODO = $_TODO;
- BEGIN {
- my $stash = Package::Stash->new('Code');
- my $val = $stash->get_package_symbol('&foo');
- is($val, undef, "got nothing yet");
- }
- {
- no warnings 'void', 'once';
- \&Code::foo;
- }
- BEGIN {
- my $stash = Package::Stash->new('Code');
- my $val = $stash->get_package_symbol('&foo');
- undef $TODO;
- is(ref($val), 'CODE', "got something");
- $TODO = $_TODO;
- SKIP: {
- eval "require PadWalker"
- or skip "needs PadWalker", 1;
- # avoid padwalker segfault
- if (!defined($val)) {
- fail("got the right variable");
- }
- else {
- PadWalker::set_closed_over($val, {'$x' => 1});
- is_deeply({PadWalker::closed_over($stash->get_package_symbol('&foo'))}, {'$x' => 1},
- "got the right variable");
- is_deeply({PadWalker::closed_over(\&Code::foo)}, {'$x' => 1},
- "stash has the right variable");
- }
- }
- }
- BEGIN { undef $TODO; }
- undef $TODO;
-}
-
{
my $stash = Package::Stash->new('Hash::Vivify');
my $val = $stash->get_or_add_package_symbol('%foo');
open $val, '<', \$str;
is(readline($stash->get_package_symbol('FOO')), "foo",
"got the right variable");
+ seek($stash->get_package_symbol('FOO'), 0, 0);
}
{
package Io::Vivify;
no warnings 'once';
::isa_ok(*FOO{IO}, 'IO');
+ ::is(<FOO>, "foo",
+ "stash has the right variable");
}
}