# 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[
Mike Poguempogue@us.ibm.comTom Watsonrtwatson@us.ibm.comSusan Hardenbrooksusanhar@us.ibm.com];
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;
BossBigchief@foo.comWorkerTwotwo@foo.com
END
package MyErrorHandler;
use strict;
use vars qw(@ISA);
@ISA = 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: $@");