NAME
Test::Proto::HashRef - Test Prototype for Hash References.
SYNOPSIS
my $p = Test::Proto::Base->new->is_eq(-5);
$p->ok ($temperature) # will fail unless $temperature is -5
$p->ok ($score) # you can use the same test multple times
ok($p->validate($score)) # If you like your "ok"s first
This is a test prototype which requires that the value it is given is defined and is a hashref. It provides methods for interacting with hashrefs. (To test hashes, make them hashrefs and test them with this module)
METHODS
new
my $test = Test::Proto::Base->new();
Creates a new Test::Proto::Base object.
initialise
When new
is called, initialise
is called on the object just before it is returned. This mostly exists so that subclasses wishing to add initial tests do not have to overload new
.
validate
my $result = $p->validate($input);
warn $result unless $result;
Runs through the tests in the prototype and checks that they all pass. If they do, returns true. If not, returns the appropriate fail or exception object.
ok
my $result = $p->ok($input, '$input must be valid');
Like validate but attached to Test::Builder, like Test::More's ok
.
add_test
my $result = $p->add_test(sub{return $_[0] ne '';})->ok($input, '$input must be nonempty');
Adds a test to the end of the list of tests to be performed when validate
or ok
is called. It is normally better to use try
, as that wraps your code in an eval
block.
upgrade
my $pInt = $p->upgrade(qr/^[a-z]+$/);
my $pAnswer = $p->upgrade(42);
Upgrading is an internal funciton but is documented here as it as an important concept. Basically, it is a Do What I Mean function for parameters to many arguments, e.g. if you require an array value to be qr/^[a-z]+$/
, then rather than expecting an identical regex object, the regex is 'upgraded' to a Test::Proto::Base object with a single test: is_like(qr/^[a-z]+$/)
. This works for strings, arrayrefs and hashrefs too.
is_a
p->is_a('SCALAR')->ok('String');
p->is_a('HASH')->ok({a=>1});
p->is_a('XML::LibXML::Node')->ok(XML::LibXML::Element->new());
p->is_a('XML::LibXML::Element')->ok(XML::LibXML::Element->new());
Like Perl's ref
and isa
rolled into one.
is_also
my $nonempty = p->is_like(qr/\w+/);
my $lowercase = p->is_unlike(qr/[A-Z]/)->is_also($nonempty);
Allows you to effectively import all the tests of another prototype.
This is not to be confused with is_a
!
is_defined
p->is_defined->ok($input);
Succeeds unless the value is undef
.
is_eq
p->is_eq('ONION')->ok($input);
Tests for string equality.
is_ne
p->is_ne('GARLIC')->ok($input);
Tests for string inequality.
is_deeply
p->is_deeply({ingredient=>'ONION', qty=>3})->ok($input);
Recursively test using Test::More::is_deeply
is_like
p->is_like(qr/^[a-z]+$/)->ok($input);
Tests if the value matches a regex.
is_unlike
p->is_unlike(qr/^[a-z]+$/)->ok($input);
Tests if the value fails to match a regex.
clone
my $keyword = p->is_unlike(qr/^[a-z]+$/);
$keyword->clone->is_ne('undef')->ok($perlword);
$keyword->clone->is_ne('null')->ok($jsonword);
Creates a clone of the current Test::Proto::Base
object. Child tests are not recursively cloned, they remain references, but the list of tests can be added to independently.
as_string
p->as_string(p->is_like(qr/<html>/))->ok($input);
p->as_string(qr/<html>/)->ok($input);
Coerces the value to a string, then tests the result against the prototpye which is the first argument.
as_number
p->as_number(p->eq(cNum,42))->ok($input);
p->as_number(42)->ok($input);
Coerces the value to a number, then tests the result against the prototpye which is the first argument.
as_bool
p->as_bool(1)->ok($input);
Coerces the value to a boolean, then tests the result against the prototpye which is the first argument.
eq, ne, gt, lt, ge, lt, le
p->ge(c, 'a')->ok('b');
p->ge(cNum, 2)->ok(10);
Tests sort order against a comparator. The first argument is a comparison function, see Test::Proto::Compare
. The second argument is the comparator.
try
$p->try(sub{return $_[0] ne '';})->ok($input, '$input must be nonempty');
Execute arbitrary code.
fail
This is a subroutine which is an alias for Test::Proto::Fail-
new()>.
exception
This is a subroutine which is an alias for Test::Proto::Exception-
new()>.
OTHER INFORMATION
For author, version, bug reports, support, etc, please see Test::Proto.