I've hacked my copy of Test::More to add eq_hash_skip.
=item B<eq_hash_skip> eq_hash_skip(\%this, \%that, \@keys_to_ignore); Determines if the two hashes contain the same keys and values, not counting any hash keys in the list of keys to ignore. This is a deep c +heck. Note that the list of keys to ignore is only considered against the top level hashes. Deeper structures must match exactly. If the list of keys to ignore is missing or empty, this is identical to eq_hash. =cut sub eq_hash_skip { my ($a1, $a2, $skip) = @_; return eq_hash($a1, $a2) unless (defined($skip) && @$skip); return 1 if $a1 eq $a2; my %keys_of_interest = map {($_, 1)} keys %$a1, keys %$a2; delete @keys_of_interest{@$skip}; my $ok = 1; foreach my $k (keys %keys_of_interest) { return 0 unless exists $a1->{$k}; return 0 unless exists $a2->{$k}; my($e1, $e2) = ($a1->{$k}, $a2->{$k}); $ok = _deep_check($e1, $e2); last unless $ok; } return $ok; }
I've also added some tests to More.t to test this out :)
I'll be corresponding with Schwern, but for the instant, I am using it this way:
<CODE> ok eq_hash(\%hash1, \%hash2, qw/ key1 key2 / ), 'test name'; <CODE>
yours,
Michael
In reply to Re: Re: Test::More extension idea
by herveus
in thread Test::More extension idea
by herveus
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |