Catalyst-Plugin-ErrorCatcher-ActiveMQ-Stomp
view release on metacpan or search on metacpan
t/lib/Test/ActiveMQ.pm view on Meta::CPAN
return 0;
}
# $predicate = $self->preprocess_data($predicate);
#my $full_want = $self->preprocess_data($data);
my $full_want = $data; #$self->preprocess_data($data);
for my $msg_file (@messages) {
my $payload = $self->_load_message($msg_file);
next unless Data::Overlay::overlay($payload, $predicate);
# So the predicate matched, not see if the payload matches.
if ( Data::Overlay::overlay($payload, $full_want) ) {
$self->builder->ok(1, $comment);
return 1;
}
# overlay didn't match! give a eq_or_diff which should give a useful-ish output
$self->builder->diag("\n*\n* Please Note:\n* The diff below is not sensible.\n* The RHS column is just the overlay\n*\n");
return eq_or_diff($payload, $full_want, $comment);
}
$self->builder->ok(0, $comment);
#
my $dumper = Devel::PartialDump->new(max_depth => 5);
$self->builder->diag("No ActiveMQ messages found matching " . $dumper->dump($predicate));
return 0;
}
sub _load_message {
t/lib/Test/ActiveMQ.pm view on Meta::CPAN
}
# Data::Overlay from Konobi
package Data::Overlay;
use strict;
use warnings;
use Scalar::Util qw(reftype);
sub overlay {
my ($data, $overlay) = @_;
my $level = 0;
if(reftype($overlay) eq 'HASH'){
return overlay_hash($data, $overlay, $level+2);
} elsif(reftype($overlay) eq 'ARRAY'){
return overlay_array($data, $overlay, $level+2);
} else {
return ($data eq $overlay) ? 1 : 0;
}
}
sub overlay_hash {
my ($data, $overlay, $level) = @_;
for my $k (keys %$overlay){
my $overlay_item = $overlay->{$k};
my $reftype = reftype($overlay_item) || '';
if ($reftype eq 'SCALAR' && $$overlay_item eq 'Missing') {
# foo => \'Missing' says we *want* this value to not be present in
# $data
return 0 if exists $data->{$k};
} elsif ($reftype eq 'CODE') {
# foo => sub { return 1 if ($_[0]); return 0 } says we have code to decide
# if its good or bad
return &{$overlay_item}($data->{$k});
} else {
return 0 if !exists $data->{$k};
}
my $data_item = $data->{$k};
if( !ref($overlay_item) ){
return 0 if !($data_item eq $overlay_item);
next;
}
if(reftype($overlay_item) eq 'HASH'){
return 0 if !overlay_hash($data_item, $overlay_item, $level+2);
} elsif (reftype($overlay_item) eq 'ARRAY'){
return 0 if !overlay_array($data_item, $overlay_item, $level+2);
}
}
return 1;
}
sub overlay_array {
my ($data, $overlay, $level) = @_;
# Go through each item in the overlay and compare against each element of
# the data
my $all_items_found = 1;
for my $item (@$overlay){
my $overlay_item_found = 0;
INT: for my $data_entry (@$data){
if(!ref($item)){
$overlay_item_found = ($item eq $data_entry) ? 1 : 0;
} elsif(reftype($item) eq 'HASH'){
$overlay_item_found = overlay_hash($data_entry, $item, $level+2);
} elsif(reftype($item) eq 'ARRAY'){
$overlay_item_found = overlay_array($data_entry, $item, $level+2);
}
last INT if $overlay_item_found;
}
# if we currently think all items up to now are found then we
if($all_items_found){
$all_items_found = $overlay_item_found ? 1 : 0;
}
if(!$all_items_found){
last;
}
}
return $all_items_found;
}
( run in 1.091 second using v1.01-cache-2.11-cpan-49f99fa48dc )