summaryrefslogtreecommitdiffstats
path: root/t/bare-anon.t
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-11-29 14:51:39 -0600
committerJesse Luehrs <doy@tozt.net>2011-11-29 18:10:22 -0600
commitc803b9210927bdf4a385070d386904a28e5f8540 (patch)
tree519a32d3315c207e5283940492d9c3c86d158304 /t/bare-anon.t
parent3bc2194c3cd03e95aabe5b57001ae5e6e6c85393 (diff)
downloadpackage-stash-xs-c803b9210927bdf4a385070d386904a28e5f8540.tar.gz
package-stash-xs-c803b9210927bdf4a385070d386904a28e5f8540.zip
sync test suite
Diffstat (limited to 't/bare-anon.t')
-rw-r--r--t/bare-anon.t64
1 files changed, 64 insertions, 0 deletions
diff --git a/t/bare-anon.t b/t/bare-anon.t
new file mode 100644
index 0000000..34e234c
--- /dev/null
+++ b/t/bare-anon.t
@@ -0,0 +1,64 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+use Test::Fatal;
+use lib 't/lib';
+
+use Package::Stash;
+use Symbol;
+
+plan skip_all => "Anonymous stashes in PP need at least perl 5.14"
+ if $] < 5.014
+ && $Package::Stash::IMPLEMENTATION eq 'PP';
+
+my $anon = {};
+my $stash = Package::Stash->new($anon);
+# no way to bless something into a hashref yet
+# my $obj = $anon->bless({});
+
+{
+ my $code = sub { 'FOO' };
+ $stash->add_symbol('&foo' => $code);
+ is($stash->get_symbol('&foo'), $code);
+ # is($obj->foo, 'FOO');
+}
+
+{
+ local $TODO = ($Package::Stash::IMPLEMENTATION eq 'PP')
+ ? "can't inflate weird stash entries"
+ : undef;
+ $anon->{bar} = \123;
+
+ is(
+ exception {
+ my $code = $stash->get_symbol('&bar');
+ is(ref($code), 'CODE');
+ is($code->(), 123);
+
+ # is($obj->bar, 123);
+ },
+ undef
+ );
+}
+
+{
+ local $TODO = ($Package::Stash::IMPLEMENTATION eq 'PP')
+ ? "can't inflate weird stash entries"
+ : undef;
+ $anon->{baz} = -1;
+
+ is(
+ exception {
+ my $code = $stash->get_symbol('&baz');
+ is(ref($code), 'CODE');
+ like(
+ exception { $code->() },
+ qr/Undefined subroutine \&__ANON__::baz called/
+ );
+ },
+ undef
+ );
+}
+
+done_testing;