#!/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'}), '';
}