NAME
Test::Proto::HashRef - Test Prototype for Hash References.
SYNOPSIS
Test::Proto::HashRef->new->ok({a=>undef,b=>2,c=>'three'}); # ok
Test::Proto::HashRef->new->ok({}); # ok
Test::Proto::HashRef->new->is_empty->ok({}); # still ok
Test::Proto::HashRef->new->is_deeply({a=>undef,'c'=>"three", b=>2,})->ok({a=>undef,b=>2,c=>'three'}); # also ok
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
See Test::Proto::Base for documentation on common methods.
keys
pHr->keys(['a'])->ok({a=>1}, 'Keys of {a=>1} returns ['a']');
Gets the keys of the hash, and validates them as an arrayref. Note that the keys are not likely to be sorted in nay particular order.
values
pHr->values([1])->ok({a=>1}, 'Keys of {a=>1} returns [1]');
Gets the values of the hash, and validates them as an arrayref. Note that the values are not likely to be sorted in nay particular order.
key_value
pHr->key_value('a', pSt->is_eq('b'))->ok({a=>'b',c=>4});
Gets the value of a particular hash key, and validates it, upgrading the expected value as necessary.
key_values
pHr->key_value({'a' => pSt->is_eq('b'), c=>4})->ok({a=>'b',c=>4, e=>'VI'});
Gets the value of several hash keys, and validates them against the value, upgrading the expected value as necessary. Extra hash keys are ignored.
allow_only
pHr->key_value({'a' => pSt->is_eq('b'), c=>4, g=>'eight'})->ok({a=>'b',c=>4, e=>'VI'});
Like key_values
but all values in the prototype hash are optional, i.e. 'if present, they must be this'.
only_key_values
pHr->key_value({'a' => pSt->is_eq('b'), c=>4})->ok({a=>'b',c=>4});
Like key_values
but no keys are permitted except those specified. This is effectively a deep equality check for the hash, except the key values can be prototypes rather than values.
is_empty
pHr->is_empty->ok({});
Fails if the hash is not empty, otherwise succeeds.
OTHER INFORMATION
For author, version, bug reports, support, etc, please see Test::Proto.