6fe52c4370
git-cpan-module: SOAP-WSDL git-cpan-version: 2.00_01 git-cpan-authorid: MKUTTER git-cpan-file: authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_01.tar.gz
64 lines
1.5 KiB
Perl
64 lines
1.5 KiB
Perl
package Test::SOAPMessage;
|
|
|
|
use strict;
|
|
|
|
use SOAP::Lite;
|
|
use Test::Differences;
|
|
use Tie::IxHash;
|
|
|
|
use base qw/Exporter/;
|
|
|
|
our @EXPORT = qw/soap_eq_or_diff/;
|
|
|
|
sub soap_eq_or_diff
|
|
{
|
|
my $got = shift;
|
|
my $expected = shift;
|
|
my $message = shift;
|
|
my $soapGot = SOAP::Deserializer->deserialize( $got );
|
|
my $soapExpected = SOAP::Deserializer->deserialize( $expected );
|
|
|
|
return eq_or_diff(
|
|
unlather( $soapGot ),
|
|
unlather( $soapExpected ),
|
|
$message
|
|
);
|
|
}
|
|
|
|
sub unlather
|
|
{
|
|
my $som = shift;
|
|
my $path = shift || '/Envelope/Body/[1]';
|
|
my $data = shift;
|
|
|
|
unless ( $data )
|
|
{
|
|
my %hashData = ();
|
|
tie (%hashData, q/Tie::IxHash/);
|
|
$data = \%hashData;
|
|
}
|
|
|
|
my $value;
|
|
my $tag;
|
|
my $i = 1;
|
|
while( $som->match("$path/[$i]") )
|
|
{
|
|
$tag = $som->dataof->name();
|
|
$data ||= {};
|
|
$value = unlather($som,$path.'/'. '[' . $i . ']' ) || $som->valueof("$path/[$i]");
|
|
if ($data->{ $tag })
|
|
{
|
|
$data->{ $tag } = [ $data->{ $tag } ] unless ( ref ( $data->{ $tag } ) eq 'ARRAY' );
|
|
push @{ $data->{ $tag } }, $value;
|
|
}
|
|
else
|
|
{
|
|
$data->{ $tag } = $value;
|
|
}
|
|
$i++;
|
|
}
|
|
$data ||= $som->valueof($path);
|
|
return $data;
|
|
}
|
|
|
|
1; |