Blame t/xp_sax.t

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
}