1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
use Test2::Bundle::Extended -target => 'Test2::Util::Stash';
use Test2::Util::Stash qw{
get_stash
get_glob
get_symbol
parse_symbol
purge_symbol
slot_to_sig sig_to_slot
};
imported_ok qw{
get_stash
get_glob
get_symbol
parse_symbol
purge_symbol
slot_to_sig sig_to_slot
};
is(slot_to_sig('CODE'), '&', "Code slot sigil");
is(slot_to_sig('SCALAR'), '$', "Scalar slot sigil");
is(slot_to_sig('HASH'), '%', "Hash slot sigil");
is(slot_to_sig('ARRAY'), '@', "Array slot sigil");
is(sig_to_slot('&'), 'CODE', "Code slot sigil");
is(sig_to_slot('$'), 'SCALAR', "Scalar slot sigil");
is(sig_to_slot('%'), 'HASH', "Hash slot sigil");
is(sig_to_slot('@'), 'ARRAY', "Array slot sigil");
is(get_stash('main'), string(\%main::), "got stash");
is(get_glob('main::ok'), \*main::ok, "got glob ref");
is(
parse_symbol("foo"),
{
name => 'foo',
sigil => '&',
type => 'CODE',
symbol => '&main::foo',
package => 'main',
},
"Parsed simple sub"
);
is(
parse_symbol("&foo"),
{
name => 'foo',
sigil => '&',
type => 'CODE',
symbol => '&main::foo',
package => 'main',
},
"Parsed simple sub with sigil"
);
is(
parse_symbol("&::foo"),
{
name => 'foo',
sigil => '&',
type => 'CODE',
symbol => '&main::foo',
package => 'main',
},
"Parsed ::sub with sigil"
);
is(
parse_symbol("&Foo::Bar::foo"),
{
name => 'foo',
sigil => '&',
type => 'CODE',
symbol => '&Foo::Bar::foo',
package => 'Foo::Bar',
},
"Parsed sub with package"
);
is(
parse_symbol('$foo'),
{
name => 'foo',
sigil => '$',
type => 'SCALAR',
symbol => '$main::foo',
package => 'main',
},
"Parsed scalar"
);
is(
parse_symbol('%foo'),
{
name => 'foo',
sigil => '%',
type => 'HASH',
symbol => '%main::foo',
package => 'main',
},
"Parsed hash"
);
is(
parse_symbol('@foo'),
{
name => 'foo',
sigil => '@',
type => 'ARRAY',
symbol => '@main::foo',
package => 'main',
},
"Parsed array"
);
is(
parse_symbol('@foo', 'XYZ::ABC'),
{
name => 'foo',
sigil => '@',
type => 'ARRAY',
symbol => '@XYZ::ABC::foo',
package => 'XYZ::ABC',
},
"Parsed with custom package"
);
like(
dies { parse_symbol('ABC::foo', 'XYZ') },
qr/Symbol package \(ABC\) and package argument \(XYZ\) do not match/,
"Got exception"
);
like(
dies { parse_symbol({package => 'ABC'}, 'XYZ') },
qr/Symbol package \(ABC\) and package argument \(XYZ\) do not match/,
"Got exception"
);
sub xxx { 'xxx' }
our $foo = 'xyz';
ref_is(get_symbol('xxx'), \&xxx, "got ref for &xxx");
ref_is(get_symbol('$foo'), \$foo, 'got ref for $foo');
is(get_symbol('blah'), undef, 'no ref for &blah');
is(get_symbol('$blah'), undef, 'no ref for $blah');
purge_symbol('xxx');
ok(!__PACKAGE__->can('xxx'), "removed &xxx symbol test 1");
is(get_symbol('xxx'), undef, "removed &xxx symbol test 2");
done_testing;
|