[gnumeric] ssdiff: better testing.



commit 1cb2ffdb9d44ec9fcc4670269d67af70ec434955
Author: Morten Welinder <terra gnome org>
Date:   Sun Dec 3 19:49:26 2017 -0500

    ssdiff: better testing.
    
    Also fix the crash it found.
    Also fix the xml.

 ChangeLog                 |    5 ++++
 NEWS                      |    1 +
 src/mstyle.c              |    5 ++-
 src/ssdiff.c              |   10 ++++++-
 test/Makefile.am          |    1 +
 test/t9002-ssdiff-self.pl |    6 ++--
 test/t9003-ssdiff-xml.pl  |   57 +++++++++++++++++++++++++++++++++++++++++++++
 7 files changed, 78 insertions(+), 7 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index faa0b40..1ab51d7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2017-12-03  Morten Welinder  <terra gnome org>
 
+       * src/ssdiff.c (SSDIFF_DTD): Add proper xmlns definition.
+
+       * src/mstyle.c (gnm_style_find_differences): Don't crash when
+       hlink/validation/inputmsg/conditions is NULL in one and not the other.
+
        * src/ssdiff.c (diff_sheets_colrow): New function to compare
        row/column sizes.
        (highlight_cell_changed): Survive missing cell.
diff --git a/NEWS b/NEWS
index 9c5dce0..b3c3be6 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,7 @@ Morten:
        * Test suite improvements.
        * Improve sylk writer.  Don't ask.
        * Teach ssdiff about column/row sizes.
+       * Fix a few ssdiff crashes.
 
 --------------------------------------------------------------------------
 Gnumeric 1.12.37
diff --git a/src/mstyle.c b/src/mstyle.c
index 521345f..2dd4e2c 100644
--- a/src/mstyle.c
+++ b/src/mstyle.c
@@ -543,11 +543,12 @@ gnm_style_find_conflicts (GnmStyle *accum, GnmStyle const *overlay,
 
 #define GNM_INPUT_MSG_EQUAL3(a,b,r) (gnm_input_msg_equal (a,b))
 
-#define RELAX_CHECK(op_,field_,checker_) do {                          \
+#define RELAX_CHECK(op_,field_,checker_) do {                  \
        if (diffs & (1u << (op_)) &&                            \
            elem_is_set (a, (op_)) &&                           \
            elem_is_set (b, (op_)) &&                           \
-           checker_ (a->field_, b->field_, relax_sheet))       \
+           ((a->field_ == NULL) != (b->field_ == NULL) ||      \
+            checker_ (a->field_, b->field_, relax_sheet)))     \
                diffs &= ~(1u << (op_));                        \
        } while (0)
 
diff --git a/src/ssdiff.c b/src/ssdiff.c
index 9c2aa2f..356fc9a 100644
--- a/src/ssdiff.c
+++ b/src/ssdiff.c
@@ -34,8 +34,8 @@
 #include <gsf/gsf-output-stdio.h>
 #include <gsf/gsf-input.h>
 
-/* FIXME: Namespace?  */
-#define DIFF "ssdiff:"
+#define DIFF "s:"
+#define SSDIFF_DTD "http://www.gnumeric.org/ssdiff.dtd"; // No such file yet
 
 static gboolean ssdiff_show_version = FALSE;
 static gboolean ssdiff_highlight = FALSE;
@@ -327,10 +327,16 @@ static const GnmDiffActions default_actions = {
 static gboolean
 xml_diff_start (GnmDiffState *state)
 {
+       char *attr;
+
        state->xml = gsf_xml_out_new (state->output);
        state->convs = gnm_xml_io_conventions ();
 
        gsf_xml_out_start_element (state->xml, DIFF "Diff");
+       attr = g_strdup ("xmlns:" DIFF);
+       attr[strlen (attr) - 1] = 0;
+       gsf_xml_out_add_cstr (state->xml, attr, SSDIFF_DTD);
+       g_free (attr);
 
        return FALSE;
 }
diff --git a/test/Makefile.am b/test/Makefile.am
index b1f4b83..e4a8f92 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -168,6 +168,7 @@ TESTS =     t1000-statfuns.pl                       \
        t9000-ssindex.pl                        \
        t9001-ssconvert-resize.pl               \
        t9002-ssdiff-self.pl                    \
+       t9003-ssdiff-xml.pl                     \
        t9100-number-match.pl                   \
        t9999-epilogue.pl
 
diff --git a/test/t9002-ssdiff-self.pl b/test/t9002-ssdiff-self.pl
index 7604cca..bdcd6cb 100755
--- a/test/t9002-ssdiff-self.pl
+++ b/test/t9002-ssdiff-self.pl
@@ -30,9 +30,9 @@ for my $src (@sources) {
        die "Failed command: $cmd [$err]\n" if $err > (1 << 8);
     } else {
         if ($output =~ m'<\?xml version="1\.0" encoding="UTF-8"\?>
-<ssdiff:Diff>
-(  <ssdiff:Sheet Name=".*" Old="\d+" New="\d+"/>
-)*</ssdiff:Diff>') {
+<s:Diff xmlns:s=".*">
+(  <s:Sheet Name=".*" Old="\d+" New="\d+"/>
+)*</s:Diff>') {
             $ngood++;
         } else {
             &GnumericTest::dump_indented ($output);
diff --git a/test/t9003-ssdiff-xml.pl b/test/t9003-ssdiff-xml.pl
new file mode 100755
index 0000000..60c13b6
--- /dev/null
+++ b/test/t9003-ssdiff-xml.pl
@@ -0,0 +1,57 @@
+#!/usr/bin/perl -w
+# -----------------------------------------------------------------------------
+
+use strict;
+use lib ($0 =~ m|^(.*/)| ? $1 : ".");
+use GnumericTest;
+
+&message ("Check ssdiff's xml mode");
+
+my $xmllint = &GnumericTest::find_program ("xmllint");
+
+my @sources = &GnumericTest::corpus();
+
+my $nskipped = 0;
+my @pairs = ();
+@sources = grep { -r $_ ? 1 : ($nskipped++, 0) } @sources;
+while (@sources >= 2) {
+    my $first = shift @sources;
+    my $second = shift @sources;
+    push @pairs, [$first,$second];
+}
+
+my $ngood = 0;
+my $nbad = 0;
+for my $p (@pairs) {
+    my ($first,$second) = @$p;
+
+    print STDERR "$first vs $second...\n";
+
+    my $cmd = "$ssdiff --xml $first $second | xmllint -noout - 2>&1";
+    my $output = `$cmd 2>&1`;
+    my $err = $?;
+    if ($err) {
+        &GnumericTest::dump_indented ($output);
+        $nbad++;
+       die "Failed command: $cmd [$err]\n" if $err > (1 << 8);
+    } else {
+        if ($output eq '') {
+            $ngood++;
+        } else {
+            &GnumericTest::dump_indented ($output);
+            $nbad++;
+        }
+    }
+}
+
+&GnumericTest::report_skip ("No source files present") if $nbad + $ngood == 0;
+
+if ($nskipped > 0) {
+    print STDERR "$nskipped files skipped.\n";
+}
+
+if ($nbad > 0) {
+    die "Fail\n";
+} else {
+    print STDERR "Pass\n";
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]