]> git.sesse.net Git - xml-template/blobdiff - tests/xml-diff.pl
Fix a potential bug in the C++0x cleaning.
[xml-template] / tests / xml-diff.pl
index eba854f10e7a4e8bbfa475836e3c009d5a111315..517d9f7acc2e3d731aa8a26c0a031878b33147bc 100644 (file)
@@ -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);
                }
        }
 }