Context-Singleton
view release on metacpan or search on metacpan
t/lib/Test/Spec/Util.pm view on Meta::CPAN
use v5.10;
use strict;
use warnings;
use feature 'state';
package Test::Spec::Util;
our $VERSION = v1.0.0;
use parent 'Exporter';
use Hash::Util qw[ ];
use Ref::Util qw[ is_coderef ];
use Scalar::Util qw[ ];
use Sub::Install qw[ ];
use Sub::Name qw[ ];
use Sub::Override qw[ ];
use Sub::Uplevel qw[ ];
use Test::More 0.94;
use Test::Deep;
use Test::Exception;
our %context;
our $context_accessor = 'Test::Spec::Util::Shared';
our @EXPORT = (
'export',
'example',
'as',
'shared',
@Test::More::EXPORT,
@Test::Exception::EXPORT,
@Test::Deep::EXPORT,
);
sub export {
my ($name, $coderef) = @_;
my $caller = caller;
Sub::Install::install_sub({
code => $coderef,
as => $name,
into => $caller,
});
Sub::Name::subname "${caller}::${name}", $coderef;
{
no strict 'refs';
(state $caller_cache)->{$caller} //= push @{ "${caller}::ISA" }, 'Exporter';
push @{ "${caller}::EXPORT" }, $name;
}
1;
}
sub as (&) {
shift
}
sub example {
my ($name, $coderef) = @_;
my $default_title = $name;
$default_title =~ s/_/ /g;
@_ = ($name, sub { unshift @_, $default_title unless @_ % 2; goto $coderef });
goto &export;
}
sub shared (;$) : lvalue {
( run in 1.665 second using v1.01-cache-2.11-cpan-39bf76dae61 )