Test-Modern
view release on metacpan or search on metacpan
lib/Test/Modern.pm view on Meta::CPAN
ok is isnt like unlike is_deeply cmp_ok new_ok isa_ok can_ok
pass fail
diag note explain
subtest
skip todo_skip plan done_testing BAIL_OUT
)],
fatal => [qw( exception )],
warnings => [qw( warnings warning )],
api => [qw( public_ok import_ok class_api_ok )],
moose => [qw( does_ok )],
pod => [qw(
pod_file_ok all_pod_files_ok
pod_coverage_ok all_pod_coverage_ok
)],
versions => [qw( version_ok version_all_ok version_all_same )],
strings => [qw(
is_string is_string_nows like_string unlike_string
contains_string lacks_string
)],
clean => [qw( namespaces_clean )],
deep => [qw( cmp_deeply TD )],
deeper => [qw(
cmp_deeply TD
ignore methods listmethods shallow noclass useclass
re superhashof subhashof bag superbagof subbagof
set supersetof subsetof all any obj_isa array_each
str num bool code
)],
deprecated => [qw( use_ok require_ok eq_array eq_hash eq_set )],
%HINTS,
);
our @EXPORT_OK = (
'object_ok', 'shouldnt_warn', 'is_fastest',
map(@$_, grep { ref($_) eq 'ARRAY' } values(%EXPORT_TAGS)),
);
our @EXPORT = (
'object_ok',
map(@{$EXPORT_TAGS{$_}}, qw(more fatal warnings api moose strings deep clean)),
);
# Here we check to see if the import list consists
# only of hints. If so, we add @EXPORT to the list.
# This means that `use Test::Modern -extended;`
# won't result in the standard exports getting
# suppressed.
#
sub import
{
my $me = shift;
my $symbols = grep {
ref($_) ? 0 : # refs are not symbols
/\A[:-](\w+)\z/ && $HINTS{$1} ? 0 : # hints are not symbols
1; # everything else is
} @_;
push @_, @EXPORT if $symbols == 0;
my $globals = ref($_[0]) eq 'HASH' ? shift() : {};
$globals->{into_file} = (caller)[1] unless ref($globals->{into});
unshift @_, $me, $globals;
goto \&Exporter::Tiny::import;
}
sub _exporter_validate_opts
{
my $me = shift;
my ($opts) = @_;
my $caller = $opts->{into};
# Exporter::Tiny can't handle exporting variables
# at the moment. :-(
#
{
no strict qw(refs);
(ref($caller) ? $caller->{'$TODO'} : *{"$caller\::TODO"})
= \$Test::More::TODO;
}
return if ref $caller;
'strict'->import::into($caller);
'warnings'->import::into($caller);
$me->_setup_inc($opts);
}
sub _setup_inc
{
shift;
my ($opts) = @_;
return unless exists($opts->{into_file});
my $dir = do {
my ($v, $d) = 'File::Spec'->splitpath($opts->{into_file});
'File::Spec'->catpath($v, $d, '');
};
my $found;
LEVEL: for my $i (0..5)
{
my $t_dir = 'File::Spec'->catdir($dir, (('File::Spec'->updir) x $i), 't');
my $xt_dir = 'File::Spec'->catdir($dir, (('File::Spec'->updir) x $i), 'xt');
-d $t_dir or -d $xt_dir or next LEVEL;
my $tlib_dir = 'File::Spec'->catdir($t_dir, 'lib');
if (-d $tlib_dir)
{
require lib;
'lib'->import(Cwd::abs_path $tlib_dir);
$found++;
}
last LEVEL if $found;
}
if ($opts->{lib} and not $found)
{
( run in 1.352 second using v1.01-cache-2.11-cpan-302cb4679cc )