YAML-Tiny
view release on metacpan or search on metacpan
t/lib/TestML/Tiny.pm view on Meta::CPAN
use 5.008001; use strict; use warnings;
package TestML::Tiny;
$TestML::Tiny::VERSION = 0.000001;
use Carp();
use Test::More 0.88 ();
# use XXX;
sub import {
strict->import;
warnings->import;
}
sub new {
my $self = bless { @_[1..$#_] }, $_[0];
my $testml = $self->_get_testml;
my $bridge = $self->_get_bridge;
$self->{runtime} ||= TestML::Tiny::Runtime->new(
bridge => $bridge,
);
my $compiler = TestML::Tiny::Compiler->new(
$self->{version} ? (version => $self->{version}) : (),
);
$self->{function} = $compiler->compile($testml);
return $self;
}
sub run {
my ($self) = @_;
my $runtime = $self->{runtime} || '';
Carp::croak "Missing or invalid runtime object for TestML::Tiny::run()"
unless defined($runtime) and ref($runtime) eq 'TestML::Tiny::Runtime';
$runtime->run;
}
sub _get_testml {
my ($self) = @_;
my $testml = $self->{testml}
or Carp::croak "TestML object requires a testml attribute";
$testml = $self->_slurp($testml)
if $testml !~ /\n/;
return $testml;
}
sub _get_bridge {
my ($self) = @_;
my $bridge = $self->{bridge} || 'main';
return $bridge if ref $bridge;
eval "require $bridge";
Carp::croak $@ if $@ and $@ !~ /^Can't locate /;
return (
defined(&{"${bridge}::new"})
? $bridge->new
: bless {}, $bridge
);
}
sub _slurp {
open my $fh, "<:raw:encoding(UTF-8)", $_[1]
or die "Can't open $_[1] for input";
local $/;
<$fh>;
}
#------------------------------------------------------------------------------
=comment
=for :stopwords TestML
::Runtime -- Run a TestML Function
( run in 0.759 second using v1.01-cache-2.11-cpan-5735350b133 )