2 # -----------------------------------------------------------------------------
5 use lib
($0 =~ m
|^(.*/)| ?
$1 : ".");
8 &message
("Check that the xlsx exporter produces the same results every time.");
10 my $format = "Gnumeric_Excel:xlsx";
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.xlsx
|;
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";
69 next if $member eq '[Content_Types].xml';
71 # May contain timestamp
72 next if $member eq 'docProps/core.xml';
74 my $cmd1 = &GnumericTest
::quotearg
($unzip, "-p", $tmp1, $member);
75 print STDERR
"# $cmd1\n" if $GnumericTest::verbose
;
78 my $cmd2 = &GnumericTest
::quotearg
($unzip, "-p", $tmp2, $member);
79 print STDERR
"# $cmd2\n" if $GnumericTest::verbose
;
82 if ($data1 ne $data2) {
83 print STDERR
"Member $member is different between two files.\n";
91 &GnumericTest
::removejunk
($tmp1);
92 &GnumericTest
::removejunk
($tmp2);
95 &GnumericTest
::report_skip
("No source files present") if $nbad + $ngood == 0;
98 print STDERR
"$nskipped files skipped.\n";
104 print STDERR
"Pass\n";