Author: jasons Date: Mon Nov 10 09:46:55 2003 New Revision: 101 Added: xml/xerces-p/trunk/t/DOMBuilder.t xml/xerces-p/trunk/t/DOMParser.t xml/xerces-p/trunk/t/SAX2XMLReader.t Log: new
Added: xml/xerces-p/trunk/t/DOMBuilder.t ============================================================================== --- (empty file) +++ xml/xerces-p/trunk/t/DOMBuilder.t Mon Nov 10 09:46:55 2003 @@ -0,0 +1,85 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# DOMParser.t' + +######################### We start with some black magic to print on failure. + +END {fail() unless $loaded;} + +use Carp; +# use blib; +use XML::Xerces qw(error); +use Test::More tests => 12; +use Config; + +use lib 't'; +use TestUtils qw($PERSONAL_FILE_NAME); +use vars qw($loaded $error); +use strict; + +$loaded = 1; +pass('module loaded'); + +######################### End of black magic. + +my $document = q[<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<contributors> + <person Role="manager"> + <name>Mike Pogue</name> + <email>[EMAIL PROTECTED]</email> + </person> + <person Role="developer"> + <name>Tom Watson</name> + <email>[EMAIL PROTECTED]</email> + </person> + <person Role="tech writer"> + <name>Susan Hardenbrook</name> + <email>[EMAIL PROTECTED]</email> + </person> +</contributors>]; + +my $impl = XML::Xerces::DOMImplementationRegistry::getDOMImplementation('LS'); +my $DOM = $impl->createDOMBuilder($XML::Xerces::DOMImplementationLS::MODE_SYNCHRONOUS,''); +SKIP: { + skip "DOMErrorHandler not implemented", 1; + $DOM->setErrorHandler(XML::Xerces::PerlErrorHandler->new()); + pass('setErrorHandler'); +} +if ($DOM->canSetFeature("$XML::Xerces::XMLUni::fgDOMValidation", 1)) { + $DOM->setFeature("$XML::Xerces::XMLUni::fgDOMValidation", 1); + pass('validation=>1'); +} else { + fail('validation=>1'); +} +if ($DOM->canSetFeature("$XML::Xerces::XMLUni::fgDOMValidateIfSchema", 0)) { + $DOM->setFeature("$XML::Xerces::XMLUni::fgDOMValidateIfSchema", 0); + pass('validate_if_schema=>1'); +} else { + fail('validate_if_schema=>1'); +} + +SKIP: { + skip "DOMInputSource not implemented", 2; + my $is = eval{$impl->createDOMInputSource()}; + ok(defined $is) + or diag + $is->setSystemId($PERSONAL_FILE_NAME); + eval{$DOM->parse($is)}; + ok((not $@),'parse input source'); +} + +my $doc = eval{$DOM->parseURI($PERSONAL_FILE_NAME)}; +ok((not $@),'parseURI'); +isa_ok($doc,'XML::Xerces::DOMDocument'); + +my @persons = $doc->getElementsByTagName('person'); +is(scalar @persons, 6,'getting <person>s'); + +# test the overloaded parse version +$doc = eval{$DOM->parseURI("file:$PERSONAL_FILE_NAME")}; +ok((not $@),'parseURI with file:'); +isa_ok($doc,'XML::Xerces::DOMDocument'); + [EMAIL PROTECTED] = $doc->getElementsByTagName('person'); +is(scalar @persons, 6,'getting <person>s'); + Added: xml/xerces-p/trunk/t/DOMParser.t ============================================================================== --- (empty file) +++ xml/xerces-p/trunk/t/DOMParser.t Mon Nov 10 09:46:55 2003 @@ -0,0 +1,150 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# DOMParser.t' + +######################### We start with some black magic to print on failure. + +END {ok(0) unless $loaded;} + +use Carp; +# use blib; +use XML::Xerces qw(error); +use Test::More tests => 11; +use Config; + +use lib 't'; +use TestUtils qw($PERSONAL_FILE_NAME); +use vars qw($loaded $error); +use strict; + +$loaded = 1; +ok($loaded, "module loaded"); + +######################### End of black magic. + +my $document = q[<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<contributors> + <person Role="manager"> + <name>Mike Pogue</name> + <email>[EMAIL PROTECTED]</email> + </person> + <person Role="developer"> + <name>Tom Watson</name> + <email>[EMAIL PROTECTED]</email> + </person> + <person Role="tech writer"> + <name>Susan Hardenbrook</name> + <email>[EMAIL PROTECTED]</email> + </person> +</contributors>]; + +my $DOM = XML::Xerces::XercesDOMParser->new(); +$DOM->setErrorHandler(XML::Xerces::PerlErrorHandler->new()); +$DOM->setValidationScheme ($XML::Xerces::AbstractDOMParser::Val_Always); + +eval{$DOM->parse(XML::Xerces::MemBufInputSource->new($document, 'foo'))}; +ok($@,'no dtd'); + +$DOM = XML::Xerces::XercesDOMParser->new(); +$DOM->setErrorHandler(XML::Xerces::PerlErrorHandler->new()); + +eval{$DOM->parse(XML::Xerces::MemBufInputSource->new($document, 'foo'))}; +ok((not $@),'membuf parse'); + +# test the overloaded parse version +$DOM->parse($PERSONAL_FILE_NAME); +pass('parse filename'); + + +# test the progressive parsing interface +my $token = XML::Xerces::XMLPScanToken->new(); +$DOM->parseFirst($PERSONAL_FILE_NAME,$token); +while ($DOM->parseNext($token)) { + # do nothing +} +pass('progressive parse'); + + + +# test that we can reuse the parse again and again +$document = <<\END; +<?xml version="1.0" encoding="iso-8859-1" standalone="no"?> + +<!-- @version: --> +<personnel> + + <person id="Big.Boss"> + <name><family>Boss</family> <given>Big</given></name> + <email>[EMAIL PROTECTED]</email> + <link subordinates="one.worker two.worker three.worker four.worker five.worker"/> + </person> + + <foo id="two.worker"> + <name><family>Worker</family> <given>Two</given></name> + <email>[EMAIL PROTECTED]</email> + <link manager="Big.Boss"/> + </person> + +</personnel> +END +package MyErrorHandler; +use strict; +use vars qw(@ISA); [EMAIL PROTECTED] = qw(XML::Xerces::PerlErrorHandler); +sub warning { +} + +sub error { + my $LINE = $_[1]->getLineNumber; + my $COLUMN = $_[1]->getColumnNumber; + my $MESSAGE = $_[1]->getMessage; + $::error = <<"EOE"; +ERROR: +LINE: $LINE +COLUMN: $COLUMN +MESSAGE: $MESSAGE +EOE + die(); +} + +sub fatal_error { + my $LINE = $_[1]->getLineNumber; + my $COLUMN = $_[1]->getColumnNumber; + my $MESSAGE = $_[1]->getMessage; + $::error = <<"EOE"; +FATAL ERROR: +LINE: $LINE +COLUMN: $COLUMN +MESSAGE: $MESSAGE +EOE + die(); +} +1; + +package main; +$token = XML::Xerces::XMLPScanToken->new(); +$DOM->setErrorHandler(MyErrorHandler->new()); +$::error = ''; +eval { + $DOM->parseFirst(XML::Xerces::MemBufInputSource->new($document),$token); + while ($DOM->parseNext($token)) { + } +}; +ok($::error,'fatal error in progressive parse') + or diag("Here's the error: $@"); +my $doc = $DOM->getDocument(); +ok($doc,'doc'); +my $root = $doc->getDocumentElement(); +ok($root,'root'); +my ($person) = $root->getElementsByTagName('person'); +ok($person,'person'); +my ($foo) = $root->getElementsByTagName('foo'); +ok($foo,'foo'); + +$::error = ''; +$DOM->parseReset($token); +eval { + $DOM->parse(XML::Xerces::MemBufInputSource->new($document)); +}; +ok($::error,'fatal error in parse') + or diag("Here's the error: $@"); Added: xml/xerces-p/trunk/t/SAX2XMLReader.t ============================================================================== --- (empty file) +++ xml/xerces-p/trunk/t/SAX2XMLReader.t Mon Nov 10 09:46:55 2003 @@ -0,0 +1,218 @@ +# Before `make install' is performed this script should be runnable +# with `make test'. After `make install' it should work as `perl +# SAX2XMLReader.t' + +######################### We start with some black magic to print on failure. + +END {ok(0) unless $loaded;} + +use Carp; +# use blib; +use XML::Xerces qw(error); +use Test::More tests => 16; +use Config; + +use lib 't'; +use TestUtils qw($PERSONAL_FILE_NAME); +use vars qw($loaded $error); +use strict; + +$loaded = 1; +ok($loaded, "module loaded"); + +######################### End of black magic. + +my $document = q[<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<contributors> + <person Role="manager"> + <name>Mike Pogue</name> + <email>[EMAIL PROTECTED]</email> + </person> + <person Role="developer"> + <name>Tom Watson</name> + <email>[EMAIL PROTECTED]</email> + </person> + <person Role="tech writer"> + <name>Susan Hardenbrook</name> + <email>[EMAIL PROTECTED]</email> + </person> +</contributors>]; + +package MyContentHandler; +use strict; +use vars qw(@ISA); [EMAIL PROTECTED] = qw(XML::Xerces::PerlContentHandler); + +sub start_element { + my $self = shift; + $self->{elements}++; +} +sub characters { + my ($self,$str,$len) = @_; + $self->{chars} += $len; +} +sub ignorable_whitespace { + my ($self,$str,$len) = @_; + $self->{ws} += $len; +} + +sub reset_document { + my ($self) = @_; + $self->{ws} = 0; + $self->{chars} = 0; + $self->{elements} = 0; +} + +package main; +my $SAX = XML::Xerces::XMLReaderFactory::createXMLReader(); +my $CONTENT_HANDLER = MyContentHandler->new(); +$SAX->setContentHandler($CONTENT_HANDLER); +$SAX->setErrorHandler(XML::Xerces::PerlErrorHandler->new()); +eval { + $SAX->setFeature("$XML::Xerces::XMLUni::fgSAX2CoreValidation", 1); + $SAX->setFeature("$XML::Xerces::XMLUni::fgXercesDynamic", 0); +}; +ok((not $@),'setting validate=>yes, dynamic=>no') + or diag("Here's the error: $@"); + +eval{$SAX->parse(XML::Xerces::MemBufInputSource->new($document, 'foo'))}; +ok($@,'no dtd'); + +$SAX = XML::Xerces::XMLReaderFactory::createXMLReader(); +$SAX->setContentHandler($CONTENT_HANDLER); +$SAX->setErrorHandler(XML::Xerces::PerlErrorHandler->new()); +eval { + $SAX->setFeature("$XML::Xerces::XMLUni::fgSAX2CoreValidation", 1); + $SAX->setFeature("$XML::Xerces::XMLUni::fgXercesDynamic", 1); +}; +ok((not $@),'setting dynamic=>yes') + or diag("Here's the error: $@"); + + +# reset the counts +$CONTENT_HANDLER->reset_document(); + +eval{$SAX->parse(XML::Xerces::MemBufInputSource->new($document, 'foo'))}; +ok((not $@),'membuf parse'); + +ok($CONTENT_HANDLER->{elements} == 10,'elements'); +ok($CONTENT_HANDLER->{chars} == 141,'chars'); +ok($CONTENT_HANDLER->{ws} == 0,'ws'); + +# test the overloaded parse version +$SAX->parse($PERSONAL_FILE_NAME); +pass('parse filename'); + +# reset the counts +$CONTENT_HANDLER->reset_document(); + +# test the progressive parsing interface +my $token = XML::Xerces::XMLPScanToken->new(); +$SAX->parseFirst($PERSONAL_FILE_NAME,$token); +while ($SAX->parseNext($token)) { + # do nothing +} +pass('progressive parse'); +ok($CONTENT_HANDLER->{elements} == 37, 'element count after progressive parse'); + + +# reset the counts, and parser for new parse +$CONTENT_HANDLER->reset_document(); +$SAX->parseReset($token); + +# test the progressive parsing interface +$token = XML::Xerces::XMLPScanToken->new(); +$SAX->parseFirst($PERSONAL_FILE_NAME,$token); +while ($SAX->parseNext($token)) { + last if $CONTENT_HANDLER->{elements} == 10; +} +pass('early exit from progressive parse'); +ok($CONTENT_HANDLER->{elements} == 10, 'element count after early exit from progressive parse'); + +# reset the parser for new parse +$SAX->parseReset($token); + +# test that we can reuse the parse again and again +$document = <<\END; +<?xml version="1.0" encoding="iso-8859-1" standalone="no"?> + +<!-- @version: --> +<personnel> + + <person id="Big.Boss"> + <name><family>Boss</family> <given>Big</given></name> + <email>[EMAIL PROTECTED]</email> + <link subordinates="one.worker two.worker three.worker four.worker five.worker"/> + </person> + + <person id="one.worker"> + <name><family>Worker</family> <given>One</given></name> + <email>[EMAIL PROTECTED]</email> + <link manager="Big.Boss"/> + </person> + + <foo id="two.worker"> + <name><family>Worker</family> <given>Two</given></name> + <email>[EMAIL PROTECTED]</email> + <link manager="Big.Boss"/> + </person> + +</personnel> +END +package MyErrorHandler; +use strict; +use vars qw(@ISA); [EMAIL PROTECTED] = qw(XML::Xerces::PerlErrorHandler); +sub warning { +} + +sub error { + my $LINE = $_[1]->getLineNumber; + my $COLUMN = $_[1]->getColumnNumber; + my $MESSAGE = $_[1]->getMessage; + $::error = <<"EOE"; +ERROR: +LINE: $LINE +COLUMN: $COLUMN +MESSAGE: $MESSAGE +EOE + die(); +} + +sub fatal_error { + my $LINE = $_[1]->getLineNumber; + my $COLUMN = $_[1]->getColumnNumber; + my $MESSAGE = $_[1]->getMessage; + $::error = <<"EOE"; +FATAL ERROR: +LINE: $LINE +COLUMN: $COLUMN +MESSAGE: $MESSAGE +EOE + die(); +} +1; + +package main; +$token = XML::Xerces::XMLPScanToken->new(); +$SAX->setErrorHandler(MyErrorHandler->new()); +$::error = ''; +eval { + $SAX->parseFirst(XML::Xerces::MemBufInputSource->new($document),$token); + while ($SAX->parseNext($token)) { + # do nothing + } +}; +ok($::error,'fatal error in progressive parse') + or diag("Here's the error: $@"); + +# reset the state for a new parse +$::error = ''; +$SAX->parseReset($token); +$SAX->setErrorHandler(XML::Xerces::PerlErrorHandler->new()); + +eval {$SAX->parse($PERSONAL_FILE_NAME)}; +ok((not $@),'successful parse after fatal error'); + +eval {$SAX->parse(XML::Xerces::MemBufInputSource->new($document))}; +ok($@,'fatal error in parse'); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]