diff options
Diffstat (limited to 't/namespaces.t')
-rw-r--r-- | t/namespaces.t | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/t/namespaces.t b/t/namespaces.t new file mode 100644 index 0000000..bbc48d7 --- /dev/null +++ b/t/namespaces.t @@ -0,0 +1,133 @@ +BEGIN {print "1..16\n";} +END {print "not ok 1\n" unless $loaded;} +use XML::Parser; +$loaded = 1; +print "ok 1\n"; + +################################################################ +# Check namespaces + +$docstring =<<'End_of_doc;'; +<foo xmlns="urn:blazing-saddles" + xmlns:bar="urn:young-frankenstein" + bar:alpha="17"> + <zebra xyz="nothing"/> + <tango xmlns="" + xmlns:zoo="urn:high-anxiety" + beta="blue" + zoo:beta="green" + bar:beta="red"> + <?nscheck?> + <zoo:here/> + <there/> + </tango> + <everywhere/> +</foo> +End_of_doc; + +my $gname; + +sub init { + my $xp = shift; + $gname = $xp->generate_ns_name('alpha', 'urn:young-frankenstein'); +} + +sub start { + my $xp = shift; + my $el = shift; + + if ($el eq 'foo') { + print "not " unless $xp->namespace($el) eq 'urn:blazing-saddles'; + print "ok 2\n"; + + print "not " unless $xp->new_ns_prefixes == 2; + print "ok 3\n"; + + while (@_) { + my $att = shift; + my $val = shift; + if ($att eq 'alpha') { + print "not " unless $xp->eq_name($gname, $att); + print "ok 4\n"; + last; + } + } + } + elsif ($el eq 'zebra') { + print "not " unless $xp->new_ns_prefixes == 0; + print "ok 5\n"; + + print "not " unless $xp->namespace($el) eq 'urn:blazing-saddles'; + print "ok 6\n"; + } + elsif ($el eq 'tango') { + print "not " if $xp->namespace($_[0]); + print "ok 8\n"; + + print "not " unless $_[0] eq $_[2]; + print "ok 9\n"; + + print "not " if $xp->eq_name($_[0], $_[2]); + print "ok 10\n"; + + my $cnt = 0; + foreach ($xp->new_ns_prefixes) { + $cnt++ if $_ eq '#default'; + $cnt++ if $_ eq 'zoo'; + } + + print "not " unless $cnt == 2; + print "ok 11\n"; + } +} + +sub end { + my $xp = shift; + my $el = shift; + + if ($el eq 'zebra') { + print "not " + unless $xp->expand_ns_prefix('#default') eq 'urn:blazing-saddles'; + print "ok 7\n"; + } + elsif ($el eq 'everywhere') { + print "not " unless $xp->namespace($el) eq 'urn:blazing-saddles'; + print "ok 16\n"; + } +} + +sub proc { + my $xp = shift; + my $target = shift; + + if ($target eq 'nscheck') { + print "not " if $xp->new_ns_prefixes > 0; + print "ok 12\n"; + + my $cnt = 0; + foreach ($xp->current_ns_prefixes) { + $cnt++ if $_ eq 'zoo'; + $cnt++ if $_ eq 'bar'; + } + + print "not " unless $cnt == 2; + print "ok 13\n"; + + print "not " + unless $xp->expand_ns_prefix('bar') eq 'urn:young-frankenstein'; + print "ok 14\n"; + + print "not " + unless $xp->expand_ns_prefix('zoo') eq 'urn:high-anxiety'; + print "ok 15\n"; + } +} + +my $parser = new XML::Parser(ErrorContext => 2, + Namespaces => 1, + Handlers => {Start => \&start, + End => \&end, + Proc => \&proc, + Init => \&init}); + +$parser->parse($docstring); |