From be3836489a688d4c67cbbe207105f4d7bc52e992 Mon Sep 17 00:00:00 2001 From: Jason Edward Stewart <jasons@apache.org> Date: Fri, 13 Oct 2006 21:14:58 +0000 Subject: [PATCH] new tests git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@463833 13f79535-47bb-0310-9956-ffa450edef68 --- swig/perl/t/00io_module.t | 31 + swig/perl/t/00sax_module.t | 33 + swig/perl/t/02disown.t | 43 ++ swig/perl/t/02handler.t | 24 + swig/perl/t/DOMImplementationList.t | 37 ++ swig/perl/t/DOMImplementationRegistry.t | 34 + swig/perl/t/DOMLSInput.t | 99 +++ swig/perl/t/DOMLSOutput.t | 65 ++ swig/perl/t/DOMLSSerializer.t | 149 +++++ swig/perl/t/DOMTypeInfo.t | 805 ++++++++++++++++++++++++ swig/perl/t/EnumVal.t | 79 +++ swig/perl/t/PSVIUni.t | 42 ++ swig/perl/t/SEnumVal.t | 79 +++ swig/perl/t/SchemaSymbols.t | 42 ++ swig/perl/t/XMLGrammarDescription.t | 90 +++ swig/perl/t/XMLValidator.t | 123 ++++ 16 files changed, 1775 insertions(+) create mode 100644 swig/perl/t/00io_module.t create mode 100644 swig/perl/t/00sax_module.t create mode 100644 swig/perl/t/02disown.t create mode 100644 swig/perl/t/02handler.t create mode 100644 swig/perl/t/DOMImplementationList.t create mode 100644 swig/perl/t/DOMImplementationRegistry.t create mode 100644 swig/perl/t/DOMLSInput.t create mode 100644 swig/perl/t/DOMLSOutput.t create mode 100644 swig/perl/t/DOMLSSerializer.t create mode 100644 swig/perl/t/DOMTypeInfo.t create mode 100644 swig/perl/t/EnumVal.t create mode 100644 swig/perl/t/PSVIUni.t create mode 100644 swig/perl/t/SEnumVal.t create mode 100644 swig/perl/t/SchemaSymbols.t create mode 100644 swig/perl/t/XMLGrammarDescription.t create mode 100644 swig/perl/t/XMLValidator.t diff --git a/swig/perl/t/00io_module.t b/swig/perl/t/00io_module.t new file mode 100644 index 000000000..c1966bb5d --- /dev/null +++ b/swig/perl/t/00io_module.t @@ -0,0 +1,31 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# 00io_module.t' + +######################### Begin module loading + +# use blib; +use Test::More tests => 3; +BEGIN { use_ok(XML::Xerces::IO) }; + +use strict; + +######################### Begin Test + + # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize() + # when the module is loaded. Xerces.pm no longer does this. + # + # +XML::Xerces::XMLPlatformUtils::Initialize(); + +pass("module initialized"); + + # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() + # when the module is unloaded. Xerces.pm no longer does this for us + # + # +XML::Xerces::XMLPlatformUtils::Terminate(); + +pass("module terminated"); + + diff --git a/swig/perl/t/00sax_module.t b/swig/perl/t/00sax_module.t new file mode 100644 index 000000000..febfa8d2d --- /dev/null +++ b/swig/perl/t/00sax_module.t @@ -0,0 +1,33 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# 00sax_module.t' + +END {fail("module loaded") unless $loaded;} + +use Carp; +# use blib; +use Test::More tests => 3; +BEGIN { use_ok(XML::Xerces::SAX) }; + +use vars qw($loaded); +use strict; + +$loaded = 1; + + # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize() + # when the module is loaded. Xerces.pm no longer does this. + # + # +XML::Xerces::XMLPlatformUtils::Initialize(); + +pass("module initialized"); + + # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() + # when the module is unloaded. Xerces.pm no longer does this for us + # + # +XML::Xerces::XMLPlatformUtils::Terminate(); + +pass("module terminated"); + + diff --git a/swig/perl/t/02disown.t b/swig/perl/t/02disown.t new file mode 100644 index 000000000..1a8de5999 --- /dev/null +++ b/swig/perl/t/02disown.t @@ -0,0 +1,43 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# 01disown.t' + +######################### Begin module loading + +# use blib; +use Test::More tests => 5; +BEGIN { use_ok(XML::Xerces::DOM) }; + +use strict; + +######################### Begin Test + + # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize() + # when the module is loaded. Xerces.pm no longer does this. + # + # +XML::Xerces::XMLPlatformUtils::Initialize(); + +my $DOM = XML::Xerces::XercesDOMParser->new(); +is((scalar keys %XML::Xerces::XercesDOMParser::OWNER), 1, + 'creating parser sets key in %OWNER'); + +$DOM = undef; +is((scalar keys %XML::Xerces::XercesDOMParser::OWNER), 0, + 'undefining parser deletes key in %OWNER'); + +my $valToUse = XML::Xerces::DTDValidator->new(); +is((scalar keys %XML::Xerces::DTDValidator::OWNER), 1, + 'creating DTDValidator sets key in %OWNER'); + +$DOM = XML::Xerces::XercesDOMParser->new($valToUse); +is((scalar keys %XML::Xerces::DTDValidator::OWNER), 0, + 'passing DTDValidator to parser constructor deletes key in %OWNER'); + + # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() + # when the module is unloaded. Xerces.pm no longer does this for us + # + # +XML::Xerces::XMLPlatformUtils::Terminate(); + + diff --git a/swig/perl/t/02handler.t b/swig/perl/t/02handler.t new file mode 100644 index 000000000..96710000e --- /dev/null +++ b/swig/perl/t/02handler.t @@ -0,0 +1,24 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# 02handler.t' + +######################### Begin module loading + +# use blib; +use Test::More tests => 3; + +BEGIN{use_ok('XML::Xerces')}; + +use strict; + +######################### Begin Test + +for (1..2000) { + my $ER = XML::Xerces::PerlEntityResolverHandler->new(); +} +pass("deleted entity resolver"); + +for (1..2000) { + my $EH = XML::Xerces::PerlErrorCallbackHandler->new(); +} +pass("deleted error handler"); diff --git a/swig/perl/t/DOMImplementationList.t b/swig/perl/t/DOMImplementationList.t new file mode 100644 index 000000000..bf8c1baeb --- /dev/null +++ b/swig/perl/t/DOMImplementationList.t @@ -0,0 +1,37 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# DOMImplementationList.t' + +######################### Begin module loading + +# use blib; +use Test::More tests => 6; +BEGIN { use_ok("XML::Xerces::DOM") }; + +use strict; + +######################### Begin Test + + # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize() + # when the module is loaded. Xerces.pm no longer does this. + # + # +XML::Xerces::XMLPlatformUtils::Initialize(); + +my $list = XML::Xerces::DOMImplementationRegistry::getDOMImplementationList(''); +isa_ok($list,"XML::Xerces::DOMImplementationList"); +ok(($list->getLength() > 0), + 'testing getLength()'); +my $domImpl = $list->item(0); +ok((defined $domImpl), + 'testing item()'); +isa_ok($domImpl,"XML::Xerces::DOMImplementation"); +isa_ok($domImpl,"XML::Xerces::DOMImplementationLS"); + +END { + # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() + # when the module is unloaded. Xerces.pm no longer does this for us + # + # + XML::Xerces::XMLPlatformUtils::Terminate(); +} diff --git a/swig/perl/t/DOMImplementationRegistry.t b/swig/perl/t/DOMImplementationRegistry.t new file mode 100644 index 000000000..049834606 --- /dev/null +++ b/swig/perl/t/DOMImplementationRegistry.t @@ -0,0 +1,34 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# DOMImplementationRegistry.t' + +######################### Begin module loading + +# use blib; +use Test::More tests => 4; +BEGIN { use_ok("XML::Xerces::DOM") }; + +use strict; + +######################### Begin Test + + # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize() + # when the module is loaded. Xerces.pm no longer does this. + # + # +XML::Xerces::XMLPlatformUtils::Initialize(); + +my $domImpl = XML::Xerces::DOMImplementationRegistry::getDOMImplementation('LS'); +isa_ok($domImpl,"XML::Xerces::DOMImplementation"); +isa_ok($domImpl,"XML::Xerces::DOMImplementationLS"); + +my $list = XML::Xerces::DOMImplementationRegistry::getDOMImplementationList(''); +isa_ok($list,"XML::Xerces::DOMImplementationList"); + +END { + # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() + # when the module is unloaded. Xerces.pm no longer does this for us + # + # + XML::Xerces::XMLPlatformUtils::Terminate(); +} diff --git a/swig/perl/t/DOMLSInput.t b/swig/perl/t/DOMLSInput.t new file mode 100644 index 000000000..f1646a730 --- /dev/null +++ b/swig/perl/t/DOMLSInput.t @@ -0,0 +1,99 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# DOMLSInput.t' + +######################### Begin module loading + +# use blib; +use Test::More tests => 20; +BEGIN { use_ok("XML::Xerces::DOM") }; + +use strict; + +######################### Begin Test + + # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize() + # when the module is loaded. Xerces.pm no longer does this. + # + # +XML::Xerces::XMLPlatformUtils::Initialize(); + +my $domImpl = XML::Xerces::DOMImplementationRegistry::getDOMImplementation('LS'); +my $input = $domImpl->createLSInput(); +isa_ok($input,"XML::Xerces::DOMLSInput"); + +my $test_pub_id = 'FOO'; +$input->setPublicId($test_pub_id); +is($input->getPublicId(), $test_pub_id, + 'public id'); + +my $test_sys_id = 'FOO'; +$input->setSystemId($test_sys_id); +is($input->getSystemId(), $test_sys_id, + 'system id'); + +my $test_base_uri = 'FOO'; +$input->setBaseURI($test_base_uri); +is($input->getBaseURI(), $test_base_uri, + 'base uri'); + +my $test_encoding = 'UTF-8'; +$input->setEncoding($test_encoding); +is($input->getEncoding(), $test_encoding, + 'encoding'); + +my $doc = '<some_tag></some_tag>'; + +$input->setStringData($doc); +is($input->getStringData(), $doc, + 'string data'); + +my $is = XML::Xerces::MemBufInputSource->new($doc); +$input->setByteStream($is); +isa_ok($input->getByteStream(), "XML::Xerces::InputSource", + 'byte stream'); + +isa_ok($input->getByteStream(), "XML::Xerces::MemBufInputSource", + 'overloaded return value in getByteStream'); + +$is = XML::Xerces::LocalFileInputSource->new('/tmp/foo.xml'); +$input->setByteStream($is); +isa_ok($input->getByteStream(), "XML::Xerces::InputSource", + 'byte stream'); +isa_ok($input->getByteStream(), "XML::Xerces::LocalFileInputSource", + 'overloaded return value in getByteStream'); + +$is = XML::Xerces::URLInputSource->new(XML::Xerces::XMLURL->new('http://google.com')); +$input->setByteStream($is); +isa_ok($input->getByteStream(), "XML::Xerces::InputSource", + 'byte stream'); +isa_ok($input->getByteStream(), "XML::Xerces::URLInputSource", + 'overloaded return value in getByteStream'); + +$is = XML::Xerces::StdInInputSource->new(); +isa_ok($is, "XML::Xerces::StdInInputSource", + 'input source to set'); +$input->setByteStream($is); +isa_ok($input->getByteStream(), "XML::Xerces::InputSource", + 'byte stream'); +isa_ok($input->getByteStream(), "XML::Xerces::StdInInputSource", + 'overloaded return value in getByteStream'); + +my $wrapper = XML::Xerces::Wrapper4DOMLSInput->new($input); +isa_ok($wrapper, "XML::Xerces::InputSource", + 'input source to set'); +isa_ok($wrapper, "XML::Xerces::Wrapper4DOMLSInput", + 'input source to set'); +$input->setByteStream($wrapper); +isa_ok($input->getByteStream(), "XML::Xerces::InputSource", + 'byte stream'); +isa_ok($input->getByteStream(), "XML::Xerces::Wrapper4DOMLSInput", + 'byte stream'); + +END { + # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() + # when the module is unloaded. Xerces.pm no longer does this for us + # + # + XML::Xerces::XMLPlatformUtils::Terminate(); +} diff --git a/swig/perl/t/DOMLSOutput.t b/swig/perl/t/DOMLSOutput.t new file mode 100644 index 000000000..5a236e016 --- /dev/null +++ b/swig/perl/t/DOMLSOutput.t @@ -0,0 +1,65 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# DOMLSOutput.t' + +######################### Begin module loading + +# use blib; +use Test::More tests => 10; +BEGIN { use_ok("XML::Xerces::DOM") }; + +use strict; + +######################### Begin Test + + # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize() + # when the module is loaded. Xerces.pm no longer does this. + # + # +XML::Xerces::XMLPlatformUtils::Initialize(); + +my $domImpl = XML::Xerces::DOMImplementationRegistry::getDOMImplementation('LS'); +my $output = $domImpl->createLSOutput(); +isa_ok($output,"XML::Xerces::DOMLSOutput"); + +my $test_sys_id = 'FOO'; +$output->setSystemId($test_sys_id); +is($output->getSystemId(), $test_sys_id, + 'system id'); + +my $test_encoding = 'UTF-8'; +$output->setEncoding($test_encoding); +is($output->getEncoding(), $test_encoding, + 'encoding'); + +my $target = XML::Xerces::MemBufFormatTarget->new(); +$output->setByteStream($target); +isa_ok($output->getByteStream(), "XML::Xerces::XMLFormatTarget", + 'byte stream'); + +isa_ok($output->getByteStream(), "XML::Xerces::MemBufFormatTarget", + 'overloaded return val getByteStream'); + +$target = XML::Xerces::LocalFileFormatTarget->new('/tmp/foo.xml'); +$output->setByteStream($target); +isa_ok($output->getByteStream(), "XML::Xerces::XMLFormatTarget", + 'byte stream'); + +isa_ok($output->getByteStream(), "XML::Xerces::LocalFileFormatTarget", + 'overloaded return val getByteStream'); + +$target = XML::Xerces::StdOutFormatTarget->new(); +$output->setByteStream($target); +isa_ok($output->getByteStream(), "XML::Xerces::XMLFormatTarget", + 'byte stream'); + +isa_ok($output->getByteStream(), "XML::Xerces::StdOutFormatTarget", + 'overloaded return val getByteStream'); + +END { + # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() + # when the module is unloaded. Xerces.pm no longer does this for us + # + # + XML::Xerces::XMLPlatformUtils::Terminate(); +} diff --git a/swig/perl/t/DOMLSSerializer.t b/swig/perl/t/DOMLSSerializer.t new file mode 100644 index 000000000..f33d17a7a --- /dev/null +++ b/swig/perl/t/DOMLSSerializer.t @@ -0,0 +1,149 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# DOMLSserializer.t' + +######################### Begin module loading + +# use blib; +use Test::More tests => 35; +BEGIN { use_ok("XML::Xerces::DOM") }; + +use strict; + +######################### Begin Test + +# Create a couple of identical test documents +my $document = q[<?xml version="1.0" encoding="UTF-8" standalone="no" ?><contributors> + <person Role="manager"> + <name>Mike Pogue</name> + <email>mpogue@us.ibm.com</email> + </person> + <person Role="developer"> + <name>Tom Watson</name> + <email>rtwatson@us.ibm.com</email> + </person> + <person Role="tech writer"> + <name>Susan Hardenbrook</name> + <email>susanhar@us.ibm.com</email> + </person> +</contributors>]; + +my $dom = XML::Xerces::XercesDOMParser->new(); +my $handler = XML::Xerces::PerlErrorHandler->new(); +$dom->setErrorHandler($handler); +eval{$dom->parse(XML::Xerces::MemBufInputSource->new($document))}; +XML::Xerces::error($@) if $@; + +my $doc = $dom->getDocument(); +my $impl = XML::Xerces::DOMImplementationRegistry::getDOMImplementation('LS'); +my $writer = $impl->createLSSerializer(); +my $config = $writer->getDomConfig(); +isa_ok($config, "XML::Xerces::DOMConfiguration", + 'getDomConfig()'); + +ok((not defined $writer->getNewLine()), + "default EOL is undef") + or diag("Found bad EOL: " . $writer->getNewLine()); + +foreach my $eol_ch ('CR', 'CR-LF', 'LF') { + $writer->setNewLine($eol_ch); + is($writer->getNewLine(), $eol_ch, + "setting EOL: $eol_ch"); +} + +$writer->setNewLine(undef); +ok((not defined $writer->getNewLine()), + "re-setting EOL using undef") + or diag("Found bad EOL: " . $writer->getNewLine()); + +TODO: { + local $TODO = 'setting of bad newline value not checked'; + eval {$writer->setNewLine('BAD VALUE')}; + ok($@, + "exception setting EOL to bogus value") + or diag("Found bad EOL: " . $writer->getNewLine()); +} + +my $output = $writer->writeToString($doc); + +# change the encoding string +$output =~ s/UTF-16/UTF-8/; + +ok($output, "output written"); +is($output, $document, "got expected document") + or diag("Found: $output"); + +my @parameters = ($XML::Xerces::XMLUni::fgDOMWRTCanonicalForm, + $XML::Xerces::XMLUni::fgDOMWRTDiscardDefaultContent, + $XML::Xerces::XMLUni::fgDOMWRTEntities, + $XML::Xerces::XMLUni::fgDOMWRTFormatPrettyPrint, + $XML::Xerces::XMLUni::fgDOMWRTNormalizeCharacters, + $XML::Xerces::XMLUni::fgDOMWRTSplitCdataSections, + $XML::Xerces::XMLUni::fgDOMWRTValidation, + $XML::Xerces::XMLUni::fgDOMWRTWhitespaceInElementContent, + $XML::Xerces::XMLUni::fgDOMWRTBOM, + $XML::Xerces::XMLUni::fgDOMXMLDeclaration, + $XML::Xerces::XMLUni::fgDOMWRTXercesPrettyPrint, + ); +my %not_supported_true = ($XML::Xerces::XMLUni::fgDOMWRTCanonicalForm=>1, + $XML::Xerces::XMLUni::fgDOMWRTNormalizeCharacters=>1, + $XML::Xerces::XMLUni::fgDOMWRTValidation=>1, + ); +my %not_supported_false = ($XML::Xerces::XMLUni::fgDOMWRTWhitespaceInElementContent=>1); + +foreach my $param (@parameters) { + if ($not_supported_true{$param}) { + TODO: { + local $TODO = "setting $param TRUE not supported"; + ok(!$config->canSetParameter($param, 1), + "canSetParameter: $param, TRUE"); + } + } else { + ok($config->canSetParameter($param, 1), + "canSetParameter: $param, TRUE"); + } + if ($not_supported_false{$param}) { + TODO: { + local $TODO = "setting $param FALSE not supported"; + ok(!$config->canSetParameter($param, 0), + "canSetParameter: $param, FALSE"); + } + } else { + ok($config->canSetParameter($param, 0), + "canSetParameter: $param, FALSE"); + } +} + +like($output, qr/encoding/, + 'xml declaration turned on'); + +$config->setParameter($XML::Xerces::XMLUni::fgDOMXMLDeclaration,0); +$output = $writer->writeToString($doc); +unlike($output, qr/encoding/, + 'xml declaration turned off'); +$config->setParameter($XML::Xerces::XMLUni::fgDOMXMLDeclaration,1); + +my $file = 'foo.xml'; +my $rc = eval {$writer->writeToURI($doc, $file)}; +XML::Xerces::error($@) if $@; + +ok($rc, + 'writeToURI'); + +SKIP: { + skip "Couldn't open $file for reading", 2, unless open(TEST, $file); + +# slurp the whole file in + local $/; + $output = <TEST>; + + # change the encoding string + $output =~ s/UTF-16/UTF-8/; + + ok($output, "output written"); + is($output, $document, "got expected document") + or diag("Found: $output"); + + unlink($file); +} + diff --git a/swig/perl/t/DOMTypeInfo.t b/swig/perl/t/DOMTypeInfo.t new file mode 100644 index 000000000..ebd5ef214 --- /dev/null +++ b/swig/perl/t/DOMTypeInfo.t @@ -0,0 +1,805 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# Grammar.t' + +######################### Begin module loading + +# use blib; +use Test::More tests => 1000; +BEGIN { use_ok(XML::Xerces::DOM) }; + +use lib 't'; +use TestUtils qw($TYPEINFO_NAME + $TYPEINFO_NO_DTD_NAME + $TYPEINFO_COMBINED_NAME + $TYPEINFO_JUST_DTD_NAME); + +use vars qw($file $test_elem $test_attr $parser $doc); +use strict; + +######################### Begin Test + + + +$file = $TYPEINFO_NAME; +eval { + $parser = XML::Xerces::XercesDOMParser->new(); + $parser->setValidationScheme($XML::Xerces::AbstractDOMParser::Val_Auto); + $parser->setDoNamespaces(1); + $parser->setCreateSchemaInfo(1); + $parser->setDoSchema(1); + + # my $error_handler = XML::Xerces::PerlErrorHandler->new(); + # $parser->setErrorHandler($error_handler); + + $parser->parse($file); +}; +XML::Xerces::error($@) if $@; + +$doc = $parser->getDocument(); +if (ok(defined $doc, "$file - doc")) { + testInBuiltTypesOnAttributes($doc, my $has_dtd = 1); + testInBuiltTypesOnElements($doc); + testSimpleDerived($doc); + testComplexTypes($doc); + testUnions($doc); + testAnonymous($doc); + testXsiTypes($doc); + testAnys($doc); + testInvaild($doc); +} + +$file = $TYPEINFO_NO_DTD_NAME; +eval { + $parser = XML::Xerces::XercesDOMParser->new(); + $parser->setValidationScheme($XML::Xerces::AbstractDOMParser::Val_Auto); + $parser->setDoNamespaces(1); + $parser->setCreateSchemaInfo(1); + $parser->setDoSchema(1); + $parser->useScanner("SGXMLScanner"); + $parser->parse($file); +}; +XML::Xerces::error($@) if $@; + +$doc = $parser->getDocument(); +if (ok(defined $doc, "$file - doc")) { + testInBuiltTypesOnAttributes($doc, my $has_dtd = 0); + testInBuiltTypesOnElements($doc); + testSimpleDerived($doc); + testComplexTypes($doc); + testUnions($doc); + testAnonymous($doc); + testXsiTypes($doc); + testAnys($doc); + testInvaild($doc); +} + +$file = $TYPEINFO_JUST_DTD_NAME; +eval { + $parser = XML::Xerces::XercesDOMParser->new(); + $parser->setValidationScheme($XML::Xerces::AbstractDOMParser::Val_Auto); + $parser->setCreateSchemaInfo(1); + $parser->parse($file); +}; +XML::Xerces::error($@) if $@; + +$doc = $parser->getDocument(); +if (ok(defined $doc, "$file - doc")) { + testDTD($doc); +} + +eval { + $parser = XML::Xerces::XercesDOMParser->new(); + $parser->setValidationScheme($XML::Xerces::AbstractDOMParser::Val_Auto); + $parser->useScanner("DGXMLScanner"); + $parser->setCreateSchemaInfo(1); + $parser->parse($file); +}; +XML::Xerces::error($@) if $@; + +$doc = $parser->getDocument(); +if (ok(defined $doc, "$file - doc")) { + testDTD($doc); +} + +$file = $TYPEINFO_COMBINED_NAME; +eval { + $parser = XML::Xerces::XercesDOMParser->new(); + $parser->setValidationScheme($XML::Xerces::AbstractDOMParser::Val_Auto); + $parser->setDoNamespaces(1); + $parser->setCreateSchemaInfo(1); + $parser->setDoSchema(1); + $parser->parse($file); +}; +XML::Xerces::error($@) if $@; + +$doc = $parser->getDocument(); +if (ok(defined $doc, "$file - doc")) { + combinedTest($doc); +} + +print STDERR "Finished\n"; + +sub testInBuiltTypesOnAttributes { + my $doc = shift; + my $has_dtd = shift; + + $test_elem = find_element($doc,'attrTest'); + isa_ok($test_elem, "XML::Xerces::DOMElement", + 'found <attrTest>') + or die(); + + no warnings qw(uninitialized); + + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "attrTestType", "", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "anySimpleType"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_ANYSIMPLETYPE, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "string"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_STRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "boolean"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_BOOLEAN, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "decimal"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_DECIMAL, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "float"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_FLOAT, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "double"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_DOUBLE, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "duration"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_DURATION, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "dateTime"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_DATETIME, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "time"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_TIME, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "date"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_DATE, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "gYearMonth"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_YEARMONTH, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "gYear"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_YEAR, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "gMonthDay"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_MONTHDAY, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "gDay"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_DAY, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "gMonth"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_MONTH, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "hexBinary"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_HEXBINARY, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "base64Binary"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_BASE64BINARY, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "anyURI"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_ANYURI, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "QName"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_QNAME, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "normalizedString"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_NORMALIZEDSTRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "token"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_TOKEN, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "language"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_LANGUAGE, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "NMTOKEN"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::XMLUni::fgNmTokenString, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "NMTOKENS"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::XMLUni::fgNmTokensString, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "Name"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_NAME, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "NCName"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_NCNAME, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "ID"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::XMLUni::fgIDString, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "IDREF"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::XMLUni::fgIDRefString, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "IDREFS"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::XMLUni::fgIDRefsString, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + + if ($has_dtd) { + $test_attr = $test_elem->getAttributeNodeNS(undef, "ENTITY"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::XMLUni::fgEntityString, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "ENTITIES"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::XMLUni::fgEntitiesString, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + } + + $test_attr = $test_elem->getAttributeNodeNS(undef, "integer"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_INTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "nonPositiveInteger"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_NONPOSITIVEINTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "negativeInteger"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_NEGATIVEINTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "long"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_LONG, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "int"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_INT, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "short"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_SHORT, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "byte"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_BYTE, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "nonNegativeInteger"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_NONNEGATIVEINTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "unsignedLong"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_ULONG, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "unsignedInt"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_UINT, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "unsignedShort"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_USHORT, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "unsignedByte"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_UBYTE, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "positiveInteger"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_POSITIVEINTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + # couple of defaulted ones + $test_attr = $test_elem->getAttributeNodeNS(undef, "defaultString"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_STRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "defaultInt"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_INTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + # ns attr + $test_attr = $test_elem->getAttributeNodeNS("http://www.w3.org/2000/xmlns/", "prefix"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_ANYURI, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("http://www.w3.org/2001/XMLSchema-instance", "noNamespaceSchemaLocation"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_ANYURI, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + +} + +sub testDTD { + my $doc = shift; + + no warnings qw(uninitialized); + + + $test_elem = $doc->getDocumentElement(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), undef, undef, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "cdata"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "CDATA", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "enum"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "ENUMERATION", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "id"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "ID", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "idRef"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "IDREF", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "idRefs"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "IDREFS", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "nmToken"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "NMTOKEN", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "nmTokenDefault"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "NMTOKEN", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "nmTokenDefault2"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "NMTOKEN", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "nmTokens"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "NMTOKENS", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "entity"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "ENTITY", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "entities"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "ENTITIES", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "notation"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "NOTATION", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "noDecl"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "CDATA", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNode("xmlns:foo"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "CDATA", "http://www.w3.org/TR/REC-xml", "$file, line: " . __LINE__); + +} + + +sub testInBuiltTypesOnElements { + my $doc = shift; + + no warnings qw(uninitialized); + + my $elem_name = "eleTest"; + my $test_elem = find_element($doc, $elem_name); + isa_ok($test_elem, "XML::Xerces::DOMElement", + "found <$elem_name>") + or die(); + + $test_elem = $test_elem->getFirstChild()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_STRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_BOOLEAN, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_DECIMAL, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_FLOAT, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_DOUBLE, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_DURATION, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_DATETIME, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_TIME, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_DATE, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_YEARMONTH, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_YEAR, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_MONTHDAY, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_DAY, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_MONTH, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_HEXBINARY, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_BASE64BINARY, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_ANYURI, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_QNAME, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_NORMALIZEDSTRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_TOKEN, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_LANGUAGE, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::XMLUni::fgNmTokenString, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::XMLUni::fgNmTokensString, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_NAME, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_NCNAME, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_INTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_NONPOSITIVEINTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_NEGATIVEINTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_LONG, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_INT, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_SHORT, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_BYTE, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_NONNEGATIVEINTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_ULONG, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_UINT, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_USHORT, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_UBYTE, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_POSITIVEINTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgATTVAL_ANYTYPE, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + +} + +sub testSimpleDerived { + my $doc = shift; + + no warnings qw(uninitialized); + +my $root = $doc->getDocumentElement(); + # element simpleDerTest + $test_elem = $root->getFirstChild()->getNextSibling()->getNextSibling() + ->getNextSibling()->getNextSibling()->getNextSibling(); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "decimalDerived"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "decimalDerivedType", "", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS(undef, "stringDerived"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "stringDerivedType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getFirstChild()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "decimalDerivedType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "stringDerivedType", "", "$file, line: " . __LINE__); + +} + +sub testComplexTypes { + my $doc = shift; + + no warnings qw(uninitialized); + + + my $elem_name = "complexTest"; + my $test_elem = find_element($doc, $elem_name); + isa_ok($test_elem, "XML::Xerces::DOMElement", + "found <$elem_name>") + or die(); + + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "complexTestType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "complexDerTestType", "", "$file, line: " . __LINE__); +} + + +sub testUnions { + my $doc = shift; + + no warnings qw(uninitialized); + + + my $elem_name = "unionTest"; + my $test_elem = find_element($doc, $elem_name); + isa_ok($test_elem, "XML::Xerces::DOMElement", + "found <$elem_name>") + or die(); + + $test_elem = $test_elem->getFirstChild()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "decimalDerivedType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "stringDerivedType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "decimal", $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "string", $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + $test_attr = $test_elem->getAttributeNodeNS(undef, "testAttr"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "decimalDerivedType", "", "$file, line: " . __LINE__); + $test_attr = $test_elem->getAttributeNodeNS(undef, "testAttr2"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "stringDerivedType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + $test_attr = $test_elem->getAttributeNodeNS(undef, "testAttr"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "stringDerivedType", "", "$file, line: " . __LINE__); + $test_attr = $test_elem->getAttributeNodeNS(undef, "testAttr2"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "decimalDerivedType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + $test_attr = $test_elem->getAttributeNodeNS(undef, "testAttr"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "decimal", $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + $test_attr = $test_elem->getAttributeNodeNS(undef, "testAttr2"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "string", $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + $test_attr = $test_elem->getAttributeNodeNS(undef, "testAttr"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "string", $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + $test_attr = $test_elem->getAttributeNodeNS(undef, "testAttr2"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "decimal", $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + +} + +sub testAnonymous { + my $doc = shift; + + no warnings qw(uninitialized); + + + my $elem_name = "anonymousTest"; + my $test_elem = find_element($doc, $elem_name); + isa_ok($test_elem, "XML::Xerces::DOMElement", + "found <$elem_name>") + or die(); + + + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "__AnonC1", "", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "partNum"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "__AnonS7", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getFirstChild()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "__AnonS2", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "__AnonS4", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "__AnonS6", "", "$file, line: " . __LINE__); + +} + + +sub testXsiTypes { + my $doc = shift; + + no warnings qw(uninitialized); + + + my $elem_name = "xsiTypeTest"; + my $test_elem = find_element($doc, $elem_name); + isa_ok($test_elem, "XML::Xerces::DOMElement", + "found <$elem_name>") + or die(); + + $test_elem = $test_elem->getFirstChild()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "base", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "level1", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "level2", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "baseComplex", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "level1Complex", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "level2Complex", "", "$file, line: " . __LINE__); + +} + + + +sub testAnys { + my $doc = shift; + + no warnings qw(uninitialized); + + + my $elem_name = "anyTestPartial"; + my $test_elem = find_element($doc, $elem_name); + isa_ok($test_elem, "XML::Xerces::DOMElement", + "found <$elem_name>") + or die(); + + my $back = $test_elem; + + $test_attr = $test_elem->getAttributeNodeNS("http://www.w3.org/1999/xhtml", "attr2"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), undef, undef, "$file, line: " . __LINE__); + + + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "anyTestPartialType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getFirstChild()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), undef, undef, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), undef, undef, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_STRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + + # element anyTest + $test_elem = $back->getNextSibling()->getNextSibling(); + $back = $test_elem; + + $test_attr = $test_elem->getAttributeNodeNS("http://www.secondSchema", "attr1"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_STRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("http://www.secondSchema", "attr2"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_INTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("http://www.secondSchema", "attr3"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_STRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("http://www.secondSchema", "attr4"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_INTEGER, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "anyTestType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getFirstChild()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_STRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_STRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), undef, undef, "$file, line: " . __LINE__); + + # anyTestAttr1 + $test_elem = $back->getNextSibling()->getNextSibling(); + $back = $test_elem; + + $test_attr = $test_elem->getAttributeNodeNS("http://www.secondSchema", "attr5"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), undef, undef, "$file, line: " . __LINE__); + + # anyTestAttr2 + $test_elem = $back->getNextSibling()->getNextSibling(); + $back = $test_elem; + + $test_attr = $test_elem->getAttributeNodeNS("http://www.secondSchema", "attr5"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), undef, undef, "$file, line: " . __LINE__); + + # anyTestMissing + $test_elem = $back->getNextSibling()->getNextSibling(); + $back = $test_elem; + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "anyTestType", "", "$file, line: " . __LINE__); +} + + + +sub testInvaild { + my $doc = shift; + + no warnings qw(uninitialized); + + my $root = $doc->getDocumentElement(); + DOMTypeInfoTest($root->getSchemaTypeInfo(), "rootType", "", "$file, line: " . __LINE__); + + my $elem_name = "invalidTest"; + my $test_elem = find_element($doc, $elem_name); + isa_ok($test_elem, "XML::Xerces::DOMElement", + "found <$elem_name>") + or die(); + + $test_attr = $test_elem->getAttributeNodeNS("", "simple"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), "stringDerivedType", "", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "invalid"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), undef, undef, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getFirstChild()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "stringDerivedType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "baseComplex", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + # this is a "number" of type "base" but it has a xsi:type="stringDerivedType" + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "stringDerivedType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "baseComplex", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "uType", "", "$file, line: " . __LINE__); + # an undeclared element does not have anon value. Test this here + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), undef, undef, "$file, line: " . __LINE__); + + my $test_elem2 = $test_elem->getFirstChild()->getNextSibling(); + DOMTypeInfoTest($test_elem2->getSchemaTypeInfo(), undef, undef, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "attrOnlyType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "attrOnlyType", "", "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "prohibitedAttrType", "", "$file, line: " . __LINE__); + +} + +sub combinedTest { + my $doc = shift; + + no warnings qw(uninitialized); + + + $test_elem = $doc->getDocumentElement(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), "rootType", "", "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "attBoth"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_STRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "attSchema"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_STRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_attr = $test_elem->getAttributeNodeNS("", "attDTD"); + DOMTypeInfoTest($test_attr->getSchemaTypeInfo(), undef, undef, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getFirstChild()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), $XML::Xerces::SchemaSymbols::fgDT_STRING, $XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, "$file, line: " . __LINE__); + + $test_elem = $test_elem->getNextSibling()->getNextSibling(); + DOMTypeInfoTest($test_elem->getSchemaTypeInfo(), undef, undef, "$file, line: " . __LINE__); + +} + +sub DOMTypeInfoTest { + my ($type_info, $type, $uri, $test_name) = @_; + isa_ok($type_info, "XML::Xerces::DOMTypeInfo", $test_name); + is($type_info->getTypeName(), $type, + "$test_name - TypeName"); + is($type_info->getTypeNamespace(), $uri, + "$test_name - TypeNamespace"); +} + +sub find_element { + my $doc = shift; + my $name = shift; + + my $to_test = $doc->getDocumentElement()->getFirstChild(); + while($to_test->getNodeName() ne $name) { + $to_test = $to_test->getNextSibling(); + } + return $to_test; +} + + diff --git a/swig/perl/t/EnumVal.t b/swig/perl/t/EnumVal.t new file mode 100644 index 000000000..21978dcdd --- /dev/null +++ b/swig/perl/t/EnumVal.t @@ -0,0 +1,79 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# EnumVal.t' + +######################### Begin module loading + +use blib; +use Test::More tests => 12; +BEGIN { use_ok(XML::Xerces::DOM) }; +use Config; + +use lib 't'; +use TestUtils qw($PERSONAL_FILE_NAME $SAMPLE_DIR); + +use strict; + +######################### Begin Test + + # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize() + # when the module is loaded. Xerces.pm no longer does this. + # + # +XML::Xerces::XMLPlatformUtils::Initialize(); + +my $perl = $Config{startperl}; +$perl =~ s/^\#!//; +my $output = `$perl -Mblib $SAMPLE_DIR/EnumVal.pl $PERSONAL_FILE_NAME 2>/dev/null`; + +my @lines = split("\n", $output); + +my %elements; +my %attributes; +my $curr_elem; +foreach my $line (@lines) { + if ($line =~ /^Element Name: (\w+), Content Model: (.*)$/) { + $curr_elem = $1; + $elements{$curr_elem} = $2; + } elsif ($line =~ /^\s+attribute Name: (\w+), Type: (.*)$/) { + $attributes{$curr_elem}->{$1} = $2; + } +} +# diag("Found elements: " . scalar @elements); +is((scalar keys %elements), 8, + 'number of elements'); + +ok(exists $elements{name}, + "found 'name'") + && is($elements{name},'(#PCDATA|family|given)*', + "'name' has correct content-model"); + +ok(exists $elements{person}, + "found 'person'") + && is($elements{person},'(name,email*,url*,link?)', + "'person' has correct content-model"); + +ok(exists $elements{url}, + "found 'url'") + && is($elements{url},'EMPTY', + "'url' has correct content-model"); + +is((scalar keys %attributes), 3, + 'found correct elements with attributes'); + +is((scalar keys %{$attributes{person}}), 1, + 'person has correct number of attributes'); + +is((scalar keys %{$attributes{url}}), 1, + 'url has correct number of attributes'); + +is((scalar keys %{$attributes{link}}), 2, + 'link has correct number of attributes'); + + # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() + # when the module is unloaded. Xerces.pm no longer does this for us + # + # +XML::Xerces::XMLPlatformUtils::Terminate(); + + diff --git a/swig/perl/t/PSVIUni.t b/swig/perl/t/PSVIUni.t new file mode 100644 index 000000000..94cf3bd7b --- /dev/null +++ b/swig/perl/t/PSVIUni.t @@ -0,0 +1,42 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# PSVI.t' + +######################### Begin module loading + +# use blib; +use Test::More tests => 5; +BEGIN {use_ok("XML::Xerces")}; + +use strict; + +######################### Begin Test + + # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize() + # when the module is loaded. Xerces.pm no longer does this. + # + # +XML::Xerces::XMLPlatformUtils::Initialize(); + +# once the unicode constants were not being properly exported +# these tests guard against that happening again +is($XML::Xerces::PSVIUni::fgAbstract, 'psv:abstract', + 'PSVIUni constants exported'); +is($XML::Xerces::PSVIUni::fgAg, 'ag', + 'PSVIUni constants exported'); + +TODO: { + local $TODO = 'SWIG is exporting all class variables into top-level namespace'; + ok((not defined $XML::Xerces::PSVIUni_fgAbstract), + 'PSVIUni constants not in XML::Xerces namespace'); + ok((not defined $XML::Xerces::PSVIUni_fgAg), + 'PSVIUni constants not in XML::Xerces namespace'); +} + +END { + # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() + # when the module is unloaded. Xerces.pm no longer does this for us + # + # + XML::Xerces::XMLPlatformUtils::Terminate(); +} diff --git a/swig/perl/t/SEnumVal.t b/swig/perl/t/SEnumVal.t new file mode 100644 index 000000000..d3dfe65e2 --- /dev/null +++ b/swig/perl/t/SEnumVal.t @@ -0,0 +1,79 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# SEnumVal.t' + +######################### Begin module loading + +use blib; +use Test::More tests => 12; +BEGIN { use_ok(XML::Xerces::DOM) }; +use Config; + +use lib 't'; +use TestUtils qw($PERSONAL_SCHEMA_FILE_NAME $SAMPLE_DIR); + +use strict; + +######################### Begin Test + + # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize() + # when the module is loaded. Xerces.pm no longer does this. + # + # +XML::Xerces::XMLPlatformUtils::Initialize(); + +my $perl = $Config{startperl}; +$perl =~ s/^\#!//; +my $output = `$perl -Mblib $SAMPLE_DIR/SEnumVal.pl $PERSONAL_SCHEMA_FILE_NAME 2>/dev/null`; + +my @lines = split("\n", $output); + +my %elements; +my %attributes; +my $curr_elem; +foreach my $line (@lines) { + if ($line =~ /^Element Name: (\w+), Content Model: (.*)$/) { + $curr_elem = $1; + $elements{$curr_elem} = $2; + } elsif ($line =~ /^\s+attribute Name: (\w+), Type: (.*)$/) { + $attributes{$curr_elem}->{$1} = $2; + } +} +# diag("Found elements: " . scalar @elements); +is((scalar keys %elements), 8, + 'number of elements'); + +ok(exists $elements{name}, + "found 'name'") + && is($elements{name},'(family,given)', + "'name' has correct content-model"); + +ok(exists $elements{person}, + "found 'person'") + && is($elements{person},'((name,email,url),link)', + "'person' has correct content-model"); + +ok(exists $elements{url}, + "found 'url'") + && is($elements{url},'EMPTY', + "'url' has correct content-model"); + +is((scalar keys %attributes), 3, + 'found correct elements with attributes'); + +is((scalar keys %{$attributes{person}}), 4, + 'person has correct number of attributes'); + +is((scalar keys %{$attributes{url}}), 1, + 'url has correct number of attributes'); + +is((scalar keys %{$attributes{link}}), 2, + 'link has correct number of attributes'); + + # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() + # when the module is unloaded. Xerces.pm no longer does this for us + # + # +XML::Xerces::XMLPlatformUtils::Terminate(); + + diff --git a/swig/perl/t/SchemaSymbols.t b/swig/perl/t/SchemaSymbols.t new file mode 100644 index 000000000..87728abc7 --- /dev/null +++ b/swig/perl/t/SchemaSymbols.t @@ -0,0 +1,42 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# SchemaSymbols.t' + +######################### Begin module loading + +# use blib; +use Test::More tests => 5; +BEGIN {use_ok("XML::Xerces")}; + +use strict; + +######################### Begin Test + + # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize() + # when the module is loaded. Xerces.pm no longer does this. + # + # +XML::Xerces::XMLPlatformUtils::Initialize(); + +# once the unicode constants were not being properly exported +# these tests guard against that happening again +is($XML::Xerces::SchemaSymbols::fgURI_XSI, 'http://www.w3.org/2001/XMLSchema-instance', + 'XMLUni constants exported'); +is($XML::Xerces::SchemaSymbols::fgURI_SCHEMAFORSCHEMA, 'http://www.w3.org/2001/XMLSchema', + 'XMLUni constants exported'); + +TODO: { + local $TODO = 'SWIG is exporting all class variables into top-level namespace'; + ok((not defined $XML::Xerces::SchemaSymbols_fgURI_XSI), + 'XMLUni constants not in XML::Xerces namespace'); + ok((not defined $XML::Xerces::XMLUni_fgPubIDString), + 'XMLUni constants not in XML::Xerces namespace'); +} + +END { + # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() + # when the module is unloaded. Xerces.pm no longer does this for us + # + # + XML::Xerces::XMLPlatformUtils::Terminate(); +} diff --git a/swig/perl/t/XMLGrammarDescription.t b/swig/perl/t/XMLGrammarDescription.t new file mode 100644 index 000000000..cb6608533 --- /dev/null +++ b/swig/perl/t/XMLGrammarDescription.t @@ -0,0 +1,90 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# XMLGrammarDescription.t' + +######################### Begin module loading + +# use blib; +use Test::More tests => 23; +BEGIN { use_ok(XML::Xerces::DOM) }; + +use lib 't'; +use TestUtils qw($DOM $PERSONAL_FILE_NAME $PERSONAL_SCHEMA_FILE_NAME $SAMPLE_DIR); + +use strict; + +######################### Begin Test + +$DOM->setValidationScheme($XML::Xerces::AbstractDOMParser::Val_Auto); +$DOM->parse($PERSONAL_FILE_NAME); + +# test that we can fetch the grammar +my $grammar = $DOM->getValidator->getGrammar(); +isa_ok($grammar, "XML::Xerces::DTDGrammar", + 'DTD grammar'); + +# test dynamic cast for GrammarDescription +my $desc = $grammar->getGrammarDescription(); +isa_ok($desc, "XML::Xerces::XMLGrammarDescription", + 'grammar description'); +isa_ok($desc, "XML::Xerces::XMLDTDDescription", + 'grammar description'); + +is($desc->getGrammarType, $XML::Xerces::Grammar::DTDGrammarType, + 'getGrammarType - DTD'); +ok((not defined $desc->getRootName()), + "getRootName - not defined"); +is($desc->getSystemId(),'[dtd]', + "getSystemId"); +is($desc->getGrammarKey(), '[dtd]', + "getGrammarKey"); + +$DOM->setDoNamespaces(1); +$DOM->setDoSchema(1); +$DOM->setErrorHandler(undef); +my $file = "$SAMPLE_DIR/TypeInfoNoDTD.xml"; +$DOM->parse($file); + +$grammar = $DOM->getValidator->getGrammar(); +isa_ok($grammar, "XML::Xerces::SchemaGrammar", + 'schema grammar'); + +# test dynamic cast for GrammarDescription +$desc = $grammar->getGrammarDescription(); +isa_ok($desc, "XML::Xerces::XMLGrammarDescription", + 'getGrammarDescription'); +isa_ok($desc, "XML::Xerces::XMLSchemaDescription", + 'getGrammarDescription'); + +is($desc->getGrammarType, $XML::Xerces::Grammar::SchemaGrammarType, + 'getGrammarType - Schema'); + +is($desc->getGrammarKey(),'', + "getGrammarKey"); +is($desc->getTargetNamespace(), '', + "getTargetNamespace"); +is($desc->getContextType(), $XML::Xerces::XMLSchemaDescription::CONTEXT_PREPARSE, + 'getContextType - PREPARSE'); +ok((not defined $desc->getEnclosingElementName()), + "getEnclosingElementName"); +ok((not defined $desc->getTriggeringComponent()), + "getTriggeringComponent"); +ok((not defined $desc->getAttributes()), + "getAttributes"); + +my $hints = $desc->getLocationHints(); +isa_ok($hints, "XML::Xerces::XMLChVector", + 'getLocationHints'); +is($hints->size(),1, + "getLocationHints"); + +$file =~ s/\.xml/.xsd/; +is($hints->elementAt(0), $file, + 'hint is schema'); + +my @hints = $desc->getLocationHints(); +is((scalar @hints),1, + "overloaded getLocationHints"); + +is($hints[0], $hints->elementAt(0), + 'XMLChVector equality'); diff --git a/swig/perl/t/XMLValidator.t b/swig/perl/t/XMLValidator.t new file mode 100644 index 000000000..e56d64d76 --- /dev/null +++ b/swig/perl/t/XMLValidator.t @@ -0,0 +1,123 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# XMLValidator.t' + +######################### Begin module loading + +use blib; +use Test::More tests => 38; +BEGIN { use_ok(XML::Xerces::DOM) }; +BEGIN { use_ok(XML::Xerces::SAX) }; + +use lib 't'; +use TestUtils qw($PERSONAL_SCHEMA_FILE_NAME $PERSONAL_FILE_NAME); + +use strict; + +######################### Begin Test + + # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize() + # when the module is loaded. Xerces.pm no longer does this. + # + # +XML::Xerces::XMLPlatformUtils::Initialize(); + +foreach my $sub (\&getDOMParser, \&getSAXParser, \&getSAX2Parser) { + my $val_to_use = XML::Xerces::DTDValidator->new(); + isa_ok($val_to_use, "XML::Xerces::DTDValidator", + 'validator'); + + ok($val_to_use->handlesDTD(), + 'validator handles DTD'); + + ok((not $val_to_use->handlesSchema()), + 'validator handles Schema'); + + ok((not $val_to_use->requiresNamespaces()), + 'validator requires namespaces'); + + my $schema = 0; + my ($parser,$name) = $sub->($val_to_use, $schema = 0); + + eval {$parser->parse ($PERSONAL_FILE_NAME)}; + XML::Xerces::error($@) if $@; + + is($parser->getErrorCount(),0, + "$name - successful parse"); + + my $grammar = $val_to_use->getGrammar(); + isa_ok($grammar, "XML::Xerces::DTDGrammar", + "$name - grammar"); + + $val_to_use = XML::Xerces::SchemaValidator->new(); + isa_ok($val_to_use, "XML::Xerces::SchemaValidator", + "$name - validator"); + + ok((not $val_to_use->handlesDTD()), + 'validator handles DTD'); + + ok($val_to_use->handlesSchema(), + 'validator handles Schema'); + + ok($val_to_use->requiresNamespaces(), + 'validator requires namespaces'); + + ($parser,$name) = $sub->($val_to_use, $schema = 1); + + eval {$parser->parse ($PERSONAL_SCHEMA_FILE_NAME)}; + XML::Xerces::error($@) if $@; + + is($parser->getErrorCount(),0, + "$name - successful parse"); + + $grammar = $val_to_use->getGrammar(); + isa_ok($grammar, "XML::Xerces::SchemaGrammar", + "$name - grammar"); +} + + # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() + # when the module is unloaded. Xerces.pm no longer does this for us + # + # +XML::Xerces::XMLPlatformUtils::Terminate(); + + +sub getDOMParser { + my $validator = shift; + my $schema = shift; + my $parser = XML::Xerces::XercesDOMParser->new($validator); + $parser->setValidationScheme($XML::Xerces::AbstractDOMParser::Val_Auto); + $parser->setErrorHandler(XML::Xerces::PerlErrorHandler->new()); + if ($schema) { + $parser->setDoNamespaces(1); + $parser->setDoSchema(1); + } + return $parser, 'DOM'; +} + +sub getSAXParser { + my $validator = shift; + my $schema = shift; + my $parser = XML::Xerces::SAXParser->new($validator); + $parser->setValidationScheme($XML::Xerces::SAXParser::Val_Auto); + $parser->setErrorHandler(XML::Xerces::PerlErrorHandler->new()); + if ($schema) { + $parser->setDoNamespaces(1); + $parser->setDoSchema(1); + } + return $parser, 'SAX'; +} + +sub getSAX2Parser { + my $validator = shift; + my $schema = shift; + my $parser = XML::Xerces::XMLReaderFactory::createXMLReader(); + $parser->setErrorHandler(XML::Xerces::PerlErrorHandler->new()); + $parser->setValidator($validator); + $parser->setFeature($XML::Xerces::XMLUni::fgSAX2CoreValidation, 1); + $parser->setFeature($XML::Xerces::XMLUni::fgXercesDynamic, 0); + if ($schema) { + $parser->setFeature($XML::Xerces::XMLUni::fgXercesSchema, 1); + } + return $parser, 'SAX2'; +} -- GitLab