update the test suite
[gitmo/Package-Stash-XS.git] / t / 07-edge-cases.t
CommitLineData
25c87f5c 1#!/usr/bin/env perl
2use strict;
3use warnings;
c53d2df2 4use lib 't/lib';
25c87f5c 5use Test::More;
6
7use Package::Stash;
8
9{
10 package Foo;
11 use constant FOO => 1;
12 use constant BAR => \1;
13 use constant BAZ => [];
14 use constant QUUX => {};
15 use constant QUUUX => sub { };
16 sub normal { }
17 sub stub;
18 sub normal_with_proto () { }
19 sub stub_with_proto ();
20
21 our $SCALAR;
f7543739 22 our $SCALAR_WITH_VALUE = 1;
25c87f5c 23 our @ARRAY;
24 our %HASH;
25}
26
27my $stash = Package::Stash->new('Foo');
9e60e8ff 28{ local $TODO = ($] < 5.010 || $Package::Stash::IMPLEMENTATION eq 'PP')
29 ? "undef scalars aren't visible on 5.8, or from pure perl at all"
30 : undef;
15c104e2 31ok($stash->has_symbol('$SCALAR'), '$SCALAR');
d551a208 32}
15c104e2 33ok($stash->has_symbol('$SCALAR_WITH_VALUE'), '$SCALAR_WITH_VALUE');
34ok($stash->has_symbol('@ARRAY'), '@ARRAY');
35ok($stash->has_symbol('%HASH'), '%HASH');
25c87f5c 36is_deeply(
15c104e2 37 [sort $stash->list_all_symbols('CODE')],
25c87f5c 38 [qw(BAR BAZ FOO QUUUX QUUX normal normal_with_proto stub stub_with_proto)],
39 "can see all code symbols"
40);
41
15c104e2 42$stash->add_symbol('%added', {});
43ok(!$stash->has_symbol('$added'), '$added');
44ok(!$stash->has_symbol('@added'), '@added');
45ok($stash->has_symbol('%added'), '%added');
f7543739 46
15c104e2 47my $constant = $stash->get_symbol('&FOO');
cb4df463 48is(ref($constant), 'CODE', "expanded a constant into a coderef");
49
2b968103 50# ensure get doesn't prevent subsequent vivification (not sure what the deal
51# was here)
52is(ref($stash->get_symbol('$glob')), '', "nothing yet");
53is(ref($stash->get_or_add_symbol('$glob')), 'SCALAR', "got an empty scalar");
54
25c87f5c 55done_testing;