|
Packit |
d27c7e |
# Hey Emacs, this is -*- perl -*- !
|
|
Packit |
d27c7e |
#
|
|
Packit |
d27c7e |
# Before `make install' is performed this script should be runnable with
|
|
Packit |
d27c7e |
# `make test'. After `make install' it should work as `perl test.pl'
|
|
Packit |
d27c7e |
#
|
|
Packit |
d27c7e |
# $Id: xp_sax.t,v 1.4 1999/09/10 00:30:12 kmacleod Exp $
|
|
Packit |
d27c7e |
#
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
######################### We start with some black magic to print on failure.
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
# Change 1..1 below to 1..last_test_to_print .
|
|
Packit |
d27c7e |
# (It may become useful if the test is moved to ./t subdirectory.)
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
BEGIN { $| = 1; print "1..15\n"; }
|
|
Packit |
d27c7e |
END {print "not ok 1\n" unless $loaded;}
|
|
Packit |
d27c7e |
use XML::Parser::PerlSAX;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
$loaded = 1;
|
|
Packit |
d27c7e |
print "ok 1\n";
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
######################### End of black magic.
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
# Insert your test code below (better if it prints "ok 13"
|
|
Packit |
d27c7e |
# (correspondingly "not ok 13") depending on the success of chunk 13
|
|
Packit |
d27c7e |
# of the test code):
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
# Test Plan:
|
|
Packit |
d27c7e |
#
|
|
Packit |
d27c7e |
# * done; standard loading test
|
|
Packit |
d27c7e |
# * not done; parse a document with data for all events
|
|
Packit |
d27c7e |
# * not done; check all properties returned from events
|
|
Packit |
d27c7e |
# * not done; check location
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
#
|
|
Packit |
d27c7e |
# The following is copied from XML::Parser by Clark Cooper
|
|
Packit |
d27c7e |
#
|
|
Packit |
d27c7e |
open(ZOE, '>zoe.ent');
|
|
Packit |
d27c7e |
print ZOE "'cute'";
|
|
Packit |
d27c7e |
close(ZOE);
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
# XML string for tests
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
my $xmlstring =<<"End_of_XML;";
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
[
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
]>
|
|
Packit |
d27c7e |
<foo>
|
|
Packit |
d27c7e |
First line in foo
|
|
Packit |
d27c7e |
<boom>Fran is &fran; and Zoe is &zoe;</boom>
|
|
Packit |
d27c7e |
<bar id="jack" stomp="jill">
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
1st line in bar
|
|
Packit |
d27c7e |
<blah> 2nd line in bar </blah>
|
|
Packit |
d27c7e |
3rd line in bar
|
|
Packit |
d27c7e |
</bar>
|
|
Packit |
d27c7e |
<zap ref="zing" />
|
|
Packit |
d27c7e |
This, '\240', would be a bad character in UTF-8.
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
This is a CDATA marked section.
|
|
Packit |
d27c7e |
]]>
|
|
Packit |
d27c7e |
</foo>
|
|
Packit |
d27c7e |
End_of_XML;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
# Handlers
|
|
Packit |
d27c7e |
my @tests;
|
|
Packit |
d27c7e |
my $pos ='';
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
my $parser = XML::Parser::PerlSAX->new;
|
|
Packit |
d27c7e |
if ($parser) {
|
|
Packit |
d27c7e |
print "ok 2\n";
|
|
Packit |
d27c7e |
} else {
|
|
Packit |
d27c7e |
print "not ok 2\n";
|
|
Packit |
d27c7e |
exit;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
# Tests 4..15
|
|
Packit |
d27c7e |
eval {
|
|
Packit |
d27c7e |
$parser->parse( Source => { String => $xmlstring,
|
|
Packit |
d27c7e |
Encoding => 'ISO-8859-1' },
|
|
Packit |
d27c7e |
Handler => TestHandler->new( Tests => \@tests ) );
|
|
Packit |
d27c7e |
};
|
|
Packit |
d27c7e |
warn $@ if $@;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
if ($@) {
|
|
Packit |
d27c7e |
print "Parse error:\n$@";
|
|
Packit |
d27c7e |
} else {
|
|
Packit |
d27c7e |
$tests[3] ++;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
unlink('zoe.ent') if (-f 'zoe.ent');
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
$xmlstring = <<'EOF;';
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
]>
|
|
Packit |
d27c7e |
<foo>&anEntRef;</foo>
|
|
Packit |
d27c7e |
EOF;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
eval {
|
|
Packit |
d27c7e |
$parser->parse( Source => { String => $xmlstring },
|
|
Packit |
d27c7e |
Handler => NoEntRefsHandler->new( Tests => \@tests ) );
|
|
Packit |
d27c7e |
};
|
|
Packit |
d27c7e |
warn $@ if $@;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
eval {
|
|
Packit |
d27c7e |
$parser->parse( Source => { String => $xmlstring },
|
|
Packit |
d27c7e |
Handler => EntRefsHandler->new( Tests => \@tests ) );
|
|
Packit |
d27c7e |
};
|
|
Packit |
d27c7e |
warn $@ if $@;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
for (3 .. 15)
|
|
Packit |
d27c7e |
{
|
|
Packit |
d27c7e |
print "not " unless $tests[$_];
|
|
Packit |
d27c7e |
print "ok $_\n";
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
exit;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
package TestHandler;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub new {
|
|
Packit |
d27c7e |
my $type = shift;
|
|
Packit |
d27c7e |
return bless { @_ }, $type;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub characters {
|
|
Packit |
d27c7e |
my $self = shift;
|
|
Packit |
d27c7e |
$self->{Tests}[4] ++;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub start_element {
|
|
Packit |
d27c7e |
my $self = shift;
|
|
Packit |
d27c7e |
$self->{Tests}[5] ++;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub end_element {
|
|
Packit |
d27c7e |
my $self = shift;
|
|
Packit |
d27c7e |
$self->{Tests}[6] ++;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub processing_instruction {
|
|
Packit |
d27c7e |
my $self = shift;
|
|
Packit |
d27c7e |
$self->{Tests}[7] ++;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub notation_decl {
|
|
Packit |
d27c7e |
my $self = shift;
|
|
Packit |
d27c7e |
$self->{Tests}[8] ++;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub unparsed_entity_decl {
|
|
Packit |
d27c7e |
my $self = shift;
|
|
Packit |
d27c7e |
$self->{Tests}[9] ++;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub start_cdata {
|
|
Packit |
d27c7e |
my $self = shift;
|
|
Packit |
d27c7e |
$self->{Tests}[12] ++;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub end_cdata {
|
|
Packit |
d27c7e |
my $self = shift;
|
|
Packit |
d27c7e |
$self->{Tests}[13] ++;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub resolve_entity {
|
|
Packit |
d27c7e |
my $self = shift;
|
|
Packit |
d27c7e |
my $entity = shift;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
if ($entity->{SystemId} eq 'fran-def') {
|
|
Packit |
d27c7e |
$self->{Tests}[10] ++;
|
|
Packit |
d27c7e |
return { String => 'pretty' };
|
|
Packit |
d27c7e |
} elsif ($entity->{SystemId} eq 'zoe.ent') {
|
|
Packit |
d27c7e |
$self->{Tests}[11] ++;
|
|
Packit |
d27c7e |
local(*FOO);
|
|
Packit |
d27c7e |
open(FOO, $entity->{SystemId}) or die "Couldn't open $entity->{SystemId}";
|
|
Packit |
d27c7e |
return { ByteStream => *FOO };
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
package NoEntRefsHandler;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub new {
|
|
Packit |
d27c7e |
my $type = shift;
|
|
Packit |
d27c7e |
return bless { @_ }, $type;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub characters {
|
|
Packit |
d27c7e |
my $self = shift;
|
|
Packit |
d27c7e |
my $characters = shift;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
if ($characters->{Data} eq 'The Ent Ref') {
|
|
Packit |
d27c7e |
$self->{Tests}[14] ++;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
package EntRefsHandler;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub new {
|
|
Packit |
d27c7e |
my $type = shift;
|
|
Packit |
d27c7e |
return bless { @_ }, $type;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub characters {
|
|
Packit |
d27c7e |
my $self = shift;
|
|
Packit |
d27c7e |
my $characters = shift;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
if ($characters->{Data} eq 'The Ent Ref') {
|
|
Packit |
d27c7e |
die "shouldn't have made it here";
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
sub entity_reference {
|
|
Packit |
d27c7e |
my $self = shift;
|
|
Packit |
d27c7e |
my $ent_ref = shift;
|
|
Packit |
d27c7e |
|
|
Packit |
d27c7e |
if (($ent_ref->{Name} eq 'anEntRef')
|
|
Packit |
d27c7e |
&& ($ent_ref->{Value} eq 'The Ent Ref')) {
|
|
Packit |
d27c7e |
$self->{Tests}[15] ++;
|
|
Packit |
d27c7e |
}
|
|
Packit |
d27c7e |
}
|