From adda4f43e39cff45cf4d443dd93216644fca3afa Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 5 Aug 2011 13:08:04 -0500 Subject: remove test numbers --- t/edge-cases.t | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100755 t/edge-cases.t (limited to 't/edge-cases.t') diff --git a/t/edge-cases.t b/t/edge-cases.t new file mode 100755 index 0000000..6bed48e --- /dev/null +++ b/t/edge-cases.t @@ -0,0 +1,90 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use lib 't/lib'; +use Test::More; +use Test::Fatal; + +use Package::Stash; + +{ + package Foo; + use constant FOO => 1; + use constant BAR => \1; + use constant BAZ => []; + use constant QUUX => {}; + use constant QUUUX => sub { }; + sub normal { } + sub stub; + sub normal_with_proto () { } + sub stub_with_proto (); + + our $SCALAR; + our $SCALAR_WITH_VALUE = 1; + our @ARRAY; + our %HASH; +} + +my $stash = Package::Stash->new('Foo'); +{ local $TODO = ($] < 5.010 || $Package::Stash::IMPLEMENTATION eq 'PP') + ? "undef scalars aren't visible on 5.8, or from pure perl at all" + : undef; +ok($stash->has_symbol('$SCALAR'), '$SCALAR'); +} +ok($stash->has_symbol('$SCALAR_WITH_VALUE'), '$SCALAR_WITH_VALUE'); +ok($stash->has_symbol('@ARRAY'), '@ARRAY'); +ok($stash->has_symbol('%HASH'), '%HASH'); +is_deeply( + [sort $stash->list_all_symbols('CODE')], + [qw(BAR BAZ FOO QUUUX QUUX normal normal_with_proto stub stub_with_proto)], + "can see all code symbols" +); + +$stash->add_symbol('%added', {}); +ok(!$stash->has_symbol('$added'), '$added'); +ok(!$stash->has_symbol('@added'), '@added'); +ok($stash->has_symbol('%added'), '%added'); + +my $constant = $stash->get_symbol('&FOO'); +is(ref($constant), 'CODE', "expanded a constant into a coderef"); + +# ensure get doesn't prevent subsequent vivification (not sure what the deal +# was here) +is(ref($stash->get_symbol('$glob')), '', "nothing yet"); +is(ref($stash->get_or_add_symbol('$glob')), 'SCALAR', "got an empty scalar"); + +my $Bar = Package::Stash->new('Bar'); +my $foo = 3; +$foo =~ s/3/4/; +my $bar = 4.5; +$bar =~ s/4/5/; + +is(exception { $Bar->add_symbol('$foo', \$foo) }, undef, + "can add PVIV values"); +is(exception { $Bar->add_symbol('$bar', \$bar) }, undef, + "can add PVNV values"); +is(exception { bless \$bar, 'Foo'; $Bar->add_symbol('$bar2', $bar) }, undef, + "can add PVMG values"); +is(exception { $Bar->add_symbol('$baz', qr/foo/) }, undef, + "can add regex values"); +is(exception { undef $bar; $Bar->add_symbol('$quux', \$bar) }, undef, + "can add undef values that aren't NULL"); + +use_ok('CompileTime'); + +{ + package Gets::Deleted; + sub bar { } +} + +{ + my $delete = Package::Stash->new('Gets::Deleted'); + ok($delete->has_symbol('&bar'), "sees the method"); + { + no strict 'refs'; + delete ${'main::Gets::'}{'Deleted::'}; + } + ok(!$delete->has_symbol('&bar'), "method goes away when stash is deleted"); +} + +done_testing; -- cgit v1.2.3-54-g00ecf