summaryrefslogtreecommitdiff
path: root/t/namespaces.t
diff options
context:
space:
mode:
Diffstat (limited to 't/namespaces.t')
-rw-r--r--t/namespaces.t133
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);