78 lines
1.6 KiB
Perl
78 lines
1.6 KiB
Perl
use strict;
|
|
use warnings;
|
|
no warnings 'once';
|
|
use Test::More;
|
|
use Test::Fatal;
|
|
use Data::Dumper;
|
|
|
|
use Sub::Quote qw(
|
|
quote_sub
|
|
unquote_sub
|
|
quoted_from_sub
|
|
);
|
|
|
|
{
|
|
my $foo = quote_sub '{}';
|
|
my $foo_string = "$foo";
|
|
undef $foo;
|
|
|
|
is quoted_from_sub($foo_string), undef,
|
|
"quoted subs don't leak";
|
|
|
|
Sub::Quote->CLONE;
|
|
ok !exists $Sub::Quote::QUOTED{$foo_string},
|
|
'CLONE cleans out expired entries';
|
|
}
|
|
|
|
{
|
|
my $foo = quote_sub '{}';
|
|
my $foo_string = "$foo";
|
|
Sub::Quote->CLONE;
|
|
undef $foo;
|
|
|
|
is quoted_from_sub($foo_string), undef,
|
|
"CLONE doesn't strengthen refs";
|
|
}
|
|
|
|
{
|
|
my $foo = quote_sub '{}';
|
|
my $foo_string = "$foo";
|
|
my $foo_info = quoted_from_sub($foo_string);
|
|
undef $foo;
|
|
|
|
is exception { Sub::Quote->CLONE }, undef,
|
|
'CLONE works when quoted info saved externally';
|
|
ok exists $Sub::Quote::QUOTED{$foo_string},
|
|
'CLONE keeps entries that had info saved';
|
|
}
|
|
|
|
{
|
|
my $foo = quote_sub '{}';
|
|
my $foo_string = "$foo";
|
|
my $foo_info = $Sub::Quote::QUOTED{$foo_string};
|
|
undef $foo;
|
|
|
|
is exception { Sub::Quote->CLONE }, undef,
|
|
'CLONE works when quoted info kept alive externally';
|
|
ok !exists $Sub::Quote::QUOTED{$foo_string},
|
|
'CLONE removes expired entries that were kept alive externally';
|
|
}
|
|
|
|
{
|
|
my $foo = quote_sub '{}';
|
|
my $foo_string = "$foo";
|
|
my $sub = unquote_sub $foo;
|
|
my $sub_string = "$sub";
|
|
|
|
Sub::Quote->CLONE;
|
|
|
|
ok quoted_from_sub($sub_string),
|
|
'CLONE maintains entries referenced by unquoted sub';
|
|
|
|
undef $sub;
|
|
ok quoted_from_sub($foo_string)->[3],
|
|
'unquoted sub still available if quoted sub exists';
|
|
}
|
|
|
|
done_testing;
|