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 )