#!perl package Test::SOAP::WSDL::Expat::WSDLParser; use strict; use warnings; use Test::More; use Test::SOAP::WSDL::Tester; use base qw(Test::SOAP::WSDL::Tester); # It's a modulinho - it runs when executed... if (! caller() ) { __PACKAGE__->runtests(); } sub parse_t_uri { my $self = shift; my $parser = SOAP::WSDL::Expat::WSDLParser->new(); return $parser->parse_uri($self->t_url() . '/'. shift); } sub parse_wsdl_schema :Test(1) { my $self = shift; ok my $wsdl = $self->parse_t_uri( "../imported/schema/wsdl11/wsdl.xsd"); } sub parse_soap_binding :Test(1) { my $self = shift; ok my $wsdl = $self->parse_t_uri( "../imported/schema/wsdl11/soap_binding.xsd"); } sub parse_http_binding :Test(1) { my $self = shift; ok my $wsdl = $self->parse_t_uri( "../imported/schema/wsdl11/http_binding.xsd"); } sub parse_wsdl :Test(3) { my $self = shift; ok my $wsdl = $self->parse_t_uri( "acceptance/wsdl/WSDLParser.wsdl"); my $schema = $wsdl->first_types()->get_schema()->[1]; my $attr = $schema->get_element()->[0]->first_complexType->first_attribute(); ok $attr->get_name('testAttribute'); ok $attr->get_type('xs:string'); } sub parse_wsdl_with_import :Test(8) { my $self = shift; ok my $wsdl = $self->parse_t_uri( "acceptance/wsdl/WSDLParser-import.wsdl"); # Content checks is $wsdl->get_service()->[0]->get_name(), 'Service1', 'found service name'; is $wsdl->get_portType->[0]->get_name(), 'Service1Soap', 'found portType name'; is $wsdl->get_types()->[0] ->get_schema()->[1] ->get_element()->[0]->get_name(), 'sayHello', 'found element name'; ok my $schema_from_ref = $wsdl->get_types() ->[0]->get_schema(), 'found schema'; is @{ $schema_from_ref }, 2, 'got builtin and imported schema'; ok @{ $schema_from_ref->[1]->get_element } > 0, 'found mi element in second schema'; is $schema_from_ref->[1] ->get_element->[0]->get_name(), 'sayHello', 'found element name'; } sub parse_wsdl_with_import_loop :Test(1) { my $self = shift; SKIP: { skip 'cannot test without Test::Warn', 1 if not $self->has_test_warn(); my $wsdl; Test::Warn::warning_like { $wsdl = $self->parse_t_uri( "acceptance/wsdl/WSDLParser_import_loop.wsdl") } qr{file:///home/martin/workspace/SOAP-WSDL/t/acceptance/wsdl/import_loop.xsd \s already \s imported. \s Ignoring \s it}x, 'warn about duplicate import'; } } 1;