Commit | Line | Data |
aa9c54a3 |
1 | #!/usr/bin/env perl |
2 | use strict; |
3 | use warnings; |
4 | use lib 't/lib'; |
5 | use Test::More; |
6 | use Test::Fatal; |
7 | |
8 | use B; |
9 | use Package::Stash; |
10 | use Scalar::Util qw(reftype); |
11 | use Symbol; |
12 | |
13 | my $Bar = Package::Stash->new('Bar'); |
14 | |
15 | my $pviv = 3; |
16 | $pviv =~ s/3/4/; |
17 | isa_ok(B::svref_2object(\$pviv), 'B::PVIV'); |
18 | is(exception { $Bar->add_symbol('$pviv', \$pviv) }, undef, |
19 | "can add PVIV values"); |
20 | |
21 | my $pvnv = 4.5; |
22 | $pvnv =~ s/4/5/; |
23 | isa_ok(B::svref_2object(\$pvnv), 'B::PVNV'); |
24 | is(exception { $Bar->add_symbol('$pvnv', \$pvnv) }, undef, |
25 | "can add PVNV values"); |
26 | |
27 | my $pvmg = "foo"; |
28 | bless \$pvmg, 'Foo'; |
29 | isa_ok(B::svref_2object(\$pvmg), 'B::PVMG'); |
30 | is(exception { $Bar->add_symbol('$pvmg', \$pvmg) }, undef, |
31 | "can add PVMG values"); |
32 | |
33 | my $regexp = qr/foo/; |
1c6fd0d3 |
34 | isa_ok(B::svref_2object($regexp), ($] < 5.012 ? 'B::PVMG' : 'B::REGEXP')); |
aa9c54a3 |
35 | is(exception { $Bar->add_symbol('$regexp', $regexp) }, undef, |
36 | "can add REGEXP values"); |
37 | |
38 | my $pvgv = Symbol::gensym; |
39 | isa_ok(B::svref_2object($pvgv), 'B::GV'); |
40 | isnt(exception { $Bar->add_symbol('$pvgv', $pvgv) }, undef, |
41 | "can't add PVGV values"); |
42 | |
43 | my $pvlv = "foo"; |
44 | isa_ok(B::svref_2object(\substr($pvlv, 0, 1)), 'B::PVLV'); |
45 | is(exception { $Bar->add_symbol('$pvlv', \substr($pvlv, 0, 1)) }, undef, |
46 | "can add PVLV values"); |
47 | |
48 | my $vstring = v1.2.3; |
1c6fd0d3 |
49 | is(reftype(\$vstring), ($] < 5.010 ? 'SCALAR' : 'VSTRING')); |
aa9c54a3 |
50 | is(exception { $Bar->add_symbol('$vstring', \$vstring) }, undef, |
51 | "can add vstring values"); |
52 | |
53 | done_testing; |