Test-Stream
view release on metacpan or search on metacpan
lib/Test/Stream/Plugin/Core.pm view on Meta::CPAN
use Scalar::Util qw/reftype refaddr/;
use Carp qw/croak confess carp/;
use Test::Stream::Sync();
use Test::Stream::Table qw/table/;
use Test::Stream::Context qw/context/;
use Test::Stream::Util qw{
protect
get_stash
parse_symbol
update_mask
render_ref
};
use Test::Stream::Exporter qw/import default_exports/;
default_exports qw{
ok pass fail
diag note
plan skip_all done_testing
BAIL_OUT
todo skip
can_ok isa_ok DOES_ok ref_ok
imported_ok not_imported_ok
ref_is ref_is_not
set_encoding
cmp_ok
};
no Test::Stream::Exporter;
sub set_encoding {
my $enc = shift;
my $format = Test::Stream::Sync->stack->top->format;
unless ($format && eval { $format->can('encoding') }) {
$format = '<undef>' unless defined $format;
croak "Unable to set encoding on formatter '$format'";
}
$format->encoding($enc);
}
sub pass {
my ($name) = @_;
my $ctx = context();
$ctx->ok(1, $name);
$ctx->release;
return 1;
}
sub fail {
my ($name, @diag) = @_;
my $ctx = context();
$ctx->ok(0, $name, \@diag);
$ctx->release;
return 0;
}
sub ok($;$@) {
my ($bool, $name, @diag) = @_;
my $ctx = context();
$ctx->ok($bool, $name, \@diag);
$ctx->release;
return $bool ? 1 : 0;
}
sub ref_is($$;$@) {
my ($got, $exp, $name, @diag) = @_;
my $ctx = context();
$got = '<undef>' unless defined $got;
$exp = '<undef>' unless defined $exp;
my $bool = 0;
if (!ref($got)) {
$ctx->ok(0, $name, ["First argument '$got' is not a reference", @diag]);
}
elsif(!ref($exp)) {
$ctx->ok(0, $name, ["Second argument '$exp' is not a reference", @diag]);
}
else {
# Don't let overloading mess with us.
$bool = refaddr($got) == refaddr($exp);
$ctx->ok($bool, $name, ["'$got' is not the same reference as '$exp'", @diag]);
}
$ctx->release;
return $bool ? 1 : 0;
}
sub ref_is_not($$;$) {
my ($got, $exp, $name, @diag) = @_;
my $ctx = context();
$got = '<undef>' unless defined $got;
$exp = '<undef>' unless defined $exp;
my $bool = 0;
if (!ref($got)) {
$ctx->ok(0, $name, ["First argument '$got' is not a reference", @diag]);
}
elsif(!ref($exp)) {
$ctx->ok(0, $name, ["Second argument '$exp' is not a reference", @diag]);
}
else {
# Don't let overloading mess with us.
$bool = refaddr($got) != refaddr($exp);
$ctx->ok($bool, $name, ["'$got' is the same reference as '$exp'", @diag]);
}
$ctx->release;
return $bool ? 1 : 0;
}
sub diag {
my $ctx = context();
$ctx->diag( join '', @_ );
$ctx->release;
}
( run in 0.499 second using v1.01-cache-2.11-cpan-524268b4103 )