X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=tests%2Fxml-diff.pl;h=517d9f7acc2e3d731aa8a26c0a031878b33147bc;hb=83a41af3311ec494205205ec093ffff0aad56fd0;hp=eba854f10e7a4e8bbfa475836e3c009d5a111315;hpb=5f6bd25ff12f3c1b4870449afdf353a2ff5aafce;p=xml-template diff --git a/tests/xml-diff.pl b/tests/xml-diff.pl index eba854f..517d9f7 100644 --- a/tests/xml-diff.pl +++ b/tests/xml-diff.pl @@ -69,10 +69,13 @@ sub compare { $d1 =~ s/\s+$//; $d2 =~ s/\s+$//; - if ($d1 ne $d2) { - $d1 =~ s/\n/\\n/; - $d2 =~ s/\n/\\n/; + # compress other whitespace + $d1 =~ s/\n/ /g; + $d1 =~ s/ +/ /g; + $d2 =~ s/\n/ /g; + $d2 =~ s/ +/ /g; + if ($d1 ne $d2) { print STDERR "$nsuri1/$lname1 has differing textual content ('$d1' vs. '$d2')\n"; exit(1); } @@ -82,13 +85,33 @@ sub compare { my $c1 = $n1->getChildNodes; my $c2 = $n2->getChildNodes; - if ($c1->getLength != $c2->getLength) { + my @c1 = (); + my @c2 = (); + + # find all elements except comments and blanks (not perfect, since we don't get + # compression, but ok) + for my $i (0..($c1->getLength-1)) { + my $item = $c1->item($i); + next if ($item->getNodeType == XML::DOM::COMMENT_NODE); + next if ($item->getNodeType == XML::DOM::TEXT_NODE && $item->getData !~ /\S/); + + push @c1, $item; + } + for my $i (0..($c2->getLength-1)) { + my $item = $c2->item($i); + next if ($item->getNodeType == XML::DOM::COMMENT_NODE); + next if ($item->getNodeType == XML::DOM::TEXT_NODE && $item->getData !~ /\S/); + + push @c2, $item; + } + + if (scalar @c1 != scalar @c2) { print STDERR "$nsuri1/$lname1 has differing number of children\n"; exit(1); } - for my $i (0..($c1->getLength-1)) { - compare($c1->item($i), $c2->item($i), $nsup1, $nsup2); + for my $i (0..$#c1) { + compare($c1[$i], $c2[$i], $nsup1, $nsup2); } $nsup1->pop_context; @@ -139,11 +162,12 @@ sub compare_attr_list { if (!defined($attr2_found)) { print STDERR "Attribute $nsuri1/$lname1 exists on one side but not the other\n"; - last; + exit(1); } if ($attr1->getValue ne $attr2_found->getValue) { print STDERR "Attribute $nsuri1/$lname1 has differing values\n"; + exit(1); } } }