1use Test::More tests => 11;
2use lib '../lib';
3use File::Basename qw(dirname);
4use Cwd;
5
6my $path = dirname __FILE__;
7
8use_ok(qw/SOAP::WSDL::Expat::WSDLParser/);
9
10my $filter;
11
12my $parser;
13
14ok($parser = SOAP::WSDL::Expat::WSDLParser->new() );
15
16eval { $parser->parse_file( "$path/test.wsdl" ) };
17if ($@)
18{
19	fail("parsing WSDL: $@");
20	die "Can't test without parsed WSDL";
21}
22else
23{
24	pass("parsing XML");
25}
26
27my $wsdl;
28ok( $wsdl = $parser->get_data() , "get object tree");
29
30my $schema = $wsdl->first_types();
31
32my $opt = {
33	readable => 0,
34	autotype => 1,
35    namespace => $wsdl->get_xmlns(),
36	indent => "\t",
37	typelib => $schema,
38};
39
40is( $schema->find_type( 'urn:myNamespace', 'testSimpleType1' )->serialize(
41	'test', 1 , $opt ),
42	q{<test type="tns:testSimpleType1">1</test>} , "serialize simple type");
43
44is( $schema->find_type( 'urn:myNamespace', 'testSimpleList' )->serialize(
45	'testList', [ 1, 2, 3 ] , $opt),
46	q{<testList type="tns:testSimpleList">1 2 3</testList>},
47	"serialize simple list type"
48);
49
50is( $schema->find_element( 'urn:myNamespace', 'TestElement' )->serialize(
51	undef, 1 , $opt),
52	q{<TestElement type="xsd:int">1</TestElement>}, "Serialize element"
53);
54
55$opt->{ readable } = 0;
56
57is( $schema->find_type( 'urn:myNamespace', 'length3')->serialize(
58	'TestComplex', { size => -13, unit => 'BLA' } ,
59	$opt ),
60	q{<TestComplex type="tns:length3" >}
61	. q{<size type="xsd:nonPositiveInteger">-13</size>}
62	. q{<unit type="xsd:NMTOKEN">BLA</unit></TestComplex>}
63	, "serialize complex type" );
64
65is( $schema->find_element( 'urn:myNamespace', 'TestElementComplexType')->serialize(
66	undef, { size => -13, unit => 'BLA' } ,
67	$opt ),
68	q{<TestElementComplexType type="tns:length3" >}
69	. q{<size type="xsd:nonPositiveInteger">-13</size>}
70	. q{<unit type="xsd:NMTOKEN">BLA</unit></TestElementComplexType>},
71	"element with complex type"
72);
73
74is( $schema->find_type( 'urn:myNamespace', 'complex')->serialize(
75	'complexComplex',
76	{ 'length' => {  size => -13, unit => 'BLA' }, 'int' => 1 },
77	$opt ),
78	q{<complexComplex type="tns:complex" >}
79	. q{<length type="tns:length3" >}
80	. q{<size type="xsd:nonPositiveInteger">-13</size>}
81	. q{<unit type="xsd:NMTOKEN">BLA</unit></length>}
82	. q{<int type="xsd:int">1</int></complexComplex>},
83	"nested complex type"
84);
85
86is( $wsdl->find_message('urn:myNamespace', 'testRequest')->first_part()->serialize(
87	undef, { test => { length => {  size => -13, unit => 'BLA' } , int => 3 } },
88	$opt ),
89	q{<test type="tns:complex" >}
90	. q{<length type="tns:length3" >}
91	. q{<size type="xsd:nonPositiveInteger">-13</size>}
92	. q{<unit type="xsd:NMTOKEN">BLA</unit>}
93	. q{</length><int type="xsd:int">3</int></test>}
94	, "Message part"
95);
96
97