#!/usr/bin/perl -w use strict; use warnings; use Test::More tests => 5; use lib '../../../../lib'; use lib '../../../../t/lib'; use lib 't/lib'; use lib '../lib'; use lib 'lib'; use_ok(qw/SOAP::WSDL::Expat::MessageParser/); use MyComplexType; use MyElement; use MySimpleType; my $xml = q{ Test Test2 }; my $parser = SOAP::WSDL::Expat::MessageParser->new({ class_resolver => 'FakeResolver' }); test_nil($parser); $parser->parse( $xml ); is $parser->get_data(), q{} . q{TestTest2} , 'Content comparison'; my $xml_attr = q{ Test }; $parser->parse($xml_attr); is $parser->get_data(), q{Test}, 'Content with attributes'; my $xml_error = q{ Test Bar }; eval { $parser->parse($xml_error) }; like $@, qr{\A Cannot \s resolve \s class \s for \s MyElementAttrs/foo }x, 'XML error'; # data classes reside in t/lib/Typelib/ BEGIN { package FakeResolver; { my %class_list = ( 'MyAtomicComplexTypeElement' => 'MyAtomicComplexTypeElement', 'MyAtomicComplexTypeElement/test' => 'MyTestElement', 'MyAtomicComplexTypeElement/test2' => 'MyTestElement2', 'MyAtomicComplexTypeElement/foo' => '__SKIP__', 'MyElementAttrs' => 'MyElementAttrs', 'MyElementAttrs/test' => 'MyTestElement', 'MyElementAttrs/test2' => 'MyTestElement2', ); sub new { return bless {}, 'FakeResolver' }; sub get_typemap { return \%class_list }; sub get_class { my $name = join('/', @{ $_[1] }); return ($class_list{ $name }) ? $class_list{ $name } : undef; }; }; }; sub test_nil { my $parser = shift(); my $xml_nil_attr = q{ Test }; my $result = $parser->parse($xml_nil_attr); is $result->get_test2->serialize({ name => 'test2'}), ''; }