package FaultDeserializer; use strict; use warnings; use SOAP::WSDL::SOAP::Typelib::Fault11; sub new { bless {}, shift } sub deserialize { die SOAP::WSDL::SOAP::Typelib::Fault11->new( {} ); } package main; use strict; use warnings; use Test::More tests => 16; use SOAP::WSDL::Transport::Loopback; use Scalar::Util qw(blessed); use_ok qw(SOAP::WSDL::Client); { no warnings qw(redefine once); *SOAP::WSDL::Factory::Transport::get_transport = sub { my ( $self, $url, %args_of ) = @_; if (%args_of) { is $args_of{foo}, 'bar'; } }; } sub test_client_basics { ok my $client = SOAP::WSDL::Client->new(); ok $client = SOAP::WSDL::Client->new( {proxy => 'http://localhost',} ); is $client->get_content_type(), 'text/xml; charset=utf-8'; is $client->get_endpoint(), 'http://localhost'; $client->set_proxy( 'http://localhost', foo => 'bar', ); #TODO is this behaviour still required? declare as deprecated and remove... $client->set_proxy( ['http://localhost', foo => 'bar',] ); is $client->get_proxy(), $client->get_transport(), 'get_proxy returns same as get_transport'; ok $client->set_soap_version('1.1'); is $client->get_soap_version(), '1.1'; $client->set_deserializer_args( {strict => 0} ); is $client->get_deserializer_args()->{strict}, 0; } sub test_call { my $client = SOAP::WSDL::Client->new(); $client->no_dispatch(1); $client->set_serializer('main'); my $serialize = $client->call( {operation => 'testMethod'}, {foo => 'bar'}, {bar => 'baz'} ); is $serialize->{body}->{foo}, 'bar'; is $serialize->{header}->{bar}, 'baz'; # Old calling style compatibility test - foo => bar is body... $serialize = $client->call( {operation => 'testMethod'}, foo => 'bar' ); is $serialize->{body}->{foo}, 'bar'; # Old calling style compatibility test - foo => bar is body... $serialize = $client->call( 'testMethod', foo => 'bar' ); is $serialize->{body}->{foo}, 'bar'; } sub serialize { my $self = shift; return shift; } sub test_deserializer_fault { my $client = SOAP::WSDL::Client->new(); $client->set_deserializer( FaultDeserializer->new() ); $client->set_transport( SOAP::WSDL::Transport::Loopback->new() ); my $fault = $client->call( {operation => 'testMethod'}, {foo => 'bar'}, {bar => 'baz'} ); ok( (blessed $fault and $fault->isa('SOAP::WSDL::SOAP::Typelib::Fault11')), 'Return fault on throwing during deserialization ' . $@); } test_client_basics(); test_call(); test_deserializer_fault();