[gnumeric] ssdiff: better testing.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] ssdiff: better testing.
- Date: Mon, 4 Dec 2017 00:50:15 +0000 (UTC)
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]