On Thursday 19 June 2003 15:15, Enrico Sorcinelli wrote:
> Why not to hack into Test::More in order to improve it and fix its bugs?
> Test::More is often used and I think that your patches will be welcome!
I did, my patches were accepted by Michael Schwern months ago but he hasn't
released a new version, I think he's pretty busy at the moment.
Anyway, Test::Deep does huge amounts more than Test::More.
Simple usage is much like is_deeply():
cmp_deeply($hash, { a=> [1, 2, 3], b => \'hello'});
More advanced features:
cmp_deeply($set, set(1, 2, 3, 4));
will make sure that $set is an array ref which is setwise equal to (1, 2, 3,
4) so any of the following would be ok: [1, 2, 3, 4] or [4, 2, 3, 1] or [4,
4, 3, 2, 4, 2, 1, 3, 2, 1]
cmp_deepy($hash,
{
set1 => set(1, 2, 3, 4),
set2 => set(5, 6, 7, 8),
}
);
makes sure that $hash has 2 keys and that
$hash->{"set1"} is setwise equal to (1, 2, 3, 4) and
$hash->{"set2"} is setwise equal to (5..8)
cmp_deepy($set_of_sets, set(
set(1..5),
set(6..10),
);
give an OK for [[1..5], [6..10]] or [[10..6], [5..1]] and it would also pass
[[1..5, 2, 3, 2,4, ,5],[6..10, 7, 6, 8,], [5..1]].
cmp_deeply($bag_of_objects,
bag(
methods(getName => "a"),
methods(getName => "b"),
methods(getName => "c"),
methods(getName => "d"),
re(qr/banana/),
)
)
would make sure that $bag_of_objects is an array ref with 5 items, 1 of which
is a string containing the word "banana" and the other 4 are objects and
these objects return "a", "b", "c", "d" when the getName method is called.
The order in which these elements occur is ignored.
cmp_deeply($father,
methods(
getName => re(qr/^\w+\s+\w+$/),
getChildren => all(isa("Animal::Human")),
getPets => all(isa("Animal")
)
);
is the same as testing
$father->getName =~ /^\w+\s+\w+$/;
and
foreach my $child (@{$father->getChildren})
{
$child->isa("Animal::Human");
}
except it's using a declarative syntax which (hopefully) makes it's easier to
understand and maintain. It will also give sensible error reports and unlike
the code above will not explode if $father->getChildren->[5] is not actually
a blessed reference, instead it will just tell you about it in the test
diagnostics.
So it's not something that can be hacked into Test::More,
F