diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2007-11-20 14:28:05 +0000 |
---|---|---|
committer | <> | 2013-08-08 17:01:04 +0000 |
commit | c97631728ce7d6d3f4692a56c3cda7476b42a968 (patch) | |
tree | 8c00053771ccae41a737eecd072dbb3cd8b06fdd /t/parament.t | |
download | perl-xml-parser-master.tar.gz |
Imported from /home/lorry/working-area/delta_perl-xml-parser/XML-Parser-2.36.tar.gz.HEADXML-Parser-2.36master
Diffstat (limited to 't/parament.t')
-rw-r--r-- | t/parament.t | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/t/parament.t b/t/parament.t new file mode 100644 index 0000000..0a04277 --- /dev/null +++ b/t/parament.t @@ -0,0 +1,117 @@ +BEGIN {print "1..12\n";} +END {print "not ok 1\n" unless $loaded;} +use XML::Parser; +$loaded = 1; +print "ok 1\n"; + +my $internal_subset =<<'End_of_internal;'; +[ + <!ENTITY % foo "IGNORE"> + <!ENTITY % bar "INCLUDE"> + <!ENTITY more SYSTEM "t/ext2.ent"> +] +End_of_internal; + +my $doc =<<"End_of_doc;"; +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE foo SYSTEM "t/foo.dtd" +$internal_subset> +<foo>Happy, happy +<bar>&joy;, &joy;</bar> +<ext/> +&more; +</foo> +End_of_doc; + +my $gotinclude = 0; +my $gotignore = 0; +my $doctype_called = 0; +my $internal_exists = 0; +my $gotmore = 0; + +my $bartxt = ''; + +sub start { + my ($xp, $el, %atts) = @_; + + if ($el eq 'foo') { + print "not " if defined($atts{top}); + print "ok 2\n"; + print "not " unless defined($atts{zz}); + print "ok 3\n"; + } + elsif ($el eq 'bar') { + print "not " unless (defined $atts{xyz} and $atts{xyz} eq 'b'); + print "ok 4\n"; + } + elsif ($el eq 'ext') { + print "not " unless (defined $atts{type} and $atts{type} eq 'flag'); + print "ok 5\n"; + } + elsif ($el eq 'more') { + $gotmore = 1; + } +} + +sub char { + my ($xp, $text) = @_; + + $bartxt .= $text if $xp->current_element eq 'bar'; +} + +sub attl { + my ($xp, $el, $att, $type, $dflt, $fixed) = @_; + + $gotinclude = 1 if ($el eq 'bar' and $att eq 'xyz' and $dflt eq "'b'"); + $gotignore = 1 if ($el eq 'foo' and $att eq 'top' and $dflt eq '"hello"'); +} + +sub dtd { + my ($xp, $name, $sysid, $pubid, $internal) = @_; + + $doctype_called = 1; + $internal_exists = $internal; +} + +$p = new XML::Parser(ParseParamEnt => 1, + ErrorContext => 2, + Handlers => {Start => \&start, + Char => \&char, + Attlist => \&attl, + Doctype => \&dtd + } + ); + +$p->parse($doc); + +print "not " unless $gotmore; +print "ok 6\n"; + +print "not " unless $bartxt eq ($] < 5.006) + ? "\xe5\x83\x96, \xe5\x83\x96" + : chr(0x50d6). ", " . chr(0x50d6); +print "ok 7\n"; + +print "not " unless $gotinclude; +print "ok 8\n"; + +print "not " if $gotignore; +print "ok 9\n"; + +print "not " unless $doctype_called; +print "ok 10\n"; + +print "not " unless $internal_exists; +print "ok 11\n"; + +$doc =~ s/[\s\n]+\[[^]]*\][\s\n]+//m; + +$p->setHandlers(Start => sub { + my ($xp,$el,%atts) = @_; + if ($el eq 'foo') { + print "not " unless defined($atts{zz}); + print "ok 12\n"; + } + }); + +$p->parse($doc); |