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