2 # -----------------------------------------------------------------------------
5 use lib
($0 =~ m
|^(.*/)| ?
$1 : ".");
8 &message
("Check that the ods exporter produces the same results every time.");
10 my $format = "Gnumeric_OpenCalc:odf";
11 my $unzip = &GnumericTest
::find_program
("unzip");
13 my @sources = &GnumericTest
::corpus
();
14 # datefuns and docs-samples use NOW(); the rest take too long.
15 @sources = grep { !m{(^|/)(datefuns\.xls|(docs-samples|crlibm|gamma)\.gnumeric)$} } @sources;
21 foreach my $src (@sources) {
27 print STDERR
"Checking $src\n";
31 foreach my $i (1, 2) {
34 $tmp =~ s
|\
..*|-$i.ods
|;
35 &GnumericTest
::junkfile
($tmp);
36 my $cmd = "$ssconvert -T $format $src $tmp";
37 print STDERR
"# $cmd\n" if $GnumericTest::verbose
;
40 print STDERR
"ssconvert failed to produce $tmp\n";
44 foreach (`$unzip -v $tmp`) {
45 next unless /^----/ ... /^----/;
46 next unless m{^\s*\d.*\s(\S+)$};
48 if (($members{$member} || 0) & $i) {
49 print STDERR
"Duplicate member $member\n";
52 $members{$member} += $i;
61 foreach my $member (sort keys %members) {
62 if ($members{$member} != 3) {
63 print STDERR
"Member $member is not in both files.\n";
68 # May contain time stamp.
69 next if $member eq 'meta.xml';
71 my $cmd1 = &GnumericTest
::quotearg
($unzip, "-p", $tmp1, $member);
72 print STDERR
"# $cmd1\n" if $GnumericTest::verbose
;
75 my $cmd2 = &GnumericTest
::quotearg
($unzip, "-p", $tmp2, $member);
76 print STDERR
"# $cmd2\n" if $GnumericTest::verbose
;
79 if ($data1 ne $data2) {
80 print STDERR
"Member $member is different between two files.\n";
88 &GnumericTest
::removejunk
($tmp1);
89 &GnumericTest
::removejunk
($tmp2);
92 &GnumericTest
::report_skip
("No source files present") if $nbad + $ngood == 0;
95 print STDERR
"$nskipped files skipped.\n";
101 print STDERR
"Pass\n";