X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=tests%2Fxml-diff.pl;h=eba854f10e7a4e8bbfa475836e3c009d5a111315;hb=5f6bd25ff12f3c1b4870449afdf353a2ff5aafce;hp=82154ae5528aea7428e81d01ecef22e60328646a;hpb=6b94d9e5334cd9d4bde91646f903dccbd468dfb6;p=xml-template diff --git a/tests/xml-diff.pl b/tests/xml-diff.pl index 82154ae..eba854f 100644 --- a/tests/xml-diff.pl +++ b/tests/xml-diff.pl @@ -5,11 +5,12 @@ # regression testing. # +use strict; +use warnings; + use XML::DOM; use XML::Parser; use XML::NamespaceSupport; -use Scalar::Util; -package XML::Template; my $parser = XML::DOM::Parser->new; my $d1 = $parser->parsefile($ARGV[0]); @@ -24,7 +25,7 @@ sub compare { if ($n1->getNodeType != $n2->getNodeType) { printf STDERR "Node types don't match (%u vs. %u)\n", - $n1->getNodeType, $n2->getNodeType); + $n1->getNodeType, $n2->getNodeType; exit(1); } @@ -39,6 +40,9 @@ sub compare { my ($nsuri1, undef, $lname1) = $nsup1->process_element_name($n1->getNodeName); my ($nsuri2, undef, $lname2) = $nsup2->process_element_name($n2->getNodeName); + $nsuri1 |= ''; + $nsuri2 |= ''; + # compare element names unless ($nsuri1 eq $nsuri2 && $lname1 eq $lname2) { print STDERR "$nsuri1/$lname1 != $nsuri2/$lname2\n"; @@ -54,12 +58,33 @@ sub compare { compare_attr_list($attrs1, $attrs2, $nsup1, $nsup2) if (defined($attrs1)); compare_attr_list($attrs2, $attrs1, $nsup2, $nsup1) if (defined($attrs2)); + # if this is a text node, check the contents + if ($n1->getNodeType == XML::DOM::TEXT_NODE) { + my $d1 = $n1->getData; + my $d2 = $n2->getData; + + # ignore leading/trailing whitespace + $d1 =~ s/^\s+//; + $d2 =~ s/^\s+//; + $d1 =~ s/\s+$//; + $d2 =~ s/\s+$//; + + if ($d1 ne $d2) { + $d1 =~ s/\n/\\n/; + $d2 =~ s/\n/\\n/; + + print STDERR "$nsuri1/$lname1 has differing textual content ('$d1' vs. '$d2')\n"; + exit(1); + } + } + # this element is ok, let's compare all children my $c1 = $n1->getChildNodes; my $c2 = $n2->getChildNodes; if ($c1->getLength != $c2->getLength) { print STDERR "$nsuri1/$lname1 has differing number of children\n"; + exit(1); } for my $i (0..($c1->getLength-1)) { @@ -85,13 +110,14 @@ sub process_namespaces { } sub compare_attr_list { - my ($attrs1, $attrs2, $nsup1, $nsup2); + my ($attrs1, $attrs2, $nsup1, $nsup2) = @_; for my $attr1 ($attrs1->getValues) { - my $name = $attr->getName; + my $name = $attr1->getName; next if ($name =~ /^xmlns:(.*)$/); - my ($nsuri1, undef, $lname1) = $nsup1->process_attribute_name($n1->getName); + my ($nsuri1, undef, $lname1) = $nsup1->process_attribute_name($attr1->getName); + $nsuri1 |= ''; if (!defined($attrs2)) { # n2 has no attributes at all @@ -101,7 +127,9 @@ sub compare_attr_list { my $attr2_found; for my $attr2 ($attrs2->getValues) { - my ($nsuri2, undef, $lname2) = $nsup2->process_attribute_name($n2->getName); + next if ($attr2->getName =~ /^xmlns:(.*)$/); + my ($nsuri2, undef, $lname2) = $nsup2->process_attribute_name($attr2->getName); + $nsuri2 |= ''; if ($nsuri1 eq $nsuri2 && $lname1 eq $lname2) { $attr2_found = $attr2; @@ -114,7 +142,7 @@ sub compare_attr_list { last; } - if ($attr1->getValue ne $attr2->getValue) { + if ($attr1->getValue ne $attr2_found->getValue) { print STDERR "Attribute $nsuri1/$lname1 has differing values\n"; } }